@coveord/plasma-mantine 52.0.0 → 52.2.0

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 (199) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +26 -26
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/__tests__/Utils.js +9 -9
  5. package/dist/cjs/__tests__/Utils.js.map +1 -1
  6. package/dist/cjs/__tests__/VitestSetup.js +2 -2
  7. package/dist/cjs/__tests__/VitestSetup.js.map +1 -1
  8. package/dist/cjs/components/blank-slate/BlankSlate.js +3 -3
  9. package/dist/cjs/components/blank-slate/index.js +2 -2
  10. package/dist/cjs/components/blank-slate/index.js.map +1 -1
  11. package/dist/cjs/components/button/Button.js +15 -15
  12. package/dist/cjs/components/button/Button.js.map +1 -1
  13. package/dist/cjs/components/button/ButtonWithDisabledTooltip.js +8 -8
  14. package/dist/cjs/components/button/index.js +2 -2
  15. package/dist/cjs/components/button/index.js.map +1 -1
  16. package/dist/cjs/components/code-editor/CodeEditor.js +30 -30
  17. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  18. package/dist/cjs/components/code-editor/index.js +2 -2
  19. package/dist/cjs/components/code-editor/index.js.map +1 -1
  20. package/dist/cjs/components/code-editor/languages/xml.js +4 -4
  21. package/dist/cjs/components/code-editor/languages/xml.js.map +1 -1
  22. package/dist/cjs/components/collection/Collection.js +25 -25
  23. package/dist/cjs/components/collection/Collection.js.map +1 -1
  24. package/dist/cjs/components/collection/CollectionItem.js +29 -29
  25. package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
  26. package/dist/cjs/components/collection/index.js +2 -2
  27. package/dist/cjs/components/collection/index.js.map +1 -1
  28. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js +26 -23
  29. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -1
  30. package/dist/cjs/components/copyToClipboard/index.js +2 -2
  31. package/dist/cjs/components/copyToClipboard/index.js.map +1 -1
  32. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +16 -16
  33. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  34. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js +16 -16
  35. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  36. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js +10 -10
  37. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  38. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js +9 -9
  39. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  40. package/dist/cjs/components/date-range-picker/index.js +4 -4
  41. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  42. package/dist/cjs/components/header/Header.js +23 -23
  43. package/dist/cjs/components/header/Header.js.map +1 -1
  44. package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  45. package/dist/cjs/components/header/index.js +2 -2
  46. package/dist/cjs/components/header/index.js.map +1 -1
  47. package/dist/cjs/components/index.js +14 -14
  48. package/dist/cjs/components/index.js.map +1 -1
  49. package/dist/cjs/components/inline-confirm/InlineConfirm.js +12 -12
  50. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
  51. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js +5 -5
  52. package/dist/cjs/components/inline-confirm/InlineConfirmMenuItem.js +5 -5
  53. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js +4 -4
  54. package/dist/cjs/components/inline-confirm/index.js +4 -4
  55. package/dist/cjs/components/inline-confirm/index.js.map +1 -1
  56. package/dist/cjs/components/inline-confirm/useInlineConfirm.js +2 -2
  57. package/dist/cjs/components/menu/Menu.js +7 -7
  58. package/dist/cjs/components/menu/index.js +2 -2
  59. package/dist/cjs/components/menu/index.js.map +1 -1
  60. package/dist/cjs/components/modal-wizard/ModalWizard.js +22 -22
  61. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
  62. package/dist/cjs/components/modal-wizard/ModalWizardStep.js +2 -2
  63. package/dist/cjs/components/modal-wizard/index.js +2 -2
  64. package/dist/cjs/components/modal-wizard/index.js.map +1 -1
  65. package/dist/cjs/components/prompt/Prompt.js +18 -18
  66. package/dist/cjs/components/prompt/PromptFooter.js +7 -7
  67. package/dist/cjs/components/prompt/PromptFooter.js.map +1 -1
  68. package/dist/cjs/components/prompt/index.js +2 -2
  69. package/dist/cjs/components/prompt/index.js.map +1 -1
  70. package/dist/cjs/components/sticky-footer/StickyFooter.js +8 -8
  71. package/dist/cjs/components/sticky-footer/index.js +2 -2
  72. package/dist/cjs/components/sticky-footer/index.js.map +1 -1
  73. package/dist/cjs/components/table/Table.js +96 -86
  74. package/dist/cjs/components/table/Table.js.map +1 -1
  75. package/dist/cjs/components/table/Table.styles.js +30 -7
  76. package/dist/cjs/components/table/Table.styles.js.map +1 -1
  77. package/dist/cjs/components/table/TableActions.js +15 -6
  78. package/dist/cjs/components/table/TableActions.js.map +1 -1
  79. package/dist/cjs/components/table/TableCollapsibleColumn.js +10 -10
  80. package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
  81. package/dist/cjs/components/table/TableConsumer.js +2 -2
  82. package/dist/cjs/components/table/TableDateRangePicker.js +51 -41
  83. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
  84. package/dist/cjs/components/table/TableFilter.js +31 -25
  85. package/dist/cjs/components/table/TableFilter.js.map +1 -1
  86. package/dist/cjs/components/table/TableFooter.js +6 -6
  87. package/dist/cjs/components/table/TableHeader.js +45 -45
  88. package/dist/cjs/components/table/TableHeader.js.map +1 -1
  89. package/dist/cjs/components/table/TablePagination.js +8 -8
  90. package/dist/cjs/components/table/TablePagination.js.map +1 -1
  91. package/dist/cjs/components/table/TablePerPage.js +9 -9
  92. package/dist/cjs/components/table/TablePerPage.js.map +1 -1
  93. package/dist/cjs/components/table/TablePredicate.js +31 -25
  94. package/dist/cjs/components/table/TablePredicate.js.map +1 -1
  95. package/dist/cjs/components/table/TableSelectableColumn.js +4 -4
  96. package/dist/cjs/components/table/Th.js +17 -17
  97. package/dist/cjs/components/table/index.js +4 -4
  98. package/dist/cjs/components/table/index.js.map +1 -1
  99. package/dist/cjs/components/table/useRowSelection.js +9 -9
  100. package/dist/cjs/components/table/useRowSelection.js.map +1 -1
  101. package/dist/cjs/form/FormProvider.js +4 -4
  102. package/dist/cjs/form/FormProvider.js.map +1 -1
  103. package/dist/cjs/form/index.js +3 -3
  104. package/dist/cjs/form/index.js.map +1 -1
  105. package/dist/cjs/form/useForm.js +4 -4
  106. package/dist/cjs/form/useForm.js.map +1 -1
  107. package/dist/cjs/hooks/index.js +3 -3
  108. package/dist/cjs/hooks/index.js.map +1 -1
  109. package/dist/cjs/hooks/useControlledList.js +5 -5
  110. package/dist/cjs/hooks/useControlledList.js.map +1 -1
  111. package/dist/cjs/hooks/useParentHeight.js +2 -2
  112. package/dist/cjs/hooks/useParentHeight.js.map +1 -1
  113. package/dist/cjs/index.js +9 -9
  114. package/dist/cjs/index.js.map +1 -1
  115. package/dist/cjs/theme/PlasmaColors.js +30 -30
  116. package/dist/cjs/theme/Plasmantine.js +4 -4
  117. package/dist/cjs/theme/Theme.js +15 -14
  118. package/dist/cjs/theme/Theme.js.map +1 -1
  119. package/dist/cjs/theme/index.js +2 -2
  120. package/dist/cjs/theme/index.js.map +1 -1
  121. package/dist/cjs/utils/index.js +3 -3
  122. package/dist/cjs/utils/index.js.map +1 -1
  123. package/dist/cjs/utils/overrideComponent.js +2 -2
  124. package/dist/cjs/utils/overrideComponent.js.map +1 -1
  125. package/dist/definitions/components/copyToClipboard/CopyToClipboard.d.ts +5 -1
  126. package/dist/definitions/components/copyToClipboard/CopyToClipboard.d.ts.map +1 -1
  127. package/dist/definitions/components/header/Header.d.ts.map +1 -1
  128. package/dist/definitions/components/table/Table.d.ts.map +1 -1
  129. package/dist/definitions/components/table/Table.styles.d.ts +7 -1
  130. package/dist/definitions/components/table/Table.styles.d.ts.map +1 -1
  131. package/dist/definitions/components/table/TableActions.d.ts.map +1 -1
  132. package/dist/definitions/components/table/TableDateRangePicker.d.ts.map +1 -1
  133. package/dist/definitions/components/table/TableFilter.d.ts.map +1 -1
  134. package/dist/definitions/components/table/TableHeader.d.ts +1 -0
  135. package/dist/definitions/components/table/TableHeader.d.ts.map +1 -1
  136. package/dist/definitions/components/table/TablePredicate.d.ts.map +1 -1
  137. package/dist/definitions/theme/Theme.d.ts.map +1 -1
  138. package/dist/esm/__tests__/Utils.js +1 -1
  139. package/dist/esm/components/button/Button.js +6 -6
  140. package/dist/esm/components/button/ButtonWithDisabledTooltip.js +3 -3
  141. package/dist/esm/components/code-editor/CodeEditor.js +6 -6
  142. package/dist/esm/components/code-editor/languages/xml.js +2 -2
  143. package/dist/esm/components/collection/Collection.js +3 -3
  144. package/dist/esm/components/collection/CollectionItem.js +4 -4
  145. package/dist/esm/components/copyToClipboard/CopyToClipboard.js +24 -20
  146. package/dist/esm/components/copyToClipboard/CopyToClipboard.js.map +1 -1
  147. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +2 -2
  148. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js +2 -2
  149. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js +3 -3
  150. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js +1 -1
  151. package/dist/esm/components/header/Header.js +11 -11
  152. package/dist/esm/components/header/Header.js.map +1 -1
  153. package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  154. package/dist/esm/components/inline-confirm/InlineConfirm.js +1 -1
  155. package/dist/esm/components/inline-confirm/InlineConfirmButton.js +2 -2
  156. package/dist/esm/components/inline-confirm/InlineConfirmMenuItem.js +2 -2
  157. package/dist/esm/components/menu/Menu.js +2 -2
  158. package/dist/esm/components/modal-wizard/ModalWizard.js +4 -4
  159. package/dist/esm/components/prompt/Prompt.js +3 -3
  160. package/dist/esm/components/prompt/PromptFooter.js +3 -3
  161. package/dist/esm/components/sticky-footer/StickyFooter.js +3 -3
  162. package/dist/esm/components/table/Table.js +27 -17
  163. package/dist/esm/components/table/Table.js.map +1 -1
  164. package/dist/esm/components/table/Table.styles.js +19 -4
  165. package/dist/esm/components/table/Table.styles.js.map +1 -1
  166. package/dist/esm/components/table/TableActions.js +13 -4
  167. package/dist/esm/components/table/TableActions.js.map +1 -1
  168. package/dist/esm/components/table/TableCollapsibleColumn.js +2 -2
  169. package/dist/esm/components/table/TableDateRangePicker.js +45 -35
  170. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
  171. package/dist/esm/components/table/TableFilter.js +26 -20
  172. package/dist/esm/components/table/TableFilter.js.map +1 -1
  173. package/dist/esm/components/table/TableFooter.js +3 -3
  174. package/dist/esm/components/table/TableHeader.js +41 -41
  175. package/dist/esm/components/table/TableHeader.js.map +1 -1
  176. package/dist/esm/components/table/TablePagination.js +2 -2
  177. package/dist/esm/components/table/TablePerPage.js +2 -2
  178. package/dist/esm/components/table/TablePredicate.js +28 -22
  179. package/dist/esm/components/table/TablePredicate.js.map +1 -1
  180. package/dist/esm/components/table/useRowSelection.js +2 -2
  181. package/dist/esm/form/useForm.js +2 -2
  182. package/dist/esm/hooks/useControlledList.js +2 -2
  183. package/dist/esm/hooks/useParentHeight.js +1 -1
  184. package/dist/esm/theme/Theme.js +4 -3
  185. package/dist/esm/theme/Theme.js.map +1 -1
  186. package/dist/esm/utils/overrideComponent.js +1 -1
  187. package/package.json +9 -9
  188. package/src/components/copyToClipboard/CopyToClipboard.tsx +20 -12
  189. package/src/components/copyToClipboard/__tests__/CopyToClipboard.spec.tsx +12 -2
  190. package/src/components/header/Header.tsx +5 -7
  191. package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  192. package/src/components/table/Table.styles.ts +21 -5
  193. package/src/components/table/Table.tsx +10 -4
  194. package/src/components/table/TableActions.tsx +9 -6
  195. package/src/components/table/TableDateRangePicker.tsx +23 -20
  196. package/src/components/table/TableFilter.tsx +21 -18
  197. package/src/components/table/TableHeader.tsx +35 -23
  198. package/src/components/table/TablePredicate.tsx +15 -12
  199. package/src/theme/Theme.tsx +1 -0
