@bsol-oss/react-datatable5 12.0.0-beta.3 → 12.0.0-beta.30

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 (59) hide show
  1. package/dist/index.d.ts +93 -76
  2. package/dist/index.js +542 -310
  3. package/dist/index.mjs +545 -312
  4. package/dist/types/components/DataTable/DataTable.d.ts +1 -1
  5. package/dist/types/components/DataTable/DataTableServer.d.ts +1 -1
  6. package/dist/types/components/DataTable/DefaultTable.d.ts +9 -12
  7. package/dist/types/components/DataTable/components/TextCell.d.ts +10 -0
  8. package/dist/types/components/DataTable/context/DataTableContext.d.ts +3 -2
  9. package/dist/types/components/DataTable/controls/DensityFeature.d.ts +23 -0
  10. package/dist/types/components/DataTable/controls/DensityToggleButton.d.ts +6 -0
  11. package/dist/types/components/DataTable/controls/EditSortingButton.d.ts +7 -0
  12. package/dist/types/components/DataTable/controls/FilterDialog.d.ts +5 -0
  13. package/dist/types/components/DataTable/controls/PageSizeControl.d.ts +4 -0
  14. package/dist/types/components/DataTable/controls/Pagination.d.ts +1 -0
  15. package/dist/types/components/DataTable/controls/ReloadButton.d.ts +5 -0
  16. package/dist/types/components/DataTable/controls/ResetFilteringButton.d.ts +4 -0
  17. package/dist/types/components/DataTable/controls/ResetSelectionButton.d.ts +4 -0
  18. package/dist/types/components/DataTable/controls/ResetSortingButton.d.ts +4 -0
  19. package/dist/types/components/DataTable/controls/RowCountText.d.ts +1 -0
  20. package/dist/types/components/DataTable/controls/SelectAllRowsToggle.d.ts +8 -0
  21. package/dist/types/components/DataTable/controls/TableControls.d.ts +23 -0
  22. package/dist/types/components/DataTable/controls/TableFilterTags.d.ts +1 -0
  23. package/dist/types/components/DataTable/controls/TableFilters.d.ts +1 -0
  24. package/dist/types/components/DataTable/controls/TableSelector.d.ts +1 -0
  25. package/dist/types/components/DataTable/controls/TableSorter.d.ts +1 -0
  26. package/dist/types/components/DataTable/controls/TableViewer.d.ts +1 -0
  27. package/dist/types/components/DataTable/controls/ViewDialog.d.ts +5 -0
  28. package/dist/types/components/DataTable/display/CardHeader.d.ts +13 -0
  29. package/dist/types/components/DataTable/display/DataDisplay.d.ts +6 -0
  30. package/dist/types/components/DataTable/display/EmptyState.d.ts +5 -0
  31. package/dist/types/components/DataTable/display/ErrorAlert.d.ts +4 -0
  32. package/dist/types/components/DataTable/display/RecordDisplay.d.ts +9 -0
  33. package/dist/types/components/DataTable/display/Table.d.ts +10 -0
  34. package/dist/types/components/DataTable/display/TableBody.d.ts +21 -0
  35. package/dist/types/components/DataTable/display/TableCardContainer.d.ts +7 -0
  36. package/dist/types/components/DataTable/display/TableCards.d.ts +11 -0
  37. package/dist/types/components/DataTable/display/TableComponent.d.ts +6 -0
  38. package/dist/types/components/DataTable/display/TableDataDisplay.d.ts +6 -0
  39. package/dist/types/components/DataTable/display/TableFooter.d.ts +5 -0
  40. package/dist/types/components/DataTable/display/TableHeader.d.ts +9 -0
  41. package/dist/types/components/DataTable/display/TableLoadingComponent.d.ts +5 -0
  42. package/dist/types/components/DataTable/display/TextCell.d.ts +10 -0
  43. package/dist/types/components/DataTable/useDataTable.d.ts +1 -1
  44. package/dist/types/components/Form/components/core/DefaultForm.d.ts +2 -1
  45. package/dist/types/components/Form/components/core/FormRoot.d.ts +2 -1
  46. package/dist/types/components/Form/components/fields/CustomInput.d.ts +8 -0
  47. package/dist/types/components/Form/components/fields/DatePicker.d.ts +2 -7
  48. package/dist/types/components/Form/components/fields/FilePicker.d.ts +2 -5
  49. package/dist/types/components/Form/components/fields/StringInputField.d.ts +2 -5
  50. package/dist/types/components/Form/components/fields/TextAreaInput.d.ts +12 -0
  51. package/dist/types/components/Form/components/fields/TimePicker.d.ts +7 -0
  52. package/dist/types/components/Form/components/fields/types.d.ts +6 -0
  53. package/dist/types/components/Form/components/types/CustomJSONSchema7.d.ts +16 -1
  54. package/dist/types/components/Form/components/viewers/CustomViewer.d.ts +8 -0
  55. package/dist/types/components/Form/components/viewers/TextAreaViewer.d.ts +12 -0
  56. package/dist/types/components/Form/components/viewers/TimeViewer.d.ts +7 -0
  57. package/dist/types/components/TimePicker/TimePicker.d.ts +19 -0
  58. package/dist/types/index.d.ts +32 -33
  59. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -1,16 +1,16 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex, DialogBackdrop, Box, Text, useDisclosure, RadioGroup as RadioGroup$1, Grid, Slider as Slider$1, HStack, For, Tag as Tag$1, Input, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, CheckboxCard as CheckboxCard$1, Image, EmptyState as EmptyState$2, VStack, Alert, Card, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Group, InputElement, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, List, Accordion, Field as Field$1, Popover, NumberInput, Show, RadioCard, CheckboxGroup, Center, Heading } from '@chakra-ui/react';
2
+ import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex, Text, useDisclosure, DialogBackdrop, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Tag as Tag$1, Input, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, CheckboxCard as CheckboxCard$1, Image, EmptyState as EmptyState$2, VStack, Alert, Card, Tooltip as Tooltip$1, Group, InputElement, Icon, List, Table as Table$1, Checkbox as Checkbox$1, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, Accordion, Field as Field$1, Popover, NumberInput, Show, RadioCard, CheckboxGroup, Textarea, createListCollection, Select, Center, Heading } from '@chakra-ui/react';
3
3
  import { AiOutlineColumnWidth } from 'react-icons/ai';
4
4
  import * as React from 'react';
5
5
  import React__default, { createContext, useContext, useState, useEffect, useRef } from 'react';
6
6
  import { LuX, LuCheck, LuChevronRight, LuChevronDown } from 'react-icons/lu';
7
- import { MdArrowUpward, MdArrowDownward, MdOutlineMoveDown, MdOutlineSort, MdFilterAlt, MdSearch, MdClose, MdOutlineViewColumn, MdFilterListAlt, MdPushPin, MdCancel, MdClear, MdOutlineChecklist } from 'react-icons/md';
7
+ import { MdOutlineSort, MdFilterAlt, MdSearch, MdClose, MdOutlineViewColumn, MdFilterListAlt, MdPushPin, MdCancel, MdClear, MdOutlineChecklist, MdDateRange } from 'react-icons/md';
8
8
  import { FaUpDown, FaGripLinesVertical } from 'react-icons/fa6';
9
9
  import { BiDownArrow, BiUpArrow, BiError } from 'react-icons/bi';
10
10
  import { CgClose } from 'react-icons/cg';
11
11
  import Dayzed from '@bsol-oss/dayzed-react19';
12
12
  import { HiMiniEllipsisHorizontal, HiChevronLeft, HiChevronRight } from 'react-icons/hi2';
13
- import { IoMdEye, IoMdCheckbox } from 'react-icons/io';
13
+ import { IoMdEye, IoMdCheckbox, IoMdClock } from 'react-icons/io';
14
14
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
15
15
  import { bind, bindAll } from 'bind-event-listener';
16
16
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
@@ -29,6 +29,7 @@ import { useTranslation } from 'react-i18next';
29
29
  import axios from 'axios';
30
30
  import { FormProvider, useFormContext, useForm as useForm$1 } from 'react-hook-form';
31
31
  import dayjs from 'dayjs';
32
+ import utc from 'dayjs/plugin/utc';
32
33
  import { TiDeleteOutline } from 'react-icons/ti';
33
34
 
