@vrobots/storybook 0.2.18 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vrobots/storybook",
3
3
  "private": false,
4
- "version": "0.2.18",
4
+ "version": "0.2.19",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -1,18 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Card, Table } from "@chakra-ui/react";
3
- import { useColorMode } from "../ui/color-mode";
4
3
  import { flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table";
5
4
  import { useEffect, useState } from "react";
6
5
  import TableFilter from "./components/TableFilter";
7
6
  import { Pagination } from "./components/Pagination";
8
- const Pager = ({ border, pagesTotal, pageNumber, setPageNumber, pageSize, setPageSize }) => (_jsx(Box, { p: 2, pt: 6, border: border, borderBottom: 'none', children: _jsx(Pagination, { pagesTotal: pagesTotal, pageNumber: pageNumber, setPageNumber: setPageNumber, pageSize: pageSize, setPageSize: setPageSize, showPageSelector: true }) }));
7
+ const Pager = ({ pagesTotal, pageNumber, setPageNumber, pageSize, setPageSize }) => (_jsx(Box, { p: { base: 3, md: 4 }, borderTopWidth: '1px', borderBottomWidth: '1px', borderColor: 'neu.border', bg: { _light: 'whiteAlpha.500', _dark: 'whiteAlpha.50' }, children: _jsx(Pagination, { pagesTotal: pagesTotal, pageNumber: pageNumber, setPageNumber: setPageNumber, pageSize: pageSize, setPageSize: setPageSize, showPageSelector: true }) }));
9
8
  const DataTable = ({ data: defaultData, total, pageNumber, pagesTotal, setPageNumber, setPageSize, pageSize, columns, filters = [], onRowClick, onFilterChange, }) => {
10
9
  const [data, setData] = useState(() => [...defaultData]);
11
- const { colorMode } = useColorMode();
12
10
  const columnResizeMode = 'onChange';
13
11
  const columnResizeDirection = 'ltr';
14
- const isDarkMode = colorMode === 'dark';
15
- const border = `1px solid ${isDarkMode ? '#333333' : '#E2E8F0'} !important`;
16
12
  const table = useReactTable({
17
13
  data,
18
14
  columns,
@@ -20,22 +16,22 @@ const DataTable = ({ data: defaultData, total, pageNumber, pagesTotal, setPageNu
20
16
  columnResizeDirection,
21
17
  getCoreRowModel: getCoreRowModel(),
22
18
  });
23
- const pagerProps = { border, pagesTotal, pageNumber, setPageNumber, pageSize, setPageSize };
19
+ const pagerProps = { pagesTotal, pageNumber, setPageNumber, pageSize, setPageSize };
24
20
  useEffect(() => {
25
21
  setData([...defaultData]);
26
22
  }, [defaultData, setData]);
27
- return (_jsx(Card.Root, { children: _jsxs(Card.Body, { p: 0, children: [_jsx(Pager, { ...pagerProps }), _jsx(Box, { overflow: 'auto', children: _jsxs(Table.Root, { width: '100%', children: [_jsx(Table.Header, { children: table.getHeaderGroups().map(headerGroup => (_jsx(Table.Row, { children: headerGroup.headers.map(header => (_jsxs(Table.ColumnHeader, { borderLeft: border, borderRight: border, children: [header.isPlaceholder
23
+ return (_jsx(Card.Root, { layerStyle: 'neuRaised', overflow: 'hidden', children: _jsxs(Card.Body, { p: 0, children: [_jsx(Pager, { ...pagerProps }), _jsx(Box, { overflow: 'auto', bg: { _light: 'whiteAlpha.600', _dark: 'whiteAlpha.50' }, children: _jsxs(Table.Root, { width: '100%', size: 'sm', children: [_jsx(Table.Header, { children: table.getHeaderGroups().map(headerGroup => (_jsx(Table.Row, { children: headerGroup.headers.map(header => (_jsxs(Table.ColumnHeader, { borderColor: 'neu.border', borderBottomWidth: '1px', bg: { _light: 'rgba(255,255,255,0.8)', _dark: 'rgba(31,39,50,0.85)' }, color: 'neu.text', fontWeight: 'semibold', fontSize: 'xs', textTransform: 'uppercase', letterSpacing: '0.04em', children: [header.isPlaceholder
28
24
  ? null
29
- : flexRender(header.column.columnDef.header, header.getContext()), filters.find((filter) => filter.id === header.id) && !!onFilterChange ? (_jsx(TableFilter, { filter: filters.find(filter => filter.id === header.id), onFilterChange: onFilterChange })) : null] }, header.id))) }, headerGroup.id))) }), _jsxs(Table.Body, { children: [total === 0 ? (_jsx(Table.Row, { children: _jsx(Table.Cell, { colSpan: columns.length, textAlign: 'center', children: "No records found" }) })) : null, table.getRowModel().rows.map((row, i) => {
25
+ : flexRender(header.column.columnDef.header, header.getContext()), filters.find((filter) => filter.id === header.id) && !!onFilterChange ? (_jsx(TableFilter, { filter: filters.find(filter => filter.id === header.id), onFilterChange: onFilterChange })) : null] }, header.id))) }, headerGroup.id))) }), _jsxs(Table.Body, { children: [total === 0 ? (_jsx(Table.Row, { children: _jsx(Table.Cell, { colSpan: columns.length, textAlign: 'center', color: 'neu.muted', py: 8, children: "No records found" }) })) : null, table.getRowModel().rows.map((row, i) => {
30
26
  const isEven = i % 2 === 0;
31
- const colorEven = isDarkMode ? 'gray.700' : 'gray.50';
32
- const colorOdd = isDarkMode ? 'gray.600' : 'white';
27
+ const colorEven = { _light: 'whiteAlpha.800', _dark: 'whiteAlpha.100' };
28
+ const colorOdd = { _light: 'whiteAlpha.600', _dark: 'whiteAlpha.50' };
33
29
  const backgroundColor = isEven ? colorEven : colorOdd;
34
- return (_jsx(Table.Row, { background: backgroundColor, _hover: !!onRowClick ? {
30
+ return (_jsx(Table.Row, { background: backgroundColor, transition: 'background-color 0.14s ease', _hover: !!onRowClick ? {
35
31
  cursor: 'pointer',
36
- backgroundColor: 'rgba(107, 160, 252, 0.3) !important',
37
- } : void 0, onClick: () => onRowClick && onRowClick(row.original), children: row.getVisibleCells().map(cell => (_jsx(Table.Cell, { border: border, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id));
38
- })] }), _jsx(Table.Footer, { children: table.getFooterGroups().map(footerGroup => (_jsx(Table.Row, { children: footerGroup.headers.map(header => (_jsx(Table.ColumnHeader, { borderLeft: border, borderRight: border, children: header.isPlaceholder
32
+ backgroundColor: { _light: 'rgba(99, 179, 237, 0.22)', _dark: 'rgba(99, 179, 237, 0.28)' },
33
+ } : void 0, onClick: () => onRowClick && onRowClick(row.original), children: row.getVisibleCells().map(cell => (_jsx(Table.Cell, { borderColor: 'neu.border', borderBottomWidth: '1px', color: 'neu.text', children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id));
34
+ })] }), _jsx(Table.Footer, { children: table.getFooterGroups().map(footerGroup => (_jsx(Table.Row, { children: footerGroup.headers.map(header => (_jsx(Table.ColumnHeader, { borderColor: 'neu.border', borderTopWidth: '1px', bg: { _light: 'whiteAlpha.700', _dark: 'whiteAlpha.100' }, children: header.isPlaceholder
39
35
  ? null
40
36
  : flexRender(header.column.columnDef.header, header.getContext()) }, header.id))) }, footerGroup.id))) })] }) }), _jsx(Pager, { ...pagerProps })] }) }));
41
37
  };
@@ -4,5 +4,5 @@ import * as React from 'react';
4
4
  export const PageSizeSelector = ({ sizes, selectedPageSize, onSelect, }) => {
5
5
  const idKey = React.useId();
6
6
  const handleSetPageSize = (e) => onSelect(Number(e.target.value));
7
- return (_jsxs(HStack, { gap: "3", align: "center", children: [_jsx(Text, { fontSize: "sm", fontWeight: "normal", children: "Showing" }), _jsxs(NativeSelect.Root, { size: 'sm', maxW: '75px', children: [_jsx(NativeSelect.Field, { id: `page-size-selector-${idKey}`, value: selectedPageSize, onChange: handleSetPageSize, cursor: 'pointer', children: sizes.map((size, key) => (_jsx("option", { value: size, children: size }, `options-${size}-${key}`))) }), _jsx(NativeSelect.Indicator, {})] })] }));
7
+ return (_jsxs(HStack, { gap: "3", align: "center", children: [_jsx(Text, { fontSize: "sm", fontWeight: "normal", color: 'neu.muted', children: "Showing" }), _jsxs(NativeSelect.Root, { size: 'sm', maxW: '75px', bg: { _light: 'whiteAlpha.900', _dark: 'whiteAlpha.100' }, borderColor: 'neu.border', children: [_jsx(NativeSelect.Field, { id: `page-size-selector-${idKey}`, value: selectedPageSize, onChange: handleSetPageSize, cursor: 'pointer', color: 'neu.text', children: sizes.map((size, key) => (_jsx("option", { value: size, children: size }, `options-${size}-${key}`))) }), _jsx(NativeSelect.Indicator, {})] })] }));
8
8
  };
@@ -7,7 +7,7 @@ import { useBreakpoint } from '../../../hooks';
7
7
  const PAGE_LIMIT_MOBILE = 2;
8
8
  const PAGE_LIMIT = 4;
9
9
  const makeNavButton = (onChange, pageNumber) => function PageButton(page) {
10
- return (_jsx(Button, { "aria-label": `page-${page}`, onClick: () => onChange(page.toString()), variant: page === pageNumber ? 'solid' : 'outline', size: 'sm', paddingLeft: '1px !important', paddingRight: '1px !important', marginRight: 1, children: page }, `nav-button-${page}`));
10
+ return (_jsx(Button, { "aria-label": `page-${page}`, onClick: () => onChange(page.toString()), variant: page === pageNumber ? 'solid' : 'subtle', colorPalette: page === pageNumber ? 'blue' : undefined, size: 'sm', paddingLeft: '1px !important', paddingRight: '1px !important', marginRight: 1, borderWidth: '1px', borderColor: 'neu.border', children: page }, `nav-button-${page}`));
11
11
  };
12
12
  export const Pagination = ({ pagesTotal, pageNumber, pageSize, showPageSelector, setPageNumber, setPageSize }) => {
13
13
  const [pageInput, setPageInput] = React.useState(pageNumber);
@@ -47,5 +47,5 @@ export const Pagination = ({ pagesTotal, pageNumber, pageSize, showPageSelector,
47
47
  }, templateColumns: {
48
48
  sm: `repeat(1, 1fr)`,
49
49
  md: `repeat(2, 1fr)`,
50
- }, children: [showPageSelector ? (_jsx(_Fragment, { children: _jsx(GridItem, { mb: 4, children: _jsxs(Flex, { children: [_jsx(PageSizeSelector, { sizes: PAGE_SIZES, selectedPageSize: pageSize, onSelect: setPageSize }), _jsxs(Text, { fontSize: 'sm', fontWeight: 'normal', ml: 4, mt: 1, children: ["page ", _jsx("strong", { children: pageNumber.toString() }), " of ", _jsx("strong", { children: pagesTotal.toString() })] })] }) }) })) : _jsx(GridItem, { colSpan: 1 }), _jsx(GridItem, { children: _jsx(Field.Root, { children: _jsxs(HStack, { justifyContent: 'right', children: [handlePages(pages, limit, pageNumber).map(makeNavButton(handleChangePageInput(false), pageNumber)), _jsx(Field.Label, { htmlFor: 'pagination', style: { fontSize: 10 }, mt: 2, ml: 4, children: "goto page:" }), _jsxs(NumberInput.Root, { value: String(pageInput), size: 'sm', max: pagesTotal, min: 1, onValueChange: (details) => handleChangePageInput(true)(details.value), children: [_jsx(NumberInput.Input, { id: 'pagination', style: { width: 90 } }), _jsxs(NumberInput.Control, { children: [_jsx(NumberInput.IncrementTrigger, {}), _jsx(NumberInput.DecrementTrigger, {})] })] })] }) }) })] }));
50
+ }, children: [showPageSelector ? (_jsx(_Fragment, { children: _jsx(GridItem, { mb: 4, children: _jsxs(Flex, { children: [_jsx(PageSizeSelector, { sizes: PAGE_SIZES, selectedPageSize: pageSize, onSelect: setPageSize }), _jsxs(Text, { fontSize: 'sm', fontWeight: 'normal', ml: 4, mt: 1, children: ["page ", _jsx("strong", { children: pageNumber.toString() }), " of ", _jsx("strong", { children: pagesTotal.toString() })] })] }) }) })) : _jsx(GridItem, { colSpan: 1 }), _jsx(GridItem, { children: _jsx(Field.Root, { children: _jsxs(HStack, { justifyContent: 'right', children: [handlePages(pages, limit, pageNumber).map(makeNavButton(handleChangePageInput(false), pageNumber)), _jsx(Field.Label, { htmlFor: 'pagination', style: { fontSize: 10 }, mt: 2, ml: 4, color: 'neu.muted', children: "goto page:" }), _jsxs(NumberInput.Root, { value: String(pageInput), size: 'sm', max: pagesTotal, min: 1, onValueChange: (details) => handleChangePageInput(true)(details.value), children: [_jsx(NumberInput.Input, { id: 'pagination', style: { width: 90 }, bg: { _light: 'whiteAlpha.900', _dark: 'whiteAlpha.100' }, borderColor: 'neu.border' }), _jsxs(NumberInput.Control, { children: [_jsx(NumberInput.IncrementTrigger, {}), _jsx(NumberInput.DecrementTrigger, {})] })] })] }) }) })] }));
51
51
  };
@@ -17,12 +17,12 @@ export default function TableFilter({ filter, onFilterChange, }) {
17
17
  const handleClearFilter = () => {
18
18
  onFilterChange({ ...filter, value: undefined });
19
19
  };
20
- const ClearFilterButton = () => !!filter.value ? (_jsx(Tooltip, { content: `Clear filter`, positioning: { placement: 'bottom-end' }, showArrow: true, children: _jsx(IconButton, { "aria-label": `Clear filter ${filter.type}`, onClick: handleClearFilter, size: 'sm', variant: 'ghost', children: _jsx(FaX, {}) }) })) : null;
20
+ const ClearFilterButton = () => !!filter.value ? (_jsx(Tooltip, { content: `Clear filter`, positioning: { placement: 'bottom-end' }, showArrow: true, children: _jsx(IconButton, { "aria-label": `Clear filter ${filter.type}`, onClick: handleClearFilter, size: 'sm', variant: 'ghost', color: 'neu.muted', _hover: { color: 'neu.text', bg: { _light: 'blackAlpha.100', _dark: 'whiteAlpha.100' } }, children: _jsx(FaX, {}) }) })) : null;
21
21
  if (filter.type === 'string' || filter.type === 'number') {
22
- return (_jsxs(Field.Root, { children: [_jsx(InputGroup, { endElement: _jsx(ClearFilterButton, {}), children: _jsx(TableFilterInput, { value: filter.value?.toString() || '', onChange: handleChangeInput }) }), _jsx(Field.HelperText, { color: 'gray.300', whiteSpace: 'nowrap', wordBreak: 'break-word', children: filter.helperText })] }));
22
+ return (_jsxs(Field.Root, { children: [_jsx(InputGroup, { endElement: _jsx(ClearFilterButton, {}), children: _jsx(TableFilterInput, { value: filter.value?.toString() || '', onChange: handleChangeInput }) }), _jsx(Field.HelperText, { color: 'neu.muted', whiteSpace: 'nowrap', wordBreak: 'break-word', children: filter.helperText })] }));
23
23
  }
24
24
  if (filter.type === 'date') {
25
- return (_jsxs(Field.Root, { children: [_jsx(InputGroup, { endElement: _jsx(ClearFilterButton, {}), children: _jsx(TableFilterDatePicker, { selected: filter.value, onChange: (date) => handleChangeDate(date) }) }), _jsx(Field.HelperText, { color: 'gray.300', whiteSpace: 'nowrap', wordBreak: 'break-word', children: filter.helperText })] }));
25
+ return (_jsxs(Field.Root, { children: [_jsx(InputGroup, { endElement: _jsx(ClearFilterButton, {}), children: _jsx(TableFilterDatePicker, { selected: filter.value, onChange: (date) => handleChangeDate(date) }) }), _jsx(Field.HelperText, { color: 'neu.muted', whiteSpace: 'nowrap', wordBreak: 'break-word', children: filter.helperText })] }));
26
26
  }
27
27
  return null;
28
28
  }
@@ -6,5 +6,5 @@ export default function TableFilterDatePicker({ selected, onChange }) {
6
6
  const val = e.target.value;
7
7
  onChange(val ? new Date(val) : null);
8
8
  };
9
- return (_jsx(Input, { type: "date", value: value, onChange: handleChange, width: '100%', mt: 2, size: 'md' }));
9
+ return (_jsx(Input, { type: "date", value: value, onChange: handleChange, width: '100%', mt: 2, size: 'sm', bg: { _light: 'whiteAlpha.900', _dark: 'whiteAlpha.100' }, borderColor: 'neu.border' }));
10
10
  }
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Input } from "@chakra-ui/react";
3
3
  export default function TableFilterInput(props) {
4
- return (_jsx(Input, { width: '100%', mt: 2, ...props }));
4
+ return (_jsx(Input, { width: '100%', mt: 2, size: 'sm', bg: { _light: 'whiteAlpha.900', _dark: 'whiteAlpha.100' }, borderColor: 'neu.border', ...props }));
5
5
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vrobots/storybook",
3
3
  "private": false,
4
- "version": "0.2.18",
4
+ "version": "0.2.19",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",