@coveord/plasma-mantine 52.26.6 → 52.27.1

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 (66) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +35 -34
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/table/Table.d.ts.map +1 -1
  5. package/dist/cjs/components/table/Table.js +7 -3
  6. package/dist/cjs/components/table/Table.js.map +1 -1
  7. package/dist/cjs/components/table/Table.styles.d.ts +1 -0
  8. package/dist/cjs/components/table/Table.styles.d.ts.map +1 -1
  9. package/dist/cjs/components/table/Table.styles.js +6 -5
  10. package/dist/cjs/components/table/Table.styles.js.map +1 -1
  11. package/dist/cjs/components/table/Table.types.d.ts +8 -2
  12. package/dist/cjs/components/table/Table.types.d.ts.map +1 -1
  13. package/dist/cjs/components/table/layouts/RowLayout.js +2 -1
  14. package/dist/cjs/components/table/layouts/RowLayout.js.map +1 -1
  15. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.d.ts +4 -0
  16. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.d.ts.map +1 -0
  17. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.js +99 -0
  18. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.js.map +1 -0
  19. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.styles.d.ts +10 -0
  20. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.styles.d.ts.map +1 -0
  21. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.styles.js +23 -0
  22. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.styles.js.map +1 -0
  23. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.types.d.ts +46 -0
  24. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.types.d.ts.map +1 -0
  25. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.types.js +6 -0
  26. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.types.js.map +1 -0
  27. package/dist/cjs/theme/Theme.d.ts.map +1 -1
  28. package/dist/cjs/theme/Theme.js +10 -0
  29. package/dist/cjs/theme/Theme.js.map +1 -1
  30. package/dist/esm/components/table/Table.d.ts.map +1 -1
  31. package/dist/esm/components/table/Table.js +6 -2
  32. package/dist/esm/components/table/Table.js.map +1 -1
  33. package/dist/esm/components/table/Table.styles.d.ts +1 -0
  34. package/dist/esm/components/table/Table.styles.d.ts.map +1 -1
  35. package/dist/esm/components/table/Table.styles.js +6 -5
  36. package/dist/esm/components/table/Table.styles.js.map +1 -1
  37. package/dist/esm/components/table/Table.types.d.ts +8 -2
  38. package/dist/esm/components/table/Table.types.d.ts.map +1 -1
  39. package/dist/esm/components/table/Table.types.js.map +1 -1
  40. package/dist/esm/components/table/layouts/RowLayout.js +1 -1
  41. package/dist/esm/components/table/layouts/RowLayout.js.map +1 -1
  42. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.d.ts +4 -0
  43. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.d.ts.map +1 -0
  44. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.js +84 -0
  45. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.js.map +1 -0
  46. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.styles.d.ts +10 -0
  47. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.styles.d.ts.map +1 -0
  48. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.styles.js +11 -0
  49. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.styles.js.map +1 -0
  50. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.types.d.ts +46 -0
  51. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.types.d.ts.map +1 -0
  52. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.types.js +3 -0
  53. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.types.js.map +1 -0
  54. package/dist/esm/theme/Theme.d.ts.map +1 -1
  55. package/dist/esm/theme/Theme.js +8 -0
  56. package/dist/esm/theme/Theme.js.map +1 -1
  57. package/package.json +3 -3
  58. package/src/components/table/Table.styles.ts +6 -5
  59. package/src/components/table/Table.tsx +6 -1
  60. package/src/components/table/Table.types.ts +8 -1
  61. package/src/components/table/__tests__/TableColumnsSelector.spec.tsx +260 -0
  62. package/src/components/table/layouts/RowLayout.tsx +1 -1
  63. package/src/components/table/table-columns-selector/TableColumnsSelector.styles.ts +8 -0
  64. package/src/components/table/table-columns-selector/TableColumnsSelector.tsx +78 -0
  65. package/src/components/table/table-columns-selector/TableColumnsSelector.types.ts +46 -0
  66. package/src/theme/Theme.tsx +8 -0
