@coveord/plasma-mantine 49.1.3 → 49.2.2

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 (152) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +9 -9
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/__tests__/GlobalSetup.js.map +1 -1
  5. package/dist/cjs/__tests__/Setup.js.map +1 -1
  6. package/dist/cjs/__tests__/SetupAfterEnv.js.map +1 -1
  7. package/dist/cjs/__tests__/Utils.js.map +1 -1
  8. package/dist/cjs/components/blank-slate/BlankSlate.js.map +1 -1
  9. package/dist/cjs/components/blank-slate/index.js.map +1 -1
  10. package/dist/cjs/components/button/Button.js.map +1 -1
  11. package/dist/cjs/components/button/ButtonWithDisabledTooltip.js.map +1 -1
  12. package/dist/cjs/components/button/index.js.map +1 -1
  13. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  14. package/dist/cjs/components/code-editor/__mocks__/@monaco-editor/react.js.map +1 -1
  15. package/dist/cjs/components/code-editor/__mocks__/monaco-editor.js.map +1 -1
  16. package/dist/cjs/components/code-editor/index.js.map +1 -1
  17. package/dist/cjs/components/code-editor/languages/xml.js.map +1 -1
  18. package/dist/cjs/components/collection/Collection.js.map +1 -1
  19. package/dist/cjs/components/collection/Collection.styles.js.map +1 -1
  20. package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
  21. package/dist/cjs/components/collection/index.js.map +1 -1
  22. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  23. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  24. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  25. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  26. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  27. package/dist/cjs/components/header/Header.js.map +1 -1
  28. package/dist/cjs/components/header/index.js.map +1 -1
  29. package/dist/cjs/components/index.js.map +1 -1
  30. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
  31. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js.map +1 -1
  32. package/dist/cjs/components/inline-confirm/InlineConfirmContext.js.map +1 -1
  33. package/dist/cjs/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
  34. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  35. package/dist/cjs/components/inline-confirm/index.js.map +1 -1
  36. package/dist/cjs/components/inline-confirm/useInlineConfirm.js.map +1 -1
  37. package/dist/cjs/components/menu/Menu.js.map +1 -1
  38. package/dist/cjs/components/menu/index.js.map +1 -1
  39. package/dist/cjs/components/modal/Modal.js.map +1 -1
  40. package/dist/cjs/components/modal/index.js.map +1 -1
  41. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
  42. package/dist/cjs/components/modal-wizard/ModalWizardStep.js.map +1 -1
  43. package/dist/cjs/components/modal-wizard/index.js.map +1 -1
  44. package/dist/cjs/components/prompt/Prompt.js.map +1 -1
  45. package/dist/cjs/components/prompt/PromptFooter.js.map +1 -1
  46. package/dist/cjs/components/prompt/index.js.map +1 -1
  47. package/dist/cjs/components/sticky-footer/StickyFooter.js.map +1 -1
  48. package/dist/cjs/components/sticky-footer/index.js.map +1 -1
  49. package/dist/cjs/components/table/Table.js +7 -5
  50. package/dist/cjs/components/table/Table.js.map +1 -1
  51. package/dist/cjs/components/table/TableActions.js.map +1 -1
  52. package/dist/cjs/components/table/TableCollapsibleColumn.js +48 -15
  53. package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
  54. package/dist/cjs/components/table/TableContext.js.map +1 -1
  55. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
  56. package/dist/cjs/components/table/TableFilter.js.map +1 -1
  57. package/dist/cjs/components/table/TableFooter.js.map +1 -1
  58. package/dist/cjs/components/table/TableHeader.js.map +1 -1
  59. package/dist/cjs/components/table/TablePagination.js +3 -2
  60. package/dist/cjs/components/table/TablePagination.js.map +1 -1
  61. package/dist/cjs/components/table/TablePerPage.js.map +1 -1
  62. package/dist/cjs/components/table/TablePredicate.js.map +1 -1
  63. package/dist/cjs/components/table/TableSelectableColumn.js.map +1 -1
  64. package/dist/cjs/components/table/Th.js.map +1 -1
  65. package/dist/cjs/components/table/index.js.map +1 -1
  66. package/dist/cjs/components/table/useRowSelection.js.map +1 -1
  67. package/dist/cjs/components/table/useTable.js.map +1 -1
  68. package/dist/cjs/form/FormProvider.js.map +1 -1
  69. package/dist/cjs/form/index.js.map +1 -1
  70. package/dist/cjs/form/useForm.js.map +1 -1
  71. package/dist/cjs/hooks/index.js.map +1 -1
  72. package/dist/cjs/hooks/useControlledList.js.map +1 -1
  73. package/dist/cjs/hooks/useParentHeight.js.map +1 -1
  74. package/dist/cjs/index.js +4 -4
  75. package/dist/cjs/index.js.map +1 -1
  76. package/dist/cjs/theme/PlasmaColors.js.map +1 -1
  77. package/dist/cjs/theme/Plasmantine.js.map +1 -1
  78. package/dist/cjs/theme/Theme.js.map +1 -1
  79. package/dist/cjs/theme/index.js.map +1 -1
  80. package/dist/cjs/utils/createPolymorphicComponent.js.map +1 -1
  81. package/dist/cjs/utils/index.js.map +1 -1
  82. package/dist/cjs/utils/overrideComponent.js.map +1 -1
  83. package/dist/definitions/components/table/Table.d.ts +5 -3
  84. package/dist/definitions/components/table/Table.d.ts.map +1 -1
  85. package/dist/definitions/components/table/TableCollapsibleColumn.d.ts +4 -0
  86. package/dist/definitions/components/table/TableCollapsibleColumn.d.ts.map +1 -1
  87. package/dist/definitions/components/table/TableContext.d.ts +4 -0
  88. package/dist/definitions/components/table/TableContext.d.ts.map +1 -1
  89. package/dist/definitions/components/table/TablePagination.d.ts +2 -2
  90. package/dist/definitions/components/table/TablePagination.d.ts.map +1 -1
  91. package/dist/definitions/components/table/useTable.d.ts +1 -0
  92. package/dist/definitions/components/table/useTable.d.ts.map +1 -1
  93. package/dist/definitions/index.d.ts +3 -2
  94. package/dist/definitions/index.d.ts.map +1 -1
  95. package/dist/esm/__tests__/Utils.js.map +1 -1
  96. package/dist/esm/components/blank-slate/BlankSlate.js.map +1 -1
  97. package/dist/esm/components/button/Button.js.map +1 -1
  98. package/dist/esm/components/button/ButtonWithDisabledTooltip.js.map +1 -1
  99. package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
  100. package/dist/esm/components/code-editor/__mocks__/@monaco-editor/react.js.map +1 -1
  101. package/dist/esm/components/code-editor/languages/xml.js.map +1 -1
  102. package/dist/esm/components/collection/Collection.js.map +1 -1
  103. package/dist/esm/components/collection/CollectionItem.js.map +1 -1
  104. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  105. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  106. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  107. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  108. package/dist/esm/components/header/Header.js.map +1 -1
  109. package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -1
  110. package/dist/esm/components/inline-confirm/InlineConfirmButton.js.map +1 -1
  111. package/dist/esm/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
  112. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  113. package/dist/esm/components/menu/Menu.js.map +1 -1
  114. package/dist/esm/components/modal/Modal.js.map +1 -1
  115. package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -1
  116. package/dist/esm/components/prompt/Prompt.js.map +1 -1
  117. package/dist/esm/components/prompt/PromptFooter.js.map +1 -1
  118. package/dist/esm/components/sticky-footer/StickyFooter.js.map +1 -1
  119. package/dist/esm/components/table/Table.js +8 -6
  120. package/dist/esm/components/table/Table.js.map +1 -1
  121. package/dist/esm/components/table/TableActions.js.map +1 -1
  122. package/dist/esm/components/table/TableCollapsibleColumn.js +41 -14
  123. package/dist/esm/components/table/TableCollapsibleColumn.js.map +1 -1
  124. package/dist/esm/components/table/TableContext.js.map +1 -1
  125. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
  126. package/dist/esm/components/table/TableFilter.js.map +1 -1
  127. package/dist/esm/components/table/TableFooter.js.map +1 -1
  128. package/dist/esm/components/table/TableHeader.js.map +1 -1
  129. package/dist/esm/components/table/TablePagination.js +3 -2
  130. package/dist/esm/components/table/TablePagination.js.map +1 -1
  131. package/dist/esm/components/table/TablePerPage.js.map +1 -1
  132. package/dist/esm/components/table/TablePredicate.js.map +1 -1
  133. package/dist/esm/components/table/TableSelectableColumn.js.map +1 -1
  134. package/dist/esm/components/table/Th.js.map +1 -1
  135. package/dist/esm/components/table/useRowSelection.js.map +1 -1
  136. package/dist/esm/form/FormProvider.js.map +1 -1
  137. package/dist/esm/form/useForm.js.map +1 -1
  138. package/dist/esm/hooks/useControlledList.js.map +1 -1
  139. package/dist/esm/hooks/useParentHeight.js.map +1 -1
  140. package/dist/esm/index.js +2 -1
  141. package/dist/esm/index.js.map +1 -1
  142. package/dist/esm/theme/Plasmantine.js.map +1 -1
  143. package/dist/esm/theme/Theme.js.map +1 -1
  144. package/dist/esm/utils/overrideComponent.js.map +1 -1
  145. package/package.json +5 -5
  146. package/src/components/table/Table.tsx +20 -4
  147. package/src/components/table/TableCollapsibleColumn.tsx +41 -15
  148. package/src/components/table/TableContext.tsx +5 -0
  149. package/src/components/table/TablePagination.tsx +6 -4
  150. package/src/components/table/__tests__/Table.spec.tsx +40 -0
  151. package/src/components/table/__tests__/TablePagination.spec.tsx +48 -2
  152. package/src/index.ts +13 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/theme/Theme.tsx"],"sourcesContent":["import {ArrowHeadRightSize24Px, InfoSize24Px} from '@coveord/plasma-react-icons';\nimport {color} from '@coveord/plasma-tokens';\nimport {ButtonStylesParams, MantineThemeOverride, ModalStylesParams} 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 spacing: {\n xs: 8,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 40,\n },\n primaryColor: 'action',\n headings: {\n fontFamily: 'canada-type-gibson, sans-serif',\n fontWeight: 500,\n sizes: {\n h1: {fontSize: 48, lineHeight: '56px', fontWeight: undefined},\n h2: {fontSize: 32, lineHeight: '40px', fontWeight: undefined},\n h3: {fontSize: 28, lineHeight: '40px', fontWeight: undefined},\n h4: {fontSize: 24, lineHeight: '32px', fontWeight: undefined},\n h5: {fontSize: 18, lineHeight: '28px', fontWeight: undefined},\n h6: {fontSize: 16, lineHeight: '24px', fontWeight: undefined},\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', color: theme.colors.gray[9]},\n },\n }),\n },\n Button: {\n styles: (theme, params: ButtonStylesParams) => ({\n root: {\n fontWeight: 400,\n backgroundColor: params.variant === 'outline' ? 'white' : undefined,\n },\n }),\n },\n Modal: {\n styles: (theme, {size, fullScreen}: ModalStylesParams) => ({\n modal: {\n width: fullScreen\n ? undefined\n : theme.fn.size({size, sizes: {xs: 440, sm: 550, md: 800, lg: 1334, xl: '85%'}}),\n },\n }),\n defaultProps: {\n overlayColor: color.primary.navy[9],\n overlayOpacity: 0.9,\n },\n },\n InputWrapper: {\n defaultProps: {\n withAsterisk: false,\n },\n styles: (theme) => ({\n label: {\n marginBottom: theme.spacing.xs,\n lineHeight: '20px',\n },\n description: {\n lineHeight: '20px',\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 Breadcrumbs: {\n defaultProps: {\n separator: <ArrowHeadRightSize24Px height={24} />,\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',\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 },\n};\n"],"names":["ArrowHeadRightSize24Px","InfoSize24Px","color","PlasmaColors","plasmaTheme","colorScheme","fontFamily","black","primary","gray","defaultRadius","spacing","xs","sm","md","lg","xl","primaryColor","headings","fontWeight","sizes","h1","fontSize","lineHeight","undefined","h2","h3","h4","h5","h6","shadows","colors","components","Alert","defaultProps","icon","height","styles","title","Title","theme","root","letterSpacing","Button","params","backgroundColor","variant","Modal","size","fullScreen","modal","width","fn","overlayColor","navy","overlayOpacity","InputWrapper","withAsterisk","label","marginBottom","description","fontSizes","invalid","red","borderColor","error","TextInput","radius","Tooltip","withArrow","withinPortal","multiline","Breadcrumbs","separator","Loader","DateRangePicker","cell","textAlign","Anchor","hover","textDecoration","action","Checkbox","List","listStyleType","Radio","labelWrapper","display","alignItems","Popover","shadow","Badge","textTransform","padding","ColorSwatch","withShadow","MenuItem","fw"],"mappings":"AAAA;;AAAA,SAAQA,sBAAsB,EAAEC,YAAY,QAAO,8BAA8B;AACjF,SAAQC,KAAK,QAAO,yBAAyB;AAG7C,SAAQC,YAAY,QAAO,iBAAiB;AAE5C,OAAO,IAAMC,cAAoC;IAC7C,2HAA2H;IAC3HC,aAAa;IACbC,YAAY;IACZC,OAAOL,MAAMM,OAAO,CAACC,IAAI,CAAC,EAAE;IAC5BC,eAAe;IACfC,SAAS;QACLC,IAAI;QACJC,IAAI;QACJC,IAAI;QACJC,IAAI;QACJC,IAAI;IACR;IACAC,cAAc;IACdC,UAAU;QACNZ,YAAY;QACZa,YAAY;QACZC,OAAO;YACHC,IAAI;gBAACC,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;YAC5DC,IAAI;gBAACH,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;YAC5DE,IAAI;gBAACJ,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;YAC5DG,IAAI;gBAACL,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;YAC5DI,IAAI;gBAACN,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;YAC5DK,IAAI;gBAACP,UAAU;gBAAIC,YAAY;gBAAQJ,YAAYK;YAAS;QAChE;IACJ;IACAM,SAAS;QACLlB,IAAI;QACJC,IAAI;QACJC,IAAI;QACJC,IAAI;QACJC,IAAI;IACR;IACAe,QAAQ5B;IACR6B,YAAY;QACRC,OAAO;YACHC,cAAc;gBACVC,oBAAM,KAAClC;oBAAamC,QAAQ;;gBAC5BlC,OAAO;YACX;YACAmC,QAAQ;gBACJC,OAAO;oBACHnB,YAAY;gBAChB;YACJ;QACJ;QACAoB,OAAO;YACHF,QAAQ,SAACG;uBAAW;oBAChBC,MAAM;wBACF,2BAA2B;4BAACC,eAAe;4BAAWxC,OAAOsC,MAAMT,MAAM,CAACtB,IAAI,CAAC,EAAE;wBAAA;oBACrF;gBACJ;;QACJ;QACAkC,QAAQ;YACJN,QAAQ,SAACG,OAAOI;uBAAgC;oBAC5CH,MAAM;wBACFtB,YAAY;wBACZ0B,iBAAiBD,OAAOE,OAAO,KAAK,YAAY,UAAUtB,SAAS;oBACvE;gBACJ;;QACJ;QACAuB,OAAO;YACHV,QAAQ,SAACG;oBAAQQ,aAAAA,MAAMC,mBAAAA;uBAAoC;oBACvDC,OAAO;wBACHC,OAAOF,aACDzB,YACAgB,MAAMY,EAAE,CAACJ,IAAI,CAAC;4BAACA,MAAAA;4BAAM5B,OAAO;gCAACR,IAAI;gCAAKC,IAAI;gCAAKC,IAAI;gCAAKC,IAAI;gCAAMC,IAAI;4BAAK;wBAAC,EAAE;oBACxF;gBACJ;;YACAkB,cAAc;gBACVmB,cAAcnD,MAAMM,OAAO,CAAC8C,IAAI,CAAC,EAAE;gBACnCC,gBAAgB;YACpB;QACJ;QACAC,cAAc;YACVtB,cAAc;gBACVuB,cAAc,KAAK;YACvB;YACApB,QAAQ,SAACG;uBAAW;oBAChBkB,OAAO;wBACHC,cAAcnB,MAAM7B,OAAO,CAACC,EAAE;wBAC9BW,YAAY;oBAChB;oBACAqC,aAAa;wBACTrC,YAAY;wBACZD,UAAUkB,MAAMqB,SAAS,CAAChD,EAAE;wBAC5BX,OAAOsC,MAAMT,MAAM,CAACtB,IAAI,CAAC,EAAE;wBAC3BkD,cAAcnB,MAAM7B,OAAO,CAACC,EAAE;oBAClC;oBACAkD,SAAS;wBACL5D,OAAOsC,MAAMT,MAAM,CAACgC,GAAG,CAAC,EAAE;wBAC1BC,aAAaxB,MAAMT,MAAM,CAACgC,GAAG,CAAC,EAAE;oBACpC;oBACAE,OAAO;wBACH/D,OAAOsC,MAAMT,MAAM,CAACgC,GAAG,CAAC,EAAE;oBAC9B;gBACJ;;QACJ;QACAG,WAAW;YACPhC,cAAc;gBACViC,QAAQ;YACZ;QACJ;QACAC,SAAS;YACLlC,cAAc;gBACVhC,OAAO;gBACPmE,WAAW,IAAI;gBACfC,cAAc,IAAI;gBAClBC,WAAW,IAAI;YACnB;QACJ;QACAC,aAAa;YACTtC,cAAc;gBACVuC,yBAAW,KAACzE;oBAAuBoC,QAAQ;;YAC/C;QACJ;QACAsC,QAAQ;YACJxC,cAAc;gBACVY,SAAS;gBACT5C,OAAO;YACX;QACJ;QACAyE,iBAAiB;YACbtC,QAAQ;gBACJuC,MAAM;oBACFC,WAAW;gBACf;YACJ;QACJ;QACAC,QAAQ;YACJ5C,cAAc;gBACVhC,OAAO;YACX;YACAmC,QAAQ,SAACG;uBAAW;oBAChBC,MAAM,mBACCD,MAAMY,EAAE,CAAC2B,KAAK,CAAC;wBACdC,gBAAgB;wBAChB9E,OAAOsC,MAAMT,MAAM,CAACkD,MAAM,CAAC,EAAE;oBACjC;gBAER;;QACJ;QACAC,UAAU;YACNhD,cAAc;gBACViC,QAAQ;YACZ;QACJ;QACAgB,MAAM;YACF9C,QAAQ;uBAAO;oBACXI,MAAM;wBACF2C,eAAe;oBACnB;gBACJ;;QACJ;QACAC,OAAO;YACHhD,QAAQ;gBACJiD,cAAc;oBACVC,SAAS;oBACTC,YAAY;gBAChB;YACJ;QACJ;QACAC,SAAS;YACLvD,cAAc;gBACVwD,QAAQ;gBACRrB,WAAW,IAAI;YACnB;QACJ;QACAsB,OAAO;YACHtD,QAAQ;gBACJI,MAAM;oBACFmD,eAAe;oBACfC,SAAS;oBACT1E,YAAY;gBAChB;YACJ;QACJ;QACA2E,aAAa;YACT5D,cAAc;gBACVc,MAAM;gBACN+C,YAAY,KAAK;YACrB;QACJ;QACAC,UAAU;YACN9D,cAAc;gBACV+D,IAAI;YACR;QACJ;IACJ;AACJ,EAAE"}
