@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.js CHANGED
@@ -30,6 +30,7 @@ var reactI18next = require('react-i18next');
30
30
  var axios = require('axios');
31
31
  var reactHookForm = require('react-hook-form');
32
32
  var dayjs = require('dayjs');
33
+ var utc = require('dayjs/plugin/utc');
33
34
  var ti = require('react-icons/ti');
34
35
 
35
36
  function _interopNamespaceDefault(e) {
@@ -57,6 +58,39 @@ const DataTableContext = React.createContext({
57
58
  setGlobalFilter: () => { },
58
59
  type: "client",
59
60
  translate: {},
61
+ data: [],
62
+ columns: [],
63
+ columnOrder: [],
64
+ columnFilters: [],
65
+ density: "sm",
66
+ sorting: [],
67
+ setPagination: function () {
68
+ throw new Error("Function not implemented.");
69
+ },
70
+ setSorting: function () {
71
+ throw new Error("Function not implemented.");
72
+ },
73
+ setColumnFilters: function () {
74
+ throw new Error("Function not implemented.");
75
+ },
76
+ setRowSelection: function () {
77
+ throw new Error("Function not implemented.");
78
+ },
79
+ setColumnOrder: function () {
80
+ throw new Error("Function not implemented.");
81
+ },
82
+ setDensity: function () {
83
+ throw new Error("Function not implemented.");
84
+ },
85
+ setColumnVisibility: function () {
86
+ throw new Error("Function not implemented.");
87
+ },
88
+ pagination: {
89
+ pageIndex: 0,
90
+ pageSize: 10,
91
+ },
92
+ rowSelection: {},
93
+ columnVisibility: {},
60
94
  });
61
95
 
62
96
  const useDataTableContext = () => {
@@ -98,63 +132,6 @@ react.Dialog.Description;
98
132
  const DialogTrigger = react.Dialog.Trigger;
99
133
  react.Dialog.ActionTrigger;
100
134
 
101
- const ColumnOrderChanger = ({ columns }) => {
102
- const [order, setOrder] = React.useState([]);
103
- const [originalOrder, setOriginalOrder] = React.useState([]);
104
- const { table } = useDataTableContext();
105
- const handleChangeOrder = (startIndex, endIndex) => {
106
- const newOrder = Array.from(order);
107
- const [removed] = newOrder.splice(startIndex, 1);
108
- newOrder.splice(endIndex, 0, removed);
109
- setOrder(newOrder);
110
- };
111
- React.useEffect(() => {
112
- setOrder(columns);
113
- }, [columns]);
114
- React.useEffect(() => {
115
- if (originalOrder.length > 0) {
116
- return;
117
- }
118
- if (columns.length <= 0) {
119
- return;
120
- }
121
- setOriginalOrder(columns);
122
- }, [columns]);
123
- return (jsxRuntime.jsxs(react.Flex, { gap: 2, flexFlow: "column", children: [jsxRuntime.jsx(react.Flex, { gap: 2, flexFlow: "column", children: order.map((columnId, index) => (jsxRuntime.jsxs(react.Flex, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [jsxRuntime.jsx(react.IconButton, { onClick: () => {
124
- const prevIndex = index - 1;
125
- if (prevIndex >= 0) {
126
- handleChangeOrder(index, prevIndex);
127
- }
128
- }, disabled: index === 0, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowUpward, {}) }), table
129
- .getAllFlatColumns()
130
- .filter((column) => {
131
- return column.id === columnId;
132
- })
133
- .map((column) => {
134
- const displayName = column.columnDef.meta === undefined
135
- ? column.id
136
- : column.columnDef.meta.displayName;
137
- return jsxRuntime.jsx("span", { children: displayName }, column.id);
138
- }), jsxRuntime.jsx(react.IconButton, { onClick: () => {
139
- const nextIndex = index + 1;
140
- if (nextIndex < order.length) {
141
- handleChangeOrder(index, nextIndex);
142
- }
143
- }, disabled: index === order.length - 1, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowDownward, {}) })] }, columnId))) }), jsxRuntime.jsxs(react.Flex, { gap: "0.25rem", children: [jsxRuntime.jsx(react.Button, { onClick: () => {
144
- table.setColumnOrder(order);
145
- }, children: "Apply" }), jsxRuntime.jsx(react.Button, { onClick: () => {
146
- table.setColumnOrder(originalOrder);
147
- }, children: "Reset" })] })] }));
148
- };
149
- const TableOrderer = () => {
150
- const { table } = useDataTableContext();
151
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
152
- };
153
-
154
- const EditOrderButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineMoveDown, {}), title = "Change Order", }) => {
155
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(DialogRoot, { size: "cover", children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", children: [icon, " ", text] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsxs(DialogHeader, { children: [jsxRuntime.jsx(DialogTitle, {}), title] }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.25rem", children: jsxRuntime.jsx(TableOrderer, {}) }) }), jsxRuntime.jsx(DialogFooter, {})] })] }) }));
156
- };
157
-
158
135
  const TableSorter = () => {
159
136
  const { table } = useDataTableContext();
160
137
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: headerGroup.headers.map((header) => {
@@ -460,7 +437,7 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
460
437
  const FilterDialog = ({ icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
461
438
  const filterModal = react.useDisclosure();
462
439
  const { translate } = useDataTableContext();
463
- return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filterDialog.buttonText")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("filterDialog.title") }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, { text: translate.t("filterDialog.reset") }), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filterDialog.close") })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
440
+ return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filter_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("filter_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, { text: translate.t("filter_dialog.reset") }), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filter_dialog.close") })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
464
441
  };
465
442
 
466
443
  const MenuContent = React__namespace.forwardRef(function MenuContent(props, ref) {
@@ -2498,8 +2475,8 @@ react.CheckboxCard.Indicator;
2498
2475
  function ColumnCard({ columnId }) {
2499
2476
  const ref = React.useRef(null);
2500
2477
  const [dragging, setDragging] = React.useState(false); // NEW
2501
- const { table } = useDataTableContext();
2502
- const displayName = columnId;
2478
+ const { table, translate } = useDataTableContext();
2479
+ const displayName = translate.t(columnId);
2503
2480
  const column = table.getColumn(columnId);
2504
2481
  invariant(column);
2505
2482
  React.useEffect(() => {
@@ -2514,13 +2491,16 @@ function ColumnCard({ columnId }) {
2514
2491
  onDrop: () => setDragging(false), // NEW
2515
2492
  });
2516
2493
  }, [columnId, table]);
2517
- return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor: 'grab', children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "gray.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
2494
+ return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "colorPalette.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
2518
2495
  }
2519
2496
  function CardContainer({ location, children }) {
2520
2497
  const ref = React.useRef(null);
2521
2498
  const [isDraggedOver, setIsDraggedOver] = React.useState(false);
2522
2499
  React.useEffect(() => {
2523
2500
  const el = ref.current;
2501
+ if (el === null) {
2502
+ return;
2503
+ }
2524
2504
  invariant(el);
2525
2505
  return dropTargetForElements({
2526
2506
  element: el,
@@ -2592,7 +2572,7 @@ const TableViewer = () => {
2592
2572
  const ViewDialog = ({ icon = jsxRuntime.jsx(io.IoMdEye, {}) }) => {
2593
2573
  const viewModel = react.useDisclosure();
2594
2574
  const { translate } = useDataTableContext();
2595
- return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("viewDialog.buttonText")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("viewDialog.title") }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
2575
+ return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("view_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("view_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
2596
2576
  };
2597
2577
 
2598
2578
  const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
@@ -2643,7 +2623,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
2643
2623
  return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "null" });
2644
2624
  }
2645
2625
  return (jsxRuntime.jsx(react.Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
2646
- return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "gray.400", children: getColumn({ field }) }), typeof value === "object" ? (jsxRuntime.jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsxRuntime.jsx(react.Text, { children: JSON.stringify(value) }))] }, field));
2626
+ return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "colorPalette.400", children: getColumn({ field }) }), typeof value === "object" ? (jsxRuntime.jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsxRuntime.jsx(react.Text, { children: JSON.stringify(value) }))] }, field));
2647
2627
  }) }));