@@ -50,7 +50,7 @@ const RowLayoutBody = <T,>({
50
50
  cell.querySelector('button').click();
51
51
  };
52
52
 
53
- const rows = table.getRowModel().rows.map((row) => {
53
+ const rows = table.getRowModel()?.rows.map((row) => {
54
54
  const rowChildren = getExpandChildren?.(row.original) ?? null;
55
55
  const isSelected = !!row.getIsSelected();
56
56
  const shouldKeepSelection = keepSelection && isSelected;
@@ -0,0 +1,8 @@
1
+ import {createStyles} from '@mantine/core';
2
+
3
+ export default createStyles((theme) => ({
4
+ root: {maxWidth: '100%'},
5
+ wrapper: {
6
+ display: 'inline-flex',
7
+ },
8
+ }));
@@ -0,0 +1,78 @@
1
+ import {Button, Checkbox, Divider, Grid, Popover, ScrollArea, Stack, Tooltip} from '@mantine/core';
2
+ import {FunctionComponent} from 'react';
3
+
4
+ import {TableComponentsOrder} from '../Table.styles';
5
+ import {useTable} from '../TableContext';
6
+ import useStyles from './TableColumnsSelector.styles';
7
+ import {TableColumnsSelectorProps} from './TableColumnsSelector.types';
8
+
9
+ const COLUMNS_IDS_TO_EXCLUDE = ['collapsible', 'select'];
10
+
11
+ export const TableColumnsSelector: FunctionComponent<TableColumnsSelectorProps> = ({
12
+ classNames,
13
+ styles,
14
+ unstyled,
15
+ label = 'Edit columns',
16
+ buttonVariant = 'outline',
17
+ showVisibleCountLabel = false,
18
+ nonHideableColumns = [],
19
+ maxSelectableColumns,
20
+ footer,
21
+ limitReachedTooltip = 'You have reached the maximum display limit.',
22
+ columnNames,
23
+ }) => {
24
+ const {classes} = useStyles(null, {name: 'TableColumnsSelector', classNames, styles, unstyled});
25
+ const {getAllColumns} = useTable();
26
+
27
+ const columnsToExclude = [...nonHideableColumns, ...COLUMNS_IDS_TO_EXCLUDE];
28
+
29
+ const filteredColumns = getAllColumns().filter((column) => !columnsToExclude.includes(column.id));
30
+
31
+ const selectedColumnsCount = filteredColumns.filter((column) => column.getIsVisible()).length;
32
+
33
+ if (filteredColumns.length <= 0) {
34
+ return null;
35
+ }
36
+
37
+ return (
38
+ <Grid.Col span="content" order={TableComponentsOrder.ColumnsSelector} py="sm" className={classes.root}>
39
+ <Popover withinPortal position="bottom" shadow="md">
40
+ <Popover.Target>
41
+ <Button variant={buttonVariant}>{`${label}${
42
+ showVisibleCountLabel ? ` (${selectedColumnsCount})` : ''
43
+ }`}</Button>
44
+ </Popover.Target>
45
+ <Popover.Dropdown miw={240}>
46
+ <ScrollArea.Autosize mah={154}>
47
+ <Stack>
48
+ {filteredColumns.map((column) => {
49
+ const isDisabled =
50
+ selectedColumnsCount >= maxSelectableColumns && !column.getIsVisible();
51
+ return (
52
+ <Tooltip label={limitReachedTooltip} disabled={!isDisabled} position="left">
53
+ <div>
54
+ <Checkbox
55
+ key={column.id}
56
+ label={columnNames?.[column.id] || column.id}
57
+ name={column.id}
58
+ checked={column.getIsVisible()}
59
+ disabled={isDisabled}
60
+ onChange={column.getToggleVisibilityHandler()}
61
+ />
62
+ </div>
63
+ </Tooltip>
64
+ );
65
+ })}
66
+ </Stack>
67
+ </ScrollArea.Autosize>
68
+ {maxSelectableColumns && (
69
+ <>
70
+ <Divider mb="xs" mt="sm" />
71
+ {footer}
72
+ </>
73
+ )}
74
+ </Popover.Dropdown>
75
+ </Popover>
76
+ </Grid.Col>
77
+ );
78
+ };
@@ -0,0 +1,46 @@
1
+ import {DefaultProps, Selectors} from '@mantine/core';
2
+ import {ReactNode} from 'react';
3
+ import useStyles from './TableColumnsSelector.styles';
4
+
5
+ type TableColumnsSelectorStylesNames = Selectors<typeof useStyles>;
6
+
7
+ export interface TableColumnsSelectorProps extends DefaultProps<TableColumnsSelectorStylesNames> {
8
+ /**
9
+ * The label of the button
10
+ * @default 'Edit columns'
11
+ */
12
+ label?: ReactNode;
13
+ /**
14
+ * The style variant of the button
15
+ * @default 'outline'
16
+ */
17
+ buttonVariant?: string;
18
+ /**
19
+ * An array of column ids that the user cannot hide. This is useful for columns that are required for the table to function properly.
20
+ * @default []
21
+ */
22
+ nonHideableColumns?: string[];
23
+ /**
24
+ * Whether the count of visible columns is shown in the button label.
25
+ * @default false
26
+ */
27
+ showVisibleCountLabel?: boolean;
28
+ /**
29
+ * The maximum number of columns that can be selected at the same time.
30
+ * If defined a footer will render with the remaining number of columns that can be selected.
31
+ */
32
+ maxSelectableColumns?: number;
33
+ /**
34
+ * A dictionary of column ids and names to use for the checkbox labels.
35
+ */
36
+ columnNames: Record<string, string>;
37
+ /**
38
+ * The content to display in the footer when maxSelectableColumns is defined.
39
+ */
40
+ footer?: ReactNode;
41
+ /**
42
+ * The tooltip to display when the user hovers over a disabled checkbox.
43
+ * @default 'You have reached the maximum display limit.'
44
+ */
45
+ limitReachedTooltip?: string;
46
+ }
@@ -26,6 +26,14 @@ export const plasmaTheme: MantineThemeOverride = {
26
26
  lg: '32px',
27
27
  xl: '40px',
28
28
  },
29
+ globalStyles: (theme) => ({
30
+ body: {
31
+ ...theme.fn.fontStyles(),
32
+ fontSize: theme.fontSizes.sm,
33
+ lineHeight: theme.lineHeight,
34
+ fontWeight: 300,
35
+ },
36
+ }),
29
37
  primaryColor: 'action',
30
38
  headings: {
31
39
  fontFamily: 'canada-type-gibson, sans-serif',