@@ -1,7 +1,5 @@
1
- import React from 'react';
2
-
3
- import {CheckSize24Px, CopySize24Px} from '@coveord/plasma-react-icons';
4
- import {TextInput, CopyButton, Tooltip, ActionIcon, createStyles} from '@mantine/core';
1
+ import {CheckSize16Px, CopySize16Px} from '@coveord/plasma-react-icons';
2
+ import {ActionIcon, CopyButton, createStyles, TextInput, Tooltip} from '@mantine/core';
5
3
 
6
4
  export interface CopyToClipboardProps {
7
5
  /**
@@ -14,6 +12,10 @@ export interface CopyToClipboardProps {
14
12
  * @default false
15
13
  */
16
14
  withLabel?: boolean;
15
+ /**
16
+ * Called each time the value is copied to the clipboard
17
+ */
18
+ onCopy?: () => void;
17
19
  }
18
20
 
19
21
  const useStyles = createStyles((theme) => ({
@@ -22,19 +24,25 @@ const useStyles = createStyles((theme) => ({
22
24
  },
23
25
  }));
24
26
 
25
- const CopyToClipboardButton: React.FunctionComponent<{value: string}> = ({value}) => (
27
+ const CopyToClipboardButton: React.FunctionComponent<Omit<CopyToClipboardProps, 'withLabel'>> = ({value, onCopy}) => (
26
28
  <CopyButton value={value} timeout={2000}>
27
29
  {({copied, copy}) => (
28
- <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position="top">
29
- <ActionIcon color={copied ? 'teal' : 'gray'} onClick={copy}>
30
- {copied ? <CheckSize24Px /> : <CopySize24Px />}
30
+ <Tooltip label={copied ? 'Copied' : 'Copy'}>
31
+ <ActionIcon
32
+ color={copied ? 'success' : 'gray'}
33
+ onClick={() => {
34
+ copy();
35
+ onCopy?.();
36
+ }}
37
+ >
38
+ {copied ? <CheckSize16Px height={16} /> : <CopySize16Px height={16} />}
31
39
  </ActionIcon>
32
40
  </Tooltip>
33
41
  )}
34
42
  </CopyButton>
35
43
  );
36
44
 
37
- export const CopyToClipboard: React.FunctionComponent<CopyToClipboardProps> = ({value, withLabel}) => {
45
+ export const CopyToClipboard: React.FunctionComponent<CopyToClipboardProps> = ({withLabel, ...others}) => {
38
46
  const {classes} = useStyles();
39
47
 
40
48
  return withLabel ? (
@@ -42,11 +50,11 @@ export const CopyToClipboard: React.FunctionComponent<CopyToClipboardProps> = ({
42
50
  classNames={{
43
51
  input: classes.input,
44
52
  }}
45
- value={value}
53
+ value={others.value}
46
54
  readOnly
47
- rightSection={<CopyToClipboardButton value={value} />}
55
+ rightSection={<CopyToClipboardButton {...others} />}
48
56
  />
49
57
  ) : (
50
- <CopyToClipboardButton value={value} />
58
+ <CopyToClipboardButton {...others} />
51
59
  );
52
60
  };
@@ -1,9 +1,9 @@
1
- import {render, screen} from '@test-utils';
1
+ import {render, screen, userEvent} from '@test-utils';
2
2
 
3
3
  import {CopyToClipboard} from '../CopyToClipboard';
4
4
 
5
5
  describe('CopyToClipboard', () => {
6
- it('should display only a button by default', () => {
6
+ it('displays only a button by default', () => {
7
7
  const testValue = 'text value';
8
8
  render(<CopyToClipboard value={testValue} />);
9
9
 
@@ -22,4 +22,14 @@ describe('CopyToClipboard', () => {
22
22
  expect(document.querySelector('input')).toBeInTheDocument();
23
23
  });
24
24
  });
25
+
26
+ it('calls onCopy callback when the users copy the value to the clipboard', async () => {
27
+ const onCopySpy = vi.fn();
28
+ const user = userEvent.setup();
29
+ render(<CopyToClipboard value="whatever" onCopy={onCopySpy} />);
30
+
31
+ await user.click(screen.getByRole('button', {name: /copy/i}));
32
+
33
+ expect(onCopySpy).toHaveBeenCalled();
34
+ });
25
35
  });
@@ -1,5 +1,5 @@
1
1
  import {QuestionSize16Px} from '@coveord/plasma-react-icons';
2
- import {Anchor, Breadcrumbs, DefaultProps, Divider, Flex, Group, Stack, Text, Title, Tooltip} from '@mantine/core';
2
+ import {Anchor, Breadcrumbs, DefaultProps, Divider, Group, Stack, Text, Title, Tooltip} from '@mantine/core';
3
3
  import {Children, FunctionComponent, ReactElement, ReactNode} from 'react';
4
4
 
5
5
  export interface HeaderProps extends DefaultProps {
@@ -48,12 +48,10 @@ export const Header: HeaderType = ({description, borderBottom, children, variant
48
48
  >
49
49
  <Stack spacing={0}>
50
50
  {breadcrumbs}
51
- <Flex align="center">
52
- <Title order={variant === 'page' ? 1 : 3} color={variant === 'page' ? 'gray.5' : undefined}>
53
- {otherChildren}
54
- </Title>
51
+ <Title order={variant === 'page' ? 1 : 3} color={variant === 'page' ? 'gray.5' : undefined}>
52
+ {otherChildren}
55
53
  {docAnchor}
56
- </Flex>
54
+ </Title>
57
55
  <Text size={variant === 'page' ? 'md' : 'sm'} color="gray.6">
58
56
  {description}
59
57
  </Text>
@@ -92,7 +90,7 @@ export interface HeaderDocAnchorProps {
92
90
 
93
91
  const HeaderDocAnchor: FunctionComponent<HeaderDocAnchorProps> = ({href: docLink, label: docLinkTooltipLabel}) => (
94
92
  <Tooltip label={docLinkTooltipLabel} disabled={!docLinkTooltipLabel} position="right">
95
- <Anchor inline href={docLink} target="_blank" ml="xs">
93
+ <Anchor inline href={docLink} target="_blank" ml="xs" style={{verticalAlign: 'middle'}}>
96
94
  <QuestionSize16Px height={16} />
97
95
  </Anchor>
98
96
  </Tooltip>
@@ -37,15 +37,11 @@ exports[`Header > renders the specified breadcrumbs above the title 1`] = `
37
37
  Three
38
38
  </a>
39
39
  </div>
40
- <div
41
- class="mantine-xg7kom"
40
+ <h1
41
+ class="mantine-Text-root mantine-Title-root mantine-d1yoif"
42
42
  >
43
- <h1
44
- class="mantine-Text-root mantine-Title-root mantine-d1yoif"
45
- >
46
- Title
47
- </h1>
48
- </div>
43
+ Title
44
+ </h1>
49
45
  <div
50
46
  class="mantine-Text-root mantine-1w25z6f"
51
47
  />
@@ -1,11 +1,10 @@
1
1
  import {createStyles} from '@mantine/core';
2
2
 
3
3
  interface TableStylesParams {
4
- hasHeader: boolean;
5
4
  multiRowSelectionEnabled: boolean;
6
5
  }
7
6
 
8
- const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {
7
+ const useStyles = createStyles<string, TableStylesParams>((theme, {multiRowSelectionEnabled}) => {
9
8
  const rowBackgroundColor =
10
9
  theme.colorScheme === 'dark'
11
10
  ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)
@@ -13,7 +12,10 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
13
12
  return {
14
13
  table: {
15
14
  width: '100%',
16
- '& td:first-of-type, th:first-of-type > *': {
15
+ '& thead tr th': {
16
+ borderBottom: 'none',
17
+ },
18
+ '& td:first-of-type': {
17
19
  paddingLeft: theme.spacing.xl,
18
20
  },
19
21
  '& tbody td': {
@@ -23,7 +25,7 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
23
25
 
24
26
  header: {
25
27
  position: 'sticky',
26
- top: hasHeader ? 69 : 0,
28
+ top: 0,
27
29
  backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,
28
30
  transition: 'box-shadow 150ms ease',
29
31
  zIndex: 1,
@@ -34,7 +36,13 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
34
36
  left: 0,
35
37
  right: 0,
36
38
  bottom: 0,
37
- borderBottom: `1px solid ${theme.colors.gray[2]}`,
39
+ borderBottom: `1px solid ${theme.colors.gray[3]}`,
40
+ },
41
+ },
42
+
43
+ headerColumns: {
44
+ '& th:first-of-type > *': {
45
+ paddingLeft: theme.spacing.xl,
38
46
  },
39
47
  },
40
48
 
@@ -55,4 +63,12 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
55
63
  };
56
64
  });
57
65
 
66
+ export const TableComponentsOrder = {
67
+ MultiSelectInfo: 5,
68
+ Actions: 4,
69
+ Predicate: 3,
70
+ Filter: 2,
71
+ DateRangePicker: 1,
72
+ };
73
+
58
74
  export default useStyles;
@@ -18,6 +18,7 @@ import useStyles from './Table.styles';
18
18
  import {TableFormType, TableProps, TableState, TableType} from './Table.types';
19
19
  import {TableActions} from './TableActions';
20
20
  import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
21
+ import {TableConsumer} from './TableConsumer';
21
22
  import {TableContext} from './TableContext';
22
23
  import {TableDateRangePicker} from './TableDateRangePicker';
23
24
  import {TableFilter} from './TableFilter';
@@ -26,7 +27,6 @@ import {TableHeader} from './TableHeader';
26
27
  import {TablePagination} from './TablePagination';
27
28
  import {TablePerPage} from './TablePerPage';
28
29
  import {TablePredicate} from './TablePredicate';
29
- import {TableConsumer} from './TableConsumer';
30
30
  import {TableSelectableColumn} from './TableSelectableColumn';
31
31
  import {Th} from './Th';
32
32
  import {useRowSelection} from './useRowSelection';
@@ -62,7 +62,7 @@ export const Table: TableType = <T,>({
62
62
  const form = useForm<TableFormType>({
63
63
  initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},
64
64
  });
65
- const {cx, classes} = useStyles({hasHeader: !!header, multiRowSelectionEnabled});
65
+ const {cx, classes} = useStyles({multiRowSelectionEnabled});
66
66
 
67
67
  const table = useReactTable({
68
68
  initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),
@@ -196,11 +196,17 @@ export const Table: TableType = <T,>({
196
196
  noDataChildren
197
197
  ) : (
198
198
  <>
199
- {header}
200
199
  <MantineTable className={classes.table} horizontalSpacing="sm" verticalSpacing="xs" pb="sm">
201
200
  <thead className={classes.header}>
201
+ {!!header ? (
202
+ <tr>
203
+ <th style={{padding: 0}} colSpan={table.getAllColumns().length}>
204
+ {header}
205
+ </th>
206
+ </tr>
207
+ ) : null}
202
208
  {table.getHeaderGroups().map((headerGroup) => (
203
- <tr key={headerGroup.id}>
209
+ <tr key={headerGroup.id} className={classes.headerColumns}>
204
210
  {headerGroup.headers.map((columnHeader) => (
205
211
  <Th key={columnHeader.id} header={columnHeader} />
206
212
  ))}
@@ -1,5 +1,6 @@
1
- import {Group} from '@mantine/core';
1
+ import {Grid, Group} from '@mantine/core';
2
2
  import {ReactElement, ReactNode} from 'react';
3
+ import {TableComponentsOrder} from './Table.styles';
3
4
 
4
5
  import {useTable} from './TableContext';
5
6
 
@@ -35,10 +36,12 @@ export const TableActions = <T,>({children}: TableActionsProps<T>): ReactElement
35
36
  }
36
37
 
37
38
  return (
38
- <Group spacing="xs">
39
- {multiRowSelectionEnabled
40
- ? (children as (data: T[]) => ReactNode)(selectedRows)
41
- : (children as (datum: T) => ReactNode)(selectedRows[0])}
42
- </Group>
39
+ <Grid.Col span="content" order={TableComponentsOrder.Actions} py="sm">
40
+ <Group spacing="xs" style={{display: 'inline-flex'}}>
41
+ {multiRowSelectionEnabled
42
+ ? (children as (data: T[]) => ReactNode)(selectedRows)
43
+ : (children as (datum: T) => ReactNode)(selectedRows[0])}
44
+ </Group>
45
+ </Grid.Col>
43
46
  );
44
47
  };
@@ -1,5 +1,5 @@
1
1
  import {CalendarSize24Px} from '@coveord/plasma-react-icons';
2
- import {Popover} from '@mantine/core';
2
+ import {Grid, Group, Popover, Text} from '@mantine/core';
3
3
  import dayjs from 'dayjs';
4
4
  import {FunctionComponent, useState} from 'react';
5
5
 
@@ -10,6 +10,7 @@ import {
10
10
  DateRangePickerPreset,
11
11
  DateRangePickerValue,
12
12
  } from '../date-range-picker';
13
+ import {TableComponentsOrder} from './Table.styles';
13
14
  import {useTable} from './TableContext';
14
15
 
15
16
  interface TableDateRangePickerProps
@@ -47,24 +48,26 @@ export const TableDateRangePicker: FunctionComponent<TableDateRangePickerProps>
47
48
  const formatedRange = `${formatDate(form.values.dateRange[0])} - ${formatDate(form.values.dateRange[1])}`;
48
49
 
49
50
  return (
50
- <>
51
- {formatedRange}
52
- <Popover opened={opened} onChange={setOpened}>
53
- <Popover.Target>
54
- <Button variant="outline" color="gray" onClick={() => setOpened(true)} px="xs">
55
- <CalendarSize24Px width={24} height={24} />
56
- </Button>
57
- </Popover.Target>
58
- <Popover.Dropdown p={0}>
59
- <DateRangePickerInlineCalendar
60
- initialRange={form.values.dateRange}
61
- onApply={onApply}
62
- onCancel={onCancel}
63
- presets={presets}
64
- rangeCalendarProps={rangeCalendarProps}
65
- />
66
- </Popover.Dropdown>
67
- </Popover>
68
- </>
51
+ <Grid.Col span="content" order={TableComponentsOrder.DateRangePicker} py="sm">
52
+ <Group spacing="xs">
53
+ <Text span>{formatedRange}</Text>
54
+ <Popover opened={opened} onChange={setOpened}>
55
+ <Popover.Target>
56
+ <Button variant="outline" color="gray" onClick={() => setOpened(true)} px="xs">
57
+ <CalendarSize24Px width={24} height={24} />
58
+ </Button>
59
+ </Popover.Target>
60
+ <Popover.Dropdown p={0}>
61
+ <DateRangePickerInlineCalendar
62
+ initialRange={form.values.dateRange}
63
+ onApply={onApply}
64
+ onCancel={onCancel}
65
+ presets={presets}
66
+ rangeCalendarProps={rangeCalendarProps}
67
+ />
68
+ </Popover.Dropdown>
69
+ </Popover>
70
+ </Group>
71
+ </Grid.Col>
69
72
  );
70
73
  };
@@ -1,6 +1,7 @@
1
1
  import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';
2
- import {ActionIcon, createStyles, DefaultProps, Selectors, TextInput} from '@mantine/core';
2
+ import {ActionIcon, createStyles, DefaultProps, Grid, Selectors, TextInput} from '@mantine/core';
3
3
  import {ChangeEventHandler, FunctionComponent, MouseEventHandler} from 'react';
4
+ import {TableComponentsOrder} from './Table.styles';
4
5
 
5
6
  import {useTable} from './TableContext';
6
7
 
@@ -53,22 +54,24 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
53
54
  };
54
55
 
55
56
  return (
56
- <TextInput
57
- className={classes.wrapper}
58
- placeholder={placeholder}
59
- mb="md"
60
- rightSection={
61
- state.globalFilter ? (
62
- <ActionIcon onClick={handleClear}>
63
- <CrossSize16Px height={16} />
64
- </ActionIcon>
65
- ) : (
66
- <SearchSize16Px height={14} className={classes.empty} />
67
- )
68
- }
69
- value={state.globalFilter}
70
- onChange={handleChange}
71
- {...others}
72
- />
57
+ <Grid.Col span="content" order={TableComponentsOrder.Filter} py="sm">
58
+ <TextInput
59
+ className={classes.wrapper}
60
+ placeholder={placeholder}
61
+ mb="md"
62
+ rightSection={
63
+ state.globalFilter ? (
64
+ <ActionIcon onClick={handleClear}>
65
+ <CrossSize16Px height={16} />
66
+ </ActionIcon>
67
+ ) : (
68
+ <SearchSize16Px height={14} className={classes.empty} />
69
+ )
70
+ }
71
+ value={state.globalFilter}
72
+ onChange={handleChange}
73
+ {...others}
74
+ />
75
+ </Grid.Col>
73
76
  );
74
77
  };
@@ -1,18 +1,21 @@
1
1
  import {CrossSize16Px} from '@coveord/plasma-react-icons';
2
- import {createStyles, DefaultProps, Group, Selectors, Space, Tooltip} from '@mantine/core';
2
+ import {createStyles, DefaultProps, Grid, Selectors, Tooltip} from '@mantine/core';
3
3
  import {FunctionComponent, ReactNode} from 'react';
4
4
 
5
5
  import {Button} from '../button';
6
+ import {TableComponentsOrder} from './Table.styles';
6
7
  import {useTable} from './TableContext';
7
8
 
8
9
  const useStyles = createStyles((theme) => ({
9
10
  root: {
10
- position: 'sticky',
11
- top: 0,
12
- zIndex: 1,
13
- backgroundColor: theme.colors.gray[1],
11
+ flexDirection: 'row-reverse',
12
+ flexWrap: 'wrap-reverse',
13
+ background: `repeating-linear-gradient(${theme.colors.gray[1]}, ${theme.colors.gray[1]} 68px, ${theme.colors.gray[3]} 68px, ${theme.colors.gray[3]} 69px)`,
14
14
  borderBottom: `1px solid ${theme.colors.gray[3]}`,
15
15
  },
16
+ multiSelectInfo: {
17
+ justifySelf: 'flex-start',
18
+ },
16
19
  }));
17
20
 
18
21
  type TableHeaderStylesNames = Selectors<typeof useStyles>;
@@ -30,24 +33,33 @@ export const TableHeader: FunctionComponent<TableHeaderProps> = ({
30
33
  const {getSelectedRows, multiRowSelectionEnabled, clearSelection} = useTable();
31
34
  const {classes} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});
32
35
  const selectedRows = getSelectedRows();
33
- return multiRowSelectionEnabled ? (
34
- <Group position="apart" className={classes.root}>
35
- {selectedRows.length > 0 ? (
36
- <Tooltip label="Unselect all">
37
- <Button onClick={clearSelection} ml="lg" variant="subtle" leftIcon={<CrossSize16Px height={16} />}>
38
- {selectedRows.length} selected
39
- </Button>
40
- </Tooltip>
41
- ) : (
42
- <Space />
43
- )}
44
- <Group position="right" spacing="lg" px="md" py="sm" {...others}>
45
- {children}
46
- </Group>
47
- </Group>
48
- ) : (
49
- <Group position="right" spacing="lg" px="md" py="sm" className={classes.root} {...others}>
36
+ return (
37
+ <Grid
38
+ justify="flex-start"
39
+ align="center"
40
+ gutter="sm"
41
+ p={0}
42
+ pl="md"
43
+ pr="lg"
44
+ m={0}
45
+ className={classes.root}
46
+ {...others}
47
+ >
48
+ {multiRowSelectionEnabled && selectedRows.length > 0 ? (
49
+ <Grid.Col
50
+ span="auto"
51
+ py="sm"
52
+ className={classes.multiSelectInfo}
53
+ order={TableComponentsOrder.MultiSelectInfo}
54
+ >
55
+ <Tooltip label="Unselect all">
56
+ <Button onClick={clearSelection} variant="subtle" leftIcon={<CrossSize16Px height={16} />}>
57
+ {selectedRows.length} selected
58
+ </Button>
59
+ </Tooltip>
60
+ </Grid.Col>
61
+ ) : null}
50
62
  {children}
51
- </Group>
63
+ </Grid>
52
64
  );
53
65
  };
@@ -1,5 +1,6 @@
1
- import {Group, Select, SelectItem, Text} from '@mantine/core';
1
+ import {Grid, Group, Select, SelectItem, Text} from '@mantine/core';
2
2
  import {FunctionComponent} from 'react';
3
+ import {TableComponentsOrder} from './Table.styles';
3
4
 
4
5
  import {useTable} from './TableContext';
5
6
 
@@ -29,16 +30,18 @@ export const TablePredicate: FunctionComponent<TablePredicateProps> = ({id, data
29
30
  };
30
31
 
31
32
  return (
32
- <Group spacing="xs">
33
- {label ? <Text>{label}:</Text> : null}
34
- <Select
35
- withinPortal
36
- value={form.values.predicates[id]}
37
- onChange={onUpdate}
38
- data={data}
39
- aria-label={label ?? id}
40
- searchable={data.length > 7}
41
- />
42
- </Group>
33
+ <Grid.Col span="content" order={TableComponentsOrder.Predicate} py="sm">
34
+ <Group spacing="xs">
35
+ {label ? <Text>{label}:</Text> : null}
36
+ <Select
37
+ withinPortal
38
+ value={form.values.predicates[id]}
39
+ onChange={onUpdate}
40
+ data={data}
41
+ aria-label={label ?? id}
42
+ searchable={data.length > 7}
43
+ />
44
+ </Group>
45
+ </Grid.Col>
43
46
  );
44
47
  };
@@ -146,6 +146,7 @@ export const plasmaTheme: MantineThemeOverride = {
146
146
  withArrow: true,
147
147
  withinPortal: true,
148
148
  multiline: true,
149
+ zIndex: 10000,
149
150
  },
150
151
  },
151
152
  Loader: {