2648
2628
  };
2649
2629
 
@@ -2693,7 +2673,7 @@ const CellRenderer = ({ cell }) => {
2693
2673
  paddingY: 2,
2694
2674
  }, object: value })] }, cell.id));
2695
2675
  }
2696
- return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color: 'gray.400', children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2676
+ return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color: "colorPalette.400", children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2697
2677
  };
2698
2678
  const DataDisplay = ({ variant = "" }) => {
2699
2679
  const { table, translate } = useDataTableContext();
@@ -2868,6 +2848,22 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2868
2848
  setGlobalFilter,
2869
2849
  type: "client",
2870
2850
  translate,
2851
+ columns,
2852
+ sorting,
2853
+ setSorting,
2854
+ columnFilters,
2855
+ setColumnFilters,
2856
+ pagination,
2857
+ setPagination,
2858
+ rowSelection,
2859
+ setRowSelection,
2860
+ columnOrder,
2861
+ setColumnOrder,
2862
+ density,
2863
+ setDensity,
2864
+ columnVisibility,
2865
+ setColumnVisibility,
2866
+ data,
2871
2867
  }, children: children }));
2872
2868
  }
2873
2869
 
@@ -2936,90 +2932,25 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
2936
2932
  setGlobalFilter,
2937
2933
  type: "server",
2938
2934
  translate,
2935
+ columns,
2936
+ sorting,
2937
+ setSorting,
2938
+ columnFilters,
2939
+ setColumnFilters,
2940
+ pagination,
2941
+ setPagination,
2942
+ rowSelection,
2943
+ setRowSelection,
2944
+ columnOrder,
2945
+ setColumnOrder,
2946
+ density,
2947
+ setDensity,
2948
+ columnVisibility,
2949
+ setColumnVisibility,
2950
+ data: query.data?.data ?? [],
2939
2951
  }, children: jsxRuntime.jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
2940
2952
  }
2941
2953
 
2942
- const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
2943
- const { icon, children, inputProps, rootRef, ...rest } = props;
2944
- return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
2945
- });
2946
-
2947
- const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
2948
- const { table } = useDataTableContext();
2949
- const SELECTION_BOX_WIDTH = 20;
2950
- const [hoveredRow, setHoveredRow] = React.useState(-1);
2951
- const handleRowHover = (index) => {
2952
- setHoveredRow(index);
2953
- };
2954
- const getTdProps = (cell) => {
2955
- const tdProps = cell.column.getIsPinned()
2956
- ? {
2957
- left: showSelector
2958
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
2959
- : `${cell.column.getStart("left")}px`,
2960
- background: pinnedBgColor.light,
2961
- position: "sticky",
2962
- zIndex: -1,
2963
- _dark: {
2964
- backgroundColor: pinnedBgColor.dark,
2965
- },
2966
- }
2967
- : {};
2968
- return tdProps;
2969
- };
2970
- const getTrProps = ({ hoveredRow, index, }) => {
2971
- if (hoveredRow === -1) {
2972
- return {};
2973
- }
2974
- if (hoveredRow === index) {
2975
- return {
2976
- opacity: "1",
2977
- };
2978
- }
2979
- return {
2980
- opacity: "0.8",
2981
- };
2982
- };
2983
- return (jsxRuntime.jsx(react.Table.Body, { children: table.getRowModel().rows.map((row, index) => {
2984
- return (jsxRuntime.jsxs(react.Table.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
2985
- return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`,
2986
- // styling resize and pinning start
2987
- flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, backgroundColor: "white", ...getTdProps(cell), _dark: {
2988
- backgroundColor: "gray.950",
2989
- }, children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
2990
- })] }, `chakra-table-row-${row.id}`));
2991
- }) }));
2992
- };
2993
- const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
2994
- const { table } = useDataTableContext();
2995
- const SELECTION_BOX_WIDTH = 20;
2996
- const isCheckBoxVisible = (current_index, current_row) => {
2997
- if (alwaysShowSelector) {
2998
- return true;
2999
- }
3000
- if (current_row.getIsSelected()) {
3001
- return true;
3002
- }
3003
- if (hoveredRow == current_index) {
3004
- return true;
3005
- }
3006
- return false;
3007
- };
3008
- return (jsxRuntime.jsxs(react.Table.Cell, { padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
3009
- ? {
3010
- left: `0px`,
3011
- backgroundColor: pinnedBgColor.light,
3012
- position: "sticky",
3013
- zIndex: 1,
3014
- _dark: { backgroundColor: pinnedBgColor.dark },
3015
- }
3016
- : {}),
3017
- // styling resize and pinning end
3018
- display: "grid", children: [!isCheckBoxVisible(index, row) && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` })), isCheckBoxVisible(index, row) && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: row.getIsSelected(),
3019
- disabled: !row.getCanSelect(),
3020
- onChange: row.getToggleSelectedHandler() }) }))] }));
3021
- };
3022
-
3023
2954
  const Tooltip = React__namespace.forwardRef(function Tooltip(props, ref) {
3024
2955
  const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
3025
2956
  if (disabled)
@@ -3098,16 +3029,89 @@ const TableFilterTags = () => {
3098
3029
  }) }));
3099
3030
  };
3100
3031
 
3101
- const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, }) => {
3032
+ const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
3102
3033
  const { translate } = useDataTableContext();
3103
- return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr auto", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("hasError"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
3034
+ return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("has_error"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
3104
3035
  return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(FilterOptions, { column: column })] }, column));