1
+ {"version":3,"sources":["../../../src/theme/Theme.tsx"],"sourcesContent":["import {ArrowHeadRightSize24Px, InfoSize24Px} from '@coveord/plasma-react-icons';\nimport {color} from '@coveord/plasma-tokens';\nimport {ButtonStylesParams, MantineThemeOverride, ModalStylesParams} 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 spacing: {\n xs: 8,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 40,\n },\n primaryColor: 'action',\n headings: {\n fontFamily: 'canada-type-gibson, sans-serif',\n fontWeight: 500,\n sizes: {\n h1: {fontSize: 48, lineHeight: '56px', fontWeight: undefined},\n h2: {fontSize: 32, lineHeight: '40px', fontWeight: undefined},\n h3: {fontSize: 28, lineHeight: '40px', fontWeight: undefined},\n h4: {fontSize: 24, lineHeight: '32px', fontWeight: undefined},\n h5: {fontSize: 18, lineHeight: '28px', fontWeight: undefined},\n h6: {fontSize: 16, lineHeight: '24px', fontWeight: undefined},\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', color: theme.colors.gray[9]},\n },\n }),\n },\n Button: {\n styles: (theme, params: ButtonStylesParams) => ({\n root: {\n fontWeight: 400,\n backgroundColor: params.variant === 'outline' ? 'white' : undefined,\n },\n }),\n },\n Modal: {\n styles: (theme, {size, fullScreen}: ModalStylesParams) => ({\n modal: {\n width: fullScreen\n ? undefined\n : theme.fn.size({size, sizes: {xs: 440, sm: 550, md: 800, lg: 1334, xl: '85%'}}),\n },\n }),\n defaultProps: {\n overlayColor: color.primary.navy[9],\n overlayOpacity: 0.9,\n },\n },\n InputWrapper: {\n defaultProps: {\n withAsterisk: false,\n },\n styles: (theme) => ({\n label: {\n marginBottom: theme.spacing.xs,\n lineHeight: '20px',\n },\n description: {\n lineHeight: '20px',\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 Breadcrumbs: {\n defaultProps: {\n separator: <ArrowHeadRightSize24Px height={24} />,\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',\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 },\n};\n"],"names":["ArrowHeadRightSize24Px","InfoSize24Px","color","PlasmaColors","plasmaTheme","colorScheme","fontFamily","black","primary","gray","defaultRadius","spacing","xs","sm","md","lg","xl","primaryColor","headings","fontWeight","sizes","h1","fontSize","lineHeight","undefined","h2","h3","h4","h5","h6","shadows","colors","components","Alert","defaultProps","icon","height","styles","title","Title","theme","root","letterSpacing","Button","params","backgroundColor","variant","Modal","size","fullScreen","modal","width","fn","overlayColor","navy","overlayOpacity","InputWrapper","withAsterisk","label","marginBottom","description","fontSizes","invalid","red","borderColor","error","TextInput","radius","Tooltip","withArrow","withinPortal","multiline","Breadcrumbs","separator","Loader","DateRangePicker","cell","textAlign","Anchor","hover","textDecoration","action","Checkbox","List","listStyleType","Radio","labelWrapper","display","alignItems","Popover","shadow","Badge","textTransform","padding","ColorSwatch","withShadow","MenuItem","fw"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/overrideComponent.ts"],"sourcesContent":["/**\n * Allows to override static properties from a component function\n *\n * @param component The component which holds the static properties\n * @param properties The new static properties to assign on the component\n * @returns A new component with the specified properties. It doesn't change the original component\n * @example const Menu = overrideComponent(MantineMenu, {Item: MyMenuItem}); // Menu.Item will equal MyMenuItem\n */\nexport const overrideComponent = <\n Component extends (...args: Parameters<Component>) => ReturnType<Component>,\n StaticProperties = Record<keyof Component, never>\n>(\n component: Component,\n properties: StaticProperties\n): ((...args: Parameters<Component>) => ReturnType<Component>) & Component & StaticProperties => {\n const componentClone = (...args: Parameters<Component>) => component(...args);\n return Object.assign(componentClone, component, properties);\n};\n"],"names":["overrideComponent","component","properties","componentClone","args","Object","assign"],"mappings":"AAAA;;;;;;;CAOC,GACD;AAAA,OAAO,IAAMA,oBAAoB,SAI7BC,WACAC,YAC6F;IAC7F,IAAMC,iBAAiB;yCAAIC;YAAAA;;eAAgCH,UAAAA,MAAAA,KAAAA,GAAU,qBAAGG;;IACxE,OAAOC,OAAOC,MAAM,CAACH,gBAAgBF,WAAWC;AACpD,EAAE"}
1
+ {"version":3,"sources":["../../../src/utils/overrideComponent.ts"],"sourcesContent":["/**\n * Allows to override static properties from a component function\n *\n * @param component The component which holds the static properties\n * @param properties The new static properties to assign on the component\n * @returns A new component with the specified properties. It doesn't change the original component\n * @example const Menu = overrideComponent(MantineMenu, {Item: MyMenuItem}); // Menu.Item will equal MyMenuItem\n */\nexport const overrideComponent = <\n Component extends (...args: Parameters<Component>) => ReturnType<Component>,\n StaticProperties = Record<keyof Component, never>\n>(\n component: Component,\n properties: StaticProperties\n): ((...args: Parameters<Component>) => ReturnType<Component>) & Component & StaticProperties => {\n const componentClone = (...args: Parameters<Component>) => component(...args);\n return Object.assign(componentClone, component, properties);\n};\n"],"names":["overrideComponent","component","properties","componentClone","args","Object","assign"],"mappings":"AAAA;;;;;;;CAOC;AACD,OAAO,IAAMA,oBAAoB,SAI7BC,WACAC,YAC6F;IAC7F,IAAMC,iBAAiB;yCAAIC;YAAAA;;eAAgCH,UAAAA,MAAAA,KAAAA,GAAU,qBAAGG;;IACxE,OAAOC,OAAOC,MAAM,CAACH,gBAAgBF,WAAWC;AACpD,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveord/plasma-mantine",
3
- "version": "49.1.3",
3
+ "version": "49.2.2",
4
4
  "description": "A Plasma flavoured Mantine theme",
5
5
  "keywords": [
6
6
  "plasma",
@@ -17,13 +17,13 @@
17
17
  "@mantine/utils": "5.10.1",
18
18
  "@monaco-editor/react": "4.4.5",
19
19
  "@swc/helpers": "0.4.12",
20
- "@tanstack/react-table": "8.5.11",
21
- "@tanstack/table-core": "8.5.11",
20
+ "@tanstack/react-table": "8.7.9",
21
+ "@tanstack/table-core": "8.7.9",
22
22
  "dayjs": "1.11.3",
23
23
  "lodash.defaultsdeep": "4.6.1",
24
24
  "monaco-editor": "0.34.0",
25
25
  "react-beautiful-dnd": "13.1.1",
26
- "@coveord/plasma-react-icons": "48.28.3",
26
+ "@coveord/plasma-react-icons": "49.2.2",
27
27
  "@coveord/plasma-tokens": "48.25.0"
28
28
  },
29
29
  "devDependencies": {
@@ -35,7 +35,7 @@
35
35
  "@mantine/hooks": "5.9.2",
36
36
  "@mantine/modals": "5.9.2",
37
37
  "@swc/cli": "0.1.57",
38
- "@swc/core": "1.3.22",
38
+ "@swc/core": "1.3.31",
39
39
  "@swc/jest": "0.2.23",
40
40
  "@testing-library/dom": "8.18.1",
41
41
  "@testing-library/jest-dom": "5.16.5",
@@ -10,12 +10,12 @@ import {
10
10
  TableState,
11
11
  useReactTable,
12
12
  } from '@tanstack/react-table';
13
- import {CoreOptions, InitialTableState} from '@tanstack/table-core';
13
+ import {CoreOptions, InitialTableState, TableOptions} from '@tanstack/table-core';
14
14
  import defaultsDeep from 'lodash.defaultsdeep';
15
15
  import {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';
16
16
 
17
17
  import {TableActions} from './TableActions';
18
- import {TableCollapsibleColumn} from './TableCollapsibleColumn';
18
+ import {TableCollapsibleColumn, TableAccordionColumn} from './TableCollapsibleColumn';
19
19
  import {onTableChangeEvent, TableContext, TableFormType} from './TableContext';
20
20
  import {TableDateRangePicker} from './TableDateRangePicker';
21
21
  import {TableFilter} from './TableFilter';
@@ -83,7 +83,7 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
83
83
  };
84
84
  });
85
85
 
86
- interface TableProps<T> {
86
+ export interface TableProps<T> {
87
87
  /**
88
88
  * Data to display in the table
89
89
  */
@@ -153,6 +153,17 @@ interface TableProps<T> {
153
153
  * @default false
154
154
  */
155
155
  multiRowSelectionEnabled?: boolean;
156
+
157
+ options?: Omit<
158
+ Partial<TableOptions<T>>,
159
+ | 'initialState'
160
+ | 'data'
161
+ | 'columns'
162
+ | 'manualPagination'
163
+ | 'enableMultiRowSelection'
164
+ | 'getRowId'
165
+ | 'getRowCanExpand'
166
+ >;
156
167
  }
157
168
 
158
169
  interface TableType {
@@ -166,6 +177,7 @@ interface TableType {
166
177
  Predicate: typeof TablePredicate;
167
178
  DateRangePicker: typeof TableDateRangePicker;
168
179
  CollapsibleColumn: typeof TableCollapsibleColumn;
180
+ AccordionColumn: typeof TableAccordionColumn;
169
181
  }
170
182
 
171
183
  export const Table: TableType = <T,>({
@@ -181,6 +193,7 @@ export const Table: TableType = <T,>({
181
193
  loading = false,
182
194
  doubleClickAction,
183
195
  multiRowSelectionEnabled,
196
+ options = {},
184
197
  }: TableProps<T>) => {
185
198
  const convertedChildren = Children.toArray(children) as ReactElement[];
186
199
  const header = convertedChildren.find((child) => child.type === TableHeader);
@@ -197,10 +210,11 @@ export const Table: TableType = <T,>({
197
210
  data,
198
211
  columns: multiRowSelectionEnabled ? [TableSelectableColumn as ColumnDef<T>].concat(columns) : columns,
199
212
  getCoreRowModel: getCoreRowModel(),
200
- manualPagination: true,
213
+ manualPagination: options?.getPaginationRowModel === undefined,
201
214
  enableMultiRowSelection: !!multiRowSelectionEnabled,
202
215
  getRowId,
203
216
  getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,
217
+ ...options,
204
218
  });
205
219
  const [state, setState] = useState<TableState>(table.initialState);
206
220
  table.setOptions((prev) => ({
@@ -307,6 +321,7 @@ export const Table: TableType = <T,>({
307
321
  form,
308
322
  containerRef: outsideClickRef,
309
323
  multiRowSelectionEnabled,
324
+ getPageCount: table.getPageCount,
310
325
  }}
311
326
  >
312
327
  {header}
@@ -345,4 +360,5 @@ Table.Predicate = TablePredicate;
345
360
  Table.PerPage = TablePerPage;
346
361
  Table.Predicate = TablePredicate;
347
362
  Table.CollapsibleColumn = TableCollapsibleColumn;
363
+ Table.AccordionColumn = TableAccordionColumn;
348
364
  Table.DateRangePicker = TableDateRangePicker;
@@ -1,27 +1,53 @@
1
1
  import {ArrowHeadDownSize24Px, ArrowHeadUpSize24Px} from '@coveord/plasma-react-icons';
2
2
  import {ActionIcon} from '@mantine/core';
3
- import {ColumnDef} from '@tanstack/table-core';
4
- import {MouseEvent as ReactMouseEvent} from 'react';
3
+ import {CellContext, ColumnDef} from '@tanstack/table-core';
4
+ import {FunctionComponent, MouseEvent as ReactMouseEvent} from 'react';
5
5
 
6
- /**
7
- * Generic column to use when your table needs collapsible rows
8
- */
9
- export const TableCollapsibleColumn: ColumnDef<unknown> = {
6
+ const defaultProps: ColumnDef<unknown> = {
10
7
  id: 'collapsible',
11
8
  enableSorting: false,
12
9
  header: '',
13
10
  size: 62,
11
+ };
12
+
13
+ /**
14
+ * Generic column to use when your table needs collapsible rows
15
+ */
16
+ export const TableCollapsibleColumn: ColumnDef<unknown> = {
17
+ ...defaultProps,
18
+ cell: (info) => <CollapsibleIcon info={info} />,
19
+ };
20
+
21
+ /**
22
+ * Generic column to use when your table needs an accordion (collapsible rows, but only one open at the time)
23
+ */
24
+ export const TableAccordionColumn: ColumnDef<unknown> = {
25
+ ...defaultProps,
14
26
  cell: (info) => {
15
- const handler = info.row.getToggleExpandedHandler();
16
- const onClick = (e: ReactMouseEvent<HTMLButtonElement>) => {
17
- e.stopPropagation();
18
- handler();
27
+ const onToggle = () => {
28
+ // close all other rows when the current row not is expanded
29
+ if (!info.row.getIsExpanded()) {
30
+ info.table.toggleAllRowsExpanded(false);
31
+ }
19
32
  };
20
33
 
21
- return info.row.getCanExpand() ? (
22
- <ActionIcon onClick={onClick} variant="subtle" radius="sm">
23
- {info.row.getIsExpanded() ? <ArrowHeadUpSize24Px /> : <ArrowHeadDownSize24Px />}
24
- </ActionIcon>
25
- ) : null;
34
+ return <CollapsibleIcon onToggle={onToggle} info={info} />;
26
35
  },
27
36
  };
37
+
38
+ const CollapsibleIcon: FunctionComponent<{
39
+ info: CellContext<unknown, unknown>;
40
+ onToggle?: (e: ReactMouseEvent<HTMLButtonElement>) => void;
41
+ }> = ({info, onToggle}) => {
42
+ const handler = info.row.getToggleExpandedHandler();
43
+ const onClick = (e: ReactMouseEvent<HTMLButtonElement>) => {
44
+ e.stopPropagation();
45
+ onToggle?.(e);
46
+ handler();
47
+ };
48
+ return info.row.getCanExpand() ? (
49
+ <ActionIcon onClick={onClick} variant="subtle" radius="sm">
50
+ {info.row.getIsExpanded() ? <ArrowHeadUpSize24Px /> : <ArrowHeadDownSize24Px />}
51
+ </ActionIcon>
52
+ ) : null;
53
+ };
@@ -60,6 +60,11 @@ type TableContextType = {
60
60
  */
61
61
  containerRef: RefObject<HTMLDivElement>;
62
62
  multiRowSelectionEnabled: boolean;
63
+
64
+ /**
65
+ * Function that returns the number of pages
66
+ */
67
+ getPageCount: () => number;
63
68
  };
64
69
 
65
70
  export const TableContext = createContext<TableContextType | null>(null);
@@ -5,13 +5,13 @@ import {useTable} from './useTable';
5
5
 
6
6
  interface TablePaginationProps {
7
7
  /**
8
- * The total number of page
8
+ * The total number of page. Use null only if your table is paginated client side
9
9
  */
10
- totalPages: number;
10
+ totalPages: number | null;
11
11
  }
12
12
 
13
13
  export const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages}) => {
14
- const {state, setState, containerRef} = useTable();
14
+ const {state, setState, containerRef, getPageCount} = useTable();
15
15
  const updatePage = (newPage: number) => {
16
16
  setState((prevState: TableState) => ({
17
17
  ...prevState,
@@ -20,11 +20,13 @@ export const TablePagination: FunctionComponent<TablePaginationProps> = ({totalP
20
20
  containerRef.current.scrollIntoView({behavior: 'smooth'});
21
21
  };
22
22
 
23
+ const total = totalPages === null ? getPageCount() : totalPages;
24
+
23
25
  return (
24
26
  <Pagination
25
27
  page={state.pagination.pageIndex + 1}
26
28
  onChange={updatePage}
27
- total={totalPages}
29
+ total={total}
28
30
  boundaries={0}
29
31
  size="md"
30
32
  getItemAriaLabel={(label) => {
@@ -127,6 +127,46 @@ describe('Table', () => {
127
127
  expect(allRows).toHaveLength(2);
128
128
  });
129
129
 
130
+ it('closes the opened collapsible when using the accordion column and the user expand a different row', async () => {
131
+ const user = userEvent.setup({delay: null});
132
+ const Fixture: FunctionComponent<{row: RowData}> = ({row}) => <div>Collapsible content: {row.lastName}</div>;
133
+ const customColumns: Array<ColumnDef<RowData>> = [
134
+ columnHelper.accessor('firstName', {
135
+ enableSorting: false,
136
+ }),
137
+ Table.AccordionColumn as ColumnDef<RowData>,
138
+ ];
139
+ render(
140
+ <Table
141
+ data={[
142
+ {firstName: 'Jack', lastName: 'Russel'},
143
+ {firstName: 'Golden', lastName: 'Retriever'},
144
+ ]}
145
+ getExpandChildren={(row: RowData) => <Fixture row={row} />}
146
+ columns={customColumns}
147
+ />
148
+ );
149
+
150
+ // wait for the collapsible icon to show
151
+ await screen.findAllByRole('button', {name: 'arrowHeadDown'});
152
+
153
+ expect(screen.queryByText('Collapsible content: Russel')).not.toBeVisible();
154
+ expect(screen.queryByText('Collapsible content: Retriever')).not.toBeVisible();
155
+
156
+ await user.click(within(screen.getAllByRole('row')[1]).getByRole('button', {name: 'arrowHeadDown'}));
157
+ await waitFor(() => {
158
+ expect(screen.queryByText('Collapsible content: Russel')).toBeVisible();
159
+ });
160
+ expect(screen.queryByText('Collapsible content: Retriever')).not.toBeVisible();
161
+
162
+ await user.click(within(screen.getAllByRole('row')[3]).getByRole('button', {name: 'arrowHeadDown'}));
163
+
164
+ await waitFor(() => {
165
+ expect(screen.queryByText('Collapsible content: Retriever')).toBeVisible();
166
+ });
167
+ expect(screen.queryByText('Collapsible content: Russel')).not.toBeVisible();
168
+ });
169
+
130
170
  it('calls an action when user double clicks on a row', async () => {
131
171
  const user = userEvent.setup();
132
172
  const doubleClickSpy = jest.fn();
@@ -1,4 +1,4 @@
1
- import {ColumnDef, createColumnHelper} from '@tanstack/table-core';
1
+ import {ColumnDef, createColumnHelper, getPaginationRowModel} from '@tanstack/table-core';
2
2
  import {render, screen, userEvent, waitFor} from '@test-utils';
3
3
 
4
4
  import {Table} from '../Table';
@@ -36,6 +36,7 @@ describe('Table.Pagination', () => {
36
36
  });
37
37
 
38
38
  it('calls onChange when clicking on a page number', async () => {
39
+ const user = userEvent.setup();
39
40
  const onChange = jest.fn();
40
41
  render(
41
42
  <Table data={[{name: 'fruit'}, {name: 'vegetable'}]} columns={columns} onChange={onChange}>
@@ -47,7 +48,7 @@ describe('Table.Pagination', () => {
47
48
 
48
49
  onChange.mockReset();
49
50
 
50
- userEvent.click(screen.queryByRole('button', {name: '2'}));
51
+ await user.click(screen.queryByRole('button', {name: '2'}));
51
52
 
52
53
  await waitFor(() => {
53
54
  expect(onChange).toHaveBeenCalledWith(
@@ -55,4 +56,49 @@ describe('Table.Pagination', () => {
55
56
  );
56
57
  });
57
58
  });
59
+
60
+ it('changes the page when the pagination is client side', async () => {
61
+ const user = userEvent.setup();
62
+ render(
63
+ <Table
64
+ data={[
65
+ {name: 'fruits'},
66
+ {name: 'vegetables'},
67
+ {name: 'grains'},
68
+ {name: 'protein foods'},
69
+ {name: 'dairy'},
70
+ ]}
71
+ columns={columns}
72
+ initialState={{pagination: {pageSize: 3}}}
73
+ options={{
74
+ getPaginationRowModel: getPaginationRowModel(),
75
+ }}
76
+ >
77
+ <Table.Footer>
78
+ <Table.Pagination totalPages={null} />
79
+ </Table.Footer>
80
+ </Table>
81
+ );
82
+
83
+ expect(screen.getByText('fruits')).toBeVisible();
84
+ expect(screen.getByText('vegetables')).toBeVisible();
85
+ expect(screen.getByText('grains')).toBeVisible();
86
+ expect(screen.queryByText('protein foods')).not.toBeInTheDocument();
87
+ expect(screen.queryByText('dairy')).not.toBeInTheDocument();
88
+
89
+ const buttons = screen.getAllByRole('button');
90
+ expect(buttons).toHaveLength(4);
91
+ expect(buttons[0]).toHaveAccessibleName('previous page');
92
+ expect(buttons[1]).toHaveAccessibleName('1');
93
+ expect(buttons[2]).toHaveAccessibleName('2');
94
+ expect(buttons[3]).toHaveAccessibleName('next page');
95
+
96
+ await user.click(screen.getByRole('button', {name: 'next page'}));
97
+
98
+ expect(screen.queryByText('fruits')).not.toBeInTheDocument();
99
+ expect(screen.queryByText('vegetables')).not.toBeInTheDocument();
100
+ expect(screen.queryByText('grains')).not.toBeInTheDocument();
101
+ expect(screen.getByText('protein foods')).toBeVisible();
102
+ expect(screen.getByText('dairy')).toBeVisible();
103
+ });
58
104
  });
package/src/index.ts CHANGED
@@ -6,11 +6,22 @@ export * from '@mantine/carousel';
6
6
  export * from '@mantine/core';
7
7
  export type {FormValidateInput} from '@mantine/form/lib/types';
8
8
  export * from '@mantine/hooks';
9
- export {createColumnHelper, type ColumnDef} from '@tanstack/table-core';
9
+ export * from '@tanstack/table-core';
10
10
  export * from './components';
11
11
  export * from '@mantine/form';
12
+ export {Pagination} from '@mantine/core';
12
13
  // explicitly overriding mantine components
13
- export {Header, Table, type HeaderProps, Modal, Button, type ButtonProps, Menu, type MenuItemProps} from './components';
14
+ export {
15
+ Header,
16
+ Table,
17
+ type TableProps,
18
+ type HeaderProps,
19
+ Modal,
20
+ Button,
21
+ type ButtonProps,
22
+ Menu,
23
+ type MenuItemProps,
24
+ } from './components';
14
25
  export {useForm, createFormContext} from './form';
15
26
 
16
27
  export * from './theme';