@coveord/plasma-mantine 51.1.30 → 52.0.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 (83) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +28 -27
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/code-editor/CodeEditor.js +3 -21
  5. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  6. package/dist/cjs/components/collection/Collection.js +6 -3
  7. package/dist/cjs/components/collection/Collection.js.map +1 -1
  8. package/dist/cjs/components/collection/CollectionItem.js +1 -1
  9. package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
  10. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js +60 -0
  11. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -0
  12. package/dist/cjs/components/copyToClipboard/index.js +8 -0
  13. package/dist/cjs/components/copyToClipboard/index.js.map +1 -0
  14. package/dist/cjs/components/index.js +1 -0
  15. package/dist/cjs/components/index.js.map +1 -1
  16. package/dist/cjs/components/modal-wizard/ModalWizard.js +2 -2
  17. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
  18. package/dist/cjs/components/table/Table.js +43 -35
  19. package/dist/cjs/components/table/Table.js.map +1 -1
  20. package/dist/cjs/components/table/TableConsumer.js +19 -0
  21. package/dist/cjs/components/table/TableConsumer.js.map +1 -0
  22. package/dist/cjs/index.js +3 -0
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/theme/Theme.js +13 -7
  25. package/dist/cjs/theme/Theme.js.map +1 -1
  26. package/dist/definitions/components/code-editor/CodeEditor.d.ts.map +1 -1
  27. package/dist/definitions/components/collection/Collection.d.ts +10 -0
  28. package/dist/definitions/components/collection/Collection.d.ts.map +1 -1
  29. package/dist/definitions/components/copyToClipboard/CopyToClipboard.d.ts +15 -0
  30. package/dist/definitions/components/copyToClipboard/CopyToClipboard.d.ts.map +1 -0
  31. package/dist/definitions/components/copyToClipboard/index.d.ts +2 -0
  32. package/dist/definitions/components/copyToClipboard/index.d.ts.map +1 -0
  33. package/dist/definitions/components/index.d.ts +1 -0
  34. package/dist/definitions/components/index.d.ts.map +1 -1
  35. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts +2 -2
  36. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts.map +1 -1
  37. package/dist/definitions/components/table/Table.d.ts.map +1 -1
  38. package/dist/definitions/components/table/Table.types.d.ts +2 -0
  39. package/dist/definitions/components/table/Table.types.d.ts.map +1 -1
  40. package/dist/definitions/components/table/TableConsumer.d.ts +5 -0
  41. package/dist/definitions/components/table/TableConsumer.d.ts.map +1 -0
  42. package/dist/definitions/index.d.ts +1 -1
  43. package/dist/definitions/index.d.ts.map +1 -1
  44. package/dist/definitions/theme/Theme.d.ts.map +1 -1
  45. package/dist/esm/components/code-editor/CodeEditor.js +4 -22
  46. package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
  47. package/dist/esm/components/collection/Collection.js +7 -4
  48. package/dist/esm/components/collection/Collection.js.map +1 -1
  49. package/dist/esm/components/collection/CollectionItem.js +1 -1
  50. package/dist/esm/components/collection/CollectionItem.js.map +1 -1
  51. package/dist/esm/components/copyToClipboard/CopyToClipboard.js +49 -0
  52. package/dist/esm/components/copyToClipboard/CopyToClipboard.js.map +1 -0
  53. package/dist/esm/components/copyToClipboard/index.js +3 -0
  54. package/dist/esm/components/copyToClipboard/index.js.map +1 -0
  55. package/dist/esm/components/index.js +1 -0
  56. package/dist/esm/components/index.js.map +1 -1
  57. package/dist/esm/components/modal-wizard/ModalWizard.js +2 -2
  58. package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -1
  59. package/dist/esm/components/table/Table.js +43 -35
  60. package/dist/esm/components/table/Table.js.map +1 -1
  61. package/dist/esm/components/table/Table.types.js.map +1 -1
  62. package/dist/esm/components/table/TableConsumer.js +9 -0
  63. package/dist/esm/components/table/TableConsumer.js.map +1 -0
  64. package/dist/esm/index.js +1 -1
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist/esm/theme/Theme.js +13 -7
  67. package/dist/esm/theme/Theme.js.map +1 -1
  68. package/package.json +16 -16
  69. package/src/components/code-editor/CodeEditor.tsx +2 -13
  70. package/src/components/collection/Collection.tsx +15 -4
  71. package/src/components/collection/CollectionItem.tsx +1 -1
  72. package/src/components/copyToClipboard/CopyToClipboard.tsx +52 -0
  73. package/src/components/copyToClipboard/__tests__/CopyToClipboard.spec.tsx +25 -0
  74. package/src/components/copyToClipboard/index.ts +1 -0
  75. package/src/components/index.ts +1 -0
  76. package/src/components/modal-wizard/ModalWizard.tsx +4 -4
  77. package/src/components/modal-wizard/__tests__/ModalWizard.spec.tsx +10 -0
  78. package/src/components/table/Table.tsx +4 -0
  79. package/src/components/table/Table.types.ts +3 -1
  80. package/src/components/table/TableConsumer.tsx +3 -0
  81. package/src/components/table/__tests__/Table.spec.tsx +25 -0
  82. package/src/index.ts +2 -0
  83. package/src/theme/Theme.tsx +8 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/theme/Theme.tsx"],"sourcesContent":["import {InfoSize24Px} from '@coveord/plasma-react-icons';\nimport {color} from '@coveord/plasma-tokens';\nimport {getSize, MantineThemeOverride, NotificationProps, rem} from '@mantine/core';\n\nimport {PlasmaColors} from './PlasmaColors';\n\nexport const plasmaTheme: MantineThemeOverride = {\n // These are overrides over https://github.com/mantinedev/mantine/blob/master/src/mantine-styles/src/theme/default-theme.ts\n colorScheme: 'light',\n fontFamily: 'canada-type-gibson, sans-serif',\n black: color.primary.gray[9],\n defaultRadius: 8,\n lineHeight: 1.5,\n spacing: {\n xs: '8px',\n sm: '16px',\n md: '24px',\n lg: '32px',\n xl: '40px',\n },\n primaryColor: 'action',\n headings: {\n fontFamily: 'canada-type-gibson, sans-serif',\n fontWeight: 500,\n sizes: {\n h1: {fontSize: '48px', lineHeight: undefined, fontWeight: 300},\n h2: {fontSize: '32px', lineHeight: undefined, fontWeight: 500},\n h3: {fontSize: '24px', lineHeight: undefined, fontWeight: 500},\n h4: {fontSize: '18px', lineHeight: undefined, fontWeight: 300},\n h5: {fontSize: '14px', lineHeight: undefined, fontWeight: 500},\n h6: {fontSize: '12px', lineHeight: undefined, fontWeight: 500},\n },\n },\n shadows: {\n xs: '0px 1px 0px rgba(4, 8, 31, 0.08)',\n sm: '0px 2px 4px rgba(4, 8, 31, 0.12)',\n md: '0px 4px 8px rgba(4, 8, 31, 0.08)',\n lg: '0px 8px 16px rgba(7, 12, 41, 0.06)',\n xl: '0px 16px 24px rgba(4, 8, 31, 0.06)',\n },\n colors: PlasmaColors,\n components: {\n Alert: {\n defaultProps: {\n icon: <InfoSize24Px height={24} />,\n color: 'navy',\n },\n styles: {\n title: {\n fontWeight: 500,\n },\n },\n },\n Title: {\n styles: (theme) => ({\n root: {\n '&:is(h1,h2,h3,h4,h5,h6)': {letterSpacing: '0.011em'},\n },\n }),\n },\n Text: {\n defaultProps: {\n weight: 300,\n },\n styles: (theme, {}, {size}) => ({\n root: {\n fontSize: getSize({size: size ?? 'sm', sizes: theme.fontSizes}),\n },\n }),\n },\n Button: {\n styles: () => ({\n root: {\n fontWeight: 400,\n },\n }),\n variants: {\n outline: () => ({\n root: {\n backgroundColor: 'white',\n },\n }),\n },\n },\n Modal: {\n styles: (theme, {fullScreen}, {size}) => ({\n content: {\n flex: fullScreen\n ? '0 0 100%'\n : `0 0 ${getSize({\n size,\n sizes: {\n xs: rem(440),\n sm: rem(550),\n md: rem(800),\n lg: rem(1334),\n xl: rem('85%'),\n },\n })}`,\n overflow: 'auto',\n },\n title: {\n width: '100%',\n fontSize: theme.headings.sizes.h3.fontSize,\n lineHeight: theme.headings.sizes.h3.lineHeight,\n fontWeight: 500,\n },\n }),\n defaultProps: {\n overlayProps: {\n color: color.primary.navy[9],\n opacity: 0.9,\n },\n },\n },\n InputWrapper: {\n defaultProps: {\n withAsterisk: false,\n },\n styles: (theme) => ({\n label: {\n marginBottom: theme.spacing.xs,\n },\n description: {\n fontSize: theme.fontSizes.sm,\n color: theme.colors.gray[7],\n marginBottom: theme.spacing.xs,\n },\n invalid: {\n color: theme.colors.red[9],\n borderColor: theme.colors.red[6],\n },\n error: {\n color: theme.colors.red[9],\n },\n }),\n },\n TextInput: {\n defaultProps: {\n radius: 8,\n },\n },\n Tooltip: {\n defaultProps: {\n color: 'navy',\n withArrow: true,\n withinPortal: true,\n multiline: true,\n },\n },\n Loader: {\n defaultProps: {\n variant: 'dots',\n color: 'action',\n },\n },\n DateRangePicker: {\n styles: {\n cell: {\n textAlign: 'center',\n },\n },\n },\n Anchor: {\n defaultProps: {\n color: 'action.6',\n },\n styles: (theme) => ({\n root: {\n ...theme.fn.hover({\n textDecoration: 'underline',\n color: theme.colors.action[8],\n }),\n },\n }),\n },\n Checkbox: {\n defaultProps: {\n radius: 'sm',\n },\n },\n List: {\n styles: () => ({\n root: {\n listStyleType: 'disc',\n },\n }),\n },\n Radio: {\n styles: {\n labelWrapper: {\n display: 'flex',\n alignItems: 'flex-start',\n },\n },\n },\n Popover: {\n defaultProps: {\n shadow: 'md',\n withArrow: true,\n },\n },\n Badge: {\n styles: {\n root: {\n textTransform: 'none',\n padding: '4px 8px',\n fontWeight: 500,\n },\n },\n },\n ColorSwatch: {\n defaultProps: {\n size: 8,\n withShadow: false,\n },\n },\n MenuItem: {\n defaultProps: {\n fw: 300,\n },\n },\n Notification: {\n styles: (theme, {color: notificationType}: NotificationProps) => ({\n root: {\n borderColor: theme.colors.gray[3],\n backgroundColor: theme.colors.gray[0],\n boxShadow: theme.shadows.lg,\n padding: theme.spacing.sm,\n '&[data-with-icon]': {\n paddingLeft: theme.spacing.sm,\n },\n },\n icon: {\n backgroundColor: 'transparent',\n marginRight: theme.spacing.sm,\n color: theme.colors?.[notificationType][6],\n },\n closeButton: {\n margin: theme.spacing.xs,\n color: theme.colors.gray[5],\n },\n }),\n defaultProps: {\n icon: <InfoSize24Px height={24} />,\n color: 'info',\n },\n },\n Skeleton: {\n styles: {\n visible: {\n '&::before': {zIndex: 'unset'},\n '&::after': {zIndex: 'unset'},\n },\n },\n },\n Segmented: {\n styles: {\n control: {\n zIndex: 'unset',\n },\n },\n },\n },\n};\n"],"names":["InfoSize24Px","color","getSize","rem","PlasmaColors","plasmaTheme","colorScheme","fontFamily","black","primary","gray","defaultRadius","lineHeight","spacing","xs","sm","md","lg","xl","primaryColor","headings","fontWeight","sizes","h1","fontSize","undefined","h2","h3","h4","h5","h6","shadows","colors","components","Alert","defaultProps","icon","height","styles","title","Title","theme","root","letterSpacing","Text","weight","size","fontSizes","Button","variants","outline","backgroundColor","Modal","fullScreen","content","flex","overflow","width","overlayProps","navy","opacity","InputWrapper","withAsterisk","label","marginBottom","description","invalid","red","borderColor","error","TextInput","radius","Tooltip","withArrow","withinPortal","multiline","Loader","variant","DateRangePicker","cell","textAlign","Anchor","fn","hover","textDecoration","action","Checkbox","List","listStyleType","Radio","labelWrapper","display","alignItems","Popover","shadow","Badge","textTransform","padding","ColorSwatch","withShadow","MenuItem","fw","Notification","notificationType","boxShadow","paddingLeft","marginRight","closeButton","margin","Skeleton","visible","zIndex","Segmented","control"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/theme/Theme.tsx"],"sourcesContent":["import {InfoSize24Px} from '@coveord/plasma-react-icons';\nimport {color} from '@coveord/plasma-tokens';\nimport {getSize, MantineThemeOverride, NotificationProps, rem} from '@mantine/core';\n\nimport {PlasmaColors} from './PlasmaColors';\n\nexport const plasmaTheme: MantineThemeOverride = {\n // These are overrides over https://github.com/mantinedev/mantine/blob/master/src/mantine-styles/src/theme/default-theme.ts\n colorScheme: 'light',\n fontFamily: 'canada-type-gibson, sans-serif',\n black: color.primary.gray[9],\n defaultRadius: 8,\n lineHeight: 1.5,\n spacing: {\n xs: '8px',\n sm: '16px',\n md: '24px',\n lg: '32px',\n xl: '40px',\n },\n primaryColor: 'action',\n headings: {\n fontFamily: 'canada-type-gibson, sans-serif',\n fontWeight: 500,\n sizes: {\n h1: {fontSize: '48px', lineHeight: undefined, fontWeight: 300},\n h2: {fontSize: '32px', lineHeight: undefined, fontWeight: 500},\n h3: {fontSize: '24px', lineHeight: undefined, fontWeight: 500},\n h4: {fontSize: '18px', lineHeight: undefined, fontWeight: 300},\n h5: {fontSize: '14px', lineHeight: undefined, fontWeight: 500},\n h6: {fontSize: '12px', lineHeight: undefined, fontWeight: 500},\n },\n },\n shadows: {\n xs: '0px 1px 0px rgba(4, 8, 31, 0.08)',\n sm: '0px 2px 4px rgba(4, 8, 31, 0.12)',\n md: '0px 4px 8px rgba(4, 8, 31, 0.08)',\n lg: '0px 8px 16px rgba(7, 12, 41, 0.06)',\n xl: '0px 16px 24px rgba(4, 8, 31, 0.06)',\n },\n colors: PlasmaColors,\n components: {\n Alert: {\n defaultProps: {\n icon: <InfoSize24Px height={24} />,\n color: 'navy',\n },\n styles: {\n title: {\n fontWeight: 500,\n },\n },\n },\n Title: {\n styles: {\n root: {\n '&:is(h1,h2,h3,h4,h5,h6)': {letterSpacing: '0.011em'},\n },\n },\n },\n Text: {\n defaultProps: {\n weight: 300,\n },\n styles: (theme, {}, {size}) => ({\n root: {\n fontSize: getSize({size: size ?? 'sm', sizes: theme.fontSizes}),\n },\n }),\n },\n Button: {\n styles: () => ({\n root: {\n fontWeight: 400,\n },\n }),\n variants: {\n outline: () => ({\n root: {\n backgroundColor: 'white',\n },\n }),\n },\n },\n Modal: {\n styles: (theme, {fullScreen}, {size}) => ({\n content: {\n flex: fullScreen\n ? '0 0 100%'\n : `0 0 ${getSize({\n size,\n sizes: {\n xs: rem(440),\n sm: rem(550),\n md: rem(800),\n lg: rem(1334),\n xl: rem('85%'),\n },\n })}`,\n overflow: 'auto',\n },\n title: {\n width: '100%',\n fontSize: theme.headings.sizes.h3.fontSize,\n lineHeight: theme.headings.sizes.h3.lineHeight,\n fontWeight: 500,\n },\n }),\n defaultProps: {\n overlayProps: {\n color: color.primary.navy[9],\n opacity: 0.9,\n },\n },\n },\n InputWrapper: {\n defaultProps: {\n withAsterisk: false,\n },\n styles: (theme) => ({\n label: {\n marginBottom: theme.spacing.xs,\n },\n description: {\n fontSize: theme.fontSizes.sm,\n color: theme.colors.gray[7],\n marginBottom: theme.spacing.xs,\n },\n invalid: {\n color: theme.colors.red[9],\n borderColor: theme.colors.red[6],\n },\n error: {\n color: theme.colors.red[9],\n },\n }),\n },\n TextInput: {\n defaultProps: {\n radius: 8,\n },\n },\n Tooltip: {\n defaultProps: {\n color: 'navy',\n withArrow: true,\n withinPortal: true,\n multiline: true,\n },\n },\n Loader: {\n defaultProps: {\n variant: 'dots',\n color: 'action',\n },\n },\n DateRangePicker: {\n styles: {\n cell: {\n textAlign: 'center',\n },\n },\n },\n Anchor: {\n defaultProps: {\n color: 'action.6',\n },\n styles: (theme) => ({\n root: {\n ...theme.fn.hover({\n textDecoration: 'underline',\n color: theme.colors.action[8],\n }),\n },\n }),\n },\n Checkbox: {\n defaultProps: {\n radius: 'sm',\n },\n styles: (theme) => ({\n label: {\n fontSize: theme.fontSizes.sm,\n fontWeight: 300,\n },\n }),\n },\n List: {\n styles: () => ({\n root: {\n listStyleType: 'disc',\n },\n }),\n },\n Radio: {\n styles: {\n labelWrapper: {\n display: 'flex',\n alignItems: 'flex-start',\n },\n },\n },\n Popover: {\n defaultProps: {\n shadow: 'md',\n withArrow: true,\n },\n },\n Badge: {\n styles: {\n root: {\n textTransform: 'none',\n padding: '4px 8px',\n fontWeight: 500,\n },\n },\n },\n ColorSwatch: {\n defaultProps: {\n size: 8,\n withShadow: false,\n },\n },\n MenuItem: {\n defaultProps: {\n fw: 300,\n },\n },\n Notification: {\n styles: (theme, {color: notificationType}: NotificationProps) => ({\n root: {\n borderColor: theme.colors.gray[3],\n backgroundColor: theme.colors.gray[0],\n boxShadow: theme.shadows.lg,\n padding: theme.spacing.sm,\n '&[data-with-icon]': {\n paddingLeft: theme.spacing.sm,\n },\n },\n icon: {\n backgroundColor: 'transparent',\n marginRight: theme.spacing.sm,\n color: theme.colors?.[notificationType][6],\n },\n closeButton: {\n margin: theme.spacing.xs,\n color: theme.colors.gray[5],\n },\n }),\n defaultProps: {\n icon: <InfoSize24Px height={24} />,\n color: 'info',\n },\n },\n Skeleton: {\n styles: {\n visible: {\n '&::before': {zIndex: 'unset'},\n '&::after': {zIndex: 'unset'},\n },\n },\n },\n Segmented: {\n styles: {\n control: {\n zIndex: 'unset',\n },\n },\n },\n },\n};\n"],"names":["InfoSize24Px","color","getSize","rem","PlasmaColors","plasmaTheme","colorScheme","fontFamily","black","primary","gray","defaultRadius","lineHeight","spacing","xs","sm","md","lg","xl","primaryColor","headings","fontWeight","sizes","h1","fontSize","undefined","h2","h3","h4","h5","h6","shadows","colors","components","Alert","defaultProps","icon","height","styles","title","Title","root","letterSpacing","Text","weight","theme","size","fontSizes","Button","variants","outline","backgroundColor","Modal","fullScreen","content","flex","overflow","width","overlayProps","navy","opacity","InputWrapper","withAsterisk","label","marginBottom","description","invalid","red","borderColor","error","TextInput","radius","Tooltip","withArrow","withinPortal","multiline","Loader","variant","DateRangePicker","cell","textAlign","Anchor","fn","hover","textDecoration","action","Checkbox","List","listStyleType","Radio","labelWrapper","display","alignItems","Popover","shadow","Badge","textTransform","padding","ColorSwatch","withShadow","MenuItem","fw","Notification","notificationType","boxShadow","paddingLeft","marginRight","closeButton","margin","Skeleton","visible","zIndex","Segmented","control"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveord/plasma-mantine",
3
- "version": "51.1.30",
3
+ "version": "52.0.0",
4
4
  "description": "A Plasma flavoured Mantine theme",
5
5
  "keywords": [
6
6
  "plasma",
@@ -14,7 +14,7 @@
14
14
  "module": "./dist/esm/index.js",
15
15
  "types": "./dist/definitions/index.d.ts",
16
16
  "dependencies": {
17
- "@mantine/utils": "6.0.1",
17
+ "@mantine/utils": "6.0.6",
18
18
  "@monaco-editor/react": "4.4.5",
19
19
  "@swc/helpers": "0.4.14",
20
20
  "@tanstack/react-table": "8.7.9",
@@ -25,20 +25,20 @@
25
25
  "lodash.defaultsdeep": "4.6.1",
26
26
  "monaco-editor": "0.34.0",
27
27
  "react-beautiful-dnd": "13.1.1",
28
- "@coveord/plasma-react-icons": "51.1.30",
29
- "@coveord/plasma-tokens": "50.0.2"
28
+ "@coveord/plasma-react-icons": "52.0.0",
29
+ "@coveord/plasma-tokens": "52.0.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@emotion/react": "11.10.6",
33
- "@mantine/carousel": "6.0.1",
34
- "@mantine/core": "6.0.1",
35
- "@mantine/dates": "6.0.1",
36
- "@mantine/form": "6.0.1",
37
- "@mantine/hooks": "6.0.1",
38
- "@mantine/modals": "6.0.1",
39
- "@mantine/notifications": "6.0.1",
33
+ "@mantine/carousel": "6.0.6",
34
+ "@mantine/core": "6.0.6",
35
+ "@mantine/dates": "6.0.6",
36
+ "@mantine/form": "6.0.6",
37
+ "@mantine/hooks": "6.0.6",
38
+ "@mantine/modals": "6.0.6",
39
+ "@mantine/notifications": "6.0.6",
40
40
  "@swc/cli": "0.1.62",
41
- "@swc/core": "1.3.42",
41
+ "@swc/core": "1.3.44",
42
42
  "@swc/jest": "0.2.24",
43
43
  "@testing-library/dom": "8.18.1",
44
44
  "@testing-library/jest-dom": "5.16.5",
@@ -51,10 +51,10 @@
51
51
  "@types/react-beautiful-dnd": "13.1.4",
52
52
  "@types/react-dom": "18.0.6",
53
53
  "@types/testing-library__jest-dom": "5.14.5",
54
- "csstype": "3.1.1",
54
+ "csstype": "3.1.2",
55
55
  "embla-carousel-react": "7.1.0",
56
56
  "eslint-plugin-testing-library": "5.7.2",
57
- "eslint-plugin-vitest": "0.0.54",
57
+ "eslint-plugin-vitest": "0.0.57",
58
58
  "eslint-plugin-vitest-globals": "1.2.0",
59
59
  "identity-obj-proxy": "3.0.0",
60
60
  "jest": "29.2.1",
@@ -64,8 +64,8 @@
64
64
  "react": "18.2.0",
65
65
  "react-dom": "18.2.0",
66
66
  "rimraf": "3.0.2",
67
- "tslib": "2.4.0",
68
- "typescript": "4.9.3",
67
+ "tslib": "2.5.0",
68
+ "typescript": "5.0.3",
69
69
  "vitest": "0.28.3"
70
70
  },
71
71
  "peerDependencies": {
@@ -1,9 +1,6 @@
1
- import {CheckSize16Px, CopySize16Px} from '@coveord/plasma-react-icons';
2
1
  import {
3
- ActionIcon,
4
2
  Box,
5
3
  Center,
6
- CopyButton,
7
4
  createStyles,
8
5
  DefaultProps,
9
6
  Group,
@@ -14,7 +11,6 @@ import {
14
11
  Selectors,
15
12
  Space,
16
13
  Stack,
17
- Tooltip,
18
14
  useComponentDefaultProps,
19
15
  } from '@mantine/core';
20
16
  import {useUncontrolled} from '@mantine/hooks';
@@ -23,6 +19,7 @@ import {FunctionComponent, useEffect, useState} from 'react';
23
19
 
24
20
  import {useParentHeight} from '../../hooks';
25
21
  import {XML} from './languages/xml';
22
+ import {CopyToClipboard} from '../copyToClipboard';
26
23
 
27
24
  const useStyles = createStyles((theme) => ({
28
25
  root: {},
@@ -162,15 +159,7 @@ export const CodeEditor: FunctionComponent<CodeEditorProps> = (props) => {
162
159
 
163
160
  const _copyButton = (
164
161
  <Group position="right">
165
- <CopyButton value={_value} timeout={2000}>
166
- {({copied, copy}) => (
167
- <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position="right">
168
- <ActionIcon color={copied ? 'lime' : 'gray'} onClick={copy}>
169
- {copied ? <CheckSize16Px height={16} /> : <CopySize16Px height={16} />}
170
- </ActionIcon>
171
- </Tooltip>
172
- )}
173
- </CopyButton>
162
+ <CopyToClipboard value={_value} />
174
163
  </Group>
175
164
  );
176
165
 
@@ -12,8 +12,8 @@ import {
12
12
  useComponentDefaultProps,
13
13
  } from '@mantine/core';
14
14
  import {ReorderPayload} from '@mantine/form/lib/types';
15
- import {useDidUpdate, useId} from '@mantine/hooks';
16
- import {ReactNode} from 'react';
15
+ import {useDidUpdate} from '@mantine/hooks';
16
+ import {ReactNode, useId} from 'react';
17
17
  import {DragDropContext, Droppable} from 'react-beautiful-dnd';
18
18
 
19
19
  import {Button} from '../button';
@@ -40,6 +40,16 @@ interface CollectionProps<T>
40
40
  * @default []
41
41
  */
42
42
  value?: T[];
43
+ /**
44
+ * Defines how each item is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.
45
+ *
46
+ * This method is required when using this component with ReactHookForm.
47
+ *
48
+ * @see {@link https://react-hook-form.com/api/usefieldarray/} for using a collection with ReactHookForm.
49
+ *
50
+ * @param originalItem The original item
51
+ */
52
+ getItemId?: (originalItem: T) => string;
43
53
  /**
44
54
  * Unused, has no effect
45
55
  */
@@ -146,6 +156,7 @@ export const Collection = <T,>(props: CollectionProps<T>) => {
146
156
  descriptionProps,
147
157
  error,
148
158
  errorProps,
159
+ getItemId,
149
160
 
150
161
  // Style props
151
162
  classNames,
@@ -156,7 +167,7 @@ export const Collection = <T,>(props: CollectionProps<T>) => {
156
167
  ...others
157
168
  } = useComponentDefaultProps('Collection', defaultProps as CollectionProps<T>, props);
158
169
  const {classes, cx} = useStyles(null, {classNames, name: 'Collection', styles, unstyled});
159
- const collectionID = useId('dnd-droppable');
170
+ const collectionID = useId();
160
171
 
161
172
  const hasOnlyOneItem = value.length === 1;
162
173
 
@@ -188,7 +199,7 @@ export const Collection = <T,>(props: CollectionProps<T>) => {
188
199
 
189
200
  const items = value.map((item, index) => (
190
201
  <CollectionItem
191
- key={index}
202
+ key={(getItemId?.(item) ?? index) as string}
192
203
  disabled={disabled}
193
204
  draggable={draggable}
194
205
  index={index}
@@ -62,7 +62,7 @@ const DraggableCollectionItem: FunctionComponent<PropsWithChildren<CollectionIte
62
62
  const removeButton = removable && onRemove ? <RemoveButton onClick={onRemove} /> : null;
63
63
 
64
64
  return (
65
- <Draggable index={index} draggableId={index.toString()}>
65
+ <Draggable key={index} index={index} draggableId={index.toString()}>
66
66
  {(provided, {isDragging}) => (
67
67
  <Group
68
68
  ref={provided.innerRef}
@@ -0,0 +1,52 @@
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';
5
+
6
+ export interface CopyToClipboardProps {
7
+ /**
8
+ * The value to be copied to the clipboard.
9
+ */
10
+ value: string;
11
+ /**
12
+ * Whether to display the string to be copied alongside the button.
13
+ *
14
+ * @default false
15
+ */
16
+ withLabel?: boolean;
17
+ }
18
+
19
+ const useStyles = createStyles((theme) => ({
20
+ input: {
21
+ color: theme.colors.gray[7],
22
+ },
23
+ }));
24
+
25
+ const CopyToClipboardButton: React.FunctionComponent<{value: string}> = ({value}) => (
26
+ <CopyButton value={value} timeout={2000}>
27
+ {({copied, copy}) => (
28
+ <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position="top">
29
+ <ActionIcon color={copied ? 'teal' : 'gray'} onClick={copy}>
30
+ {copied ? <CheckSize24Px /> : <CopySize24Px />}
31
+ </ActionIcon>
32
+ </Tooltip>
33
+ )}
34
+ </CopyButton>
35
+ );
36
+
37
+ export const CopyToClipboard: React.FunctionComponent<CopyToClipboardProps> = ({value, withLabel}) => {
38
+ const {classes} = useStyles();
39
+
40
+ return withLabel ? (
41
+ <TextInput
42
+ classNames={{
43
+ input: classes.input,
44
+ }}
45
+ value={value}
46
+ readOnly
47
+ rightSection={<CopyToClipboardButton value={value} />}
48
+ />
49
+ ) : (
50
+ <CopyToClipboardButton value={value} />
51
+ );
52
+ };
@@ -0,0 +1,25 @@
1
+ import {render, screen} from '@test-utils';
2
+
3
+ import {CopyToClipboard} from '../CopyToClipboard';
4
+
5
+ describe('CopyToClipboard', () => {
6
+ it('should display only a button by default', () => {
7
+ const testValue = 'text value';
8
+ render(<CopyToClipboard value={testValue} />);
9
+
10
+ expect(screen.getByRole('button', {name: /copy/i})).toBeVisible();
11
+ expect(screen.queryByDisplayValue(testValue)).not.toBeInTheDocument();
12
+ expect(document.querySelector('input')).not.toBeInTheDocument();
13
+ });
14
+
15
+ describe('when "isLabel" is true', () => {
16
+ it('should display an input element', () => {
17
+ const testValue = 'text value';
18
+ render(<CopyToClipboard value={testValue} withLabel />);
19
+
20
+ expect(screen.getByDisplayValue(testValue)).toBeVisible();
21
+ expect(screen.getByRole('button', {name: /copy/i})).toBeVisible();
22
+ expect(document.querySelector('input')).toBeInTheDocument();
23
+ });
24
+ });
25
+ });
@@ -0,0 +1 @@
1
+ export * from './CopyToClipboard';
@@ -10,3 +10,4 @@ export * from './prompt';
10
10
  export * from './modal-wizard';
11
11
  export * from './button';
12
12
  export * from './menu';
13
+ export * from './copyToClipboard';
@@ -54,12 +54,12 @@ export interface ModalWizardProps
54
54
  /**
55
55
  * A callback function that is executed when the user clicks on the next button
56
56
  */
57
- onNext?: () => unknown;
57
+ onNext?: (newStep: number) => unknown;
58
58
 
59
59
  /**
60
60
  * A callback function that is executed when the user clicks on the previous button
61
61
  */
62
- onPrevious?: () => unknown;
62
+ onPrevious?: (newStep: number) => unknown;
63
63
 
64
64
  /**
65
65
  * A function that is executed when user completes all the steps.
@@ -210,7 +210,7 @@ export const ModalWizard: ModalWizardType = ({
210
210
  if (isFirstStep) {
211
211
  handleClose(true);
212
212
  } else {
213
- onPrevious?.();
213
+ onPrevious?.(currentStepIndex - 1);
214
214
  setCurrentStepIndex(currentStepIndex - 1);
215
215
  }
216
216
  }}
@@ -224,7 +224,7 @@ export const ModalWizard: ModalWizardType = ({
224
224
  if (isLastStep) {
225
225
  onFinish?.() ?? handleClose(false);
226
226
  } else {
227
- onNext?.();
227
+ onNext?.(currentStepIndex + 1);
228
228
  setCurrentStepIndex(currentStepIndex + 1);
229
229
  }
230
230
  }}
@@ -34,6 +34,8 @@ describe('ModalWizard', () => {
34
34
  ];
35
35
 
36
36
  const isDirty = () => false;
37
+ const onNextSpy = vi.fn();
38
+ const onPreviousSpy = vi.fn();
37
39
 
38
40
  render(
39
41
  <ModalWizard
@@ -41,6 +43,8 @@ describe('ModalWizard', () => {
41
43
  handleDirtyState={() => confirm('Are you sure you want to close?')}
42
44
  opened={true}
43
45
  onClose={undefined}
46
+ onNext={onNextSpy}
47
+ onPrevious={onPreviousSpy}
44
48
  >
45
49
  {modelSteps.map((model_item) => (
46
50
  <ModalWizard.Step
@@ -75,6 +79,8 @@ describe('ModalWizard', () => {
75
79
 
76
80
  await user.click(nextButton);
77
81
 
82
+ expect(onNextSpy).toHaveBeenCalledWith(1);
83
+
78
84
  expect(
79
85
  screen.getByRole('heading', {
80
86
  name: /current step is: 2/i,
@@ -102,6 +108,8 @@ describe('ModalWizard', () => {
102
108
 
103
109
  await user.click(nextButton);
104
110
 
111
+ expect(onNextSpy).toHaveBeenCalledWith(2);
112
+
105
113
  expect(
106
114
  screen.getByRole('heading', {
107
115
  name: /current step is: 3/i,
@@ -135,6 +143,8 @@ describe('ModalWizard', () => {
135
143
  })
136
144
  );
137
145
 
146
+ expect(onNextSpy).toHaveBeenCalledWith(1);
147
+
138
148
  expect(
139
149
  screen.getByRole('heading', {
140
150
  name: /current step is: 2/i,
@@ -26,6 +26,7 @@ import {TableHeader} from './TableHeader';
26
26
  import {TablePagination} from './TablePagination';
27
27
  import {TablePerPage} from './TablePerPage';
28
28
  import {TablePredicate} from './TablePredicate';
29
+ import {TableConsumer} from './TableConsumer';
29
30
  import {TableSelectableColumn} from './TableSelectableColumn';
30
31
  import {Th} from './Th';
31
32
  import {useRowSelection} from './useRowSelection';
@@ -55,6 +56,7 @@ export const Table: TableType = <T,>({
55
56
  const convertedChildren = Children.toArray(children) as ReactElement[];
56
57
  const header = convertedChildren.find((child) => child.type === TableHeader);
57
58
  const footer = convertedChildren.find((child) => child.type === TableFooter);
59
+ const consumer = convertedChildren.find((child) => child.type === TableConsumer);
58
60
 
59
61
  const {predicates, dateRange, ...initialStateWithoutForm} = initialState;
60
62
  const form = useForm<TableFormType>({
@@ -189,6 +191,7 @@ export const Table: TableType = <T,>({
189
191
  getPageCount: table.getPageCount,
190
192
  }}
191
193
  >
194
+ {consumer}
192
195
  {!rows.length && !isFiltered && !loading ? (
193
196
  noDataChildren
194
197
  ) : (
@@ -235,3 +238,4 @@ Table.Predicate = TablePredicate;
235
238
  Table.CollapsibleColumn = TableCollapsibleColumn;
236
239
  Table.AccordionColumn = TableAccordionColumn;
237
240
  Table.DateRangePicker = TableDateRangePicker;
241
+ Table.Consumer = TableConsumer;
@@ -7,8 +7,8 @@ import {
7
7
  TableState as TanstackTableState,
8
8
  } from '@tanstack/table-core';
9
9
  import {Dispatch, ReactElement, ReactNode, RefObject} from 'react';
10
- import {DateRangePickerValue} from '../date-range-picker/DateRangePickerInlineCalendar';
11
10
 
11
+ import {DateRangePickerValue} from '../date-range-picker/DateRangePickerInlineCalendar';
12
12
  import {TableActions} from './TableActions';
13
13
  import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
14
14
  import {TableDateRangePicker} from './TableDateRangePicker';
@@ -18,6 +18,7 @@ import {TableHeader} from './TableHeader';
18
18
  import {TablePagination} from './TablePagination';
19
19
  import {TablePerPage} from './TablePerPage';
20
20
  import {TablePredicate} from './TablePredicate';
21
+ import {TableConsumer} from './TableConsumer';
21
22
 
22
23
  export type RowSelectionWithData<TData> = Record<string, TData>;
23
24
  export interface RowSelectionState<TData> {
@@ -206,4 +207,5 @@ export interface TableType {
206
207
  DateRangePicker: typeof TableDateRangePicker;
207
208
  CollapsibleColumn: typeof TableCollapsibleColumn;
208
209
  AccordionColumn: typeof TableAccordionColumn;
210
+ Consumer: typeof TableConsumer;
209
211
  }
@@ -0,0 +1,3 @@
1
+ import type {FunctionComponent, ReactNode} from 'react';
2
+
3
+ export const TableConsumer: FunctionComponent<{children: ReactNode}> = ({children}) => <>{children}</>;
@@ -137,6 +137,31 @@ describe('Table', () => {
137
137
  expect(screen.queryByTestId('empty-state')).not.toBeInTheDocument();
138
138
  });
139
139
 
140
+ it('updates the table when a component in Table.Consumer triggers a change', async () => {
141
+ const user = userEvent.setup();
142
+ const spy = vi.fn();
143
+ const Fixture = () => {
144
+ const {onChange} = useTable();
145
+ return <button onClick={() => onChange()}>Click me</button>;
146
+ };
147
+ render(
148
+ <Table onChange={spy} data={[{id: '🆔', firstName: 'first', lastName: 'last'}]} columns={columns}>
149
+ <Table.Consumer>
150
+ <Fixture />
151
+ </Table.Consumer>
152
+ </Table>
153
+ );
154
+
155
+ expect(screen.getByRole('button', {name: 'Click me'})).toBeVisible();
156
+ expect(spy).not.toHaveBeenCalled();
157
+
158
+ await user.click(screen.getByRole('button', {name: 'Click me'}));
159
+
160
+ await waitFor(() => {
161
+ expect(spy).toHaveBeenCalledTimes(1);
162
+ });
163
+ });
164
+
140
165
  describe('shows a loading animation', () => {
141
166
  const doRender = (props: Omit<TableProps<RowData>, 'columns'>) => {
142
167
  const NoData = () => {
package/src/index.ts CHANGED
@@ -24,6 +24,8 @@ export {
24
24
  type ButtonProps,
25
25
  Menu,
26
26
  type MenuItemProps,
27
+ CopyToClipboard,
28
+ type CopyToClipboardProps,
27
29
  } from './components';
28
30
  export {useForm, createFormContext} from './form';
29
31
 
@@ -52,11 +52,11 @@ export const plasmaTheme: MantineThemeOverride = {
52
52
  },
53
53
  },
54
54
  Title: {
55
- styles: (theme) => ({
55
+ styles: {
56
56
  root: {
57
57
  '&:is(h1,h2,h3,h4,h5,h6)': {letterSpacing: '0.011em'},
58
58
  },
59
- }),
59
+ },
60
60
  },
61
61
  Text: {
62
62
  defaultProps: {
@@ -178,6 +178,12 @@ export const plasmaTheme: MantineThemeOverride = {
178
178
  defaultProps: {
179
179
  radius: 'sm',
180
180
  },
181
+ styles: (theme) => ({
182
+ label: {
183
+ fontSize: theme.fontSizes.sm,
184
+ fontWeight: 300,
185
+ },
186
+ }),
181
187
  },
182
188
  List: {
183
189
  styles: () => ({