@xanui/ui 1.1.38 → 1.1.41

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 (157) hide show
  1. package/Accordion/index.cjs +96 -0
  2. package/Accordion/index.cjs.map +1 -0
  3. package/Accordion/index.js.map +1 -1
  4. package/Alert/index.cjs +121 -0
  5. package/Alert/index.cjs.map +1 -0
  6. package/Autocomplete/index.cjs +136 -0
  7. package/Autocomplete/index.cjs.map +1 -0
  8. package/Avatar/index.cjs +50 -0
  9. package/Avatar/index.cjs.map +1 -0
  10. package/Badge/index.cjs +109 -0
  11. package/Badge/index.cjs.map +1 -0
  12. package/Box/index.cjs +14 -0
  13. package/Box/index.cjs.map +1 -0
  14. package/Button/index.cjs +94 -0
  15. package/Button/index.cjs.map +1 -0
  16. package/ButtonGroup/index.cjs +58 -0
  17. package/ButtonGroup/index.cjs.map +1 -0
  18. package/Calendar/index.cjs +174 -0
  19. package/Calendar/index.cjs.map +1 -0
  20. package/CalendarInput/index.cjs +34 -0
  21. package/CalendarInput/index.cjs.map +1 -0
  22. package/Checkbox/index.cjs +58 -0
  23. package/Checkbox/index.cjs.map +1 -0
  24. package/Chip/index.cjs +76 -0
  25. package/Chip/index.cjs.map +1 -0
  26. package/CircleProgress/index.cjs +129 -0
  27. package/CircleProgress/index.cjs.map +1 -0
  28. package/ClickOutside/index.cjs +37 -0
  29. package/ClickOutside/index.cjs.map +1 -0
  30. package/Collaps/index.cjs +26 -0
  31. package/Collaps/index.cjs.map +1 -0
  32. package/Container/index.cjs +29 -0
  33. package/Container/index.cjs.map +1 -0
  34. package/DataFilter/index.cjs +78 -0
  35. package/DataFilter/index.cjs.map +1 -0
  36. package/DataFilter/options/DateFilter.cjs +32 -0
  37. package/DataFilter/options/DateFilter.cjs.map +1 -0
  38. package/DataFilter/options/DateRangeFilter.cjs +27 -0
  39. package/DataFilter/options/DateRangeFilter.cjs.map +1 -0
  40. package/DataFilter/options/MultiSelectFilter.cjs +38 -0
  41. package/DataFilter/options/MultiSelectFilter.cjs.map +1 -0
  42. package/DataFilter/options/NumberFilter.cjs +24 -0
  43. package/DataFilter/options/NumberFilter.cjs.map +1 -0
  44. package/DataFilter/options/NumberRangeFilter.cjs +29 -0
  45. package/DataFilter/options/NumberRangeFilter.cjs.map +1 -0
  46. package/DataFilter/options/SelectFilter.cjs +34 -0
  47. package/DataFilter/options/SelectFilter.cjs.map +1 -0
  48. package/DataFilter/options/TextFilter.cjs +24 -0
  49. package/DataFilter/options/TextFilter.cjs.map +1 -0
  50. package/Datatable/FilterBox.cjs +39 -0
  51. package/Datatable/FilterBox.cjs.map +1 -0
  52. package/Datatable/Row.cjs +59 -0
  53. package/Datatable/Row.cjs.map +1 -0
  54. package/Datatable/SelectedBox.cjs +21 -0
  55. package/Datatable/SelectedBox.cjs.map +1 -0
  56. package/Datatable/Table.cjs +23 -0
  57. package/Datatable/Table.cjs.map +1 -0
  58. package/Datatable/TableHead.cjs +61 -0
  59. package/Datatable/TableHead.cjs.map +1 -0
  60. package/Datatable/index.cjs +93 -0
  61. package/Datatable/index.cjs.map +1 -0
  62. package/Divider/index.cjs +31 -0
  63. package/Divider/index.cjs.map +1 -0
  64. package/Drawer/index.cjs +78 -0
  65. package/Drawer/index.cjs.map +1 -0
  66. package/Form/index.cjs +45 -0
  67. package/Form/index.cjs.map +1 -0
  68. package/GridContainer/index.cjs +19 -0
  69. package/GridContainer/index.cjs.map +1 -0
  70. package/GridItem/index.cjs +20 -0
  71. package/GridItem/index.cjs.map +1 -0
  72. package/IconButton/index.cjs +64 -0
  73. package/IconButton/index.cjs.map +1 -0
  74. package/Image/index.cjs +27 -0
  75. package/Image/index.cjs.map +1 -0
  76. package/Input/index.cjs +144 -0
  77. package/Input/index.cjs.map +1 -0
  78. package/InputNumber/index.cjs +32 -0
  79. package/InputNumber/index.cjs.map +1 -0
  80. package/Label/index.cjs +24 -0
  81. package/Label/index.cjs.map +1 -0
  82. package/Layer/index.cjs +62 -0
  83. package/Layer/index.cjs.map +1 -0
  84. package/LineProgress/index.cjs +59 -0
  85. package/LineProgress/index.cjs.map +1 -0
  86. package/List/ListContext.cjs +11 -0
  87. package/List/ListContext.cjs.map +1 -0
  88. package/List/index.cjs +63 -0
  89. package/List/index.cjs.map +1 -0
  90. package/ListItem/index.cjs +54 -0
  91. package/ListItem/index.cjs.map +1 -0
  92. package/LoadingBox/index.cjs +32 -0
  93. package/LoadingBox/index.cjs.map +1 -0
  94. package/Menu/index.cjs +150 -0
  95. package/Menu/index.cjs.map +1 -0
  96. package/Modal/index.cjs +59 -0
  97. package/Modal/index.cjs.map +1 -0
  98. package/NoSSR/index.cjs +15 -0
  99. package/NoSSR/index.cjs.map +1 -0
  100. package/Option/index.cjs +14 -0
  101. package/Option/index.cjs.map +1 -0
  102. package/Paper/index.cjs +15 -0
  103. package/Paper/index.cjs.map +1 -0
  104. package/Portal/index.cjs +27 -0
  105. package/Portal/index.cjs.map +1 -0
  106. package/Radio/index.cjs +16 -0
  107. package/Radio/index.cjs.map +1 -0
  108. package/Scrollbar/index.cjs +59 -0
  109. package/Scrollbar/index.cjs.map +1 -0
  110. package/Select/index.cjs +59 -0
  111. package/Select/index.cjs.map +1 -0
  112. package/Skeleton/index.cjs +60 -0
  113. package/Skeleton/index.cjs.map +1 -0
  114. package/Stack/index.cjs +17 -0
  115. package/Stack/index.cjs.map +1 -0
  116. package/Switch/index.cjs +79 -0
  117. package/Switch/index.cjs.map +1 -0
  118. package/Tab/index.cjs +17 -0
  119. package/Tab/index.cjs.map +1 -0
  120. package/Table/index.cjs +88 -0
  121. package/Table/index.cjs.map +1 -0
  122. package/TableBody/index.cjs +14 -0
  123. package/TableBody/index.cjs.map +1 -0
  124. package/TableCell/index.cjs +14 -0
  125. package/TableCell/index.cjs.map +1 -0
  126. package/TableFooter/index.cjs +14 -0
  127. package/TableFooter/index.cjs.map +1 -0
  128. package/TableHead/index.cjs +14 -0
  129. package/TableHead/index.cjs.map +1 -0
  130. package/TablePagination/index.cjs +59 -0
  131. package/TablePagination/index.cjs.map +1 -0
  132. package/TableRow/index.cjs +14 -0
  133. package/TableRow/index.cjs.map +1 -0
  134. package/Tabs/index.cjs +201 -0
  135. package/Tabs/index.cjs.map +1 -0
  136. package/Text/index.cjs +25 -0
  137. package/Text/index.cjs.map +1 -0
  138. package/Toast/index.cjs +120 -0
  139. package/Toast/index.cjs.map +1 -0
  140. package/Tooltip/index.cjs +40 -0
  141. package/Tooltip/index.cjs.map +1 -0
  142. package/ViewBox/index.cjs +32 -0
  143. package/ViewBox/index.cjs.map +1 -0
  144. package/index.cjs +134 -0
  145. package/index.cjs.map +1 -0
  146. package/package.json +3 -3
  147. package/readme.md +4 -4
  148. package/useAlert/index.cjs +94 -0
  149. package/useAlert/index.cjs.map +1 -0
  150. package/useBlurCss/index.cjs +19 -0
  151. package/useBlurCss/index.cjs.map +1 -0
  152. package/useCorner/index.cjs +22 -0
  153. package/useCorner/index.cjs.map +1 -0
  154. package/useLayer/index.cjs +38 -0
  155. package/useLayer/index.cjs.map +1 -0
  156. package/useModal/index.cjs +37 -0
  157. package/useModal/index.cjs.map +1 -0
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var index$4 = require('../../Menu/index.cjs');
7
+ var index$5 = require('../../List/index.cjs');
8
+ var index$6 = require('../../ListItem/index.cjs');
9
+ var index$7 = require('../../Checkbox/index.cjs');
10
+ var index$2 = require('../../IconButton/index.cjs');
11
+ var index = require('../../Stack/index.cjs');
12
+ var index$1 = require('../../Text/index.cjs');
13
+ var Add = require('@xanui/icons/Add');
14
+ var ClearAll = require('@xanui/icons/ClearAll');
15
+ var index$3 = require('../../Chip/index.cjs');
16
+ var Close = require('@xanui/icons/Close');
17
+
18
+ const MultiSelectFilter = ({ option, onChange, value }) => {
19
+ var _a;
20
+ const ref = React.useRef(null);
21
+ const [target, setTarget] = React.useState();
22
+ const isValue = value && value.length > 0;
23
+ return (jsxRuntime.jsxs(index, { width: "100%", bgcolor: "background.secondary", p: 1, radius: 1, children: [jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 0.5, mb: isValue ? .5 : 0, children: [jsxRuntime.jsx(index$1, { children: option.label }), jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, children: [jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "default", onClick: (e) => {
24
+ setTarget(e.currentTarget);
25
+ }, children: jsxRuntime.jsx(Add, {}) }), isValue && jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "danger", onClick: () => {
26
+ onChange([]);
27
+ }, children: jsxRuntime.jsx(ClearAll, {}) })] })] }), jsxRuntime.jsx(index, { direction: "row", gap: 0.5, flexWrap: "wrap", children: isValue && value.map((val, index) => {
28
+ return (jsxRuntime.jsx(index$3, { size: "small", color: "default", label: val, endIcon: jsxRuntime.jsx(index$2, { size: 16, variant: "text", color: "default", onClick: () => {
29
+ onChange(value.filter(v => v !== val));
30
+ }, children: jsxRuntime.jsx(Close, {}) }) }, index));
31
+ }) }), jsxRuntime.jsx(index$4, { target: target, onClickOutside: () => setTarget(undefined), placement: "bottom-right", children: jsxRuntime.jsx(index$5, { width: ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 200, size: "small", children: option.options.map((opt, index) => (jsxRuntime.jsx(index$6, { startIcon: jsxRuntime.jsx(index$7, { checked: value === null || value === void 0 ? void 0 : value.includes(opt.value) }), onClick: () => {
32
+ const has = value === null || value === void 0 ? void 0 : value.includes(opt.value);
33
+ onChange(has ? value === null || value === void 0 ? void 0 : value.filter(v => v !== opt.value) : [...value || [], opt.value]);
34
+ }, children: opt.label }, index))) }) })] }));
35
+ };
36
+
37
+ module.exports = MultiSelectFilter;
38
+ //# sourceMappingURL=MultiSelectFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectFilter.cjs","sources":["../../../src/DataFilter/options/MultiSelectFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\";\r\nimport { DataFilterSelect } from \"../types\";\r\nimport Menu from \"../../Menu\";\r\nimport List from \"../../List\";\r\nimport ListItem from \"../../ListItem\";\r\nimport Checkbox from \"../../Checkbox\";\r\nimport IconButton from \"../../IconButton\";\r\nimport Stack from \"../../Stack\";\r\nimport Text from \"../../Text\";\r\nimport Add from \"@xanui/icons/Add\";\r\nimport ClearAll from \"@xanui/icons/ClearAll\";\r\nimport Chip from \"../../Chip\";\r\nimport Close from \"@xanui/icons/Close\";\r\n\r\n\r\ntype Props = {\r\n option: DataFilterSelect;\r\n value: string[];\r\n onChange: (value: string[]) => void;\r\n}\r\n\r\nconst MultiSelectFilter = ({ option, onChange, value }: Props) => {\r\n const ref: any = React.useRef(null)\r\n const [target, setTarget] = React.useState<HTMLElement | undefined>()\r\n const isValue = value && value.length > 0;\r\n return (\r\n <Stack\r\n width={\"100%\"}\r\n bgcolor=\"background.secondary\"\r\n p={1}\r\n radius={1}\r\n >\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent={\"space-between\"}\r\n gap={0.5}\r\n mb={isValue ? .5 : 0}\r\n >\r\n <Text>{option.label}</Text>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"default\"}\r\n onClick={(e: any) => {\r\n setTarget(e.currentTarget)\r\n }}\r\n >\r\n <Add />\r\n </IconButton>\r\n {\r\n isValue && <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"danger\"}\r\n onClick={() => {\r\n onChange([]);\r\n }}\r\n >\r\n <ClearAll />\r\n </IconButton>\r\n }\r\n </Stack>\r\n </Stack>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flexWrap=\"wrap\"\r\n >\r\n {\r\n isValue && value.map((val, index) => {\r\n return (\r\n <Chip\r\n key={index}\r\n size=\"small\"\r\n color=\"default\"\r\n label={val}\r\n endIcon={<IconButton\r\n size={16}\r\n variant={\"text\"}\r\n color=\"default\"\r\n onClick={() => {\r\n onChange(value.filter(v => v !== val));\r\n }}\r\n >\r\n <Close />\r\n </IconButton>}\r\n />\r\n )\r\n })\r\n }\r\n </Stack>\r\n <Menu\r\n target={target}\r\n onClickOutside={() => setTarget(undefined)}\r\n placement={\"bottom-right\"}\r\n >\r\n <List width={ref?.current?.offsetWidth || 200} size=\"small\">\r\n {\r\n option.options.map((opt, index) => (\r\n <ListItem\r\n key={index}\r\n startIcon={<Checkbox checked={value?.includes(opt.value)} />}\r\n onClick={() => {\r\n const has = value?.includes(opt.value)\r\n onChange(has ? value?.filter(v => v !== opt.value) : [...value || [], opt.value]);\r\n }}\r\n >\r\n {opt.label}\r\n </ListItem>\r\n ))\r\n }\r\n </List>\r\n </Menu>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default MultiSelectFilter"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAuBA;;;;;AAIG;AAwBkB;;;AAYA;AAcH;AAWY;;AAOf;AAeY;AACA;AACH;AAUxB;;"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var index$2 = require('../../IconButton/index.cjs');
6
+ var index = require('../../Stack/index.cjs');
7
+ var index$1 = require('../../Text/index.cjs');
8
+ var Add = require('@xanui/icons/Add');
9
+ var ClearAll = require('@xanui/icons/ClearAll');
10
+ var index$3 = require('../../InputNumber/index.cjs');
11
+
12
+ const NumberFilter = ({ option, onChange, value }) => {
13
+ const isValue = value !== null && value !== undefined;
14
+ return (jsxRuntime.jsxs(index, { width: "100%", bgcolor: "background.secondary", p: 1, radius: 1, children: [jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 0.5, mb: isValue ? .5 : 0, children: [jsxRuntime.jsx(index$1, { children: option.label }), jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, children: [jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "default", onClick: () => {
15
+ onChange(0);
16
+ }, children: jsxRuntime.jsx(Add, {}) }), isValue && jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "danger", onClick: () => {
17
+ onChange(null);
18
+ }, children: jsxRuntime.jsx(ClearAll, {}) })] })] }), jsxRuntime.jsx(index, { direction: "row", gap: 0.5, flexWrap: "wrap", children: isValue && jsxRuntime.jsx(index$3, { variant: "outline", value: value.toString(), onChange: (e) => {
19
+ onChange(e.target.value);
20
+ }, fullWidth: true }) })] }));
21
+ };
22
+
23
+ module.exports = NumberFilter;
24
+ //# sourceMappingURL=NumberFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberFilter.cjs","sources":["../../../src/DataFilter/options/NumberFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport { DataFilterSelect } from \"../types\";\r\nimport IconButton from \"../../IconButton\";\r\nimport Stack from \"../../Stack\";\r\nimport Text from \"../../Text\";\r\nimport Add from \"@xanui/icons/Add\";\r\nimport ClearAll from \"@xanui/icons/ClearAll\";\r\nimport InputNumber from \"../../InputNumber\";\r\n\r\ntype Props = {\r\n option: DataFilterSelect;\r\n value: number | null;\r\n onChange: (value: number | null) => void;\r\n}\r\n\r\nconst NumberFilter = ({ option, onChange, value }: Props) => {\r\n\r\n const isValue = value !== null && value !== undefined;\r\n\r\n return (\r\n <Stack\r\n width={\"100%\"}\r\n bgcolor=\"background.secondary\"\r\n p={1}\r\n radius={1}\r\n >\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent={\"space-between\"}\r\n gap={0.5}\r\n mb={isValue ? .5 : 0}\r\n >\r\n <Text>{option.label}</Text>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"default\"}\r\n onClick={() => {\r\n onChange(0);\r\n }}\r\n >\r\n <Add />\r\n </IconButton>\r\n {\r\n isValue && <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"danger\"}\r\n onClick={() => {\r\n onChange(null);\r\n }}\r\n >\r\n <ClearAll />\r\n </IconButton>\r\n }\r\n </Stack>\r\n </Stack>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flexWrap=\"wrap\"\r\n >\r\n {\r\n isValue && <InputNumber\r\n variant={\"outline\"}\r\n value={value.toString()}\r\n onChange={(e: any) => {\r\n onChange(e.target.value);\r\n }}\r\n fullWidth\r\n />\r\n }\r\n </Stack>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default NumberFilter"],"names":[],"mappings":";;;;;;;;;;;AAgBA;;AAIG;;;;;AAqDkB;AACH;AAOlB;;"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var index$2 = require('../../IconButton/index.cjs');
6
+ var index = require('../../Stack/index.cjs');
7
+ var index$1 = require('../../Text/index.cjs');
8
+ var Add = require('@xanui/icons/Add');
9
+ var ClearAll = require('@xanui/icons/ClearAll');
10
+ var index$3 = require('../../InputNumber/index.cjs');
11
+
12
+ const NumberRangeFilter = ({ option, onChange, value }) => {
13
+ var _a, _b;
14
+ const isValue = value !== null && value !== undefined && Array.isArray(value) && value.length === 2;
15
+ return (jsxRuntime.jsxs(index, { width: "100%", bgcolor: "background.secondary", p: 1, radius: 1, children: [jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 0.5, mb: isValue ? .5 : 0, children: [jsxRuntime.jsx(index$1, { children: option.label }), jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, children: [jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "default", onClick: () => {
16
+ onChange([0, 0]);
17
+ }, children: jsxRuntime.jsx(Add, {}) }), isValue && jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "danger", onClick: () => {
18
+ onChange(null);
19
+ }, children: jsxRuntime.jsx(ClearAll, {}) })] })] }), jsxRuntime.jsx(index, { direction: "row", gap: 0.5, flexWrap: "wrap", children: isValue && jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, flex: 1, children: [jsxRuntime.jsx(index$3, { flex: 1, variant: "outline", size: "small", placeholder: "Min", value: (_a = value[0]) !== null && _a !== void 0 ? _a : '', onChange: (e) => {
20
+ const val = e.target.value === '' ? 0 : Number(e.target.value);
21
+ onChange([val, value ? value[1] : 0]);
22
+ } }), jsxRuntime.jsx(index$3, { variant: "outline", flex: 1, size: "small", placeholder: "Max", value: (_b = value[1]) !== null && _b !== void 0 ? _b : undefined, onChange: (e) => {
23
+ const val = e.target.value === '' ? 0 : Number(e.target.value);
24
+ onChange([value ? value[0] : 0, val]);
25
+ } })] }) })] }));
26
+ };
27
+
28
+ module.exports = NumberRangeFilter;
29
+ //# sourceMappingURL=NumberRangeFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberRangeFilter.cjs","sources":["../../../src/DataFilter/options/NumberRangeFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport { DataFilterSelect } from \"../types\";\r\nimport IconButton from \"../../IconButton\";\r\nimport Stack from \"../../Stack\";\r\nimport Text from \"../../Text\";\r\nimport Add from \"@xanui/icons/Add\";\r\nimport ClearAll from \"@xanui/icons/ClearAll\";\r\nimport InputNumber from \"../../InputNumber\";\r\n\r\ntype Props = {\r\n option: DataFilterSelect;\r\n value: [number, number] | null;\r\n onChange: (value: [number, number] | null) => void;\r\n}\r\n\r\nconst NumberRangeFilter = ({ option, onChange, value }: Props) => {\r\n\r\n const isValue = value !== null && value !== undefined && Array.isArray(value) && value.length === 2;\r\n\r\n return (\r\n <Stack\r\n width={\"100%\"}\r\n bgcolor=\"background.secondary\"\r\n p={1}\r\n radius={1}\r\n >\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent={\"space-between\"}\r\n gap={0.5}\r\n mb={isValue ? .5 : 0}\r\n >\r\n <Text>{option.label}</Text>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"default\"}\r\n onClick={() => {\r\n onChange([0, 0]);\r\n }}\r\n >\r\n <Add />\r\n </IconButton>\r\n {\r\n isValue && <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"danger\"}\r\n onClick={() => {\r\n onChange(null);\r\n }}\r\n >\r\n <ClearAll />\r\n </IconButton>\r\n }\r\n </Stack>\r\n </Stack>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flexWrap=\"wrap\"\r\n >\r\n {\r\n isValue && <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flex={1}\r\n >\r\n <InputNumber\r\n flex={1}\r\n variant={\"outline\"}\r\n size=\"small\"\r\n placeholder=\"Min\"\r\n value={value[0] as any ?? ''}\r\n onChange={(e) => {\r\n const val = e.target.value === '' ? 0 : Number(e.target.value);\r\n onChange([val, value ? value[1] : 0]);\r\n }}\r\n />\r\n <InputNumber\r\n variant={\"outline\"}\r\n flex={1}\r\n size=\"small\"\r\n placeholder=\"Max\"\r\n value={value[1] as any ?? undefined}\r\n onChange={(e) => {\r\n const val = e.target.value === '' ? 0 : Number(e.target.value);\r\n onChange([value ? value[0] : 0, val]);\r\n }}\r\n />\r\n </Stack>\r\n }\r\n </Stack>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default NumberRangeFilter"],"names":[],"mappings":";;;;;;;;;;;AAgBA;;;AAIG;AAwBkB;;;AAYA;;AA0BG;AACH;;AAUG;AACH;AAOrB;;"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var index$4 = require('../../Menu/index.cjs');
7
+ var index$5 = require('../../List/index.cjs');
8
+ var index$6 = require('../../ListItem/index.cjs');
9
+ var index$7 = require('../../Checkbox/index.cjs');
10
+ var index$2 = require('../../IconButton/index.cjs');
11
+ var index = require('../../Stack/index.cjs');
12
+ var index$1 = require('../../Text/index.cjs');
13
+ var Close = require('@xanui/icons/Close');
14
+ var Add = require('@xanui/icons/Add');
15
+ var ClearAll = require('@xanui/icons/ClearAll');
16
+ var index$3 = require('../../Chip/index.cjs');
17
+
18
+ const SelectFilter = ({ option, onChange, value }) => {
19
+ var _a;
20
+ const ref = React.useRef(null);
21
+ const [target, setTarget] = React.useState();
22
+ return (jsxRuntime.jsxs(index, { width: "100%", bgcolor: "background.secondary", p: 1, radius: 1, children: [jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 0.5, mb: value ? .5 : 0, children: [jsxRuntime.jsx(index$1, { children: option.label }), jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, children: [jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "default", onClick: (e) => {
23
+ setTarget(e.currentTarget);
24
+ }, children: jsxRuntime.jsx(Add, {}) }), !!value && jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "danger", onClick: () => {
25
+ onChange(null);
26
+ }, children: jsxRuntime.jsx(ClearAll, {}) })] })] }), jsxRuntime.jsx(index, { direction: "row", gap: 0.5, flexWrap: "wrap", children: !!value && jsxRuntime.jsx(index$3, { size: "small", color: "default", label: value, endIcon: jsxRuntime.jsx(index$2, { size: 16, variant: "text", color: "default", onClick: () => {
27
+ onChange(null);
28
+ }, children: jsxRuntime.jsx(Close, {}) }) }) }), jsxRuntime.jsx(index$4, { target: target, onClickOutside: () => setTarget(undefined), placement: "bottom-right", children: jsxRuntime.jsx(index$5, { width: ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 200, size: "small", children: option.options.map((opt, index) => (jsxRuntime.jsx(index$6, { startIcon: jsxRuntime.jsx(index$7, { checked: value === opt.value }), onClick: () => {
29
+ onChange(opt.value);
30
+ }, children: opt.label }, index))) }) })] }));
31
+ };
32
+
33
+ module.exports = SelectFilter;
34
+ //# sourceMappingURL=SelectFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectFilter.cjs","sources":["../../../src/DataFilter/options/SelectFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React from \"react\";\r\nimport { DataFilterSelect } from \"../types\";\r\nimport Menu from \"../../Menu\";\r\nimport List from \"../../List\";\r\nimport ListItem from \"../../ListItem\";\r\nimport Checkbox from \"../../Checkbox\";\r\nimport IconButton from \"../../IconButton\";\r\nimport Stack from \"../../Stack\";\r\nimport Text from \"../../Text\";\r\nimport Close from \"@xanui/icons/Close\";\r\nimport Add from \"@xanui/icons/Add\";\r\nimport ClearAll from \"@xanui/icons/ClearAll\";\r\nimport Chip from \"../../Chip\";\r\n\r\n\r\ntype Props = {\r\n option: DataFilterSelect;\r\n value: string | null;\r\n onChange: (value: string | null) => void;\r\n}\r\n\r\nconst SelectFilter = ({ option, onChange, value }: Props) => {\r\n const ref: any = React.useRef(null)\r\n const [target, setTarget] = React.useState<HTMLElement | undefined>()\r\n return (\r\n <Stack\r\n width={\"100%\"}\r\n bgcolor=\"background.secondary\"\r\n p={1}\r\n radius={1}\r\n >\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent={\"space-between\"}\r\n gap={0.5}\r\n mb={value ? .5 : 0}\r\n >\r\n <Text>{option.label}</Text>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"default\"}\r\n onClick={(e: any) => {\r\n setTarget(e.currentTarget)\r\n }}\r\n >\r\n <Add />\r\n </IconButton>\r\n {\r\n !!value && <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"danger\"}\r\n onClick={() => {\r\n onChange(null);\r\n }}\r\n >\r\n <ClearAll />\r\n </IconButton>\r\n }\r\n </Stack>\r\n </Stack>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flexWrap=\"wrap\"\r\n >\r\n {\r\n !!value && <Chip\r\n size=\"small\"\r\n color=\"default\"\r\n label={value}\r\n endIcon={<IconButton\r\n size={16}\r\n variant={\"text\"}\r\n color=\"default\"\r\n onClick={() => {\r\n onChange(null);\r\n }}\r\n >\r\n <Close />\r\n </IconButton>}\r\n />\r\n }\r\n </Stack>\r\n <Menu\r\n target={target}\r\n onClickOutside={() => setTarget(undefined)}\r\n placement={\"bottom-right\"}\r\n >\r\n <List width={ref?.current?.offsetWidth || 200} size=\"small\">\r\n {\r\n option.options.map((opt, index) => (\r\n <ListItem\r\n key={index}\r\n startIcon={<Checkbox checked={value === opt.value} />}\r\n onClick={() => {\r\n onChange(opt.value);\r\n }}\r\n >\r\n {opt.label}\r\n </ListItem>\r\n ))\r\n }\r\n </List>\r\n </Menu>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default SelectFilter"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAuBA;;;;AAGG;AAwBkB;AACH;;AAWG;;AAuBA;AAmBM;AACH;AAUxB;;"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var index$2 = require('../../IconButton/index.cjs');
6
+ var index = require('../../Stack/index.cjs');
7
+ var index$1 = require('../../Text/index.cjs');
8
+ var Add = require('@xanui/icons/Add');
9
+ var ClearAll = require('@xanui/icons/ClearAll');
10
+ var index$3 = require('../../Input/index.cjs');
11
+
12
+ const TextFilter = ({ option, onChange, value }) => {
13
+ const isValue = value !== null && value !== undefined;
14
+ return (jsxRuntime.jsxs(index, { width: "100%", bgcolor: "background.secondary", p: 1, radius: 1, children: [jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 0.5, mb: isValue ? .5 : 0, children: [jsxRuntime.jsx(index$1, { children: option.label }), jsxRuntime.jsxs(index, { direction: "row", gap: 0.5, children: [jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "default", onClick: () => {
15
+ onChange('');
16
+ }, children: jsxRuntime.jsx(Add, {}) }), isValue && jsxRuntime.jsx(index$2, { size: "small", variant: "soft", color: "danger", onClick: () => {
17
+ onChange(null);
18
+ }, children: jsxRuntime.jsx(ClearAll, {}) })] })] }), jsxRuntime.jsx(index, { direction: "row", gap: 0.5, flexWrap: "wrap", children: isValue && jsxRuntime.jsx(index$3, { variant: "outline", value: value.toString(), onChange: (e) => {
19
+ onChange(e.target.value);
20
+ }, fullWidth: true }) })] }));
21
+ };
22
+
23
+ module.exports = TextFilter;
24
+ //# sourceMappingURL=TextFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextFilter.cjs","sources":["../../../src/DataFilter/options/TextFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport { DataFilterSelect } from \"../types\";\r\nimport IconButton from \"../../IconButton\";\r\nimport Stack from \"../../Stack\";\r\nimport Text from \"../../Text\";\r\nimport Add from \"@xanui/icons/Add\";\r\nimport ClearAll from \"@xanui/icons/ClearAll\";\r\nimport Input from \"../../Input\";\r\n\r\ntype Props = {\r\n option: DataFilterSelect;\r\n value: string | null;\r\n onChange: (value: string | null) => void;\r\n}\r\n\r\nconst TextFilter = ({ option, onChange, value }: Props) => {\r\n\r\n const isValue = value !== null && value !== undefined;\r\n\r\n return (\r\n <Stack\r\n width={\"100%\"}\r\n bgcolor=\"background.secondary\"\r\n p={1}\r\n radius={1}\r\n >\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent={\"space-between\"}\r\n gap={0.5}\r\n mb={isValue ? .5 : 0}\r\n >\r\n <Text>{option.label}</Text>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"default\"}\r\n onClick={() => {\r\n onChange('');\r\n }}\r\n >\r\n <Add />\r\n </IconButton>\r\n {\r\n isValue && <IconButton\r\n size=\"small\"\r\n variant=\"soft\"\r\n color={\"danger\"}\r\n onClick={() => {\r\n onChange(null);\r\n }}\r\n >\r\n <ClearAll />\r\n </IconButton>\r\n }\r\n </Stack>\r\n </Stack>\r\n <Stack\r\n direction=\"row\"\r\n gap={0.5}\r\n flexWrap=\"wrap\"\r\n >\r\n {\r\n isValue && <Input\r\n variant={\"outline\"}\r\n value={value.toString()}\r\n onChange={(e: any) => {\r\n onChange(e.target.value);\r\n }}\r\n fullWidth\r\n />\r\n }\r\n </Stack>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default TextFilter"],"names":[],"mappings":";;;;;;;;;;;AAgBA;;AAIG;;;;;AAqDkB;AACH;AAOlB;;"}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var index = require('../Stack/index.cjs');
6
+ var index$1 = require('../Tabs/index.cjs');
7
+ var index$2 = require('../Tab/index.cjs');
8
+ var index$3 = require('../Input/index.cjs');
9
+ var IconSearch = require('@xanui/icons/Search');
10
+ var index$4 = require('../IconButton/index.cjs');
11
+ var FilterListOutlined = require('@xanui/icons/FilterListOutlined');
12
+ var index$5 = require('../Drawer/index.cjs');
13
+ var index$8 = require('../Text/index.cjs');
14
+ var React = require('react');
15
+ var CloseOutlined = require('@xanui/icons/CloseOutlined');
16
+ var index$6 = require('../ViewBox/index.cjs');
17
+ var index$7 = require('../DataFilter/index.cjs');
18
+
19
+ const FilterBox = (props) => {
20
+ let { tabs, filters, hideSearch, slotProps, skeleton, state, update, } = props;
21
+ const [openFilter, setOpenFilter] = React.useState(false);
22
+ let checked = state.selectAll || !!state.selected.length;
23
+ if (checked)
24
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
25
+ return (jsxRuntime.jsxs(index, { direction: "row", alignItems: "center", justifyContent: "space-between", zIndex: 1, radius: 1, mb: 1, height: 50, width: "100%", children: [jsxRuntime.jsx(index, { gap: 2.4, flexRow: true, children: tabs && jsxRuntime.jsx(index$1, { disabled: skeleton ? true : false, onChange: (value) => {
26
+ update({ tab: value });
27
+ }, value: state.tab, children: tabs.map(t => jsxRuntime.jsx(index$2, { value: t.value || t.label.toLowerCase(), children: t.label }, t.label)) }) }), jsxRuntime.jsxs(index, { flexRow: true, gap: 2, className: 'datatable-header-right-area', alignItems: "center", children: [!hideSearch && jsxRuntime.jsx(index$3, Object.assign({ disabled: skeleton ? true : false, endIcon: jsxRuntime.jsx(IconSearch, {}), placeholder: 'Search...' }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.search, { value: state.search, onChange: (e) => {
28
+ update({ search: e.target.value });
29
+ } })), filters && jsxRuntime.jsxs(index, { children: [jsxRuntime.jsx(index$4, { color: "default", variant: "text", onClick: () => {
30
+ setOpenFilter(true);
31
+ }, children: jsxRuntime.jsx(FilterListOutlined, {}) }), jsxRuntime.jsx(index$5, { open: openFilter, onClickOutside: () => { }, placement: "right", children: jsxRuntime.jsx(index$6, { height: "100%", p: 1, startContent: jsxRuntime.jsxs(index, { mb: 2, px: 2, flexRow: true, justifyContent: "space-between", alignItems: "center", children: [jsxRuntime.jsx(index$8, { fontWeight: 600, fontSize: "h6", children: "Filters" }), jsxRuntime.jsx(index$4, { size: "small", color: "default", variant: "text", onClick: () => {
32
+ setOpenFilter(false);
33
+ }, children: jsxRuntime.jsx(CloseOutlined, {}) })] }), children: jsxRuntime.jsx(index, { gap: 2, children: jsxRuntime.jsx(index$7.default, { options: filters, value: state.filters, onChange: (s) => {
34
+ update({ filters: s });
35
+ } }) }) }) })] })] })] }));
36
+ };
37
+
38
+ module.exports = FilterBox;
39
+ //# sourceMappingURL=FilterBox.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBox.cjs","sources":["../../src/Datatable/FilterBox.tsx"],"sourcesContent":["\"use client\";\r\nimport Stack from '../Stack'\r\nimport Tabs from '../Tabs'\r\nimport Tab from '../Tab'\r\nimport Input from '../Input'\r\nimport IconSearch from '@xanui/icons/Search'\r\nimport { DatatablePropsWithState } from './types';\r\nimport IconButton from '../IconButton';\r\nimport FilterListOutlined from '@xanui/icons/FilterListOutlined';\r\nimport Drawer from '../Drawer';\r\nimport Text from '../Text';\r\nimport React from 'react';\r\nimport CloseOutlined from '@xanui/icons/CloseOutlined';\r\nimport ViewBox from '../ViewBox';\r\nimport DataFilter from '../DataFilter';\r\n\r\nconst FilterBox = (props: DatatablePropsWithState) => {\r\n let {\r\n tabs,\r\n filters,\r\n hideSearch,\r\n slotProps,\r\n skeleton,\r\n state,\r\n update,\r\n } = props\r\n const [openFilter, setOpenFilter] = React.useState(false)\r\n let checked = state.selectAll || !!state.selected.length\r\n\r\n if (checked) return <></>\r\n\r\n return (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent=\"space-between\"\r\n zIndex={1}\r\n radius={1}\r\n mb={1}\r\n height={50}\r\n width=\"100%\"\r\n >\r\n <Stack gap={2.4} flexRow>\r\n {\r\n tabs && <Tabs\r\n disabled={skeleton ? true : false}\r\n onChange={(value: any) => {\r\n update({ tab: value })\r\n }}\r\n value={state.tab}\r\n >\r\n {\r\n tabs.map(t => <Tab key={t.label} value={t.value || t.label.toLowerCase()}>{t.label}</Tab>)\r\n }\r\n </Tabs>\r\n }\r\n </Stack>\r\n <Stack\r\n flexRow\r\n gap={2}\r\n className='datatable-header-right-area'\r\n alignItems={\"center\"}\r\n >\r\n {!hideSearch && <Input\r\n disabled={skeleton ? true : false}\r\n endIcon={<IconSearch />}\r\n placeholder='Search...'\r\n {...slotProps?.search}\r\n value={state.search}\r\n onChange={(e: any) => {\r\n update({ search: e.target.value })\r\n }}\r\n />}\r\n {\r\n filters && <Stack>\r\n <IconButton\r\n color=\"default\"\r\n variant={\"text\"}\r\n onClick={() => {\r\n setOpenFilter(true)\r\n }}\r\n >\r\n <FilterListOutlined />\r\n </IconButton>\r\n <Drawer\r\n open={openFilter}\r\n onClickOutside={() => { }}\r\n placement={\"right\"}\r\n >\r\n <ViewBox\r\n height=\"100%\"\r\n p={1}\r\n startContent={<Stack mb={2} px={2} flexRow justifyContent={\"space-between\"} alignItems=\"center\">\r\n <Text fontWeight={600} fontSize=\"h6\">Filters</Text>\r\n <IconButton\r\n size=\"small\"\r\n color=\"default\"\r\n variant=\"text\"\r\n onClick={() => {\r\n setOpenFilter(false)\r\n }}\r\n >\r\n <CloseOutlined />\r\n </IconButton>\r\n </Stack>}\r\n >\r\n <Stack\r\n gap={2}\r\n >\r\n <DataFilter\r\n options={filters}\r\n value={state.filters}\r\n onChange={(s) => {\r\n update({ filters: s })\r\n }}\r\n />\r\n </Stack>\r\n </ViewBox>\r\n </Drawer>\r\n </Stack>\r\n }\r\n </Stack>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default FilterBox"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAgBA;AACG;AASA;AACA;AAEA;AAAa;AAEb;AAgBkB;;;;;AAiCA;;AAoBS;AAaG;;AAWjC;;"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var tslib = require('tslib');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
7
+ var index = require('../TableRow/index.cjs');
8
+ var index$1 = require('../TableCell/index.cjs');
9
+ var index$2 = require('../Checkbox/index.cjs');
10
+ var index$3 = require('../IconButton/index.cjs');
11
+ var index$5 = require('../List/index.cjs');
12
+ var index$6 = require('../ListItem/index.cjs');
13
+ var ActionIcon = require('@xanui/icons/MoreVert');
14
+ var index$4 = require('../Menu/index.cjs');
15
+
16
+ const Row = ({ rows, rawRow, row, rowAction, disableRow, hideCheckbox, columns, compact, state, update }) => {
17
+ var _a;
18
+ const selected = row.id ? state.selected.includes(row === null || row === void 0 ? void 0 : row.id) : false;
19
+ let selectedColor = selected ? "primary.soft" : "transparent";
20
+ const [target, setTarget] = React.useState();
21
+ const isDisable = (disableRow ? disableRow(rawRow, state) : false) || false;
22
+ return (jsxRuntime.jsxs(index, { children: [!hideCheckbox && jsxRuntime.jsx(index$1, { width: 40, bgcolor: selectedColor, children: !!row.id && jsxRuntime.jsx(index$2, { size: compact ? "small" : "medium", checked: selected, onChange: () => {
23
+ if (isDisable || !row.id)
24
+ return;
25
+ let ids = [...state.selected];
26
+ ids.includes(row.id) ? ids.splice(ids.indexOf(row.id), 1) : ids.push(row.id);
27
+ let selectedLength = 0;
28
+ rows.forEach(r => {
29
+ const isDisable = (disableRow ? disableRow(r, state) : false) || false;
30
+ if (!isDisable)
31
+ selectedLength++;
32
+ });
33
+ update({
34
+ selectAll: selectedLength === ids.length,
35
+ selected: ids
36
+ });
37
+ } }) }), columns.map((_a, idx) => {
38
+ var { label, field, sortable } = _a, rest = tslib.__rest(_a, ["label", "field", "sortable"]);
39
+ field = field || label;
40
+ if (!row[field])
41
+ return jsxRuntime.jsx(index$1, {}, idx);
42
+ return (jsxRuntime.jsx(index$1, Object.assign({ textAlign: "left" }, rest, { bgcolor: selectedColor, children: row[field] }), idx));
43
+ }), !!(rows.length && rowAction && ((_a = rowAction(rows[0])) === null || _a === void 0 ? void 0 : _a.length)) && jsxRuntime.jsxs(index$1, { width: 30, bgcolor: selectedColor, borderColor: "divider", children: [jsxRuntime.jsx(index$3, { disabled: isDisable || selected, onClick: (e) => setTarget(e.currentTarget), variant: "text", color: "default", children: jsxRuntime.jsx(ActionIcon, {}) }), jsxRuntime.jsx(index$4, { target: target, placement: "bottom-right", onClickOutside: () => setTarget(null), children: jsxRuntime.jsx(index$5, { bgcolor: "background.primary", minWidth: 160, sx: {
44
+ '& > li': {
45
+ borderBottom: 1,
46
+ '&:last-child': {
47
+ borderBottom: 0
48
+ }
49
+ }
50
+ }, children: rowAction({ row, state }).map(({ label, icon, onClick }) => {
51
+ return (jsxRuntime.jsx(index$6, { startIcon: icon, onClick: (e) => {
52
+ onClick && onClick(e);
53
+ setTarget(null);
54
+ }, children: label }, label));
55
+ }) }) })] })] }));
56
+ };
57
+
58
+ module.exports = Row;
59
+ //# sourceMappingURL=Row.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Row.cjs","sources":["../../src/Datatable/Row.tsx"],"sourcesContent":["\"use client\";\r\nimport { useState } from 'react'\r\nimport TableRow from '../TableRow'\r\nimport TableCell from '../TableCell'\r\nimport Checkbox from '../Checkbox'\r\nimport IconButton from '../IconButton'\r\nimport List from '../List'\r\nimport ListItem from '../ListItem'\r\nimport ActionIcon from '@xanui/icons/MoreVert'\r\nimport Menu from '../Menu'\r\nimport { DataTableDefaultRow, DatatablePropsWithState } from './types';\r\n\r\n\r\ntype Props = DatatablePropsWithState & {\r\n rawRow: DataTableDefaultRow;\r\n row: DataTableDefaultRow;\r\n}\r\n\r\nconst Row = ({ rows, rawRow, row, rowAction, disableRow, hideCheckbox, columns, compact, state, update }: Props) => {\r\n const selected = row.id ? state.selected.includes(row?.id) : false\r\n let selectedColor = selected ? \"primary.soft\" : \"transparent\"\r\n const [target, setTarget] = useState<any>()\r\n const isDisable = (disableRow ? disableRow(rawRow, state) : false) || false\r\n\r\n return (\r\n <TableRow >\r\n {!hideCheckbox && <TableCell width={40} bgcolor={selectedColor}>\r\n {\r\n !!row.id && <Checkbox\r\n size={compact ? \"small\" : \"medium\"}\r\n checked={selected}\r\n onChange={() => {\r\n if (isDisable || !row.id) return\r\n let ids = [...state.selected]\r\n ids.includes(row.id) ? ids.splice(ids.indexOf(row.id), 1) : ids.push(row.id)\r\n let selectedLength = 0\r\n rows.forEach(r => {\r\n const isDisable = (disableRow ? disableRow(r, state) : false) || false\r\n if (!isDisable) selectedLength++\r\n })\r\n\r\n update({\r\n selectAll: selectedLength === ids.length,\r\n selected: ids\r\n })\r\n }}\r\n />\r\n }\r\n\r\n </TableCell>}\r\n {\r\n columns.map(({ label, field, sortable, ...rest }, idx) => {\r\n field = field || label\r\n if (!row[field]) return <TableCell key={idx}></TableCell>\r\n return (\r\n <TableCell\r\n key={idx}\r\n textAlign=\"left\"\r\n {...rest}\r\n bgcolor={selectedColor}\r\n >\r\n {row[field]}\r\n </TableCell>\r\n )\r\n })\r\n }\r\n {!!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell width={30} bgcolor={selectedColor} borderColor=\"divider\">\r\n <IconButton\r\n disabled={isDisable || selected}\r\n onClick={(e: any) => setTarget(e.currentTarget)}\r\n variant=\"text\"\r\n color=\"default\"\r\n >\r\n <ActionIcon />\r\n </IconButton>\r\n <Menu target={target} placement=\"bottom-right\" onClickOutside={() => setTarget(null)}>\r\n <List\r\n bgcolor=\"background.primary\"\r\n minWidth={160}\r\n sx={{\r\n '& > li': {\r\n borderBottom: 1,\r\n '&:last-child': {\r\n borderBottom: 0\r\n }\r\n }\r\n }}\r\n >\r\n {rowAction({ row, state }).map(({ label, icon, onClick }) => {\r\n return (\r\n <ListItem\r\n key={label}\r\n startIcon={icon}\r\n onClick={(e: any) => {\r\n onClick && onClick(e)\r\n setTarget(null)\r\n }}\r\n >{label}</ListItem>\r\n )\r\n })}\r\n </List>\r\n </Menu>\r\n </TableCell>\r\n }\r\n </TableRow>\r\n )\r\n}\r\n\r\nexport default Row"],"names":[],"mappings":";;;;;;;;;;;;;;;AAkBA;;;;;;;AAc4B;;;AAEA;;AAEA;;AAEI;AAAgB;AACpB;AAEA;AACI;AACA;AACH;AACL;;AAOJ;AACA;AAAiB;;;AA2BT;AACI;AACA;AACI;AACH;AACJ;;AAID;AAKY;;AAEJ;AAGZ;AAOxB;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var index$2 = require('../IconButton/index.cjs');
6
+ var index = require('../Stack/index.cjs');
7
+ var index$1 = require('../Text/index.cjs');
8
+
9
+ const SelectedBox = (props) => {
10
+ let { state, rowAction } = props;
11
+ let checked = state.selectAll || !!state.selected.length;
12
+ if (!checked)
13
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
14
+ return (jsxRuntime.jsxs(index, { bgcolor: "background.secondary", direction: "row", alignItems: "center", justifyContent: "space-between", zIndex: 1, radius: 1, mb: 1, height: 50, width: "100%", px: 1.5, children: [jsxRuntime.jsxs(index$1, { fontWeight: 600, children: ["Selected: ", state.selected.length] }), jsxRuntime.jsx(index, { flexRow: true, gap: 1, children: rowAction && rowAction({ row: null, state }).map((_a) => {
15
+ var { label, icon } = _a, bprops = tslib.__rest(_a, ["label", "icon"]);
16
+ return (jsxRuntime.jsx(index$2, Object.assign({ variant: "soft", color: "brand" }, bprops, { children: icon }), label));
17
+ }) })] }));
18
+ };
19
+
20
+ module.exports = SelectedBox;
21
+ //# sourceMappingURL=SelectedBox.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedBox.cjs","sources":["../../src/Datatable/SelectedBox.tsx"],"sourcesContent":["import IconButton from '../IconButton'\r\nimport Stack from '../Stack'\r\nimport Text from '../Text'\r\nimport { DatatablePropsWithState } from './types'\r\n\r\nconst SelectedBox = (props: DatatablePropsWithState) => {\r\n let {\r\n state,\r\n rowAction\r\n } = props\r\n\r\n let checked = state.selectAll || !!state.selected.length\r\n if (!checked) return <></>\r\n\r\n return (\r\n <Stack\r\n bgcolor=\"background.secondary\"\r\n direction=\"row\"\r\n alignItems=\"center\"\r\n justifyContent=\"space-between\"\r\n zIndex={1}\r\n radius={1}\r\n mb={1}\r\n height={50}\r\n width=\"100%\"\r\n px={1.5}\r\n >\r\n <Text fontWeight={600}>Selected: {state.selected.length}</Text>\r\n <Stack\r\n flexRow\r\n gap={1}\r\n >\r\n {rowAction && rowAction({ row: null, state }).map(({ label, icon, ...bprops }) => {\r\n return (\r\n <IconButton\r\n key={label}\r\n variant=\"soft\"\r\n color=\"brand\"\r\n {...bprops}\r\n >\r\n {icon}\r\n </IconButton>\r\n )\r\n })}\r\n </Stack>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default SelectedBox"],"names":["_jsx","_jsxs","Stack","Text","__rest","IconButton"],"mappings":";;;;;;;;AAKA,MAAM,WAAW,GAAG,CAAC,KAA8B,KAAI;AACpD,IAAA,IAAI,EACD,KAAK,EACL,SAAS,EACX,GAAG,KAAK;AAET,IAAA,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;AACxD,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAOA,uCAAK;AAE1B,IAAA,QACGC,eAAA,CAACC,KAAK,IACH,OAAO,EAAC,sBAAsB,EAC9B,SAAS,EAAC,KAAK,EACf,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,eAAe,EAC9B,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,CAAC,EACL,MAAM,EAAE,EAAE,EACV,KAAK,EAAC,MAAM,EACZ,EAAE,EAAE,GAAG,EAAA,QAAA,EAAA,CAEPD,gBAACE,OAAI,EAAA,EAAC,UAAU,EAAE,GAAG,2BAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAA,EAAA,CAAQ,EAC/DH,eAACE,KAAK,EAAA,EACH,OAAO,EAAA,IAAA,EACP,GAAG,EAAE,CAAC,YAEL,SAAS,IAAI,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAA0B,KAAI;wBAA9B,EAAE,KAAK,EAAE,IAAI,EAAA,GAAA,EAAa,EAAR,MAAM,GAAAE,YAAA,CAAA,EAAA,EAAxB,iBAA0B,CAAF;AACxE,oBAAA,QACGJ,cAAA,CAACK,OAAU,kBAER,OAAO,EAAC,MAAM,EACd,KAAK,EAAC,OAAO,EAAA,EACT,MAAM,EAAA,EAAA,QAAA,EAET,IAAI,KALA,KAAK,CAMA;AAEnB,gBAAA,CAAC,CAAC,EAAA,CACG,CAAA,EAAA,CACH;AAEd;;;;"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var TableHead = require('./TableHead.cjs');
6
+ var index = require('../Table/index.cjs');
7
+ var index$1 = require('../TableBody/index.cjs');
8
+ var Row = require('./Row.cjs');
9
+
10
+ const TableArea = (props) => {
11
+ let { rows, compact, renderRow, state, update, slotProps } = props;
12
+ return (jsxRuntime.jsxs(index, Object.assign({ width: "100%", size: compact ? "small" : "medium", border: "1px solid", borderColor: "divider" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.table, { children: [jsxRuntime.jsx(TableHead, Object.assign({}, props, { update: update, state: state })), jsxRuntime.jsx(index$1, { sx: {
13
+ '& tr:last-child td': {
14
+ borderBottom: 0
15
+ }
16
+ }, children: rows === null || rows === void 0 ? void 0 : rows.map((row, idx) => {
17
+ let _row = renderRow ? renderRow(Object.assign({}, row), state) : row;
18
+ return jsxRuntime.jsx(Row, Object.assign({ rawRow: row, row: _row }, props, { update: update, state: state }), `dt-row-${row.id}-${idx}`);
19
+ }) })] })));
20
+ };
21
+
22
+ module.exports = TableArea;
23
+ //# sourceMappingURL=Table.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.cjs","sources":["../../src/Datatable/Table.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport TableHead from './TableHead'\r\nimport Table from '../Table'\r\nimport TableBody from '../TableBody'\r\nimport Row from './Row'\r\nimport { DatatablePropsWithState } from './types';\r\n\r\nconst TableArea = (props: DatatablePropsWithState) => {\r\n let {\r\n rows,\r\n compact,\r\n renderRow,\r\n state,\r\n update,\r\n slotProps\r\n } = props\r\n\r\n return (\r\n <Table width=\"100%\" size={compact ? \"small\" : \"medium\"} border=\"1px solid\" borderColor=\"divider\" {...slotProps?.table}>\r\n <TableHead {...props} update={update} state={state} />\r\n <TableBody\r\n sx={{\r\n '& tr:last-child td': {\r\n borderBottom: 0\r\n }\r\n }}\r\n >\r\n {\r\n rows?.map((row: any, idx) => {\r\n let _row = renderRow ? renderRow({ ...row }, state) : row\r\n return <Row\r\n key={`dt-row-${row.id}-${idx}`}\r\n rawRow={row}\r\n row={_row}\r\n {...props}\r\n update={update}\r\n state={state}\r\n />\r\n })\r\n }\r\n </TableBody>\r\n </Table>\r\n )\r\n}\r\n\r\nexport default TableArea"],"names":[],"mappings":";;;;;;;;;AAQA;AACG;;AAcY;AACG;AACF;AACH;AAIK;AACA;AAQH;AAKf;;"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var tslib = require('tslib');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var index = require('../TableHead/index.cjs');
7
+ var index$1 = require('../TableRow/index.cjs');
8
+ var index$2 = require('../TableCell/index.cjs');
9
+ var index$3 = require('../Checkbox/index.cjs');
10
+ var IndeterminateCheckBoxIcon = require('@xanui/icons/IndeterminateCheckBox');
11
+ var index$4 = require('../Stack/index.cjs');
12
+ var ArrowDropDown = require('@xanui/icons/ArrowDropDown');
13
+ var ArrowDropUp = require('@xanui/icons/ArrowDropUp');
14
+ var index$5 = require('../Text/index.cjs');
15
+
16
+ const TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }) => {
17
+ var _a;
18
+ if (!columns.length)
19
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
20
+ let checked = state.selectAll || !!state.selected.length;
21
+ const sortables = state.sortable || {};
22
+ return (jsxRuntime.jsx(index, { position: "relative", children: jsxRuntime.jsxs(index$1, { bgcolor: "default", borderBottom: 1, children: [!hideCheckbox && jsxRuntime.jsx(index$2, { th: true, width: 40, children: jsxRuntime.jsx(index$3, { size: compact ? "small" : "medium", checkIcon: state.selected.length && !state.selectAll ? jsxRuntime.jsx(IndeterminateCheckBoxIcon, {}) : undefined, checked: checked, onChange: () => {
23
+ let ids = [];
24
+ let undefinedCount = 0;
25
+ for (let i = 0; i < rows.length; i++) {
26
+ const row = rows[i];
27
+ const isDisable = (disableRow ? disableRow(row, state) : false) || false;
28
+ if (!isDisable && row.id) {
29
+ ids.push(row.id);
30
+ }
31
+ else {
32
+ undefinedCount += 1;
33
+ }
34
+ }
35
+ if (undefinedCount) {
36
+ update({
37
+ selected: state.selected.length ? [] : ids,
38
+ selectAll: !state.selected.length
39
+ });
40
+ }
41
+ else {
42
+ update({
43
+ selected: state.selectAll ? [] : ids,
44
+ selectAll: !state.selectAll
45
+ });
46
+ }
47
+ } }) }), columns.map((_a, idx) => {
48
+ var { label, field: _f, sortable } = _a, rest = tslib.__rest(_a, ["label", "field", "sortable"]);
49
+ return jsxRuntime.jsx(index$2, Object.assign({ th: true, textAlign: "left" }, rest, { children: jsxRuntime.jsxs(index$4, { disabled: skeleton ? true : false, flexRow: true, alignItems: "center", cursor: sortable ? "pointer" : "default", userSelect: "none", onClick: () => {
50
+ if (sortable) {
51
+ let newSort = sortables[_f] === 'asc' ? 'desc' : 'asc';
52
+ update({
53
+ sortable: Object.assign(Object.assign({}, sortables), { [_f]: newSort })
54
+ });
55
+ }
56
+ }, children: [jsxRuntime.jsx(index$5, { color: "text.secondary", children: label }), sortable && jsxRuntime.jsx(jsxRuntime.Fragment, { children: sortables[_f] === 'asc' ? jsxRuntime.jsx(ArrowDropDown, {}) : jsxRuntime.jsx(ArrowDropUp, {}) })] }) }), idx);
57
+ }), !!(rows.length && rowAction && ((_a = rowAction(rows[0])) === null || _a === void 0 ? void 0 : _a.length)) && jsxRuntime.jsx(index$2, { th: true, width: 30 })] }) }));
58
+ };
59
+
60
+ module.exports = TableHeadRender;
61
+ //# sourceMappingURL=TableHead.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHead.cjs","sources":["../../src/Datatable/TableHead.tsx"],"sourcesContent":["\"use client\";\r\nimport TableHead from '../TableHead'\r\nimport TableRow from '../TableRow'\r\nimport TableCell from '../TableCell'\r\nimport Checkbox from '../Checkbox'\r\nimport IntermidiatIcon from '@xanui/icons/IndeterminateCheckBox'\r\nimport { DatatablePropsWithState } from './types';\r\nimport Stack from '../Stack';\r\nimport ArrowDropDown from '@xanui/icons/ArrowDropDown';\r\nimport ArrowDropUp from '@xanui/icons/ArrowDropUp';\r\nimport Text from '../Text';\r\n\r\n\r\nconst TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }: DatatablePropsWithState) => {\r\n if (!columns.length) return <></>\r\n let checked = state.selectAll || !!state.selected.length\r\n const sortables = state.sortable || {}\r\n\r\n return (\r\n <TableHead position=\"relative\">\r\n <TableRow bgcolor=\"default\" borderBottom={1} >\r\n {!hideCheckbox && <TableCell th width={40}>\r\n <Checkbox\r\n size={compact ? \"small\" : \"medium\"}\r\n checkIcon={state.selected.length && !state.selectAll ? <IntermidiatIcon /> : undefined}\r\n checked={checked}\r\n onChange={() => {\r\n let ids: any = []\r\n let undefinedCount = 0\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i]\r\n const isDisable = (disableRow ? disableRow(row, state) : false) || false\r\n if (!isDisable && row.id) {\r\n ids.push(row.id)\r\n } else {\r\n undefinedCount += 1\r\n }\r\n }\r\n\r\n if (undefinedCount) {\r\n update({\r\n selected: state.selected.length ? [] : ids,\r\n selectAll: !state.selected.length\r\n })\r\n } else {\r\n update({\r\n selected: state.selectAll ? [] : ids,\r\n selectAll: !state.selectAll\r\n })\r\n }\r\n }}\r\n />\r\n </TableCell>}\r\n {\r\n columns.map(({ label, field: _f, sortable, ...rest }, idx) => <TableCell\r\n key={idx}\r\n th\r\n textAlign=\"left\"\r\n {...rest}\r\n >\r\n <Stack\r\n disabled={skeleton ? true : false}\r\n flexRow\r\n alignItems=\"center\"\r\n cursor={sortable ? \"pointer\" : \"default\"}\r\n userSelect={\"none\"}\r\n onClick={() => {\r\n\r\n if (sortable) {\r\n let newSort: any = sortables[_f as any] === 'asc' ? 'desc' : 'asc'\r\n update({\r\n sortable: {\r\n ...sortables,\r\n [_f as any]: newSort\r\n }\r\n })\r\n }\r\n }}\r\n >\r\n <Text color=\"text.secondary\">{label}</Text>\r\n {sortable && <>\r\n {\r\n sortables[_f as any] === 'asc' ? <ArrowDropDown /> : <ArrowDropUp />\r\n }\r\n </>}\r\n </Stack>\r\n </TableCell>)\r\n }\r\n {\r\n !!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell th width={30} />\r\n }\r\n </TableRow>\r\n </TableHead>\r\n )\r\n}\r\n\r\nexport default TableHeadRender\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAaA;;;AACyB;AACrB;AACA;AAEA;;;AAWwB;AACI;;AAEA;AACI;;;;;;;AAOJ;AACI;AACA;AACH;;;AAED;;AAEI;AACH;;AAET;AAIS;;;AAeG;AACA;;AAKC;;AAET;AASI;AAQhC;;"}
@@ -0,0 +1,93 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var tslib = require('tslib');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
7
+ var index$1 = require('../ViewBox/index.cjs');
8
+ var core = require('@xanui/core');
9
+ var SelectedBox = require('./SelectedBox.cjs');
10
+ var Table = require('./Table.cjs');
11
+ var FilterBox = require('./FilterBox.cjs');
12
+ var index$3 = require('../TablePagination/index.cjs');
13
+ var index$2 = require('../Stack/index.cjs');
14
+ var index = require('../Skeleton/index.cjs');
15
+
16
+ const DataTable = React.forwardRef((props, ref) => {
17
+ let [p] = core.useInterface("Datatable", props, {});
18
+ let _props = React.useMemo(() => {
19
+ let np = Object.assign({}, p);
20
+ if (typeof np.skeleton === 'number' || np.skeleton === true) {
21
+ const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10;
22
+ let length = np.skeleton === true ? limit : np.skeleton;
23
+ if (!np.hideCheckbox) {
24
+ np.columns = [{
25
+ label: '', field: "__checkbox", width: 34
26
+ }, ...np.columns];
27
+ }
28
+ if (np.rowAction) {
29
+ np.columns = [...np.columns, { label: "", field: "__actions", width: 34 }];
30
+ }
31
+ let columns = np.columns || [];
32
+ np.rows = [];
33
+ for (let i = 0; i < length; i++) {
34
+ let r = { id: i };
35
+ for (let col of columns) {
36
+ r[col.field] = "";
37
+ }
38
+ np.rows.push(r);
39
+ }
40
+ np.renderRow = (r) => {
41
+ for (let col of columns) {
42
+ r[col.field] = jsxRuntime.jsx(index, { animation: "wave", height: 16, radius: .5, width: "100%" });
43
+ }
44
+ return r;
45
+ };
46
+ np.hideCheckbox = true;
47
+ np.rowAction = undefined;
48
+ }
49
+ return np;
50
+ }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows]);
51
+ let { rows, tabs, pagination: { perpages = [30, 50, 100], total = 0 } = {}, defaultState = {}, onStateChange, fixedHeader, hidePagination, slotProps,
52
+ // skip props for ViewBox
53
+ skeleton, rowAction, disableRow, renderRow, filters, hideCheckbox, hideSearch, columns, compact } = _props, viewBoxProps = tslib.__rest(_props, ["rows", "tabs", "pagination", "defaultState", "onStateChange", "fixedHeader", "hidePagination", "slotProps", "skeleton", "rowAction", "disableRow", "renderRow", "filters", "hideCheckbox", "hideSearch", "columns", "compact"]);
54
+ const [state, setState] = React.useState({
55
+ selected: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.selected) || [],
56
+ selectAll: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.selectAll) || false,
57
+ pagination: {
58
+ page: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.page) || 1,
59
+ perpage: perpages && perpages.length > 0 ? perpages[0] : 10,
60
+ from: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.from) || 1,
61
+ to: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.to) || (perpages && perpages.length > 0 ? perpages[0] : 10),
62
+ },
63
+ tab: tabs ? ((defaultState === null || defaultState === void 0 ? void 0 : defaultState.tab) || tabs[0].value || tabs[0].label.toLowerCase()) : "",
64
+ search: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.search) || "",
65
+ sortable: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.sortable) || {},
66
+ filters: (defaultState === null || defaultState === void 0 ? void 0 : defaultState.filter) || {}
67
+ });
68
+ const update = (s) => setState(o => (Object.assign(Object.assign({}, o), s)));
69
+ React.useEffect(() => {
70
+ if (onStateChange) {
71
+ onStateChange(state);
72
+ }
73
+ }, [state]);
74
+ return (jsxRuntime.jsxs(index$1, Object.assign({ height: "100%" }, viewBoxProps, { baseClass: 'datatable', ref: ref, sx: Object.assign(Object.assign({}, viewBoxProps === null || viewBoxProps === void 0 ? void 0 : viewBoxProps.sx), { '& thead': fixedHeader ? {
75
+ position: "sticky",
76
+ top: 0,
77
+ bgcolor: "background.primary",
78
+ zIndex: 1
79
+ } : {} }), startContent: (jsxRuntime.jsxs(core.Tag, { baseClass: 'datatable-header', sxr: {
80
+ display: "flex",
81
+ flexDirection: "row",
82
+ justifyContent: "space-between"
83
+ }, children: [jsxRuntime.jsx(SelectedBox, Object.assign({}, _props, { update: update, state: state })), jsxRuntime.jsx(FilterBox, Object.assign({}, _props, { update: update, state: state }))] })), children: [jsxRuntime.jsx(Table, Object.assign({}, _props, { update: update, state: state })), jsxRuntime.jsx(index$2, { p: 1, alignItems: "flex-end", children: !hidePagination && jsxRuntime.jsx(index$3, Object.assign({ disabled: _props.skeleton ? true : false }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.pagination, { total: total || rows.length, page: state.pagination.page, perpage: state.pagination.perpage, perpages: perpages, slotProps: {
84
+ select: {
85
+ size: "small",
86
+ }
87
+ }, onChange: (state) => {
88
+ update({ pagination: state });
89
+ } })) })] })));
90
+ });
91
+
92
+ module.exports = DataTable;
93
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/Datatable/index.tsx"],"sourcesContent":["\"use client\";\r\nimport React, { useEffect, useMemo, useState } from 'react'\r\nimport ViewBox from '../ViewBox'\r\nimport { Tag, useInterface } from '@xanui/core';\r\nimport SelectedBox from './SelectedBox'\r\nimport TableArea from './Table'\r\nimport FilterBox from './FilterBox'\r\nimport TablePagination, { TablePaginationState } from '../TablePagination'\r\nimport Stack from '../Stack'\r\nimport { DatatableProps, DatatableState } from './types';\r\nimport Skeleton from '../Skeleton';\r\n\r\n\r\nconst DataTable = React.forwardRef((props: DatatableProps, ref: React.Ref<HTMLDivElement>) => {\r\n let [p] = useInterface<any>(\"Datatable\", props, {})\r\n\r\n let _props = useMemo(() => {\r\n let np = { ...p }\r\n\r\n if (typeof np.skeleton === 'number' || np.skeleton === true) {\r\n const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10\r\n let length = np.skeleton === true ? limit : np.skeleton\r\n\r\n if (!np.hideCheckbox) {\r\n np.columns = [{\r\n label: '', field: \"__checkbox\", width: 34\r\n }, ...np.columns]\r\n }\r\n\r\n if (np.rowAction) {\r\n np.columns = [...np.columns, { label: \"\", field: \"__actions\", width: 34 }]\r\n }\r\n\r\n let columns = np.columns || []\r\n\r\n np.rows = []\r\n for (let i = 0; i < length; i++) {\r\n let r: any = { id: i }\r\n for (let col of columns) {\r\n r[col.field] = \"\"\r\n }\r\n np.rows.push(r)\r\n }\r\n\r\n np.renderRow = (r: any) => {\r\n for (let col of columns) {\r\n r[col.field] = <Skeleton\r\n animation={\"wave\"}\r\n height={16}\r\n radius={.5}\r\n width={\"100%\"}\r\n />\r\n }\r\n return r\r\n }\r\n np.hideCheckbox = true\r\n np.rowAction = undefined\r\n }\r\n return np\r\n }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows])\r\n\r\n let {\r\n rows,\r\n tabs,\r\n\r\n pagination: { perpages = [30, 50, 100], total = 0 } = {},\r\n defaultState = {},\r\n onStateChange,\r\n\r\n fixedHeader,\r\n hidePagination,\r\n slotProps,\r\n\r\n\r\n // skip props for ViewBox\r\n skeleton,\r\n rowAction,\r\n disableRow,\r\n renderRow,\r\n filters,\r\n hideCheckbox,\r\n hideSearch,\r\n columns,\r\n compact,\r\n\r\n ...viewBoxProps\r\n } = _props\r\n\r\n const [state, setState] = useState<DatatableState>({\r\n selected: defaultState?.selected || [],\r\n selectAll: defaultState?.selectAll || false,\r\n pagination: {\r\n page: defaultState?.page || 1,\r\n perpage: perpages && perpages.length > 0 ? perpages[0] : 10,\r\n from: defaultState?.from || 1,\r\n to: defaultState?.to || (perpages && perpages.length > 0 ? perpages[0] : 10),\r\n },\r\n tab: tabs ? (defaultState?.tab || tabs[0].value || tabs[0].label.toLowerCase()) : \"\",\r\n search: defaultState?.search || \"\",\r\n sortable: defaultState?.sortable || {},\r\n filters: defaultState?.filter || {}\r\n })\r\n\r\n const update = (s: Partial<DatatableState>) => setState(o => ({ ...o, ...s }))\r\n\r\n useEffect(() => {\r\n if (onStateChange) {\r\n onStateChange(state)\r\n }\r\n }, [state])\r\n\r\n return (\r\n <ViewBox\r\n height=\"100%\"\r\n {...viewBoxProps}\r\n baseClass='datatable'\r\n ref={ref as any}\r\n sx={{\r\n ...viewBoxProps?.sx,\r\n '& thead': fixedHeader ? {\r\n position: \"sticky\",\r\n top: 0,\r\n bgcolor: \"background.primary\",\r\n zIndex: 1\r\n } : {},\r\n }}\r\n startContent={(\r\n <Tag\r\n baseClass='datatable-header'\r\n sxr={{\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\"\r\n }}\r\n >\r\n <SelectedBox {..._props} update={update} state={state} />\r\n <FilterBox {..._props} update={update} state={state} />\r\n </Tag>\r\n )}\r\n >\r\n <TableArea\r\n {..._props}\r\n update={update}\r\n state={state}\r\n />\r\n <Stack\r\n p={1}\r\n alignItems=\"flex-end\"\r\n >\r\n {!hidePagination && <TablePagination\r\n disabled={_props.skeleton ? true : false}\r\n {...slotProps?.pagination}\r\n total={total || rows.length}\r\n page={state.pagination.page}\r\n perpage={state.pagination.perpage}\r\n perpages={perpages}\r\n slotProps={{\r\n select: {\r\n size: \"small\",\r\n }\r\n }}\r\n onChange={(state: TablePaginationState) => {\r\n update({ pagination: state })\r\n }}\r\n />}\r\n </Stack>\r\n </ViewBox>\r\n )\r\n})\r\n\r\nexport default DataTable"],"names":[],"mappings":";;;;;;;;;;;;;;;AAaA;AACI;AAEA;AACI;AAEA;;AAEI;AAEA;;;AAGK;;AAGL;;;AAIA;AAEA;AACA;AACI;AACA;AACI;;AAEJ;;AAGJ;AACI;;;AAQA;AACJ;AACA;AACA;;AAEJ;;AAGJ;;;AA2BA;;;AAGI;;AAEI;;AAEA;AACH;AACD;;;;AAIH;AAED;;;;;AAMA;AAEA;AASgB;AACA;AACA;AACA;AACH;AAMO;AACA;AACA;;AAyBA;AACI;AACH;AACJ;AAEG;AACJ;AAKpB;;"}