@xanui/ui 1.1.45 → 1.1.47

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.
@@ -9,9 +9,8 @@ var index$2 = require('../TableCell/index.cjs');
9
9
  var index$3 = require('../Checkbox/index.cjs');
10
10
  var IndeterminateCheckBoxIcon = require('@xanui/icons/IndeterminateCheckBox');
11
11
  var index$4 = require('../Stack/index.cjs');
12
- var ArrowDropDown = require('@xanui/icons/ArrowDropDown');
13
- var ArrowDropUp = require('@xanui/icons/ArrowDropUp');
14
12
  var index$5 = require('../Text/index.cjs');
13
+ var SwitchRight = require('@xanui/icons/SwitchRight');
15
14
 
16
15
  const TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }) => {
17
16
  var _a;
@@ -46,14 +45,26 @@ const TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, c
46
45
  }
47
46
  } }) }), columns.map((_a, idx) => {
48
47
  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: () => {
48
+ 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", gap: .5, onClick: () => {
50
49
  if (sortable) {
51
- sortables[_f] = sortables[_f] === 'desc' ? 'asc' : 'desc';
50
+ let v = sortables[_f];
51
+ if (!v) {
52
+ sortables[_f] = 'asc';
53
+ }
54
+ else if (v === 'asc') {
55
+ sortables[_f] = 'desc';
56
+ }
57
+ else {
58
+ delete sortables[_f];
59
+ }
52
60
  update({
53
61
  sortable: sortables
54
62
  });
55
63
  }
56
- }, children: [jsxRuntime.jsx(index$5, { color: "text.secondary", children: label }), sortable && jsxRuntime.jsx(jsxRuntime.Fragment, { children: sortables[_f] === 'desc' ? jsxRuntime.jsx(ArrowDropUp, {}) : jsxRuntime.jsx(ArrowDropDown, {}) })] }) }), idx);
64
+ }, children: [jsxRuntime.jsx(index$5, { color: "text.secondary", fontWeight: 600, children: label }), sortable && jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(SwitchRight, { opacity: sortables[_f] ? 1 : .3, color: sortables[_f] ? 'brand' : 'text.secondary', sx: {
65
+ fontSize: 23,
66
+ transform: sortables[_f] === 'desc' ? 'rotate(-90deg)' : 'rotate(90deg)',
67
+ } }) })] }) }), idx);
57
68
  }), !!(rows.length && rowAction && ((_a = rowAction(rows[0])) === null || _a === void 0 ? void 0 : _a.length)) && jsxRuntime.jsx(index$2, { th: true, width: 30 })] }) }));
58
69
  };
59
70
 