3105
- }) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", backgroundColor: "gray.50", _dark: {
3106
- backgroundColor: "gray.900",
3107
- }, children: children }), jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] })] }));
3036
+ }) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
3037
+ };
3038
+
3039
+ const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
3040
+ const { title, description, icon, children, ...rest } = props;
3041
+ return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
3042
+ });
3043
+
3044
+ const EmptyResult = (jsxRuntime.jsx(EmptyState, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
3045
+ const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
3046
+ const { table } = useDataTableContext();
3047
+ if (table.getRowModel().rows.length <= 0) {
3048
+ return emptyComponent;
3049
+ }
3050
+ return (jsxRuntime.jsx(react.Table.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 }));
3051
+ };
3052
+
3053
+ const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
3054
+ const { icon, children, inputProps, rootRef, ...rest } = props;
3055
+ return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
3056
+ });
3057
+
3058
+ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
3059
+ "use no memo";
3060
+ const { table } = useDataTableContext();
3061
+ const SELECTION_BOX_WIDTH = 20;
3062
+ const [hoveredRow, setHoveredRow] = React.useState(-1);
3063
+ const handleRowHover = (index) => {
3064
+ setHoveredRow(index);
3065
+ };
3066
+ const getTdProps = (cell) => {
3067
+ const tdProps = cell.column.getIsPinned()
3068
+ ? {
3069
+ left: showSelector
3070
+ ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3071
+ : `${cell.column.getStart("left")}px`,
3072
+ position: "relative",
3073
+ }
3074
+ : {};
3075
+ return tdProps;
3076
+ };
3077
+ const getTrProps = ({ hoveredRow, index, }) => {
3078
+ if (hoveredRow === -1) {
3079
+ return {};
3080
+ }
3081
+ if (hoveredRow === index) {
3082
+ return {
3083
+ opacity: "1",
3084
+ };
3085
+ }
3086
+ return {
3087
+ opacity: "0.8",
3088
+ };
3089
+ };
3090
+ return (jsxRuntime.jsx(react.Table.Body, { children: table.getRowModel().rows.map((row, index) => {
3091
+ return (jsxRuntime.jsxs(react.Table.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
3092
+ return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`,
3093
+ // styling resize and pinning start
3094
+ flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, color: {
3095
+ base: "colorPalette.900",
3096
+ _dark: "colorPalette.100",
3097
+ },
3098
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
3099
+ })] }, `chakra-table-row-${row.id}`));
3100
+ }) }));
3101
+ };
3102
+ const TableRowSelector = ({ index, row, }) => {
3103
+ const { table } = useDataTableContext();
3104
+ const SELECTION_BOX_WIDTH = 20;
3105
+ return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3106
+ base: "colorPalette.900",
3107
+ _dark: "colorPalette.100",
3108
+ },
3109
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
3110
+ disabled: !row.getCanSelect(),
3111
+ onCheckedChange: row.getToggleSelectedHandler() }) }));
3108
3112
  };
3109
3113
 
3110
- const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
3114
+ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
3111
3115
  const table = useDataTableContext().table;
3112
3116
  const SELECTION_BOX_WIDTH = 20;
3113
3117
  const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
@@ -3126,78 +3130,28 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
3126
3130
  }
3127
3131
  return false;
3128
3132
  };
3129
- const getThProps = (header) => {
3130
- const thProps = header.column.getIsPinned()
3131
- ? {
3132
- left: showSelector
3133
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3134
- : `${header.getStart("left") + table.getDensityValue() * 2}px`,
3135
- background: pinnedBgColor.light,
3136
- position: "sticky",
3137
- zIndex: 1,
3138
- _dark: {
3139
- backgroundColor: pinnedBgColor.dark,
3140
- },
3141
- }
3142
- : {};
3143
- return thProps;
3144
- };
3145
- return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header
3146
- // styling resize and pinning start
3147
- , {
3148
- // styling resize and pinning start
3149
- padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
3150
- ? {
3151
- left: `0px`,
3152
- backgroundColor: pinnedBgColor.light,
3153
- position: "sticky",
3154
- zIndex: 1,
3155
- _dark: { backgroundColor: pinnedBgColor.dark },
3156
- }
3157
- : {}),
3158
- // styling resize and pinning end
3159
- onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3133
+ return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3160
3134
  // indeterminate: table.getIsSomeRowsSelected(),
3161
3135
  onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.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) => (jsxRuntime.jsx(react.Table.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
3162
3136
  // styling resize and pinning start
3163
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3137
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3164
3138
  ? null
3165
3139
  : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
3166
3140
  // <UpDownIcon />
3167
3141
  jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3168
3142
  };
3169
3143
 
3170
- const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, isSticky = true, alwaysShowSelector = true, tHeadProps = {}, }) => {
3144
+ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
3171
3145
  const { table } = useDataTableContext();
3172
3146
  const SELECTION_BOX_WIDTH = 20;
3173
- const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
3174
- const handleRowHover = (isHovered) => {
3175
- setHoveredCheckBox(isHovered);
3176
- };
3177
- const isCheckBoxVisible = () => {
3178
- if (alwaysShowSelector) {
3179
- return true;
3180
- }
3181
- if (table.getIsAllRowsSelected()) {
3182
- return true;
3183
- }
3184
- if (hoveredCheckBox) {
3185
- return true;
3186
- }
3187
- return false;
3188
- };
3189
3147
  const getThProps = (header) => {
3190
3148
  const thProps = header.column.getIsPinned()
3191
3149
  ? {
3192
3150
  left: showSelector
3193
3151
  ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3194
3152
  : `${header.getStart("left")}px`,
3195
- background: pinnedBgColor.light,
3196
3153
  position: "sticky",
3197
3154
  zIndex: 100 + 1,
3198
- _dark: {
3199
- backgroundColor: pinnedBgColor.dark,
3200
- },
3201
3155
  }
3202
3156
  : {};
3203
3157
  return thProps;
@@ -3206,21 +3160,13 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3206
3160
  position: "sticky",
3207
3161
  top: 0,
3208
3162
  };
3209
- return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), ...tHeadProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.ColumnHeader
3210
- // styling resize and pinning start
3211
- , { ...(table.getIsSomeColumnsPinned("left")
3212
- ? {
3213
- left: `0px`,
3214
- backgroundColor: pinnedBgColor.light,
3215
- position: "sticky",
3216
- zIndex: 1,
3217
- _dark: { backgroundColor: pinnedBgColor.dark },
3218
- }
3219
- : {}),
3220
- // styling resize and pinning end
3221
- padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3222
- // indeterminate: table.getIsSomeRowsSelected(),
3223
- onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.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) => {
3163
+ return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3164
+ base: "colorPalette.900",
3165
+ _dark: "colorPalette.100",
3166
+ },
3167
+ bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
3168
+ // indeterminate: table.getIsSomeRowsSelected(),
3169
+ onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
3224
3170
  const resizeProps = {
3225
3171
  onMouseDown: header.getResizeHandler(),
3226
3172
  onTouchStart: header.getResizeHandler(),
@@ -3228,10 +3174,24 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3228
3174
  };
3229
3175
  return (jsxRuntime.jsxs(react.Table.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
3230
3176
  // styling resize and pinning start
3231
- flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", _hover: {
3232
- backgroundColor: "gray.100",
3233
- _dark: {
3234
- backgroundColor: "gray.700",
3177
+ flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
3178
+ base: "colorPalette.800",
3179
+ _dark: "colorPalette.200",
3180
+ },
3181
+ bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
3182
+ base: "colorPalette.800",
3183
+ _dark: "colorPalette.200",
3184
+ _hover: {
3185
+ base: "colorPalette.700",
3186
+ _dark: "colorPalette.300",
3187
+ },
3188
+ },
3189
+ bg: {
3190
+ base: "colorPalette.100",
3191
+ _dark: "colorPalette.900",
3192
+ _hover: {
3193
+ base: "colorPalette.200",
3194
+ _dark: "colorPalette.800",
3235
3195
  },
3236
3196
  }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3237
3197
  ? null
@@ -3259,29 +3219,17 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
3259
3219
  });
3260
3220
  }, children: [jsxRuntime.jsx(gr.GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3261
3221
  header.column.clearSorting();
3262
- }, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.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: {
3222
+ }, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3223
+ ? "colorPalette.700"
3224
+ : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3263
3225
  borderRightColor: header.column.getIsResizing()
3264
- ? "gray.700"
3265
- : "gray.400",
3226
+ ? "colorPalette.700"
3227
+ : "colorPalette.400",
3266
3228
  }, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
3267
3229
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
3268
3230
  };
3269
3231
 
3270
- const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
3271
- const { title, description, icon, children, ...rest } = props;
3272
- return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
3273
- });
3274
-
3275
- const EmptyResult = (jsxRuntime.jsx(EmptyState, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
3276
- const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
3277
- const { table } = useDataTableContext();
3278
- if (table.getRowModel().rows.length <= 0) {
3279
- return emptyComponent;
3280
- }
3281
- return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
3282
- };
3283
-
3284
- const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
3232
+ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, tableFooterProps = {}, controlProps = {}, variant = "", }) => {
3285
3233
  if (variant === "greedy") {
3286
3234
  return (jsxRuntime.jsx(TableControls, { ...controlProps, children: jsxRuntime.jsxs(Table, { canResize: false, ...{ ...tableProps }, children: [jsxRuntime.jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsxRuntime.jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsxRuntime.jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
3287
3235
  }
@@ -3541,6 +3489,73 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
3541
3489
  return columns;
3542
3490
  };
3543
3491
 
3492
+ const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
3493
+ const { table, columns, translate, data } = useDataTableContext();
3494
+ const columnDef = table._getColumnDefs();
3495
+ console.log(columnDef, "glp");
3496
+ console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
3497
+ const columnsMap = Object.fromEntries(columns.map((def) => {
3498
+ const { accessorKey, id } = def;
3499
+ if (accessorKey) {
3500
+ return [accessorKey, def];
3501
+ }
3502
+ return [id, def];
3503
+ }));
3504
+ const columnHeaders = Object.keys(columnsMap);
3505
+ const totalWidths = columns
3506
+ .map(({ size }) => {
3507
+ if (!!size === false) {
3508
+ return 0;
3509
+ }
3510
+ if (typeof size === "number") {
3511
+ return size;
3512
+ }
3513
+ return 0;
3514
+ })
3515
+ .reduce((previous, current) => previous + current, 0);
3516
+ const columnWidths = columns
3517
+ .map(({ size }) => {
3518
+ if (!!size === false) {
3519
+ return "1fr";
3520
+ }
3521
+ return `minmax(${size}px, ${(size / totalWidths) * 100}%)`;
3522
+ })
3523
+ .join(" ");
3524
+ console.log({ columnWidths }, "hadfg");
3525
+ const cellProps = {
3526
+ flex: "1 0 0%",
3527
+ overflow: "auto",
3528
+ paddingX: "2",
3529
+ py: "1",
3530
+ color: { base: "colorPalette.900", _dark: "colorPalette.100" },
3531
+ bgColor: { base: "colorPalette.50", _dark: "colorPalette.950" },
3532
+ borderBottomColor: { base: "colorPalette.200", _dark: "colorPalette.800" },
3533
+ borderBottomWidth: "1px",
3534
+ ...{ colorPalette },
3535
+ };
3536
+ if (data.length <= 0) {
3537
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: emptyComponent });
3538
+ }
3539
+ return (jsxRuntime.jsxs(react.Grid, { templateColumns: `${columnWidths}`, overflow: "auto", borderWidth: "1px", color: { base: "colorPalette.900", _dark: "colorPalette.100" }, borderColor: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: [jsxRuntime.jsx(react.Grid, { templateColumns: `${columnWidths}`, column: `1/span ${columns.length}`, bg: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: columnHeaders.map((header) => {
3540
+ return (jsxRuntime.jsx(react.Box, { flex: "1 0 0%", paddingX: "2", py: "1", overflow: "auto", textOverflow: "ellipsis", children: translate.t(`column_header.${header}`) }));
3541
+ }) }), data.map((record) => {
3542
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: columnHeaders.map((header) => {
3543
+ const { cell } = columnsMap[header];
3544
+ const value = record[header];
3545
+ if (!!record === false) {
3546
+ return (jsxRuntime.jsx(react.Box, { ...cellProps, children: translate.t(`column_cell.placeholder`) }));
3547
+ }
3548
+ if (cell) {
3549
+ return (jsxRuntime.jsx(react.Box, { ...cellProps, children: cell({ row: { original: record } }) }));
3550
+ }
3551
+ if (typeof value === "object") {
3552
+ return (jsxRuntime.jsx(react.Box, { ...cellProps, children: jsxRuntime.jsx(RecordDisplay, { object: value }) }));
3553
+ }
3554
+ return jsxRuntime.jsx(react.Box, { ...cellProps, children: value });
3555
+ }) }));
3556
+ })] }));
3557
+ };
3558
+
3544
3559
  const AccordionItemTrigger = React__namespace.forwardRef(function AccordionItemTrigger(props, ref) {
3545
3560
  const { children, indicatorPlacement = "end", ...rest } = props;
3546
3561
  return (jsxRuntime.jsxs(react.Accordion.ItemTrigger, { ...rest, ref: ref, children: [indicatorPlacement === "start" && (jsxRuntime.jsx(react.Accordion.ItemIndicator, { rotate: { base: "-90deg", _open: "0deg" }, children: jsxRuntime.jsx(lu.LuChevronDown, {}) })), jsxRuntime.jsx(react.HStack, { gap: "4", flex: "1", textAlign: "start", width: "full", children: children }), indicatorPlacement === "end" && (jsxRuntime.jsx(react.Accordion.ItemIndicator, { children: jsxRuntime.jsx(lu.LuChevronDown, {}) }))] }));
@@ -3636,7 +3651,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
3636
3651
  const isRequired = required?.some((columnId) => columnId === column);
3637
3652
  const { formState: { errors }, setValue, watch, } = reactHookForm.useFormContext();
3638
3653
  const fields = (watch(colLabel) ?? []);
3639
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaRenderer, { column: `${index}`,
3654
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaRenderer, { column: `${index}`,
3640
3655
  prefix: `${colLabel}.`,
3641
3656
  schema: items }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { variant: "ghost", onClick: () => {
3642
3657
  setValue(colLabel, fields.filter((_, curIndex) => {
@@ -3656,7 +3671,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
3656
3671
  return;
3657
3672
  }
3658
3673
  setValue(colLabel, [...fields, {}]);
3659
- }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3674
+ }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3660
3675
  };
3661
3676
 
3662
3677
  const Field = React__namespace.forwardRef(function Field(props, ref) {
@@ -3671,10 +3686,22 @@ const BooleanPicker = ({ schema, column, prefix }) => {
3671
3686
  const isRequired = required?.some((columnId) => columnId === column);
3672
3687
  const colLabel = `${prefix}${column}`;
3673
3688
  const value = watch(colLabel);
3674
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3689
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3675
3690
  gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
3676
3691
  setValue(colLabel, !value);
3677
- } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3692
+ } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3693
+ };
3694
+
3695
+ const CustomInput = ({ column, schema, prefix }) => {
3696
+ const formContext = reactHookForm.useFormContext();
3697
+ const { inputRender } = schema;
3698
+ return (inputRender &&
3699
+ inputRender({
3700
+ column,
3701
+ schema,
3702
+ prefix,
3703
+ formContext,
3704
+ }));
3678
3705
  };
3679
3706
 
3680
3707
  const monthNamesShort = [
@@ -3764,27 +3791,54 @@ const PopoverRoot = react.Popover.Root;
3764
3791
  const PopoverBody = react.Popover.Body;
3765
3792
  const PopoverTrigger = react.Popover.Trigger;
3766
3793
 
3794
+ dayjs.extend(utc);
3767
3795
  const DatePicker = ({ column, schema, prefix }) => {
3768
3796
  const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
3769
3797
  const { translate } = useSchemaContext();
3770
- const { required, gridColumn, gridRow } = schema;
3798
+ const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", dateFormat = "YYYY-MM-DD[T]HH:mm:ss[Z]", } = schema;
3771
3799
  const isRequired = required?.some((columnId) => columnId === column);
3772
3800
  const colLabel = `${prefix}${column}`;
3773
3801
  const [open, setOpen] = React.useState(false);
3774
3802
  const selectedDate = watch(colLabel);
3775
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3776
- gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsx(Button, { size: "sm", variant: "outline", onClick: () => {
3803
+ const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
3804
+ React.useEffect(() => {
3805
+ try {
3806
+ if (selectedDate) {
3807
+ // Parse the selectedDate as UTC or in a specific timezone to avoid +8 hour shift
3808
+ // For example, parse as UTC:
3809
+ const parsedDate = dayjs.utc(selectedDate);
3810
+ // Or if you want to parse in local timezone without shifting:
3811
+ // const parsedDate = dayjs.tz(selectedDate, dayjs.tz.guess());
3812
+ if (!parsedDate.isValid())
3813
+ return;
3814
+ // Format according to dateFormat from schema
3815
+ const formatted = parsedDate.format(dateFormat);
3816
+ // Update the form value only if different to avoid loops
3817
+ if (formatted !== selectedDate) {
3818
+ setValue(colLabel, formatted, {
3819
+ shouldValidate: true,
3820
+ shouldDirty: true,
3821
+ });
3822
+ }
3823
+ }
3824
+ }
3825
+ catch (e) {
3826
+ console.error(e);
3827
+ }
3828
+ }, [selectedDate, dateFormat, colLabel, setValue]);
3829
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3830
+ gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
3777
3831
  setOpen(true);
3778
- }, children: selectedDate !== undefined ? selectedDate : "" }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
3832
+ }, justifyContent: "start", children: [jsxRuntime.jsx(md.MdDateRange, {}), selectedDate !== undefined ? `${displayDate}` : ""] }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
3779
3833
  // @ts-expect-error TODO: find appropriate types
3780
3834
  , {
3781
3835
  // @ts-expect-error TODO: find appropriate types
3782
3836
  selected: new Date(selectedDate),
3783
3837
  // @ts-expect-error TODO: find appropriate types
3784
3838
  onDateSelected: ({ date }) => {
3785
- setValue(colLabel, dayjs(date).format("YYYY-MM-DD"));
3839
+ setValue(colLabel, dayjs(date).format(dateFormat));
3786
3840
  setOpen(false);
3787
- } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3841
+ } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3788
3842
  };
3789
3843
 
3790
3844
  function filterArray(array, searchTerm) {
@@ -3800,7 +3854,7 @@ function filterArray(array, searchTerm) {
3800
3854
  const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3801
3855
  const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
3802
3856
  const { translate } = useSchemaContext();
3803
- const { required } = schema;
3857
+ const { required, variant } = schema;
3804
3858
  const isRequired = required?.some((columnId) => columnId === column);
3805
3859
  const { gridColumn, gridRow, renderDisplay } = schema;
3806
3860
  const [searchText, setSearchText] = React.useState();
@@ -3817,25 +3871,40 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3817
3871
  setSearchText(event.target.value);
3818
3872
  setLimit(10);
3819
3873
  };
3820
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3874
+ if (variant === "radio") {
3875
+ return (jsxRuntime.jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3876
+ gridRow, children: jsxRuntime.jsx(react.RadioGroup.Root, { defaultValue: "1", children: jsxRuntime.jsx(react.HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
3877
+ return (jsxRuntime.jsxs(react.RadioGroup.Item, { onClick: () => {
3878
+ if (!isMultiple) {
3879
+ setOpenSearchResult(false);
3880
+ setValue(colLabel, item);
3881
+ return;
3882
+ }
3883
+ const newSet = new Set([...(watchEnums ?? []), item]);
3884
+ setValue(colLabel, [...newSet]);
3885
+ }, value: item, children: [jsxRuntime.jsx(react.RadioGroup.ItemHiddenInput, {}), jsxRuntime.jsx(react.RadioGroup.ItemIndicator, {}), jsxRuntime.jsx(react.RadioGroup.ItemText, { children: !!renderDisplay === true
3886
+ ? renderDisplay(item)
3887
+ : translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
3888
+ }) }) }) }));
3889
+ }
3890
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3821
3891
  gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
3822
3892
  const item = enumValue;
3823
3893
  if (item === undefined) {
3824
3894
  return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "undefined" });
3825
3895
  }
3826
3896
  return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
3827
- // setSelectedEnums((state) => state.filter((id) => id != item));
3828
3897
  setValue(column, watchEnums.filter((id) => id != item));
3829
3898
  }, children: !!renderDisplay === true
3830
3899
  ? renderDisplay(item)
3831
3900
  : translate.t(removeIndex(`${colLabel}.${item}`)) }));
3832
3901
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
3833
3902
  setOpenSearchResult(true);
3834
- }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3903
+ }, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3835
3904
  setOpenSearchResult(true);
3836
- }, children: watchEnum === undefined
3905
+ }, justifyContent: "start", children: watchEnum === undefined
3837
3906
  ? ""
3838
- : translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.typeToSearch`), onChange: (event) => {
3907
+ : translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.type_to_search`), onChange: (event) => {
3839
3908
  onSearchChange(event);
3840
3909
  setOpenSearchResult(true);
3841
3910
  }, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(react.Text, { children: `${translate.t(`${column}.total`)}: ${count}, ${translate.t(`${column}.showing`)} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children: filterArray(dataList, searchText ?? "").map((item) => {
@@ -3850,10 +3919,10 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3850
3919
  }
3851
3920
  const newSet = new Set([...(watchEnums ?? []), item]);
3852
3921
  setValue(colLabel, [...newSet]);
3853
- }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
3922
+ }, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
3854
3923
  ? renderDisplay(item)
3855
3924
  : translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
3856
- }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3925
+ }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
3857
3926
  };
3858
3927
 
3859
3928
  function isEnteringWindow(_ref) {
@@ -4205,7 +4274,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
4205
4274
  const filesArray = [...event.target.files];
4206
4275
  onDrop({ files: filesArray });
4207
4276
  };
4208
- return (jsxRuntime.jsxs(react.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 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(react.Flex, { children: placeholder }), jsxRuntime.jsx(react.Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
4277
+ return (jsxRuntime.jsxs(react.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 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(react.Flex, { children: placeholder }), jsxRuntime.jsx(react.Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
4209
4278
  };
4210
4279
 
4211
4280
  const FilePicker = ({ column, schema, prefix }) => {
@@ -4215,7 +4284,7 @@ const FilePicker = ({ column, schema, prefix }) => {
4215
4284
  const isRequired = required?.some((columnId) => columnId === column);
4216
4285
  const currentFiles = (watch(column) ?? []);
4217
4286
  const colLabel = `${prefix}${column}`;
4218
- return (jsxRuntime.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: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4287
+ return (jsxRuntime.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: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4219
4288
  const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4220
4289
  setValue(colLabel, [...currentFiles, ...newFiles]);
4221
4290
  }, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
@@ -4223,8 +4292,8 @@ const FilePicker = ({ column, schema, prefix }) => {
4223
4292
  setValue(column, currentFiles.filter(({ name }) => {
4224
4293
  return name !== file.name;
4225
4294
  }));
4226
- }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4227
- }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4295
+ }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4296
+ }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4228
4297
  };
4229
4298
 
4230
4299
  const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
@@ -4339,9 +4408,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4339
4408
  if (record === undefined) {
4340
4409
  return "";
4341
4410
  }
4411
+ if (!!renderDisplay === true) {
4412
+ return renderDisplay(record);
4413
+ }
4342
4414
  return record[display_column];
4343
4415
  };
4344
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.fieldLabel`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4416
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.field_label`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4345
4417
  gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
4346
4418
  const item = idMap[id];
4347
4419
  if (item === undefined) {
@@ -4354,9 +4426,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4354
4426
  : item[display_column] }, id));
4355
4427
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
4356
4428
  setOpenSearchResult(true);
4357
- }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4429
+ }, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4358
4430
  setOpenSearchResult(true);
4359
- }, children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.typeToSearch`)), onChange: (event) => {
4431
+ }, justifyContent: "start", children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: (event) => {
4360
4432
  onSearchChange(event);
4361
4433
  setOpenSearchResult(true);
4362
4434
  }, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isFetching && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isFetching" }), isLoading && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isLoading" }), isPending && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isPending" }), (isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, {}), isError && (jsxRuntime.jsx(react.Icon, { color: "red.400", children: jsxRuntime.jsx(bi.BiError, {}) })), jsxRuntime.jsx(react.Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children:
@@ -4376,10 +4448,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4376
4448
  item[column_ref],
4377
4449
  ]);
4378
4450
  setValue(colLabel, [...newSet]);
4379
- }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
4451
+ }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
4452
+ ? { color: "colorPalette.400/50" }
4453
+ : {}), children: !!renderDisplay === true
4380
4454
  ? renderDisplay(item)
4381
4455
  : item[display_column] }, item[column_ref]));
4382
- }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), count > 0 && jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4456
+ }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), count > 0 && jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4383
4457
  };
4384
4458
 
4385
4459
  const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
@@ -4397,9 +4471,9 @@ const NumberInputField = ({ schema, column, prefix, }) => {
4397
4471
  const isRequired = required?.some((columnId) => columnId === column);
4398
4472
  const colLabel = `${prefix}${column}`;
4399
4473
  const value = watch(`${colLabel}`);
4400
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
4474
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
4401
4475
  setValue(`${colLabel}`, Number(event.target.value));
4402
- } }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4476
+ } }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4403
4477
  };
4404
4478
 
4405
4479
  const ObjectInput = ({ schema, column, prefix }) => {
@@ -4411,13 +4485,13 @@ const ObjectInput = ({ schema, column, prefix }) => {
4411
4485
  if (properties === undefined) {
4412
4486
  throw new Error(`properties is undefined when using ObjectInput`);
4413
4487
  }
4414
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4488
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4415
4489
  return (
4416
4490
  // @ts-expect-error find suitable types
4417
4491
  jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
4418
4492
  prefix: `${prefix}${column}.`,
4419
4493
  properties }, `form-${colLabel}-${key}`));
4420
- }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4494
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4421
4495
  };
4422
4496
 
4423
4497
  const RecordInput$1 = ({ column, schema, prefix }) => {
@@ -4429,7 +4503,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
4429
4503
  const [showNewEntries, setShowNewEntries] = React.useState(false);
4430
4504
  const [newKey, setNewKey] = React.useState();
4431
4505
  const [newValue, setNewValue] = React.useState();
4432
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4506
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4433
4507
  return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
4434
4508
  const filtered = entries.filter(([target]) => {
4435
4509
  return target !== key;
@@ -4469,7 +4543,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
4469
4543
  setShowNewEntries(true);
4470
4544
  setNewKey(undefined);
4471
4545
  setNewValue(undefined);
4472
- }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4546
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4473
4547
  };
4474
4548
 
4475
4549
  const StringInputField = ({ column, schema, prefix, }) => {
@@ -4478,7 +4552,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
4478
4552
  const { required, gridColumn, gridRow } = schema;
4479
4553
  const isRequired = required?.some((columnId) => columnId === column);
4480
4554
  const colLabel = `${prefix}${column}`;
4481
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
4555
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4482
4556
  };
4483
4557
 
4484
4558
  const RadioCardItem = React__namespace.forwardRef(function RadioCardItem(props, ref) {
@@ -4576,9 +4650,124 @@ const TagPicker = ({ column, schema, prefix }) => {
4576
4650
  }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4577
4651
  };
4578
4652
 
4653
+ const TextAreaInput = ({ column, schema, prefix, }) => {
4654
+ const { register, formState: { errors }, } = reactHookForm.useFormContext();
4655
+ const { translate } = useSchemaContext();
4656
+ const { required, gridColumn, gridRow } = schema;
4657
+ const isRequired = required?.some((columnId) => columnId === column);
4658
+ const colLabel = `${prefix}${column}`;
4659
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Textarea, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4660
+ };
4661
+
4662
+ function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
4663
+ am: "am",
4664
+ pm: "pm",
4665
+ }, onChange = () => { }, }) {
4666
+ const hours = Array.from({ length: 12 }, (_, i) => {
4667
+ const hour = i + 1;
4668
+ return hour.toString().padStart(2, "0");
4669
+ });
4670
+ const minutes = Array.from({ length: 60 }, (_, i) => {
4671
+ return i.toString().padStart(2, "0");
4672
+ });
4673
+ const hoursCollection = react.createListCollection({
4674
+ items: hours.map((hour) => ({
4675
+ value: hour,
4676
+ label: hour,
4677
+ })),
4678
+ });
4679
+ const minutesCollection = react.createListCollection({
4680
+ items: minutes.map((hour) => ({
4681
+ value: hour,
4682
+ label: hour,
4683
+ })),
4684
+ });
4685
+ const meridiemsCollection = react.createListCollection({
4686
+ items: ["am", "pm"].map((hour) => ({
4687
+ value: hour,
4688
+ label: meridiemLabel[hour] ?? hour,
4689
+ })),
4690
+ });
4691
+ return (jsxRuntime.jsxs(react.Grid, { templateColumns: "auto auto", gap: "4", children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "center", alignItems: "center", gap: "2", children: [jsxRuntime.jsxs(react.Select.Root, { value: [`${hour.toString().padStart(2, "0")}`], onValueChange: (e) => {
4692
+ setHour(parseInt(e.value[0]));
4693
+ onChange({ hour: parseInt(e.value[0]), minute, meridiem });
4694
+ }, collection: hoursCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Hour" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: hoursCollection.items.map(({ value: hour }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [hour, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] }), jsxRuntime.jsx(react.Text, { children: ":" }), jsxRuntime.jsxs(react.Select.Root, { value: [`${minute.toString().padStart(2, "0")}`], onValueChange: (e) => {
4695
+ setMinute(parseInt(e.value[0]));
4696
+ onChange({ hour, minute: parseInt(e.value[0]), meridiem });
4697
+ }, collection: minutesCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Minute" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: minutes.map((minute) => (jsxRuntime.jsxs(react.Select.Item, { item: minute, children: [minute, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, minute))) }) })] })] }), jsxRuntime.jsxs(react.Select.Root, { value: [meridiem], onValueChange: (e) => {
4698
+ setMeridiem(e.value[0]);
4699
+ onChange({ hour, minute, meridiem: e.value[0] });
4700
+ }, collection: meridiemsCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "am/pm" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: meridiemsCollection.items.map(({ value: hour, label }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [label, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] })] }));
4701
+ }
4702
+
4703
+ const TimePicker = ({ column, schema, prefix }) => {
4704
+ const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
4705
+ const { translate } = useSchemaContext();
4706
+ const { required, gridColumn, gridRow } = schema;
4707
+ const isRequired = required?.some((columnId) => columnId === column);
4708
+ const colLabel = `${prefix}${column}`;
4709
+ const [open, setOpen] = React.useState(false);
4710
+ const value = watch(colLabel);
4711
+ const formatedTime = dayjs(value).format("hh:mm A");
4712
+ // Parse the initial time parts from the ISO time string (HH:mm:ss)
4713
+ const parseTime = (isoTime) => {
4714
+ if (!isoTime)
4715
+ return { hour: 12, minute: 0, meridiem: "am" };
4716
+ const parsed = dayjs(isoTime);
4717
+ if (!parsed.isValid())
4718
+ return { hour: 12, minute: 0, meridiem: "am" };
4719
+ let hour = parsed.hour();
4720
+ const minute = parsed.minute();
4721
+ const meridiem = hour >= 12 ? "pm" : "am";
4722
+ if (hour === 0)
4723
+ hour = 12;
4724
+ else if (hour > 12)
4725
+ hour -= 12;
4726
+ return { hour, minute, meridiem };
4727
+ };
4728
+ const initialTime = parseTime(value);
4729
+ const [hour, setHour] = React.useState(initialTime.hour);
4730
+ const [minute, setMinute] = React.useState(initialTime.minute);
4731
+ const [meridiem, setMeridiem] = React.useState(initialTime.meridiem);
4732
+ React.useEffect(() => {
4733
+ const { hour, minute, meridiem } = parseTime(value);
4734
+ setHour(hour);
4735
+ setMinute(minute);
4736
+ setMeridiem(meridiem);
4737
+ }, [value]);
4738
+ // Convert hour, minute, meridiem to 24-hour ISO time string
4739
+ const toIsoTime = (hour, minute, meridiem) => {
4740
+ let h = hour;
4741
+ if (meridiem === "am" && hour === 12)
4742
+ h = 0;
4743
+ else if (meridiem === "pm" && hour < 12)
4744
+ h = hour + 12;
4745
+ return dayjs().hour(h).minute(minute).second(0).toISOString();
4746
+ };
4747
+ // Handle changes to time parts
4748
+ const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
4749
+ setHour(newHour);
4750
+ setMinute(newMinute);
4751
+ setMeridiem(newMeridiem);
4752
+ const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
4753
+ setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
4754
+ };
4755
+ const containerRef = React.useRef(null);
4756
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4757
+ gridRow, children: [jsxRuntime.jsxs(react.Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(react.Popover.Trigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
4758
+ setOpen(true);
4759
+ }, justifyContent: "start", children: [jsxRuntime.jsx(io.IoMdClock, {}), value !== undefined ? `${formatedTime}` : ""] }) }), jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsx(react.Popover.Content, { ref: containerRef, children: jsxRuntime.jsx(react.Popover.Body, { children: jsxRuntime.jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
4760
+ am: translate.t(removeIndex(`${colLabel}.am`)),
4761
+ pm: translate.t(removeIndex(`${colLabel}.pm`)),
4762
+ } }) }) }) }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4763
+ };
4764
+
4579
4765
  const SchemaRenderer = ({ schema, prefix, column, }) => {
4580
4766
  const colSchema = schema;
4581
4767
  const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4768
+ if (variant === "custom-input") {
4769
+ return jsxRuntime.jsx(CustomInput, { schema: colSchema, prefix, column });
4770
+ }
4582
4771
  if (type === "string") {
4583
4772
  if ((schema.enum ?? []).length > 0) {
4584
4773
  return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
@@ -4590,6 +4779,12 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
4590
4779
  if (variant === "date-picker") {
4591
4780
  return jsxRuntime.jsx(DatePicker, { schema: colSchema, prefix, column });
4592
4781
  }
4782
+ if (variant === "time-picker") {
4783
+ return jsxRuntime.jsx(TimePicker, { schema: colSchema, prefix, column });
4784
+ }
4785
+ if (variant === "text-area") {
4786
+ return jsxRuntime.jsx(TextAreaInput, { schema: colSchema, prefix, column });
4787
+ }
4593
4788
  return jsxRuntime.jsx(StringInputField, { schema: colSchema, prefix, column });
4594
4789
  }
4595
4790
  if (type === "number" || type === "integer") {
@@ -4642,9 +4837,9 @@ const ArrayViewer = ({ schema, column, prefix }) => {
4642
4837
  const isRequired = required?.some((columnId) => columnId === column);
4643
4838
  const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4644
4839
  const values = watch(colLabel) ?? [];
4645
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), values.map((field, index) => (jsxRuntime.jsx(react.Flex, { flexFlow: "column", children: jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaViewer, { column: `${index}`,
4840
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), values.map((field, index) => (jsxRuntime.jsx(react.Flex, { flexFlow: "column", children: jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaViewer, { column: `${index}`,
4646
4841
  prefix: `${colLabel}.`,
4647
- schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4842
+ schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4648
4843
  };
4649
4844
 
4650
4845
  const BooleanViewer = ({ schema, column, prefix, }) => {
@@ -4654,21 +4849,34 @@ const BooleanViewer = ({ schema, column, prefix, }) => {
4654
4849
  const isRequired = required?.some((columnId) => columnId === column);
4655
4850
  const colLabel = `${prefix}${column}`;
4656
4851
  const value = watch(colLabel);
4657
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4852
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4658
4853
  gridRow, children: [jsxRuntime.jsx(react.Text, { children: value
4659
4854
  ? translate.t(removeIndex(`${colLabel}.true`))
4660
- : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4855
+ : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4856
+ };
4857
+
4858
+ const CustomViewer = ({ column, schema, prefix }) => {
4859
+ const formContext = reactHookForm.useFormContext();
4860
+ const { inputViewerRender } = schema;
4861
+ return (inputViewerRender &&
4862
+ inputViewerRender({
4863
+ column,
4864
+ schema,
4865
+ prefix,
4866
+ formContext,
4867
+ }));
4661
4868
  };
4662
4869
 
4663
4870
  const DateViewer = ({ column, schema, prefix }) => {
4664
4871
  const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4665
4872
  const { translate } = useSchemaContext();
4666
- const { required, gridColumn, gridRow } = schema;
4873
+ const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", } = schema;
4667
4874
  const isRequired = required?.some((columnId) => columnId === column);
4668
4875
  const colLabel = `${prefix}${column}`;
4669
4876
  const selectedDate = watch(colLabel);
4670
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4671
- gridRow, children: [jsxRuntime.jsxs(react.Text, { children: [" ", selectedDate !== undefined ? selectedDate : ""] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4877
+ const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
4878
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4879
+ gridRow, children: [jsxRuntime.jsxs(react.Text, { children: [" ", selectedDate !== undefined ? displayDate : ""] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4672
4880
  };
4673
4881
 
4674
4882
  const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
@@ -4680,7 +4888,7 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4680
4888
  const colLabel = `${prefix}${column}`;
4681
4889
  const watchEnum = watch(colLabel);
4682
4890
  const watchEnums = (watch(colLabel) ?? []);
4683
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4891
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4684
4892
  gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
4685
4893
  const item = enumValue;
4686
4894
  if (item === undefined) {
@@ -4689,26 +4897,19 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4689
4897
  return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4690
4898
  ? renderDisplay(item)
4691
4899
  : translate.t(removeIndex(`${colLabel}.${item}`)) }));
4692
- }) })), !isMultiple && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4900
+ }) })), !isMultiple && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4693
4901
  };
4694
4902
 
4695
4903
  const FileViewer = ({ column, schema, prefix }) => {
4696
- const { setValue, formState: { errors }, watch, } = reactHookForm.useFormContext();
4904
+ const { watch } = reactHookForm.useFormContext();
4697
4905
  const { translate } = useSchemaContext();
4698
4906
  const { required, gridColumn, gridRow } = schema;
4699
4907
  const isRequired = required?.some((columnId) => columnId === column);
4700
4908
  const currentFiles = (watch(column) ?? []);
4701
4909
  const colLabel = `${prefix}${column}`;
4702
- return (jsxRuntime.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: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4703
- const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4704
- setValue(colLabel, [...currentFiles, ...newFiles]);
4705
- }, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4706
- return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4707
- setValue(column, currentFiles.filter(({ name }) => {
4708
- return name !== file.name;
4709
- }));
4710
- }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4711
- }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4910
+ return (jsxRuntime.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: jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4911
+ return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name })] }) }, file.name));
4912
+ }) }) }));
4712
4913
  };
4713
4914
 
4714
4915
  const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
@@ -4730,7 +4931,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4730
4931
  }
4731
4932
  return record[display_column];
4732
4933
  };
4733
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4934
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4734
4935
  gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
4735
4936
  const item = idMap[id];
4736
4937
  if (item === undefined) {
@@ -4739,7 +4940,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4739
4940
  return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4740
4941
  ? renderDisplay(item)
4741
4942
  : item[display_column] }, id));
4742
- }) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4943
+ }) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4743
4944
  };
4744
4945
 
4745
4946
  const NumberViewer = ({ schema, column, prefix, }) => {
@@ -4749,7 +4950,7 @@ const NumberViewer = ({ schema, column, prefix, }) => {
4749
4950
  const isRequired = required?.some((columnId) => columnId === column);
4750
4951
  const colLabel = `${prefix}${column}`;
4751
4952
  const value = watch(colLabel);
4752
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(react.Text, { children: value }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4953
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(react.Text, { children: value }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4753
4954
  };
4754
4955
 
4755
4956
  const ObjectViewer = ({ schema, column, prefix }) => {
@@ -4761,13 +4962,13 @@ const ObjectViewer = ({ schema, column, prefix }) => {
4761
4962
  if (properties === undefined) {
4762
4963
  throw new Error(`properties is undefined when using ObjectInput`);
4763
4964
  }
4764
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4965
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4765
4966
  return (
4766
4967
  // @ts-expect-error find suitable types
4767
4968
  jsxRuntime.jsx(ColumnViewer, { column: `${key}`,
4768
4969
  prefix: `${prefix}${column}.`,
4769
4970
  properties }, `form-objectviewer-${colLabel}-${key}`));
4770
- }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4971
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
4771
4972
  };
4772
4973
 
4773
4974
  const RecordInput = ({ column, schema, prefix }) => {
@@ -4779,7 +4980,7 @@ const RecordInput = ({ column, schema, prefix }) => {
4779
4980
  const [showNewEntries, setShowNewEntries] = React.useState(false);
4780
4981
  const [newKey, setNewKey] = React.useState();
4781
4982
  const [newValue, setNewValue] = React.useState();
4782
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4983
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4783
4984
  return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
4784
4985
  const filtered = entries.filter(([target]) => {
4785
4986
  return target !== key;
@@ -4819,7 +5020,17 @@ const RecordInput = ({ column, schema, prefix }) => {
4819
5020
  setShowNewEntries(true);
4820
5021
  setNewKey(undefined);
4821
5022
  setNewValue(undefined);
4822
- }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
5023
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
5024
+ };
5025
+
5026
+ const StringViewer = ({ column, schema, prefix, }) => {
5027
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
5028
+ const { translate } = useSchemaContext();
5029
+ const { required, gridColumn, gridRow } = schema;
5030
+ const isRequired = required?.some((columnId) => columnId === column);
5031
+ const colLabel = `${prefix}${column}`;
5032
+ const value = watch(colLabel);
5033
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: value }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
4823
5034
  };
4824
5035
 
4825
5036
  const TagViewer = ({ column, schema, prefix }) => {
@@ -4907,19 +5118,35 @@ const TagViewer = ({ column, schema, prefix }) => {
4907
5118
  }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4908
5119
  };
4909
5120
 
4910
- const StringViewer = ({ column, schema, prefix, }) => {
5121
+ const TextAreaViewer = ({ column, schema, prefix, }) => {
4911
5122
  const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4912
5123
  const { translate } = useSchemaContext();
4913
5124
  const { required, gridColumn, gridRow } = schema;
4914
5125
  const isRequired = required?.some((columnId) => columnId === column);
4915
5126
  const colLabel = `${prefix}${column}`;
4916
5127
  const value = watch(colLabel);
4917
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: value }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
5128
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { whiteSpace: "pre-wrap", children: value }), " ", errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
5129
+ };
5130
+
5131
+ const TimeViewer = ({ column, schema, prefix }) => {
5132
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
5133
+ const { translate } = useSchemaContext();
5134
+ const { required, gridColumn, gridRow } = schema;
5135
+ const isRequired = required?.some((columnId) => columnId === column);
5136
+ const colLabel = `${prefix}${column}`;
5137
+ const selectedDate = watch(colLabel);
5138
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
5139
+ gridRow, children: [jsxRuntime.jsx(react.Text, { children: selectedDate !== undefined
5140
+ ? dayjs(selectedDate).format("hh:mm A")
5141
+ : "" }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
4918
5142
  };
4919
5143
 
4920
5144
  const SchemaViewer = ({ schema, prefix, column, }) => {
4921
5145
  const colSchema = schema;
4922
5146
  const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
5147
+ if (variant === "custom-input") {
5148
+ return jsxRuntime.jsx(CustomViewer, { schema: colSchema, prefix, column });
5149
+ }
4923
5150
  if (type === "string") {
4924
5151
  if ((schema.enum ?? []).length > 0) {
4925
5152
  return jsxRuntime.jsx(EnumViewer, { schema: colSchema, prefix, column });
@@ -4931,6 +5158,12 @@ const SchemaViewer = ({ schema, prefix, column, }) => {
4931
5158
  if (variant === "date-picker") {
4932
5159
  return jsxRuntime.jsx(DateViewer, { schema: colSchema, prefix, column });
4933
5160
  }
5161
+ if (variant === "time-picker") {
5162
+ return jsxRuntime.jsx(TimeViewer, { schema: colSchema, prefix, column });
5163
+ }
5164
+ if (variant === "text-area") {
5165
+ return jsxRuntime.jsx(TextAreaViewer, { schema: colSchema, prefix, column });
5166
+ }
4934
5167
  return jsxRuntime.jsx(StringViewer, { schema: colSchema, prefix, column });
4935
5168
  }
4936
5169
  if (type === "number" || type === "integer") {
@@ -5053,7 +5286,7 @@ const FormBody = () => {
5053
5286
  include,
5054
5287
  });
5055
5288
  if (isSuccess) {
5056
- return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("submitSuccess") })] }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { onClick: async () => {
5289
+ return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("submit_success") })] }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { onClick: async () => {
5057
5290
  setIsError(false);
5058
5291
  setIsSubmiting(false);
5059
5292
  setIsSuccess(false);
@@ -5061,7 +5294,7 @@ const FormBody = () => {
5061
5294
  setValidatedData(undefined);
5062
5295
  const data = await getUpdatedData();
5063
5296
  methods.reset(data);
5064
- }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
5297
+ }, formNoValidate: true, children: translate.t("submit_again") }) })] }));
5065
5298
  }
5066
5299
  if (isConfirming) {
5067
5300
  return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsx(react.Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
@@ -5092,8 +5325,8 @@ const FormTitle = () => {
5092
5325
  return jsxRuntime.jsx(react.Heading, { children: translate.t("title") });
5093
5326
  };
5094
5327
 
5095
- const DefaultForm = ({ formConfig, }) => {
5096
- return (jsxRuntime.jsx(FormRoot, { ...formConfig, children: jsxRuntime.jsxs(react.Grid, { gap: "2", children: [jsxRuntime.jsx(FormTitle, {}), jsxRuntime.jsx(FormBody, {})] }) }));
5328
+ const DefaultForm = ({ formConfig, showTitle = true, }) => {
5329
+ return (jsxRuntime.jsx(FormRoot, { ...formConfig, children: jsxRuntime.jsxs(react.Grid, { gap: "2", children: [showTitle && jsxRuntime.jsx(FormTitle, {}), jsxRuntime.jsx(FormBody, {})] }) }));
5097
5330
  };
5098
5331
 
5099
5332
  const useForm = ({ preLoadedValues, keyPrefix }) => {
@@ -5134,7 +5367,6 @@ exports.DefaultCardTitle = DefaultCardTitle;
5134
5367
  exports.DefaultForm = DefaultForm;
5135
5368
  exports.DefaultTable = DefaultTable;
5136
5369
  exports.DensityToggleButton = DensityToggleButton;
5137
- exports.EditOrderButton = EditOrderButton;
5138
5370
  exports.EditSortingButton = EditSortingButton;
5139
5371
  exports.EmptyState = EmptyState$1;
5140
5372
  exports.ErrorAlert = ErrorAlert;
@@ -5158,12 +5390,12 @@ exports.TableCardContainer = TableCardContainer;
5158
5390
  exports.TableCards = TableCards;
5159
5391
  exports.TableComponent = TableComponent;
5160
5392
  exports.TableControls = TableControls;
5393
+ exports.TableDataDisplay = TableDataDisplay;
5161
5394
  exports.TableFilter = TableFilter;
5162
5395
  exports.TableFilterTags = TableFilterTags;
5163
5396
  exports.TableFooter = TableFooter;
5164
5397
  exports.TableHeader = TableHeader;
5165
5398
  exports.TableLoadingComponent = TableLoadingComponent;
5166
- exports.TableOrderer = TableOrderer;
5167
5399
  exports.TableSelector = TableSelector;
5168
5400
  exports.TableSorter = TableSorter;
5169
5401
  exports.TableViewer = TableViewer;