34
35
  const DataTableContext = createContext({
@@ -37,6 +38,39 @@ const DataTableContext = createContext({
37
38
  setGlobalFilter: () => { },
38
39
  type: "client",
39
40
  translate: {},
41
+ data: [],
42
+ columns: [],
43
+ columnOrder: [],
44
+ columnFilters: [],
45
+ density: "sm",
46
+ sorting: [],
47
+ setPagination: function () {
48
+ throw new Error("Function not implemented.");
49
+ },
50
+ setSorting: function () {
51
+ throw new Error("Function not implemented.");
52
+ },
53
+ setColumnFilters: function () {
54
+ throw new Error("Function not implemented.");
55
+ },
56
+ setRowSelection: function () {
57
+ throw new Error("Function not implemented.");
58
+ },
59
+ setColumnOrder: function () {
60
+ throw new Error("Function not implemented.");
61
+ },
62
+ setDensity: function () {
63
+ throw new Error("Function not implemented.");
64
+ },
65
+ setColumnVisibility: function () {
66
+ throw new Error("Function not implemented.");
67
+ },
68
+ pagination: {
69
+ pageIndex: 0,
70
+ pageSize: 10,
71
+ },
72
+ rowSelection: {},
73
+ columnVisibility: {},
40
74
  });
41
75
 
42
76
  const useDataTableContext = () => {
@@ -78,63 +112,6 @@ Dialog.Description;
78
112
  const DialogTrigger = Dialog.Trigger;
79
113
  Dialog.ActionTrigger;
80
114
 
81
- const ColumnOrderChanger = ({ columns }) => {
82
- const [order, setOrder] = useState([]);
83
- const [originalOrder, setOriginalOrder] = useState([]);
84
- const { table } = useDataTableContext();
85
- const handleChangeOrder = (startIndex, endIndex) => {
86
- const newOrder = Array.from(order);
87
- const [removed] = newOrder.splice(startIndex, 1);
88
- newOrder.splice(endIndex, 0, removed);
89
- setOrder(newOrder);
90
- };
91
- useEffect(() => {
92
- setOrder(columns);
93
- }, [columns]);
94
- useEffect(() => {
95
- if (originalOrder.length > 0) {
96
- return;
97
- }
98
- if (columns.length <= 0) {
99
- return;
100
- }
101
- setOriginalOrder(columns);
102
- }, [columns]);
103
- return (jsxs(Flex, { gap: 2, flexFlow: "column", children: [jsx(Flex, { gap: 2, flexFlow: "column", children: order.map((columnId, index) => (jsxs(Flex, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [jsx(IconButton, { onClick: () => {
104
- const prevIndex = index - 1;
105
- if (prevIndex >= 0) {
106
- handleChangeOrder(index, prevIndex);
107
- }
108
- }, disabled: index === 0, "aria-label": "", children: jsx(MdArrowUpward, {}) }), table
109
- .getAllFlatColumns()
110
- .filter((column) => {
111
- return column.id === columnId;
112
- })
113
- .map((column) => {
114
- const displayName = column.columnDef.meta === undefined
115
- ? column.id
116
- : column.columnDef.meta.displayName;
117
- return jsx("span", { children: displayName }, column.id);
118
- }), jsx(IconButton, { onClick: () => {
119
- const nextIndex = index + 1;
120
- if (nextIndex < order.length) {
121
- handleChangeOrder(index, nextIndex);
122
- }
123
- }, disabled: index === order.length - 1, "aria-label": "", children: jsx(MdArrowDownward, {}) })] }, columnId))) }), jsxs(Flex, { gap: "0.25rem", children: [jsx(Button$1, { onClick: () => {
124
- table.setColumnOrder(order);
125
- }, children: "Apply" }), jsx(Button$1, { onClick: () => {
126
- table.setColumnOrder(originalOrder);
127
- }, children: "Reset" })] })] }));
128
- };
129
- const TableOrderer = () => {
130
- const { table } = useDataTableContext();
131
- return (jsx(Fragment, { children: jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
132
- };
133
-
134
- const EditOrderButton = ({ text, icon = jsx(MdOutlineMoveDown, {}), title = "Change Order", }) => {
135
- return (jsx(Fragment, { children: jsxs(DialogRoot, { size: "cover", children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", children: [icon, " ", text] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsxs(DialogHeader, { children: [jsx(DialogTitle, {}), title] }), jsx(DialogBody, { children: jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: jsx(TableOrderer, {}) }) }), jsx(DialogFooter, {})] })] }) }));
136
- };
137
-
138
115
  const TableSorter = () => {
139
116
  const { table } = useDataTableContext();
140
117
  return (jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsx(Fragment, { children: headerGroup.headers.map((header) => {
@@ -440,7 +417,7 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
440
417
  const FilterDialog = ({ icon = jsx(MdFilterAlt, {}), }) => {
441
418
  const filterModal = useDisclosure();
442
419
  const { translate } = useDataTableContext();
443
- 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("filterDialog.buttonText")] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("filterDialog.title") }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, { text: translate.t("filterDialog.reset") }), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filterDialog.close") })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
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 })] })] }));
444
421
  };
445
422
 
446
423
  const MenuContent = React.forwardRef(function MenuContent(props, ref) {
@@ -2478,8 +2455,8 @@ CheckboxCard$1.Indicator;
2478
2455
  function ColumnCard({ columnId }) {
2479
2456
  const ref = useRef(null);
2480
2457
  const [dragging, setDragging] = useState(false); // NEW
2481
- const { table } = useDataTableContext();
2482
- const displayName = columnId;
2458
+ const { table, translate } = useDataTableContext();
2459
+ const displayName = translate.t(columnId);
2483
2460
  const column = table.getColumn(columnId);
2484
2461
  invariant(column);
2485
2462
  useEffect(() => {
@@ -2494,13 +2471,16 @@ function ColumnCard({ columnId }) {
2494
2471
  onDrop: () => setDragging(false), // NEW
2495
2472
  });
2496
2473
  }, [columnId, table]);
2497
- return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", cursor: 'grab', children: jsx(FaGripLinesVertical, { color: "gray.400" }) }), jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
2474
+ return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsx(FaGripLinesVertical, { color: "colorPalette.400" }) }), jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
2498
2475
  }
2499
2476
  function CardContainer({ location, children }) {
2500
2477
  const ref = useRef(null);
2501
2478
  const [isDraggedOver, setIsDraggedOver] = useState(false);
2502
2479
  useEffect(() => {
2503
2480
  const el = ref.current;
2481
+ if (el === null) {
2482
+ return;
2483
+ }
2504
2484
  invariant(el);
2505
2485
  return dropTargetForElements({
2506
2486
  element: el,
@@ -2572,7 +2552,7 @@ const TableViewer = () => {
2572
2552
  const ViewDialog = ({ icon = jsx(IoMdEye, {}) }) => {
2573
2553
  const viewModel = useDisclosure();
2574
2554
  const { translate } = useDataTableContext();
2575
- 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("viewDialog.buttonText")] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("viewDialog.title") }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
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, {})] })] }));
2576
2556
  };
2577
2557
 
2578
2558
  const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
@@ -2623,7 +2603,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
2623
2603
  return jsx(Fragment, { children: "null" });
2624
2604
  }
2625
2605
  return (jsx(Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
2626
- return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "gray.400", children: getColumn({ field }) }), typeof value === "object" ? (jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsx(Text, { children: JSON.stringify(value) }))] }, field));
2606
+ return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "colorPalette.400", children: getColumn({ field }) }), typeof value === "object" ? (jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsx(Text, { children: JSON.stringify(value) }))] }, field));
2627
2607
  }) }));
2628
2608
  };
2629
2609
 
@@ -2673,7 +2653,7 @@ const CellRenderer = ({ cell }) => {
2673
2653
  paddingY: 2,
2674
2654
  }, object: value })] }, cell.id));
2675
2655
  }