@@ -1 +1 @@
1
- {"version":3,"file":"TableHead.cjs","sources":["../../src/Datatable/TableHead.tsx"],"sourcesContent":["\"use client\";\nimport TableHead from '../TableHead'\nimport TableRow from '../TableRow'\nimport TableCell from '../TableCell'\nimport Checkbox from '../Checkbox'\nimport IntermidiatIcon from '@xanui/icons/IndeterminateCheckBox'\nimport { DatatablePropsWithState } from './types';\nimport Stack from '../Stack';\nimport ArrowDropDown from '@xanui/icons/ArrowDropDown';\nimport ArrowDropUp from '@xanui/icons/ArrowDropUp';\nimport Text from '../Text';\n\n\nconst TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }: DatatablePropsWithState) => {\n if (!columns.length) return <></>\n let checked = state.selectAll || !!state.selected.length\n let sortables = state.sortable || {}\n\n return (\n <TableHead position=\"relative\">\n <TableRow bgcolor=\"default\" borderBottom={1} >\n {!hideCheckbox && <TableCell th width={40}>\n <Checkbox\n size={compact ? \"small\" : \"medium\"}\n checkIcon={state.selected.length && !state.selectAll ? <IntermidiatIcon /> : undefined}\n checked={checked}\n onChange={() => {\n let ids: any = []\n let undefinedCount = 0\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const isDisable = (disableRow ? disableRow(row, state) : false) || false\n if (!isDisable && row.id) {\n ids.push(row.id)\n } else {\n undefinedCount += 1\n }\n }\n\n if (undefinedCount) {\n update({\n selected: state.selected.length ? [] : ids,\n selectAll: !state.selected.length\n })\n } else {\n update({\n selected: state.selectAll ? [] : ids,\n selectAll: !state.selectAll\n })\n }\n }}\n />\n </TableCell>}\n {\n columns.map(({ label, field: _f, sortable, ...rest }, idx) => <TableCell\n key={idx}\n th\n textAlign=\"left\"\n {...rest}\n >\n <Stack\n disabled={skeleton ? true : false}\n flexRow\n alignItems=\"center\"\n cursor={sortable ? \"pointer\" : \"default\"}\n userSelect={\"none\"}\n onClick={() => {\n if (sortable) {\n sortables[_f as any] = sortables[_f as any] === 'desc' ? 'asc' : 'desc'\n update({\n sortable: sortables\n })\n }\n }}\n >\n <Text color=\"text.secondary\">{label}</Text>\n {sortable && <>\n {\n sortables[_f as any] === 'desc' ? <ArrowDropUp /> : <ArrowDropDown />\n }\n </>}\n </Stack>\n </TableCell>)\n }\n {\n !!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell th width={30} />\n }\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TableHeadRender\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAaA;;;AACyB;AACrB;AACA;AAEA;;;AAWwB;AACI;;AAEA;AACI;;;;;;;AAOJ;AACI;AACA;AACH;;;AAED;;AAEI;AACH;;AAET;AAIS;;;AAcG;AACA;AACI;AACH;;AAET;AASI;AAQhC;;"}
1
+ {"version":3,"file":"TableHead.cjs","sources":["../../src/Datatable/TableHead.tsx"],"sourcesContent":["\"use client\";\nimport TableHead from '../TableHead'\nimport TableRow from '../TableRow'\nimport TableCell from '../TableCell'\nimport Checkbox from '../Checkbox'\nimport IntermidiatIcon from '@xanui/icons/IndeterminateCheckBox'\nimport { DatatablePropsWithState } from './types';\nimport Stack from '../Stack';\nimport Text from '../Text';\nimport SwitchRight from '@xanui/icons/SwitchRight';\n\nconst TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }: DatatablePropsWithState) => {\n if (!columns.length) return <></>\n let checked = state.selectAll || !!state.selected.length\n let sortables = state.sortable || {}\n\n return (\n <TableHead position=\"relative\">\n <TableRow bgcolor=\"default\" borderBottom={1} >\n {!hideCheckbox && <TableCell th width={40}>\n <Checkbox\n size={compact ? \"small\" : \"medium\"}\n checkIcon={state.selected.length && !state.selectAll ? <IntermidiatIcon /> : undefined}\n checked={checked}\n onChange={() => {\n let ids: any = []\n let undefinedCount = 0\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const isDisable = (disableRow ? disableRow(row, state) : false) || false\n if (!isDisable && row.id) {\n ids.push(row.id)\n } else {\n undefinedCount += 1\n }\n }\n\n if (undefinedCount) {\n update({\n selected: state.selected.length ? [] : ids,\n selectAll: !state.selected.length\n })\n } else {\n update({\n selected: state.selectAll ? [] : ids,\n selectAll: !state.selectAll\n })\n }\n }}\n />\n </TableCell>}\n {\n columns.map(({ label, field: _f, sortable, ...rest }, idx) => <TableCell\n key={idx}\n th\n textAlign=\"left\"\n {...rest}\n >\n <Stack\n disabled={skeleton ? true : false}\n flexRow\n alignItems=\"center\"\n cursor={sortable ? \"pointer\" : \"default\"}\n userSelect={\"none\"}\n gap={.5}\n onClick={() => {\n if (sortable) {\n let v = sortables[_f as any]\n if (!v) {\n sortables[_f as any] = 'asc'\n } else if (v === 'asc') {\n sortables[_f as any] = 'desc'\n } else {\n delete sortables[_f as any]\n }\n update({\n sortable: sortables\n })\n }\n }}\n >\n <Text color=\"text.secondary\" fontWeight={600}>{label}</Text>\n {sortable && <>\n <SwitchRight\n opacity={sortables[_f as any] ? 1 : .3}\n color={sortables[_f as any] ? 'brand' : 'text.secondary'}\n sx={{\n fontSize: 23,\n transform: sortables[_f as any] === 'desc' ? 'rotate(-90deg)' : 'rotate(90deg)',\n }}\n />\n </>}\n </Stack>\n </TableCell>)\n }\n {\n !!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell th width={30} />\n }\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TableHeadRender\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA;;;AACyB;AACrB;AACA;AAEA;;;AAWwB;AACI;;AAEA;AACI;;;;;;;AAOJ;AACI;AACA;AACH;;;AAED;;AAEI;AACH;;AAET;AAIS;;;AAeG;;AAEI;;AACG;AACH;;;AAEA;;AAEJ;AACI;AACH;;;AAUG;AACA;AACH;AAIL;AAQhC;;"}
@@ -7,9 +7,8 @@ import TableCell from '../TableCell/index.js';
7
7
  import Checkbox from '../Checkbox/index.js';
8
8
  import IndeterminateCheckBoxIcon from '@xanui/icons/IndeterminateCheckBox';
9
9
  import Stack from '../Stack/index.js';
10
- import ArrowDropDown from '@xanui/icons/ArrowDropDown';
11
- import ArrowDropUp from '@xanui/icons/ArrowDropUp';
12
10
  import Text from '../Text/index.js';
11
+ import SwitchRight from '@xanui/icons/SwitchRight';
13
12
 
14
13
  const TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }) => {
15
14
  var _a;
@@ -44,14 +43,26 @@ const TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, c
44
43
  }
45
44
  } }) }), columns.map((_a, idx) => {
46
45
  var { label, field: _f, sortable } = _a, rest = __rest(_a, ["label", "field", "sortable"]);
47
- return jsx(TableCell, Object.assign({ th: true, textAlign: "left" }, rest, { children: jsxs(Stack, { disabled: skeleton ? true : false, flexRow: true, alignItems: "center", cursor: sortable ? "pointer" : "default", userSelect: "none", onClick: () => {
46
+ return jsx(TableCell, Object.assign({ th: true, textAlign: "left" }, rest, { children: jsxs(Stack, { disabled: skeleton ? true : false, flexRow: true, alignItems: "center", cursor: sortable ? "pointer" : "default", userSelect: "none", gap: .5, onClick: () => {
48
47
  if (sortable) {
49
- sortables[_f] = sortables[_f] === 'desc' ? 'asc' : 'desc';
48
+ let v = sortables[_f];
49
+ if (!v) {
50
+ sortables[_f] = 'asc';
51
+ }
52
+ else if (v === 'asc') {
53
+ sortables[_f] = 'desc';
54
+ }
55
+ else {
56
+ delete sortables[_f];
57
+ }
50
58
  update({
51
59
  sortable: sortables
52
60
  });
53
61
  }
54
- }, children: [jsx(Text, { color: "text.secondary", children: label }), sortable && jsx(Fragment, { children: sortables[_f] === 'desc' ? jsx(ArrowDropUp, {}) : jsx(ArrowDropDown, {}) })] }) }), idx);
62
+ }, children: [jsx(Text, { color: "text.secondary", fontWeight: 600, children: label }), sortable && jsx(Fragment, { children: jsx(SwitchRight, { opacity: sortables[_f] ? 1 : .3, color: sortables[_f] ? 'brand' : 'text.secondary', sx: {
63
+ fontSize: 23,
64
+ transform: sortables[_f] === 'desc' ? 'rotate(-90deg)' : 'rotate(90deg)',
65
+ } }) })] }) }), idx);
55
66
  }), !!(rows.length && rowAction && ((_a = rowAction(rows[0])) === null || _a === void 0 ? void 0 : _a.length)) && jsx(TableCell, { th: true, width: 30 })] }) }));
56
67
  };
57
68
 