2676
- return (jsxs(Box, { gridColumn, gridRow, children: [jsx(Box, { color: 'gray.400', children: getLabel({ columnId: cell.column.id }) }), jsx(Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2656
+ return (jsxs(Box, { gridColumn, gridRow, children: [jsx(Box, { color: "colorPalette.400", children: getLabel({ columnId: cell.column.id }) }), jsx(Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2677
2657
  };
2678
2658
  const DataDisplay = ({ variant = "" }) => {
2679
2659
  const { table, translate } = useDataTableContext();
@@ -2848,6 +2828,22 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2848
2828
  setGlobalFilter,
2849
2829
  type: "client",
2850
2830
  translate,
2831
+ columns,
2832
+ sorting,
2833
+ setSorting,
2834
+ columnFilters,
2835
+ setColumnFilters,
2836
+ pagination,
2837
+ setPagination,
2838
+ rowSelection,
2839
+ setRowSelection,
2840
+ columnOrder,
2841
+ setColumnOrder,
2842
+ density,
2843
+ setDensity,
2844
+ columnVisibility,
2845
+ setColumnVisibility,
2846
+ data,
2851
2847
  }, children: children }));
2852
2848
  }
2853
2849
 
@@ -2916,90 +2912,25 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
2916
2912
  setGlobalFilter,
2917
2913
  type: "server",
2918
2914
  translate,
2915
+ columns,
2916
+ sorting,
2917
+ setSorting,
2918
+ columnFilters,
2919
+ setColumnFilters,
2920
+ pagination,
2921
+ setPagination,
2922
+ rowSelection,
2923
+ setRowSelection,
2924
+ columnOrder,
2925
+ setColumnOrder,
2926
+ density,
2927
+ setDensity,
2928
+ columnVisibility,
2929
+ setColumnVisibility,
2930
+ data: query.data?.data ?? [],
2919
2931
  }, children: jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
2920
2932
  }
2921
2933
 
2922
- const Checkbox = React.forwardRef(function Checkbox(props, ref) {
2923
- const { icon, children, inputProps, rootRef, ...rest } = props;
2924
- 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 }))] }));
2925
- });
2926
-
2927
- const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
2928
- const { table } = useDataTableContext();
2929
- const SELECTION_BOX_WIDTH = 20;
2930
- const [hoveredRow, setHoveredRow] = useState(-1);
2931
- const handleRowHover = (index) => {
2932
- setHoveredRow(index);
2933
- };
2934
- const getTdProps = (cell) => {
2935
- const tdProps = cell.column.getIsPinned()
2936
- ? {
2937
- left: showSelector
2938
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
2939
- : `${cell.column.getStart("left")}px`,
2940
- background: pinnedBgColor.light,
2941
- position: "sticky",
2942
- zIndex: -1,
2943
- _dark: {
2944
- backgroundColor: pinnedBgColor.dark,
2945
- },
2946
- }
2947
- : {};
2948
- return tdProps;
2949
- };
2950
- const getTrProps = ({ hoveredRow, index, }) => {
2951
- if (hoveredRow === -1) {
2952
- return {};
2953
- }
2954
- if (hoveredRow === index) {
2955
- return {
2956
- opacity: "1",
2957
- };
2958
- }
2959
- return {
2960
- opacity: "0.8",
2961
- };
2962
- };
2963
- return (jsx(Table$1.Body, { children: table.getRowModel().rows.map((row, index) => {
2964
- return (jsxs(Table$1.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
2965
- return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`,
2966
- // styling resize and pinning start
2967
- flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, backgroundColor: "white", ...getTdProps(cell), _dark: {
2968
- backgroundColor: "gray.950",
2969
- }, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
2970
- })] }, `chakra-table-row-${row.id}`));
2971
- }) }));
2972
- };
2973
- const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
2974
- const { table } = useDataTableContext();
2975
- const SELECTION_BOX_WIDTH = 20;
2976
- const isCheckBoxVisible = (current_index, current_row) => {
2977
- if (alwaysShowSelector) {
2978
- return true;
2979
- }
2980
- if (current_row.getIsSelected()) {
2981
- return true;
2982
- }
2983
- if (hoveredRow == current_index) {
2984
- return true;
2985
- }
2986
- return false;
2987
- };
2988
- return (jsxs(Table$1.Cell, { padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
2989
- ? {
2990
- left: `0px`,
2991
- backgroundColor: pinnedBgColor.light,
2992
- position: "sticky",
2993
- zIndex: 1,
2994
- _dark: { backgroundColor: pinnedBgColor.dark },
2995
- }
2996
- : {}),
2997
- // styling resize and pinning end
2998
- display: "grid", children: [!isCheckBoxVisible(index, row) && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` })), isCheckBoxVisible(index, row) && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: row.getIsSelected(),
2999
- disabled: !row.getCanSelect(),
3000
- onChange: row.getToggleSelectedHandler() }) }))] }));
3001
- };
3002
-
3003
2934
  const Tooltip = React.forwardRef(function Tooltip(props, ref) {
3004
2935
  const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
3005
2936
  if (disabled)
@@ -3078,16 +3009,89 @@ const TableFilterTags = () => {
3078
3009
  }) }));
3079
3010
  };
3080
3011
 
3081
- 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, }) => {
3012
+ 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 = {}, }) => {
3082
3013
  const { translate } = useDataTableContext();
3083
- return (jsxs(Grid, { templateRows: "auto 1fr auto", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", 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("hasError"), 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) => {
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) => {
3084
3015
  return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(FilterOptions, { column: column })] }, column));
3085
- }) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", backgroundColor: "gray.50", _dark: {
3086
- backgroundColor: "gray.900",
3087
- }, children: children }), 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, {}) })] })] }));
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, {}) })] }))] }));
3017
+ };
3018
+
3019
+ const EmptyState = React.forwardRef(function EmptyState(props, ref) {
3020
+ const { title, description, icon, children, ...rest } = props;
3021
+ return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
3022
+ });
3023
+
3024
+ const EmptyResult = (jsx(EmptyState, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
3025
+ const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
3026
+ const { table } = useDataTableContext();
3027
+ if (table.getRowModel().rows.length <= 0) {
3028
+ return emptyComponent;
3029
+ }
3030
+ return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...props, children: children }));
3031
+ };
3032
+
3033
+ const Checkbox = React.forwardRef(function Checkbox(props, ref) {
3034
+ const { icon, children, inputProps, rootRef, ...rest } = props;
3035
+ 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
+ });
3037
+
3038
+ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
3039
+ "use no memo";
3040
+ const { table } = useDataTableContext();
3041
+ const SELECTION_BOX_WIDTH = 20;
3042
+ const [hoveredRow, setHoveredRow] = useState(-1);
3043
+ const handleRowHover = (index) => {
3044
+ setHoveredRow(index);
3045
+ };
3046
+ const getTdProps = (cell) => {
3047
+ const tdProps = cell.column.getIsPinned()
3048
+ ? {
3049
+ left: showSelector
3050
+ ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3051
+ : `${cell.column.getStart("left")}px`,
3052
+ position: "relative",
3053
+ }
3054
+ : {};
3055
+ return tdProps;
3056
+ };
3057
+ const getTrProps = ({ hoveredRow, index, }) => {
3058
+ if (hoveredRow === -1) {
3059
+ return {};
3060
+ }
3061
+ if (hoveredRow === index) {
3062
+ return {
3063
+ opacity: "1",
3064
+ };
3065
+ }
3066
+ return {
3067
+ opacity: "0.8",
3068
+ };
3069
+ };
3070
+ return (jsx(Table$1.Body, { children: table.getRowModel().rows.map((row, index) => {
3071
+ return (jsxs(Table$1.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
3072
+ return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`,
3073
+ // styling resize and pinning start
3074
+ flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, color: {
3075
+ base: "colorPalette.900",
3076
+ _dark: "colorPalette.100",
3077
+ },
3078
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
3079
+ })] }, `chakra-table-row-${row.id}`));
3080
+ }) }));
3081
+ };
3082
+ const TableRowSelector = ({ index, row, }) => {
3083
+ const { table } = useDataTableContext();
3084
+ const SELECTION_BOX_WIDTH = 20;
3085
+ return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3086
+ base: "colorPalette.900",
3087
+ _dark: "colorPalette.100",
3088
+ },
3089
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
3090
+ disabled: !row.getCanSelect(),
3091
+ onCheckedChange: row.getToggleSelectedHandler() }) }));
3088
3092
  };
3089
3093
 
3090
- const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
3094
+ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
3091
3095
  const table = useDataTableContext().table;
3092
3096
  const SELECTION_BOX_WIDTH = 20;
3093
3097
  const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
@@ -3106,78 +3110,28 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
3106
3110
  }
3107
3111
  return false;
3108
3112
  };
3109
- const getThProps = (header) => {
3110
- const thProps = header.column.getIsPinned()
3111
- ? {
3112
- left: showSelector
3113
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3114
- : `${header.getStart("left") + table.getDensityValue() * 2}px`,
3115
- background: pinnedBgColor.light,
3116
- position: "sticky",
3117
- zIndex: 1,
3118
- _dark: {
3119
- backgroundColor: pinnedBgColor.dark,
3120
- },
3121
- }
3122
- : {};
3123
- return thProps;
3124
- };
3125
- return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header
3126
- // styling resize and pinning start
3127
- , {
3128
- // styling resize and pinning start
3129
- padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
3130
- ? {
3131
- left: `0px`,
3132
- backgroundColor: pinnedBgColor.light,
3133
- position: "sticky",
3134
- zIndex: 1,
3135
- _dark: { backgroundColor: pinnedBgColor.dark },
3136
- }
3137
- : {}),
3138
- // styling resize and pinning end
3139
- onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3113
+ return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3140
3114
  // indeterminate: table.getIsSomeRowsSelected(),
3141
3115
  onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsx(Table$1.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
3142
3116
  // styling resize and pinning start
3143
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), 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", _hover: { backgroundColor: "gray.100" }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3117
+ 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
3144
3118
  ? null
3145
3119
  : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
3146
3120
  // <UpDownIcon />
3147
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}`))) }));
3148
3122
  };
3149
3123
 