@@ -1 +1 @@
1
- {"version":3,"file":"TableHead.js","sources":["../../src/Datatable/TableHead.tsx"],"sourcesContent":["\"use client\";\nimport TableHead from '../TableHead'\nimport TableRow from '../TableRow'\nimport TableCell from '../TableCell'\nimport Checkbox from '../Checkbox'\nimport IntermidiatIcon from '@xanui/icons/IndeterminateCheckBox'\nimport { DatatablePropsWithState } from './types';\nimport Stack from '../Stack';\nimport ArrowDropDown from '@xanui/icons/ArrowDropDown';\nimport ArrowDropUp from '@xanui/icons/ArrowDropUp';\nimport Text from '../Text';\n\n\nconst TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }: DatatablePropsWithState) => {\n if (!columns.length) return <></>\n let checked = state.selectAll || !!state.selected.length\n let sortables = state.sortable || {}\n\n return (\n <TableHead position=\"relative\">\n <TableRow bgcolor=\"default\" borderBottom={1} >\n {!hideCheckbox && <TableCell th width={40}>\n <Checkbox\n size={compact ? \"small\" : \"medium\"}\n checkIcon={state.selected.length && !state.selectAll ? <IntermidiatIcon /> : undefined}\n checked={checked}\n onChange={() => {\n let ids: any = []\n let undefinedCount = 0\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const isDisable = (disableRow ? disableRow(row, state) : false) || false\n if (!isDisable && row.id) {\n ids.push(row.id)\n } else {\n undefinedCount += 1\n }\n }\n\n if (undefinedCount) {\n update({\n selected: state.selected.length ? [] : ids,\n selectAll: !state.selected.length\n })\n } else {\n update({\n selected: state.selectAll ? [] : ids,\n selectAll: !state.selectAll\n })\n }\n }}\n />\n </TableCell>}\n {\n columns.map(({ label, field: _f, sortable, ...rest }, idx) => <TableCell\n key={idx}\n th\n textAlign=\"left\"\n {...rest}\n >\n <Stack\n disabled={skeleton ? true : false}\n flexRow\n alignItems=\"center\"\n cursor={sortable ? \"pointer\" : \"default\"}\n userSelect={\"none\"}\n onClick={() => {\n if (sortable) {\n sortables[_f as any] = sortables[_f as any] === 'desc' ? 'asc' : 'desc'\n update({\n sortable: sortables\n })\n }\n }}\n >\n <Text color=\"text.secondary\">{label}</Text>\n {sortable && <>\n {\n sortables[_f as any] === 'desc' ? <ArrowDropUp /> : <ArrowDropDown />\n }\n </>}\n </Stack>\n </TableCell>)\n }\n {\n !!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell th width={30} />\n }\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TableHeadRender\n"],"names":[],"mappings":";;;;;;;;;;;;;AAaA;;;AACyB;AACrB;AACA;AAEA;;;AAWwB;AACI;;AAEA;AACI;;;;;;;AAOJ;AACI;AACA;AACH;;;AAED;;AAEI;AACH;;AAET;AAIS;;;AAcG;AACA;AACI;AACH;;AAET;AASI;AAQhC;;"}
1
+ {"version":3,"file":"TableHead.js","sources":["../../src/Datatable/TableHead.tsx"],"sourcesContent":["\"use client\";\nimport TableHead from '../TableHead'\nimport TableRow from '../TableRow'\nimport TableCell from '../TableCell'\nimport Checkbox from '../Checkbox'\nimport IntermidiatIcon from '@xanui/icons/IndeterminateCheckBox'\nimport { DatatablePropsWithState } from './types';\nimport Stack from '../Stack';\nimport Text from '../Text';\nimport SwitchRight from '@xanui/icons/SwitchRight';\n\nconst TableHeadRender = ({ columns, rows, disableRow, rowAction, hideCheckbox, compact, skeleton, state, update }: DatatablePropsWithState) => {\n if (!columns.length) return <></>\n let checked = state.selectAll || !!state.selected.length\n let sortables = state.sortable || {}\n\n return (\n <TableHead position=\"relative\">\n <TableRow bgcolor=\"default\" borderBottom={1} >\n {!hideCheckbox && <TableCell th width={40}>\n <Checkbox\n size={compact ? \"small\" : \"medium\"}\n checkIcon={state.selected.length && !state.selectAll ? <IntermidiatIcon /> : undefined}\n checked={checked}\n onChange={() => {\n let ids: any = []\n let undefinedCount = 0\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const isDisable = (disableRow ? disableRow(row, state) : false) || false\n if (!isDisable && row.id) {\n ids.push(row.id)\n } else {\n undefinedCount += 1\n }\n }\n\n if (undefinedCount) {\n update({\n selected: state.selected.length ? [] : ids,\n selectAll: !state.selected.length\n })\n } else {\n update({\n selected: state.selectAll ? [] : ids,\n selectAll: !state.selectAll\n })\n }\n }}\n />\n </TableCell>}\n {\n columns.map(({ label, field: _f, sortable, ...rest }, idx) => <TableCell\n key={idx}\n th\n textAlign=\"left\"\n {...rest}\n >\n <Stack\n disabled={skeleton ? true : false}\n flexRow\n alignItems=\"center\"\n cursor={sortable ? \"pointer\" : \"default\"}\n userSelect={\"none\"}\n gap={.5}\n onClick={() => {\n if (sortable) {\n let v = sortables[_f as any]\n if (!v) {\n sortables[_f as any] = 'asc'\n } else if (v === 'asc') {\n sortables[_f as any] = 'desc'\n } else {\n delete sortables[_f as any]\n }\n update({\n sortable: sortables\n })\n }\n }}\n >\n <Text color=\"text.secondary\" fontWeight={600}>{label}</Text>\n {sortable && <>\n <SwitchRight\n opacity={sortables[_f as any] ? 1 : .3}\n color={sortables[_f as any] ? 'brand' : 'text.secondary'}\n sx={{\n fontSize: 23,\n transform: sortables[_f as any] === 'desc' ? 'rotate(-90deg)' : 'rotate(90deg)',\n }}\n />\n </>}\n </Stack>\n </TableCell>)\n }\n {\n !!(rows.length && rowAction && rowAction((rows as any)[0])?.length) && <TableCell th width={30} />\n }\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TableHeadRender\n"],"names":[],"mappings":";;;;;;;;;;;;AAWA;;;AACyB;AACrB;AACA;AAEA;;;AAWwB;AACI;;AAEA;AACI;;;;;;;AAOJ;AACI;AACA;AACH;;;AAED;;AAEI;AACH;;AAET;AAIS;;;AAeG;;AAEI;;AACG;AACH;;;AAEA;;AAEJ;AACI;AACH;;;AAUG;AACA;AACH;AAIL;AAQhC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/Datatable/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useMemo } from 'react'\nimport ViewBox from '../ViewBox'\nimport { Tag, useInterface } from '@xanui/core';\nimport SelectedBox from './SelectedBox'\nimport TableArea from './Table'\nimport FilterBox from './FilterBox'\nimport TablePagination, { TablePaginationState } from '../TablePagination'\nimport Stack from '../Stack'\nimport { DatatableProps, DatatableState } from './types';\nimport Skeleton from '../Skeleton';\n\n\nconst DataTable = React.forwardRef((props: DatatableProps, ref: React.Ref<HTMLDivElement>) => {\n let [p] = useInterface<any>(\"Datatable\", props, {})\n\n let _props = useMemo(() => {\n let np = { ...p }\n\n if (typeof np.skeleton === 'number' || np.skeleton === true) {\n const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10\n let length = np.skeleton === true ? limit : np.skeleton\n\n if (!np.hideCheckbox) {\n np.columns = [{\n label: '', field: \"__checkbox\", width: 34\n }, ...np.columns]\n }\n\n if (np.rowAction) {\n np.columns = [...np.columns, { label: \"\", field: \"__actions\", width: 34 }]\n }\n\n let columns = np.columns || []\n\n np.rows = []\n for (let i = 0; i < length; i++) {\n let r: any = { id: i }\n for (let col of columns) {\n r[col.field] = \"\"\n }\n np.rows.push(r)\n }\n\n np.renderRow = (r: any) => {\n for (let col of columns) {\n r[col.field] = <Skeleton\n animation={\"wave\"}\n height={16}\n radius={.5}\n width={\"100%\"}\n />\n }\n return r\n }\n np.hideCheckbox = true\n np.rowAction = undefined\n }\n return np\n }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows])\n\n let {\n rows,\n tabs,\n\n pagination: { perpages = [30, 50, 100], total = 0 } = {},\n state: userState = {},\n onChange,\n\n fixedHeader,\n hidePagination,\n slotProps,\n\n\n // skip props for ViewBox\n skeleton,\n rowAction,\n disableRow,\n renderRow,\n filters,\n hideCheckbox,\n hideSearch,\n columns,\n compact,\n\n ...viewBoxProps\n } = _props\n\n const state = {\n selected: userState?.selected || [],\n selectAll: userState?.selectAll || false,\n pagination: {\n page: userState?.page || 1,\n perpage: perpages && perpages.length > 0 ? perpages[0] : 10,\n from: userState?.from || 1,\n to: userState?.to || (perpages && perpages.length > 0 ? perpages[0] : 10),\n },\n tab: tabs ? (userState?.tab || tabs[0].value || tabs[0].label.toLowerCase()) : \"\",\n search: userState?.search || \"\",\n sortable: userState?.sortable || {},\n filters: userState?.filter || {}\n }\n\n const update = (s: Partial<DatatableState>) => {\n onChange({ ...state, ...s })\n }\n\n return (\n <ViewBox\n height=\"100%\"\n {...viewBoxProps}\n baseClass='datatable'\n ref={ref as any}\n sx={{\n ...viewBoxProps?.sx,\n '& thead': fixedHeader ? {\n position: \"sticky\",\n top: 0,\n bgcolor: \"background.primary\",\n zIndex: 1\n } : {},\n }}\n startContent={(\n <Tag\n baseClass='datatable-header'\n sxr={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\"\n }}\n >\n <SelectedBox {..._props} update={update} state={state} />\n <FilterBox {..._props} update={update} state={state} />\n </Tag>\n )}\n >\n <TableArea\n {..._props}\n update={update}\n state={state}\n />\n <Stack\n p={1}\n alignItems=\"flex-end\"\n >\n {!hidePagination && <TablePagination\n disabled={_props.skeleton ? true : false}\n {...slotProps?.pagination}\n total={total || rows.length}\n page={state.pagination.page}\n perpage={state.pagination.perpage}\n perpages={perpages}\n slotProps={{\n select: {\n size: \"small\",\n }\n }}\n onChange={(state: TablePaginationState) => {\n update({ pagination: state })\n }}\n />}\n </Stack>\n </ViewBox>\n )\n})\n\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;;;;;AAMJ;AACI;AACJ;AAEA;AASgB;AACA;AACA;AACA;AACH;AAMO;AACA;AACA;;AAyBA;AACI;AACH;AACJ;AAEG;AACJ;AAKpB;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/Datatable/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useMemo } from 'react'\nimport ViewBox from '../ViewBox'\nimport { Tag, useInterface } from '@xanui/core';\nimport SelectedBox from './SelectedBox'\nimport TableArea from './Table'\nimport FilterBox from './FilterBox'\nimport TablePagination, { TablePaginationState } from '../TablePagination'\nimport Stack from '../Stack'\nimport { DatatableProps, DatatableState } from './types';\nimport Skeleton from '../Skeleton';\n\nexport type * from './types';\n\nconst DataTable = React.forwardRef((props: DatatableProps, ref: React.Ref<HTMLDivElement>) => {\n let [p] = useInterface<any>(\"Datatable\", props, {})\n\n let _props = useMemo(() => {\n let np = { ...p }\n\n if (typeof np.skeleton === 'number' || np.skeleton === true) {\n const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10\n let length = np.skeleton === true ? limit : np.skeleton\n\n if (!np.hideCheckbox) {\n np.columns = [{\n label: '', field: \"__checkbox\", width: 34\n }, ...np.columns]\n }\n\n if (np.rowAction) {\n np.columns = [...np.columns, { label: \"\", field: \"__actions\", width: 34 }]\n }\n\n let columns = np.columns || []\n\n np.rows = []\n for (let i = 0; i < length; i++) {\n let r: any = { id: i }\n for (let col of columns) {\n r[col.field] = \"\"\n }\n np.rows.push(r)\n }\n\n np.renderRow = (r: any) => {\n for (let col of columns) {\n r[col.field] = <Skeleton\n animation={\"wave\"}\n height={16}\n radius={.5}\n width={\"100%\"}\n />\n }\n return r\n }\n np.hideCheckbox = true\n np.rowAction = undefined\n }\n return np\n }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows])\n\n let {\n rows,\n tabs,\n\n pagination: { perpages = [30, 50, 100], total = 0 } = {},\n state: userState = {},\n onChange,\n\n fixedHeader,\n hidePagination,\n slotProps,\n\n\n // skip props for ViewBox\n skeleton,\n rowAction,\n disableRow,\n renderRow,\n filters,\n hideCheckbox,\n hideSearch,\n columns,\n compact,\n\n ...viewBoxProps\n } = _props\n\n const state = {\n selected: userState?.selected || [],\n selectAll: userState?.selectAll || false,\n pagination: {\n page: userState?.page || 1,\n perpage: perpages && perpages.length > 0 ? perpages[0] : 10,\n from: userState?.from || 1,\n to: userState?.to || (perpages && perpages.length > 0 ? perpages[0] : 10),\n },\n tab: tabs ? (userState?.tab || tabs[0].value || tabs[0].label.toLowerCase()) : \"\",\n search: userState?.search || \"\",\n sortable: userState?.sortable || {},\n filters: userState?.filter || {}\n }\n\n const update = (s: Partial<DatatableState>) => {\n onChange({ ...state, ...s })\n }\n\n return (\n <ViewBox\n height=\"100%\"\n {...viewBoxProps}\n baseClass='datatable'\n ref={ref as any}\n sx={{\n ...viewBoxProps?.sx,\n '& thead': fixedHeader ? {\n position: \"sticky\",\n top: 0,\n bgcolor: \"background.primary\",\n zIndex: 1\n } : {},\n }}\n startContent={(\n <Tag\n baseClass='datatable-header'\n sxr={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\"\n }}\n >\n <SelectedBox {..._props} update={update} state={state} />\n <FilterBox {..._props} update={update} state={state} />\n </Tag>\n )}\n >\n <TableArea\n {..._props}\n update={update}\n state={state}\n />\n <Stack\n p={1}\n alignItems=\"flex-end\"\n >\n {!hidePagination && <TablePagination\n disabled={_props.skeleton ? true : false}\n {...slotProps?.pagination}\n total={total || rows.length}\n page={state.pagination.page}\n perpage={state.pagination.perpage}\n perpages={perpages}\n slotProps={{\n select: {\n size: \"small\",\n }\n }}\n onChange={(state: TablePaginationState) => {\n update({ pagination: state })\n }}\n />}\n </Stack>\n </ViewBox>\n )\n})\n\nexport default DataTable"],"names":[],"mappings":";;;;;;;;;;;;;;;AAcA;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;;;;;AAMJ;AACI;AACJ;AAEA;AASgB;AACA;AACA;AACA;AACH;AAMO;AACA;AACA;;AAyBA;AACI;AACH;AACJ;AAEG;AACJ;AAKpB;;"}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { DatatableProps } from './types.js';
3
+ export { DataTableDefaultRow, DatatableColumnType, DatatableRowActionType, DatatableState, DatatableStatePartial, DatatableTabsProps } from './types.js';
3
4
 
4
5
  declare const DataTable: React.ForwardRefExoticComponent<Omit<DatatableProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
6
 
6
- export { DataTable as default };
7
+ export { DatatableProps, DataTable as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/Datatable/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useMemo } from 'react'\nimport ViewBox from '../ViewBox'\nimport { Tag, useInterface } from '@xanui/core';\nimport SelectedBox from './SelectedBox'\nimport TableArea from './Table'\nimport FilterBox from './FilterBox'\nimport TablePagination, { TablePaginationState } from '../TablePagination'\nimport Stack from '../Stack'\nimport { DatatableProps, DatatableState } from './types';\nimport Skeleton from '../Skeleton';\n\n\nconst DataTable = React.forwardRef((props: DatatableProps, ref: React.Ref<HTMLDivElement>) => {\n let [p] = useInterface<any>(\"Datatable\", props, {})\n\n let _props = useMemo(() => {\n let np = { ...p }\n\n if (typeof np.skeleton === 'number' || np.skeleton === true) {\n const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10\n let length = np.skeleton === true ? limit : np.skeleton\n\n if (!np.hideCheckbox) {\n np.columns = [{\n label: '', field: \"__checkbox\", width: 34\n }, ...np.columns]\n }\n\n if (np.rowAction) {\n np.columns = [...np.columns, { label: \"\", field: \"__actions\", width: 34 }]\n }\n\n let columns = np.columns || []\n\n np.rows = []\n for (let i = 0; i < length; i++) {\n let r: any = { id: i }\n for (let col of columns) {\n r[col.field] = \"\"\n }\n np.rows.push(r)\n }\n\n np.renderRow = (r: any) => {\n for (let col of columns) {\n r[col.field] = <Skeleton\n animation={\"wave\"}\n height={16}\n radius={.5}\n width={\"100%\"}\n />\n }\n return r\n }\n np.hideCheckbox = true\n np.rowAction = undefined\n }\n return np\n }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows])\n\n let {\n rows,\n tabs,\n\n pagination: { perpages = [30, 50, 100], total = 0 } = {},\n state: userState = {},\n onChange,\n\n fixedHeader,\n hidePagination,\n slotProps,\n\n\n // skip props for ViewBox\n skeleton,\n rowAction,\n disableRow,\n renderRow,\n filters,\n hideCheckbox,\n hideSearch,\n columns,\n compact,\n\n ...viewBoxProps\n } = _props\n\n const state = {\n selected: userState?.selected || [],\n selectAll: userState?.selectAll || false,\n pagination: {\n page: userState?.page || 1,\n perpage: perpages && perpages.length > 0 ? perpages[0] : 10,\n from: userState?.from || 1,\n to: userState?.to || (perpages && perpages.length > 0 ? perpages[0] : 10),\n },\n tab: tabs ? (userState?.tab || tabs[0].value || tabs[0].label.toLowerCase()) : \"\",\n search: userState?.search || \"\",\n sortable: userState?.sortable || {},\n filters: userState?.filter || {}\n }\n\n const update = (s: Partial<DatatableState>) => {\n onChange({ ...state, ...s })\n }\n\n return (\n <ViewBox\n height=\"100%\"\n {...viewBoxProps}\n baseClass='datatable'\n ref={ref as any}\n sx={{\n ...viewBoxProps?.sx,\n '& thead': fixedHeader ? {\n position: \"sticky\",\n top: 0,\n bgcolor: \"background.primary\",\n zIndex: 1\n } : {},\n }}\n startContent={(\n <Tag\n baseClass='datatable-header'\n sxr={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\"\n }}\n >\n <SelectedBox {..._props} update={update} state={state} />\n <FilterBox {..._props} update={update} state={state} />\n </Tag>\n )}\n >\n <TableArea\n {..._props}\n update={update}\n state={state}\n />\n <Stack\n p={1}\n alignItems=\"flex-end\"\n >\n {!hidePagination && <TablePagination\n disabled={_props.skeleton ? true : false}\n {...slotProps?.pagination}\n total={total || rows.length}\n page={state.pagination.page}\n perpage={state.pagination.perpage}\n perpages={perpages}\n slotProps={{\n select: {\n size: \"small\",\n }\n }}\n onChange={(state: TablePaginationState) => {\n update({ pagination: state })\n }}\n />}\n </Stack>\n </ViewBox>\n )\n})\n\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;;;;;AAMJ;AACI;AACJ;AAEA;AASgB;AACA;AACA;AACA;AACH;AAMO;AACA;AACA;;AAyBA;AACI;AACH;AACJ;AAEG;AACJ;AAKpB;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/Datatable/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useMemo } from 'react'\nimport ViewBox from '../ViewBox'\nimport { Tag, useInterface } from '@xanui/core';\nimport SelectedBox from './SelectedBox'\nimport TableArea from './Table'\nimport FilterBox from './FilterBox'\nimport TablePagination, { TablePaginationState } from '../TablePagination'\nimport Stack from '../Stack'\nimport { DatatableProps, DatatableState } from './types';\nimport Skeleton from '../Skeleton';\n\nexport type * from './types';\n\nconst DataTable = React.forwardRef((props: DatatableProps, ref: React.Ref<HTMLDivElement>) => {\n let [p] = useInterface<any>(\"Datatable\", props, {})\n\n let _props = useMemo(() => {\n let np = { ...p }\n\n if (typeof np.skeleton === 'number' || np.skeleton === true) {\n const limit = np.perpages && np.perpages.length > 0 ? np.perpages[0] : 10\n let length = np.skeleton === true ? limit : np.skeleton\n\n if (!np.hideCheckbox) {\n np.columns = [{\n label: '', field: \"__checkbox\", width: 34\n }, ...np.columns]\n }\n\n if (np.rowAction) {\n np.columns = [...np.columns, { label: \"\", field: \"__actions\", width: 34 }]\n }\n\n let columns = np.columns || []\n\n np.rows = []\n for (let i = 0; i < length; i++) {\n let r: any = { id: i }\n for (let col of columns) {\n r[col.field] = \"\"\n }\n np.rows.push(r)\n }\n\n np.renderRow = (r: any) => {\n for (let col of columns) {\n r[col.field] = <Skeleton\n animation={\"wave\"}\n height={16}\n radius={.5}\n width={\"100%\"}\n />\n }\n return r\n }\n np.hideCheckbox = true\n np.rowAction = undefined\n }\n return np\n }, [p.skeleton, props.columns, props.rowAction, p.hideCheckbox, p.rows])\n\n let {\n rows,\n tabs,\n\n pagination: { perpages = [30, 50, 100], total = 0 } = {},\n state: userState = {},\n onChange,\n\n fixedHeader,\n hidePagination,\n slotProps,\n\n\n // skip props for ViewBox\n skeleton,\n rowAction,\n disableRow,\n renderRow,\n filters,\n hideCheckbox,\n hideSearch,\n columns,\n compact,\n\n ...viewBoxProps\n } = _props\n\n const state = {\n selected: userState?.selected || [],\n selectAll: userState?.selectAll || false,\n pagination: {\n page: userState?.page || 1,\n perpage: perpages && perpages.length > 0 ? perpages[0] : 10,\n from: userState?.from || 1,\n to: userState?.to || (perpages && perpages.length > 0 ? perpages[0] : 10),\n },\n tab: tabs ? (userState?.tab || tabs[0].value || tabs[0].label.toLowerCase()) : \"\",\n search: userState?.search || \"\",\n sortable: userState?.sortable || {},\n filters: userState?.filter || {}\n }\n\n const update = (s: Partial<DatatableState>) => {\n onChange({ ...state, ...s })\n }\n\n return (\n <ViewBox\n height=\"100%\"\n {...viewBoxProps}\n baseClass='datatable'\n ref={ref as any}\n sx={{\n ...viewBoxProps?.sx,\n '& thead': fixedHeader ? {\n position: \"sticky\",\n top: 0,\n bgcolor: \"background.primary\",\n zIndex: 1\n } : {},\n }}\n startContent={(\n <Tag\n baseClass='datatable-header'\n sxr={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\"\n }}\n >\n <SelectedBox {..._props} update={update} state={state} />\n <FilterBox {..._props} update={update} state={state} />\n </Tag>\n )}\n >\n <TableArea\n {..._props}\n update={update}\n state={state}\n />\n <Stack\n p={1}\n alignItems=\"flex-end\"\n >\n {!hidePagination && <TablePagination\n disabled={_props.skeleton ? true : false}\n {...slotProps?.pagination}\n total={total || rows.length}\n page={state.pagination.page}\n perpage={state.pagination.perpage}\n perpages={perpages}\n slotProps={{\n select: {\n size: \"small\",\n }\n }}\n onChange={(state: TablePaginationState) => {\n update({ pagination: state })\n }}\n />}\n </Stack>\n </ViewBox>\n )\n})\n\nexport default DataTable"],"names":[],"mappings":";;;;;;;;;;;;;AAcA;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;;;;;AAMJ;AACI;AACJ;AAEA;AASgB;AACA;AACA;AACA;AACH;AAMO;AACA;AACA;;AAyBA;AACI;AACH;AACJ;AAEG;AACJ;AAKpB;;"}
@@ -7,7 +7,7 @@ import { TablePaginationState, TablePaginationProps } from '../TablePagination/i
7
7
  import { ViewBoxProps } from '../ViewBox/index.js';
8
8
  import { DataFilterProps } from '../DataFilter/types.js';
9
9
 
10
- type ColumnType = (Omit<TableColumnProps, "children"> & {
10
+ type DatatableColumnType = (Omit<TableColumnProps, "children"> & {
11
11
  label: string;
12
12
  field?: string;
13
13
  sortable?: boolean;
@@ -16,22 +16,22 @@ type DataTableDefaultRow = {
16
16
  id?: number;
17
17
  [key: string | number]: any;
18
18
  };
19
- type RowActionType = Omit<IconButtonProps, "children"> & {
19
+ type DatatableRowActionType = Omit<IconButtonProps, "children"> & {
20
20
  label: string;
21
21
  icon: ReactElement;
22
22
  };
23
- type TabsProps = {
23
+ type DatatableTabsProps = {
24
24
  label: string;
25
25
  value?: string;
26
26
  };
27
27
  type DatatableProps = Omit<ViewBoxProps, "children" | "rows" | "onChange"> & {
28
28
  rows: DataTableDefaultRow[];
29
- columns: ColumnType[];
30
- tabs?: TabsProps[];
29
+ columns: DatatableColumnType[];
30
+ tabs?: DatatableTabsProps[];
31
31
  rowAction?: (props: {
32
32
  row: DataTableDefaultRow | null;
33
33
  state: DatatableState;
34
- }) => RowActionType[];
34
+ }) => DatatableRowActionType[];
35
35
  renderRow?: (row: DataTableDefaultRow, state: DatatableState) => DataTableDefaultRow;
36
36
  disableRow?: (row: DataTableDefaultRow, state: DatatableState) => boolean | void;
37
37
  pagination?: {
@@ -80,4 +80,4 @@ type DatatableStatePartial = {
80
80
  };
81
81
  };
82
82
 
83
- export type { ColumnType, DataTableDefaultRow, DatatableProps, DatatableState, DatatableStatePartial, RowActionType, TabsProps };
83
+ export type { DataTableDefaultRow, DatatableColumnType, DatatableProps, DatatableRowActionType, DatatableState, DatatableStatePartial, DatatableTabsProps };
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@xanui/ui",
3
- "version": "1.1.45",
3
+ "version": "1.1.47",
4
4
  "description": "Xanui - A React Component Library",
5
5
  "private": false,
6
6
  "dependencies": {
7
7
  "@xanui/core": "^1.2.39",
8
- "@xanui/icons": "^1.1.10",
8
+ "@xanui/icons": "^1.1.12",
9
9
  "pretty-class": "^1.0.8",
10
10
  "react-state-bucket": "^1.2.6"
11
11
  },