3150
- const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, isSticky = true, alwaysShowSelector = true, tHeadProps = {}, }) => {
3124
+ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
3151
3125
  const { table } = useDataTableContext();
3152
3126
  const SELECTION_BOX_WIDTH = 20;
3153
- const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
3154
- const handleRowHover = (isHovered) => {
3155
- setHoveredCheckBox(isHovered);
3156
- };
3157
- const isCheckBoxVisible = () => {
3158
- if (alwaysShowSelector) {
3159
- return true;
3160
- }
3161
- if (table.getIsAllRowsSelected()) {
3162
- return true;
3163
- }
3164
- if (hoveredCheckBox) {
3165
- return true;
3166
- }
3167
- return false;
3168
- };
3169
3127
  const getThProps = (header) => {
3170
3128
  const thProps = header.column.getIsPinned()
3171
3129
  ? {
3172
3130
  left: showSelector
3173
3131
  ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3174
3132
  : `${header.getStart("left")}px`,
3175
- background: pinnedBgColor.light,
3176
3133
  position: "sticky",
3177
3134
  zIndex: 100 + 1,
3178
- _dark: {
3179
- backgroundColor: pinnedBgColor.dark,
3180
- },
3181
3135
  }
3182
3136
  : {};
3183
3137
  return thProps;
@@ -3186,21 +3140,13 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3186
3140
  position: "sticky",
3187
3141
  top: 0,
3188
3142
  };
3189
- return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), ...tHeadProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.ColumnHeader
3190
- // styling resize and pinning start
3191
- , { ...(table.getIsSomeColumnsPinned("left")
3192
- ? {
3193
- left: `0px`,
3194
- backgroundColor: pinnedBgColor.light,
3195
- position: "sticky",
3196
- zIndex: 1,
3197
- _dark: { backgroundColor: pinnedBgColor.dark },
3198
- }
3199
- : {}),
3200
- // styling resize and pinning end
3201
- padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3202
- // indeterminate: table.getIsSomeRowsSelected(),
3203
- onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), headerGroup.headers.map((header) => {
3143
+ return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsx(Table$1.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3144
+ base: "colorPalette.900",
3145
+ _dark: "colorPalette.100",
3146
+ },
3147
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
3148
+ // indeterminate: table.getIsSomeRowsSelected(),
3149
+ onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
3204
3150
  const resizeProps = {
3205
3151
  onMouseDown: header.getResizeHandler(),
3206
3152
  onTouchStart: header.getResizeHandler(),
@@ -3208,10 +3154,24 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3208
3154
  };
3209
3155
  return (jsxs(Table$1.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
3210
3156
  // styling resize and pinning start
3211
- flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, ...getThProps(header), children: [jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsx(Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", _hover: {
3212
- backgroundColor: "gray.100",
3213
- _dark: {
3214
- backgroundColor: "gray.700",
3157
+ flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
3158
+ base: "colorPalette.800",
3159
+ _dark: "colorPalette.200",
3160
+ },
3161
+ bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsx(Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
3162
+ base: "colorPalette.800",
3163
+ _dark: "colorPalette.200",
3164
+ _hover: {
3165
+ base: "colorPalette.700",
3166
+ _dark: "colorPalette.300",
3167
+ },
3168
+ },
3169
+ bg: {
3170
+ base: "colorPalette.100",
3171
+ _dark: "colorPalette.900",
3172
+ _hover: {
3173
+ base: "colorPalette.200",
3174
+ _dark: "colorPalette.800",
3215
3175
  },
3216
3176
  }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3217
3177
  ? null
@@ -3239,29 +3199,17 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3239
3199
  });
3240
3200
  }, children: [jsx(GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3241
3201
  header.column.clearSorting();
3242
- }, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing() ? "gray.700" : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3202
+ }, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3203
+ ? "colorPalette.700"
3204
+ : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3243
3205
  borderRightColor: header.column.getIsResizing()
3244
- ? "gray.700"
3245
- : "gray.400",
3206
+ ? "colorPalette.700"
3207
+ : "colorPalette.400",
3246
3208
  }, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
3247
3209
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
3248
3210
  };
3249
3211
 
3250
- const EmptyState = React.forwardRef(function EmptyState(props, ref) {
3251
- const { title, description, icon, children, ...rest } = props;
3252
- return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
3253
- });
3254
-
3255
- const EmptyResult = (jsx(EmptyState, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
3256
- const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
3257
- const { table } = useDataTableContext();
3258
- if (table.getRowModel().rows.length <= 0) {
3259
- return emptyComponent;
3260
- }
3261
- return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
3262
- };
3263
-
3264
- const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
3212
+ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, tableFooterProps = {}, controlProps = {}, variant = "", }) => {
3265
3213
  if (variant === "greedy") {
3266
3214
  return (jsx(TableControls, { ...controlProps, children: jsxs(Table, { canResize: false, ...{ ...tableProps }, children: [jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
3267
3215
  }
@@ -3521,6 +3469,73 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
3521
3469
  return columns;
3522
3470
  };
3523
3471
 
3472
+ 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");
3477
+ const columnsMap = Object.fromEntries(columns.map((def) => {
3478
+ const { accessorKey, id } = def;
3479
+ if (accessorKey) {
3480
+ return [accessorKey, def];
3481
+ }
3482
+ return [id, def];
3483
+ }));
3484
+ const columnHeaders = Object.keys(columnsMap);
3485
+ const totalWidths = columns
3486
+ .map(({ size }) => {
3487
+ if (!!size === false) {
3488
+ return 0;
3489
+ }
3490
+ if (typeof size === "number") {
3491
+ return size;
3492
+ }
3493
+ return 0;
3494
+ })
3495
+ .reduce((previous, current) => previous + current, 0);
3496
+ const columnWidths = columns
3497
+ .map(({ size }) => {
3498
+ if (!!size === false) {
3499
+ return "1fr";
3500
+ }
3501
+ return `minmax(${size}px, ${(size / totalWidths) * 100}%)`;
3502
+ })
3503
+ .join(" ");
3504
+ console.log({ columnWidths }, "hadfg");
3505
+ const cellProps = {
3506
+ flex: "1 0 0%",
3507
+ overflow: "auto",
3508
+ paddingX: "2",
3509
+ py: "1",
3510
+ color: { base: "colorPalette.900", _dark: "colorPalette.100" },
3511
+ bgColor: { base: "colorPalette.50", _dark: "colorPalette.950" },
3512
+ borderBottomColor: { base: "colorPalette.200", _dark: "colorPalette.800" },
3513
+ borderBottomWidth: "1px",
3514
+ ...{ colorPalette },
3515
+ };
3516
+ if (data.length <= 0) {
3517
+ return jsx(Fragment, { children: emptyComponent });
3518
+ }
3519
+ return (jsxs(Grid, { templateColumns: `${columnWidths}`, overflow: "auto", borderWidth: "1px", color: { base: "colorPalette.900", _dark: "colorPalette.100" }, borderColor: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: [jsx(Grid, { templateColumns: `${columnWidths}`, column: `1/span ${columns.length}`, bg: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: columnHeaders.map((header) => {
3520
+ return (jsx(Box, { flex: "1 0 0%", paddingX: "2", py: "1", overflow: "auto", textOverflow: "ellipsis", children: translate.t(`column_header.${header}`) }));
3521
+ }) }), data.map((record) => {
3522
+ return (jsx(Fragment, { children: columnHeaders.map((header) => {
3523
+ const { cell } = columnsMap[header];
3524
+ const value = record[header];
3525
+ if (!!record === false) {
3526
+ return (jsx(Box, { ...cellProps, children: translate.t(`column_cell.placeholder`) }));
3527
+ }
3528
+ if (cell) {
3529
+ return (jsx(Box, { ...cellProps, children: cell({ row: { original: record } }) }));
3530
+ }
3531
+ if (typeof value === "object") {
3532
+ return (jsx(Box, { ...cellProps, children: jsx(RecordDisplay, { object: value }) }));
3533
+ }
3534
+ return jsx(Box, { ...cellProps, children: value });
3535
+ }) }));
3536
+ })] }));
3537
+ };
3538
+
3524
3539
  const AccordionItemTrigger = React.forwardRef(function AccordionItemTrigger(props, ref) {
3525
3540
  const { children, indicatorPlacement = "end", ...rest } = props;
3526
3541
  return (jsxs(Accordion.ItemTrigger, { ...rest, ref: ref, children: [indicatorPlacement === "start" && (jsx(Accordion.ItemIndicator, { rotate: { base: "-90deg", _open: "0deg" }, children: jsx(LuChevronDown, {}) })), jsx(HStack, { gap: "4", flex: "1", textAlign: "start", width: "full", children: children }), indicatorPlacement === "end" && (jsx(Accordion.ItemIndicator, { children: jsx(LuChevronDown, {}) }))] }));
@@ -3616,7 +3631,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
3616
3631
  const isRequired = required?.some((columnId) => columnId === column);
3617
3632
  const { formState: { errors }, setValue, watch, } = useFormContext();
3618
3633
  const fields = (watch(colLabel) ?? []);
3619
- return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxs(Flex, { flexFlow: "column", children: [jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaRenderer, { column: `${index}`,
3634
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxs(Flex, { flexFlow: "column", children: [jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaRenderer, { column: `${index}`,
3620
3635
  prefix: `${colLabel}.`,
3621
3636
  schema: items }) }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { variant: "ghost", onClick: () => {
3622
3637
  setValue(colLabel, fields.filter((_, curIndex) => {
@@ -3636,7 +3651,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
3636
3651
  return;
3637
3652
  }
3638
3653
  setValue(colLabel, [...fields, {}]);
3639
- }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3654
+ }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3640
3655
  };
3641
3656
 
3642
3657
  const Field = React.forwardRef(function Field(props, ref) {
@@ -3651,10 +3666,22 @@ const BooleanPicker = ({ schema, column, prefix }) => {
3651
3666
  const isRequired = required?.some((columnId) => columnId === column);
3652
3667
  const colLabel = `${prefix}${column}`;
3653
3668
  const value = watch(colLabel);
3654
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3669
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3655
3670
  gridRow, children: [jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
3656
3671
  setValue(colLabel, !value);
3657
- } }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3672
+ } }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3673
+ };
3674
+
3675
+ const CustomInput = ({ column, schema, prefix }) => {
3676
+ const formContext = useFormContext();
3677
+ const { inputRender } = schema;
3678
+ return (inputRender &&
3679
+ inputRender({
3680
+ column,
3681
+ schema,
3682
+ prefix,
3683
+ formContext,
3684
+ }));
3658
3685
  };
3659
3686
 
3660
3687
  const monthNamesShort = [
@@ -3744,27 +3771,54 @@ const PopoverRoot = Popover.Root;
3744
3771
  const PopoverBody = Popover.Body;
3745
3772
  const PopoverTrigger = Popover.Trigger;
3746
3773
 
3774
+ dayjs.extend(utc);
3747
3775
  const DatePicker = ({ column, schema, prefix }) => {
3748
3776
  const { watch, formState: { errors }, setValue, } = useFormContext();
3749
3777
  const { translate } = useSchemaContext();
3750
- const { required, gridColumn, gridRow } = schema;
3778
+ const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", dateFormat = "YYYY-MM-DD[T]HH:mm:ss[Z]", } = schema;
3751
3779
  const isRequired = required?.some((columnId) => columnId === column);
3752
3780
  const colLabel = `${prefix}${column}`;
3753
3781
  const [open, setOpen] = useState(false);
3754
3782
  const selectedDate = watch(colLabel);
3755
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3756
- gridRow, children: [jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(PopoverTrigger, { asChild: true, children: jsx(Button, { size: "sm", variant: "outline", onClick: () => {
3783
+ const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
3784
+ useEffect(() => {
3785
+ try {
3786
+ if (selectedDate) {
3787
+ // Parse the selectedDate as UTC or in a specific timezone to avoid +8 hour shift
3788
+ // For example, parse as UTC:
3789
+ const parsedDate = dayjs.utc(selectedDate);
3790
+ // Or if you want to parse in local timezone without shifting:
3791
+ // const parsedDate = dayjs.tz(selectedDate, dayjs.tz.guess());
3792
+ if (!parsedDate.isValid())
3793
+ return;
3794
+ // Format according to dateFormat from schema
3795
+ const formatted = parsedDate.format(dateFormat);
3796
+ // Update the form value only if different to avoid loops
3797
+ if (formatted !== selectedDate) {
3798
+ setValue(colLabel, formatted, {
3799
+ shouldValidate: true,
3800
+ shouldDirty: true,
3801
+ });
3802
+ }
3803
+ }
3804
+ }
3805
+ catch (e) {
3806
+ console.error(e);
3807
+ }
3808
+ }, [selectedDate, dateFormat, colLabel, setValue]);
3809
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3810
+ gridRow, children: [jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
3757
3811
  setOpen(true);
3758
- }, children: selectedDate !== undefined ? selectedDate : "" }) }), jsx(PopoverContent, { children: jsxs(PopoverBody, { children: [jsx(PopoverTitle, {}), jsx(DatePicker$1
3812
+ }, justifyContent: "start", children: [jsx(MdDateRange, {}), selectedDate !== undefined ? `${displayDate}` : ""] }) }), jsx(PopoverContent, { children: jsxs(PopoverBody, { children: [jsx(PopoverTitle, {}), jsx(DatePicker$1
3759
3813
  // @ts-expect-error TODO: find appropriate types
3760
3814
  , {
3761
3815
  // @ts-expect-error TODO: find appropriate types
3762
3816
  selected: new Date(selectedDate),
3763
3817
  // @ts-expect-error TODO: find appropriate types
3764
3818
  onDateSelected: ({ date }) => {
3765
- setValue(colLabel, dayjs(date).format("YYYY-MM-DD"));
3819
+ setValue(colLabel, dayjs(date).format(dateFormat));
3766
3820
  setOpen(false);
3767
- } })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3821
+ } })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3768
3822
  };
3769
3823
 
3770
3824
  function filterArray(array, searchTerm) {
@@ -3780,7 +3834,7 @@ function filterArray(array, searchTerm) {
3780
3834
  const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3781
3835
  const { watch, formState: { errors }, setValue, } = useFormContext();
3782
3836
  const { translate } = useSchemaContext();
3783
- const { required } = schema;
3837
+ const { required, variant } = schema;
3784
3838
  const isRequired = required?.some((columnId) => columnId === column);
3785
3839
  const { gridColumn, gridRow, renderDisplay } = schema;
3786
3840
  const [searchText, setSearchText] = useState();
@@ -3797,25 +3851,40 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3797
3851
  setSearchText(event.target.value);
3798
3852
  setLimit(10);
3799
3853
  };
3800
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3854
+ if (variant === "radio") {
3855
+ return (jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3856
+ gridRow, children: jsx(RadioGroup$1.Root, { defaultValue: "1", children: jsx(HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
3857
+ return (jsxs(RadioGroup$1.Item, { onClick: () => {
3858
+ if (!isMultiple) {
3859
+ setOpenSearchResult(false);
3860
+ setValue(colLabel, item);
3861
+ return;
3862
+ }
3863
+ const newSet = new Set([...(watchEnums ?? []), item]);
3864
+ setValue(colLabel, [...newSet]);
3865
+ }, value: item, children: [jsx(RadioGroup$1.ItemHiddenInput, {}), jsx(RadioGroup$1.ItemIndicator, {}), jsx(RadioGroup$1.ItemText, { children: !!renderDisplay === true
3866
+ ? renderDisplay(item)
3867
+ : translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
3868
+ }) }) }) }));
3869
+ }
3870
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3801
3871
  gridRow, children: [isMultiple && (jsxs(Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
3802
3872
  const item = enumValue;
3803
3873
  if (item === undefined) {
3804
3874
  return jsx(Fragment, { children: "undefined" });
3805
3875
  }
3806
3876
  return (jsx(Tag, { closable: true, onClick: () => {
3807
- // setSelectedEnums((state) => state.filter((id) => id != item));
3808
3877
  setValue(column, watchEnums.filter((id) => id != item));
3809
3878
  }, children: !!renderDisplay === true
3810
3879
  ? renderDisplay(item)
3811
3880
  : translate.t(removeIndex(`${colLabel}.${item}`)) }));
3812
3881
  }), jsx(Tag, { cursor: "pointer", onClick: () => {
3813
3882
  setOpenSearchResult(true);
3814
- }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
3883
+ }, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
3815
3884
  setOpenSearchResult(true);
3816
- }, children: watchEnum === undefined
3885
+ }, justifyContent: "start", children: watchEnum === undefined
3817
3886
  ? ""
3818
- : translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${column}.typeToSearch`), onChange: (event) => {
3887
+ : translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${column}.type_to_search`), onChange: (event) => {
3819
3888
  onSearchChange(event);
3820
3889
  setOpenSearchResult(true);
3821
3890
  }, autoComplete: "off", ref: ref }), jsx(PopoverTitle, {}), jsx(Text, { children: `${translate.t(`${column}.total`)}: ${count}, ${translate.t(`${column}.showing`)} ${limit}` }), jsxs(Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsx(Flex, { flexFlow: "column wrap", children: filterArray(dataList, searchText ?? "").map((item) => {
@@ -3830,10 +3899,10 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3830
3899
  }
3831
3900
  const newSet = new Set([...(watchEnums ?? []), item]);
3832
3901
  setValue(colLabel, [...newSet]);
3833
- }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
3902
+ }, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
3834
3903
  ? renderDisplay(item)
3835
3904
  : translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
3836
- }) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Fragment, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3905
+ }) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Fragment, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3837
3906
  };
3838
3907
 
3839
3908
  function isEnteringWindow(_ref) {
@@ -4185,7 +4254,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
4185
4254
  const filesArray = [...event.target.files];
4186
4255
  onDrop({ files: filesArray });
4187
4256
  };
4188
- return (jsxs(Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "gray.400", alignContent: "center", justifyContent: "center", borderWidth: 1, borderRadius: 4, ...gridProps, children: [children, !!children === false && (jsxs(Fragment, { children: [jsx(Flex, { children: placeholder }), jsx(Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
4257
+ return (jsxs(Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "colorPalette.400", alignContent: "center", justifyContent: "center", borderWidth: 1, borderRadius: 4, ...gridProps, children: [children, !!children === false && (jsxs(Fragment, { children: [jsx(Flex, { children: placeholder }), jsx(Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
4189
4258
  };
4190
4259
 
4191
4260
  const FilePicker = ({ column, schema, prefix }) => {
@@ -4195,7 +4264,7 @@ const FilePicker = ({ column, schema, prefix }) => {
4195
4264
  const isRequired = required?.some((columnId) => columnId === column);
4196
4265
  const currentFiles = (watch(column) ?? []);
4197
4266
  const colLabel = `${prefix}${column}`;
4198
- return (jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsx(FileDropzone, { onDrop: ({ files }) => {
4267
+ return (jsxs(Field, { label: `${translate.t(`${colLabel}.field_label`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsx(FileDropzone, { onDrop: ({ files }) => {
4199
4268
  const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4200
4269
  setValue(colLabel, [...currentFiles, ...newFiles]);
4201
4270
  }, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
@@ -4203,8 +4272,8 @@ const FilePicker = ({ column, schema, prefix }) => {
4203
4272
  setValue(column, currentFiles.filter(({ name }) => {
4204
4273
  return name !== file.name;
4205
4274
  }));
4206
- }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
4207
- }) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4275
+ }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsx(Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
4276
+ }) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4208
4277
  };
4209
4278
 
4210
4279
  const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
@@ -4319,9 +4388,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4319
4388
  if (record === undefined) {
4320
4389
  return "";
4321
4390
  }
4391
+ if (!!renderDisplay === true) {
4392
+ return renderDisplay(record);
4393
+ }
4322
4394
  return record[display_column];
4323
4395
  };
4324
- return (jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.fieldLabel`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4396
+ return (jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.field_label`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4325
4397
  gridRow, children: [isMultiple && (jsxs(Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
4326
4398
  const item = idMap[id];
4327
4399
  if (item === undefined) {
@@ -4334,9 +4406,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4334
4406
  : item[display_column] }, id));
4335
4407
  }), jsx(Tag, { cursor: "pointer", onClick: () => {
4336
4408
  setOpenSearchResult(true);
4337
- }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
4409
+ }, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
4338
4410
  setOpenSearchResult(true);
4339
- }, children: getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.typeToSearch`)), onChange: (event) => {
4411
+ }, justifyContent: "start", children: getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: (event) => {
4340
4412
  onSearchChange(event);
4341
4413
  setOpenSearchResult(true);
4342
4414
  }, autoComplete: "off", ref: ref }), jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxs(Fragment, { children: [isFetching && jsx(Fragment, { children: "isFetching" }), isLoading && jsx(Fragment, { children: "isLoading" }), isPending && jsx(Fragment, { children: "isPending" }), (isFetching || isLoading || isPending) && jsx(Spinner, {}), isError && (jsx(Icon, { color: "red.400", children: jsx(BiError, {}) })), jsx(Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxs(Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsx(Flex, { flexFlow: "column wrap", children:
@@ -4356,10 +4428,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4356
4428
  item[column_ref],
4357
4429
  ]);
4358
4430
  setValue(colLabel, [...newSet]);
4359
- }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
4431
+ }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
4432
+ ? { color: "colorPalette.400/50" }
4433
+ : {}), children: !!renderDisplay === true
4360
4434
  ? renderDisplay(item)
4361
4435
  : item[display_column] }, item[column_ref]));
4362
- }) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] }), jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxs(HStack, { gap: "4", children: [jsx(PaginationPrevTrigger, {}), count > 0 && jsx(PaginationPageText, {}), jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4436
+ }) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] }), jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxs(HStack, { gap: "4", children: [jsx(PaginationPrevTrigger, {}), count > 0 && jsx(PaginationPageText, {}), jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4363
4437
  };
4364
4438
 
4365
4439
  const NumberInputRoot = React.forwardRef(function NumberInput$1(props, ref) {
@@ -4377,9 +4451,9 @@ const NumberInputField = ({ schema, column, prefix, }) => {
4377
4451
  const isRequired = required?.some((columnId) => columnId === column);
4378
4452
  const colLabel = `${prefix}${column}`;
4379
4453
  const value = watch(`${colLabel}`);
4380
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(NumberInputRoot, { children: jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
4454
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(NumberInputRoot, { children: jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
4381
4455
  setValue(`${colLabel}`, Number(event.target.value));
4382
- } }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4456
+ } }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4383
4457
  };
4384
4458
 
4385
4459
  const ObjectInput = ({ schema, column, prefix }) => {
@@ -4391,13 +4465,13 @@ const ObjectInput = ({ schema, column, prefix }) => {
4391
4465
  if (properties === undefined) {
4392
4466
  throw new Error(`properties is undefined when using ObjectInput`);
4393
4467
  }
4394
- return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4468
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4395
4469
  return (
4396
4470
  // @ts-expect-error find suitable types
4397
4471
  jsx(ColumnRenderer, { column: `${key}`,
4398
4472
  prefix: `${prefix}${column}.`,
4399
4473
  properties }, `form-${colLabel}-${key}`));
4400
- }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4474
+ }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4401
4475
  };
4402
4476
 
4403
4477
  const RecordInput$1 = ({ column, schema, prefix }) => {
@@ -4409,7 +4483,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
4409
4483
  const [showNewEntries, setShowNewEntries] = useState(false);
4410
4484
  const [newKey, setNewKey] = useState();
4411
4485
  const [newValue, setNewValue] = useState();
4412
- return (jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4486
+ return (jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4413
4487
  return (jsxs(Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsx(Input, { value: key, onChange: (e) => {
4414
4488
  const filtered = entries.filter(([target]) => {
4415
4489
  return target !== key;
@@ -4449,7 +4523,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
4449
4523
  setShowNewEntries(true);
4450
4524
  setNewKey(undefined);
4451
4525
  setNewValue(undefined);
4452
- }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4526
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4453
4527
  };
4454
4528
 
4455
4529
  const StringInputField = ({ column, schema, prefix, }) => {
@@ -4458,7 +4532,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
4458
4532
  const { required, gridColumn, gridRow } = schema;
4459
4533
  const isRequired = required?.some((columnId) => columnId === column);
4460
4534
  const colLabel = `${prefix}${column}`;
4461
- return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
4535
+ return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4462
4536
  };
4463
4537
 
4464
4538
  const RadioCardItem = React.forwardRef(function RadioCardItem(props, ref) {
@@ -4556,9 +4630,124 @@ const TagPicker = ({ column, schema, prefix }) => {
4556
4630
  }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4557
4631
  };
4558
4632
 
4633
+ const TextAreaInput = ({ column, schema, prefix, }) => {
4634
+ const { register, formState: { errors }, } = useFormContext();
4635
+ const { translate } = useSchemaContext();
4636
+ const { required, gridColumn, gridRow } = schema;
4637
+ const isRequired = required?.some((columnId) => columnId === column);
4638
+ const colLabel = `${prefix}${column}`;
4639
+ return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Textarea, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4640
+ };
4641
+
4642
+ function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
4643
+ am: "am",
4644
+ pm: "pm",
4645
+ }, onChange = () => { }, }) {
4646
+ const hours = Array.from({ length: 12 }, (_, i) => {
4647
+ const hour = i + 1;
4648
+ return hour.toString().padStart(2, "0");
4649
+ });
4650
+ const minutes = Array.from({ length: 60 }, (_, i) => {
4651
+ return i.toString().padStart(2, "0");
4652
+ });
4653
+ const hoursCollection = createListCollection({
4654
+ items: hours.map((hour) => ({
4655
+ value: hour,
4656
+ label: hour,
4657
+ })),
4658
+ });
4659
+ const minutesCollection = createListCollection({
4660
+ items: minutes.map((hour) => ({
4661
+ value: hour,
4662
+ label: hour,
4663
+ })),
4664
+ });
4665
+ const meridiemsCollection = createListCollection({
4666
+ items: ["am", "pm"].map((hour) => ({
4667
+ value: hour,
4668
+ label: meridiemLabel[hour] ?? hour,
4669
+ })),
4670
+ });
4671
+ return (jsxs(Grid, { templateColumns: "auto auto", gap: "4", children: [jsxs(Flex, { justifyContent: "center", alignItems: "center", gap: "2", children: [jsxs(Select.Root, { value: [`${hour.toString().padStart(2, "0")}`], onValueChange: (e) => {
4672
+ setHour(parseInt(e.value[0]));
4673
+ onChange({ hour: parseInt(e.value[0]), minute, meridiem });
4674
+ }, collection: hoursCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "Hour" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: hoursCollection.items.map(({ value: hour }) => (jsxs(Select.Item, { item: hour, children: [hour, jsx(Select.ItemIndicator, {})] }, hour))) }) })] }), jsx(Text, { children: ":" }), jsxs(Select.Root, { value: [`${minute.toString().padStart(2, "0")}`], onValueChange: (e) => {
4675
+ setMinute(parseInt(e.value[0]));
4676
+ onChange({ hour, minute: parseInt(e.value[0]), meridiem });
4677
+ }, collection: minutesCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "Minute" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: minutes.map((minute) => (jsxs(Select.Item, { item: minute, children: [minute, jsx(Select.ItemIndicator, {})] }, minute))) }) })] })] }), jsxs(Select.Root, { value: [meridiem], onValueChange: (e) => {
4678
+ setMeridiem(e.value[0]);
4679
+ onChange({ hour, minute, meridiem: e.value[0] });
4680
+ }, collection: meridiemsCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "am/pm" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: meridiemsCollection.items.map(({ value: hour, label }) => (jsxs(Select.Item, { item: hour, children: [label, jsx(Select.ItemIndicator, {})] }, hour))) }) })] })] }));
4681
+ }
4682
+
4683
+ const TimePicker = ({ column, schema, prefix }) => {
4684
+ const { watch, formState: { errors }, setValue, } = useFormContext();
4685
+ const { translate } = useSchemaContext();
4686
+ const { required, gridColumn, gridRow } = schema;
4687
+ const isRequired = required?.some((columnId) => columnId === column);
4688
+ const colLabel = `${prefix}${column}`;
4689
+ const [open, setOpen] = useState(false);
4690
+ const value = watch(colLabel);
4691
+ const formatedTime = dayjs(value).format("hh:mm A");
4692
+ // Parse the initial time parts from the ISO time string (HH:mm:ss)
4693
+ const parseTime = (isoTime) => {
4694
+ if (!isoTime)
4695
+ return { hour: 12, minute: 0, meridiem: "am" };
4696
+ const parsed = dayjs(isoTime);
4697
+ if (!parsed.isValid())
4698
+ return { hour: 12, minute: 0, meridiem: "am" };
4699
+ let hour = parsed.hour();
4700
+ const minute = parsed.minute();
4701
+ const meridiem = hour >= 12 ? "pm" : "am";
4702
+ if (hour === 0)
4703
+ hour = 12;
4704
+ else if (hour > 12)
4705
+ hour -= 12;
4706
+ return { hour, minute, meridiem };
4707
+ };
4708
+ const initialTime = parseTime(value);
4709
+ const [hour, setHour] = useState(initialTime.hour);
4710
+ const [minute, setMinute] = useState(initialTime.minute);
4711
+ const [meridiem, setMeridiem] = useState(initialTime.meridiem);
4712
+ useEffect(() => {
4713
+ const { hour, minute, meridiem } = parseTime(value);
4714
+ setHour(hour);
4715
+ setMinute(minute);
4716
+ setMeridiem(meridiem);
4717
+ }, [value]);
4718
+ // Convert hour, minute, meridiem to 24-hour ISO time string
4719
+ const toIsoTime = (hour, minute, meridiem) => {
4720
+ let h = hour;
4721
+ if (meridiem === "am" && hour === 12)
4722
+ h = 0;
4723
+ else if (meridiem === "pm" && hour < 12)
4724
+ h = hour + 12;
4725
+ return dayjs().hour(h).minute(minute).second(0).toISOString();
4726
+ };
4727
+ // Handle changes to time parts
4728
+ const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
4729
+ setHour(newHour);
4730
+ setMinute(newMinute);
4731
+ setMeridiem(newMeridiem);
4732
+ const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
4733
+ setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
4734
+ };
4735
+ const containerRef = useRef(null);
4736
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4737
+ gridRow, children: [jsxs(Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(Popover.Trigger, { asChild: true, children: jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
4738
+ setOpen(true);
4739
+ }, justifyContent: "start", children: [jsx(IoMdClock, {}), value !== undefined ? `${formatedTime}` : ""] }) }), jsx(Portal, { children: jsx(Popover.Positioner, { children: jsx(Popover.Content, { ref: containerRef, children: jsx(Popover.Body, { children: jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
4740
+ am: translate.t(removeIndex(`${colLabel}.am`)),
4741
+ pm: translate.t(removeIndex(`${colLabel}.pm`)),
4742
+ } }) }) }) }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4743
+ };
4744
+
4559
4745
  const SchemaRenderer = ({ schema, prefix, column, }) => {
4560
4746
  const colSchema = schema;
4561
4747
  const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4748
+ if (variant === "custom-input") {
4749
+ return jsx(CustomInput, { schema: colSchema, prefix, column });
4750
+ }
4562
4751
  if (type === "string") {
4563
4752
  if ((schema.enum ?? []).length > 0) {
4564
4753
  return jsx(EnumPicker, { schema: colSchema, prefix, column });
@@ -4570,6 +4759,12 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
4570
4759
  if (variant === "date-picker") {
4571
4760
  return jsx(DatePicker, { schema: colSchema, prefix, column });
4572
4761
  }
4762
+ if (variant === "time-picker") {
4763
+ return jsx(TimePicker, { schema: colSchema, prefix, column });
4764
+ }
4765
+ if (variant === "text-area") {
4766
+ return jsx(TextAreaInput, { schema: colSchema, prefix, column });
4767
+ }
4573
4768
  return jsx(StringInputField, { schema: colSchema, prefix, column });
4574
4769
  }
4575
4770
  if (type === "number" || type === "integer") {
@@ -4622,9 +4817,9 @@ const ArrayViewer = ({ schema, column, prefix }) => {
4622
4817
  const isRequired = required?.some((columnId) => columnId === column);
4623
4818
  const { watch, formState: { errors }, } = useFormContext();
4624
4819
  const values = watch(colLabel) ?? [];
4625
- return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsx("span", { children: "*" })] }), values.map((field, index) => (jsx(Flex, { flexFlow: "column", children: jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaViewer, { column: `${index}`,
4820
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), values.map((field, index) => (jsx(Flex, { flexFlow: "column", children: jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaViewer, { column: `${index}`,
4626
4821
  prefix: `${colLabel}.`,
4627
- schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4822
+ schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4628
4823
  };
4629
4824
 
4630
4825
  const BooleanViewer = ({ schema, column, prefix, }) => {
@@ -4634,21 +4829,34 @@ const BooleanViewer = ({ schema, column, prefix, }) => {
4634
4829
  const isRequired = required?.some((columnId) => columnId === column);
4635
4830
  const colLabel = `${prefix}${column}`;
4636
4831
  const value = watch(colLabel);
4637
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4832
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4638
4833
  gridRow, children: [jsx(Text, { children: value
4639
4834
  ? translate.t(removeIndex(`${colLabel}.true`))
4640
- : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4835
+ : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4836
+ };
4837
+
4838
+ const CustomViewer = ({ column, schema, prefix }) => {
4839
+ const formContext = useFormContext();
4840
+ const { inputViewerRender } = schema;
4841
+ return (inputViewerRender &&
4842
+ inputViewerRender({
4843
+ column,
4844
+ schema,
4845
+ prefix,
4846
+ formContext,
4847
+ }));
4641
4848
  };
4642
4849
 
4643
4850
  const DateViewer = ({ column, schema, prefix }) => {
4644
4851
  const { watch, formState: { errors }, } = useFormContext();
4645
4852
  const { translate } = useSchemaContext();
4646
- const { required, gridColumn, gridRow } = schema;
4853
+ const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", } = schema;
4647
4854
  const isRequired = required?.some((columnId) => columnId === column);
4648
4855
  const colLabel = `${prefix}${column}`;
4649
4856
  const selectedDate = watch(colLabel);
4650
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4651
- gridRow, children: [jsxs(Text, { children: [" ", selectedDate !== undefined ? selectedDate : ""] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4857
+ const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
4858
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4859
+ gridRow, children: [jsxs(Text, { children: [" ", selectedDate !== undefined ? displayDate : ""] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4652
4860
  };
4653
4861
 
4654
4862
  const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
@@ -4660,7 +4868,7 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4660
4868
  const colLabel = `${prefix}${column}`;
4661
4869
  const watchEnum = watch(colLabel);
4662
4870
  const watchEnums = (watch(colLabel) ?? []);
4663
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4871
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4664
4872
  gridRow, children: [isMultiple && (jsx(Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
4665
4873
  const item = enumValue;
4666
4874
  if (item === undefined) {
@@ -4669,26 +4877,19 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4669
4877
  return (jsx(Tag, { closable: true, children: !!renderDisplay === true
4670
4878
  ? renderDisplay(item)
4671
4879
  : translate.t(removeIndex(`${colLabel}.${item}`)) }));
4672
- }) })), !isMultiple && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4880
+ }) })), !isMultiple && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4673
4881
  };
4674
4882
 
4675
4883
  const FileViewer = ({ column, schema, prefix }) => {
4676
- const { setValue, formState: { errors }, watch, } = useFormContext();
4884
+ const { watch } = useFormContext();
4677
4885
  const { translate } = useSchemaContext();
4678
4886
  const { required, gridColumn, gridRow } = schema;
4679
4887
  const isRequired = required?.some((columnId) => columnId === column);
4680
4888
  const currentFiles = (watch(column) ?? []);
4681
4889
  const colLabel = `${prefix}${column}`;
4682
- return (jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsx(FileDropzone, { onDrop: ({ files }) => {
4683
- const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4684
- setValue(colLabel, [...currentFiles, ...newFiles]);
4685
- }, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4686
- return (jsx(Card.Root, { variant: "subtle", children: jsxs(Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4687
- setValue(column, currentFiles.filter(({ name }) => {
4688
- return name !== file.name;
4689
- }));
4690
- }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
4691
- }) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4890
+ return (jsx(Field, { label: `${translate.t(`${colLabel}.field_label`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4891
+ return (jsx(Card.Root, { variant: "subtle", children: jsxs(Card.Body, { gap: "2", display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsx(Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsx(Box, { children: file.name })] }) }, file.name));
4892
+ }) }) }));
4692
4893
  };
4693
4894
 
4694
4895
  const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
@@ -4710,7 +4911,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4710
4911
  }
4711
4912
  return record[display_column];
4712
4913
  };
4713
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4914
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4714
4915
  gridRow, children: [isMultiple && (jsx(Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
4715
4916
  const item = idMap[id];
4716
4917
  if (item === undefined) {
@@ -4719,7 +4920,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4719
4920
  return (jsx(Tag, { closable: true, children: !!renderDisplay === true
4720
4921
  ? renderDisplay(item)
4721
4922
  : item[display_column] }, id));
4722
- }) })), !isMultiple && jsx(Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4923
+ }) })), !isMultiple && jsx(Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4723
4924
  };
4724
4925
 
4725
4926
  const NumberViewer = ({ schema, column, prefix, }) => {
@@ -4729,7 +4930,7 @@ const NumberViewer = ({ schema, column, prefix, }) => {
4729
4930
  const isRequired = required?.some((columnId) => columnId === column);
4730
4931
  const colLabel = `${prefix}${column}`;
4731
4932
  const value = watch(colLabel);
4732
- return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(Text, { children: value }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4933
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(Text, { children: value }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4733
4934
  };
4734
4935
 
4735
4936
  const ObjectViewer = ({ schema, column, prefix }) => {
@@ -4741,13 +4942,13 @@ const ObjectViewer = ({ schema, column, prefix }) => {
4741
4942
  if (properties === undefined) {
4742
4943
  throw new Error(`properties is undefined when using ObjectInput`);
4743
4944
  }
4744
- return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4945
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4745
4946
  return (
4746
4947
  // @ts-expect-error find suitable types
4747
4948
  jsx(ColumnViewer, { column: `${key}`,
4748
4949
  prefix: `${prefix}${column}.`,
4749
4950
  properties }, `form-objectviewer-${colLabel}-${key}`));
4750
- }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4951
+ }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4751
4952
  };
4752
4953
 
4753
4954
  const RecordInput = ({ column, schema, prefix }) => {
@@ -4759,7 +4960,7 @@ const RecordInput = ({ column, schema, prefix }) => {
4759
4960
  const [showNewEntries, setShowNewEntries] = useState(false);
4760
4961
  const [newKey, setNewKey] = useState();
4761
4962
  const [newValue, setNewValue] = useState();
4762
- return (jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4963
+ return (jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4763
4964
  return (jsxs(Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsx(Input, { value: key, onChange: (e) => {
4764
4965
  const filtered = entries.filter(([target]) => {
4765
4966
  return target !== key;
@@ -4799,7 +5000,17 @@ const RecordInput = ({ column, schema, prefix }) => {
4799
5000
  setShowNewEntries(true);
4800
5001
  setNewKey(undefined);
4801
5002
  setNewValue(undefined);
4802
- }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
5003
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
5004
+ };
5005
+
5006
+ const StringViewer = ({ column, schema, prefix, }) => {
5007
+ const { watch, formState: { errors }, } = useFormContext();
5008
+ const { translate } = useSchemaContext();
5009
+ const { required, gridColumn, gridRow } = schema;
5010
+ const isRequired = required?.some((columnId) => columnId === column);
5011
+ const colLabel = `${prefix}${column}`;
5012
+ const value = watch(colLabel);
5013
+ return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { children: value }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4803
5014
  };
4804
5015
 
4805
5016
  const TagViewer = ({ column, schema, prefix }) => {
@@ -4887,19 +5098,35 @@ const TagViewer = ({ column, schema, prefix }) => {
4887
5098
  }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4888
5099
  };
4889
5100
 
4890
- const StringViewer = ({ column, schema, prefix, }) => {
5101
+ const TextAreaViewer = ({ column, schema, prefix, }) => {
4891
5102
  const { watch, formState: { errors }, } = useFormContext();
4892
5103
  const { translate } = useSchemaContext();
4893
5104
  const { required, gridColumn, gridRow } = schema;
4894
5105
  const isRequired = required?.some((columnId) => columnId === column);
4895
5106
  const colLabel = `${prefix}${column}`;
4896
5107
  const value = watch(colLabel);
4897
- return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { children: value }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
5108
+ return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { whiteSpace: "pre-wrap", children: value }), " ", errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
5109
+ };
5110
+
5111
+ const TimeViewer = ({ column, schema, prefix }) => {
5112
+ const { watch, formState: { errors }, } = useFormContext();
5113
+ const { translate } = useSchemaContext();
5114
+ const { required, gridColumn, gridRow } = schema;
5115
+ const isRequired = required?.some((columnId) => columnId === column);
5116
+ const colLabel = `${prefix}${column}`;
5117
+ const selectedDate = watch(colLabel);
5118
+ return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
5119
+ gridRow, children: [jsx(Text, { children: selectedDate !== undefined
5120
+ ? dayjs(selectedDate).format("hh:mm A")
5121
+ : "" }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4898
5122
  };
4899
5123
 
4900
5124
  const SchemaViewer = ({ schema, prefix, column, }) => {
4901
5125
  const colSchema = schema;
4902
5126
  const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
5127
+ if (variant === "custom-input") {
5128
+ return jsx(CustomViewer, { schema: colSchema, prefix, column });
5129
+ }
4903
5130
  if (type === "string") {
4904
5131
  if ((schema.enum ?? []).length > 0) {
4905
5132
  return jsx(EnumViewer, { schema: colSchema, prefix, column });
@@ -4911,6 +5138,12 @@ const SchemaViewer = ({ schema, prefix, column, }) => {
4911
5138
  if (variant === "date-picker") {
4912
5139
  return jsx(DateViewer, { schema: colSchema, prefix, column });
4913
5140
  }
5141
+ if (variant === "time-picker") {
5142
+ return jsx(TimeViewer, { schema: colSchema, prefix, column });
5143
+ }
5144
+ if (variant === "text-area") {
5145
+ return jsx(TextAreaViewer, { schema: colSchema, prefix, column });
5146
+ }
4914
5147
  return jsx(StringViewer, { schema: colSchema, prefix, column });
4915
5148
  }
4916
5149
  if (type === "number" || type === "integer") {
@@ -5033,7 +5266,7 @@ const FormBody = () => {
5033
5266
  include,
5034
5267
  });
5035
5268
  if (isSuccess) {
5036
- return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("submitSuccess") })] }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { onClick: async () => {
5269
+ return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("submit_success") })] }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { onClick: async () => {
5037
5270
  setIsError(false);
5038
5271
  setIsSubmiting(false);
5039
5272
  setIsSuccess(false);
@@ -5041,7 +5274,7 @@ const FormBody = () => {
5041
5274
  setValidatedData(undefined);
5042
5275
  const data = await getUpdatedData();
5043
5276
  methods.reset(data);
5044
- }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
5277
+ }, formNoValidate: true, children: translate.t("submit_again") }) })] }));
5045
5278
  }
5046
5279
  if (isConfirming) {
5047
5280
  return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsx(Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
@@ -5072,8 +5305,8 @@ const FormTitle = () => {
5072
5305
  return jsx(Heading, { children: translate.t("title") });
5073
5306
  };
5074
5307
 
5075
- const DefaultForm = ({ formConfig, }) => {
5076
- return (jsx(FormRoot, { ...formConfig, children: jsxs(Grid, { gap: "2", children: [jsx(FormTitle, {}), jsx(FormBody, {})] }) }));
5308
+ const DefaultForm = ({ formConfig, showTitle = true, }) => {
5309
+ return (jsx(FormRoot, { ...formConfig, children: jsxs(Grid, { gap: "2", children: [showTitle && jsx(FormTitle, {}), jsx(FormBody, {})] }) }));
5077
5310
  };
5078
5311
 
5079
5312
  const useForm = ({ preLoadedValues, keyPrefix }) => {
@@ -5106,4 +5339,4 @@ const getMultiDates = ({ selected, selectedDate, selectedDates, selectable, }) =
5106
5339
  }
5107
5340
  };
5108
5341
 
5109
- export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton, EditOrderButton, EditSortingButton, EmptyState$1 as EmptyState, ErrorAlert, FilterDialog, FilterOptions, FormBody, FormRoot, FormTitle, GlobalFilter, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableOrderer, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
5342
+ export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton, EditSortingButton, EmptyState$1 as EmptyState, ErrorAlert, FilterDialog, FilterOptions, FormBody, FormRoot, FormTitle, GlobalFilter, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableDataDisplay, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };