UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

1 lines 8.71 kB
{"version":3,"file":"Table.cjs","names":["createVarsResolver","getSpacing","getThemeColor","rem","factory","useProps","useStyles","TableProvider","Box","TableDataRenderer","classes","TableTd","TableTh","TableTr","TableThead","TableTbody","TableTfoot","TableCaption","TableScrollContainer"],"sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getSpacing,\n getThemeColor,\n MantineColor,\n MantineSpacing,\n rem,\n StylesApiProps,\n useProps,\n useStyles,\n} from '../../core';\nimport {\n TableCaption,\n TableTbody,\n TableTd,\n TableTfoot,\n TableTh,\n TableThead,\n TableTr,\n} from './Table.components';\nimport { TableProvider } from './Table.context';\nimport { TableDataRenderer } from './TableDataRenderer';\nimport { TableScrollContainer } from './TableScrollContainer';\nimport classes from './Table.module.css';\n\nexport type TableVariant = 'default' | 'vertical';\n\nexport type TableStylesNames =\n | 'table'\n | 'thead'\n | 'tbody'\n | 'tfoot'\n | 'tr'\n | 'th'\n | 'td'\n | 'caption';\n\nexport type TableCssVariables = {\n table:\n | '--table-layout'\n | '--table-border-color'\n | '--table-caption-side'\n | '--table-horizontal-spacing'\n | '--table-vertical-spacing'\n | '--table-striped-color'\n | '--table-highlight-on-hover-color'\n | '--table-sticky-header-offset';\n};\n\nexport interface TableData {\n head?: React.ReactNode[];\n body?: React.ReactNode[][];\n foot?: React.ReactNode[];\n caption?: string;\n}\n\nexport interface TableProps extends BoxProps, StylesApiProps<TableFactory>, ElementProps<'table'> {\n /** Value of `table-layout` style @default auto */\n layout?: React.CSSProperties['tableLayout'];\n\n /** Side of the `Table.Caption` @default bottom */\n captionSide?: 'top' | 'bottom';\n\n /** Color of table borders, key of `theme.colors` or any valid CSS color */\n borderColor?: MantineColor;\n\n /** If set, the table has the outer border @default false */\n withTableBorder?: boolean;\n\n /** If set, the table has borders between columns @default false */\n withColumnBorders?: boolean;\n\n /** If set, the table has borders between rows @default true */\n withRowBorders?: boolean;\n\n /** Horizontal cells spacing, key of `theme.spacing` or any valid CSS value for padding, numbers are converted to rem @default xs */\n horizontalSpacing?: MantineSpacing;\n\n /** Vertical cells spacing, key of `theme.spacing` or any valid CSS value for padding, numbers are converted to rem @default xs */\n verticalSpacing?: MantineSpacing;\n\n /** If set, every odd/even row background changes to `stripedColor`, if set to `true`, then `odd` value will be used @default false */\n striped?: boolean | 'odd' | 'even';\n\n /** Background color of striped rows, key of `theme.colors` or any valid CSS color */\n stripedColor?: MantineColor;\n\n /** If set, table rows background changes to `highlightOnHoverColor` when hovered @default false */\n highlightOnHover?: boolean;\n\n /** Background color of table rows when hovered, key of `theme.colors` or any valid CSS color */\n highlightOnHoverColor?: MantineColor;\n\n /** Data used to generate table, ignored if `children` prop is set */\n data?: TableData;\n\n /** If set, `Table.Thead` is sticky @default false */\n stickyHeader?: boolean;\n\n /** Offset from top at which `Table.Thead` should become sticky @default 0 */\n stickyHeaderOffset?: number | string;\n\n /** If set, `font-variant-numeric: tabular-nums` style is applied @default false */\n tabularNums?: boolean;\n}\n\nexport type TableFactory = Factory<{\n props: TableProps;\n ref: HTMLTableElement;\n stylesNames: TableStylesNames;\n vars: TableCssVariables;\n variant: TableVariant;\n staticComponents: {\n Thead: typeof TableThead;\n Tbody: typeof TableTbody;\n Tfoot: typeof TableTfoot;\n Td: typeof TableTd;\n Th: typeof TableTh;\n Tr: typeof TableTr;\n Caption: typeof TableCaption;\n ScrollContainer: typeof TableScrollContainer;\n DataRenderer: typeof TableDataRenderer;\n };\n}>;\n\nconst defaultProps = {\n withRowBorders: true,\n verticalSpacing: 7,\n} satisfies Partial<TableProps>;\n\nconst varsResolver = createVarsResolver<TableFactory>(\n (\n theme,\n {\n layout,\n captionSide,\n horizontalSpacing,\n verticalSpacing,\n borderColor,\n stripedColor,\n highlightOnHoverColor,\n striped,\n highlightOnHover,\n stickyHeaderOffset,\n stickyHeader,\n }\n ) => ({\n table: {\n '--table-layout': layout,\n '--table-caption-side': captionSide,\n '--table-horizontal-spacing': getSpacing(horizontalSpacing),\n '--table-vertical-spacing': getSpacing(verticalSpacing),\n '--table-border-color': borderColor ? getThemeColor(borderColor, theme) : undefined,\n '--table-striped-color':\n striped && stripedColor ? getThemeColor(stripedColor, theme) : undefined,\n '--table-highlight-on-hover-color':\n highlightOnHover && highlightOnHoverColor\n ? getThemeColor(highlightOnHoverColor, theme)\n : undefined,\n '--table-sticky-header-offset': stickyHeader ? rem(stickyHeaderOffset) : undefined,\n },\n })\n);\n\nexport const Table = factory<TableFactory>((_props) => {\n const props = useProps('Table', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n horizontalSpacing,\n verticalSpacing,\n captionSide,\n stripedColor,\n highlightOnHoverColor,\n striped,\n highlightOnHover,\n withColumnBorders,\n withRowBorders,\n withTableBorder,\n borderColor,\n layout,\n data,\n children,\n stickyHeader,\n stickyHeaderOffset,\n mod,\n tabularNums,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<TableFactory>({\n name: 'Table',\n props,\n className,\n style,\n classes,\n classNames,\n styles,\n unstyled,\n attributes,\n rootSelector: 'table',\n vars,\n varsResolver,\n });\n\n return (\n <TableProvider\n value={{\n getStyles,\n stickyHeader,\n striped: striped === true ? 'odd' : striped || undefined,\n highlightOnHover,\n withColumnBorders,\n withRowBorders,\n captionSide: captionSide || 'bottom',\n }}\n >\n <Box\n component=\"table\"\n mod={[{ 'data-with-table-border': withTableBorder, 'data-tabular-nums': tabularNums }, mod]}\n {...getStyles('table')}\n {...others}\n >\n {children || (!!data && <TableDataRenderer data={data} />)}\n </Box>\n </TableProvider>\n );\n});\n\nTable.classes = classes;\nTable.varsResolver = varsResolver;\nTable.displayName = '@mantine/core/Table';\nTable.Td = TableTd;\nTable.Th = TableTh;\nTable.Tr = TableTr;\nTable.Thead = TableThead;\nTable.Tbody = TableTbody;\nTable.Tfoot = TableTfoot;\nTable.Caption = TableCaption;\nTable.ScrollContainer = TableScrollContainer;\nTable.DataRenderer = TableDataRenderer;\n"],"mappings":";;;;;;;;;;;;;;;;;AAkIA,MAAM,eAAe;CACnB,gBAAgB;CAChB,iBAAiB;CAClB;AAED,MAAM,eAAeA,6BAAAA,oBAEjB,OACA,EACE,QACA,aACA,mBACA,iBACA,aACA,cACA,uBACA,SACA,kBACA,oBACA,oBAEE,EACJ,OAAO;CACL,kBAAkB;CAClB,wBAAwB;CACxB,8BAA8BC,iBAAAA,WAAW,kBAAkB;CAC3D,4BAA4BA,iBAAAA,WAAW,gBAAgB;CACvD,wBAAwB,cAAcC,wBAAAA,cAAc,aAAa,MAAM,GAAG,KAAA;CAC1E,yBACE,WAAW,eAAeA,wBAAAA,cAAc,cAAc,MAAM,GAAG,KAAA;CACjE,oCACE,oBAAoB,wBAChBA,wBAAAA,cAAc,uBAAuB,MAAM,GAC3C,KAAA;CACN,gCAAgC,eAAeC,YAAAA,IAAI,mBAAmB,GAAG,KAAA;CAC1E,EACF,EACF;AAED,MAAa,QAAQC,gBAAAA,SAAuB,WAAW;CACrD,MAAM,QAAQC,kBAAAA,SAAS,SAAS,cAAc,OAAO;CACrD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,mBACA,iBACA,aACA,cACA,uBACA,SACA,kBACA,mBACA,gBACA,iBACA,aACA,QACA,MACA,UACA,cACA,oBACA,KACA,aACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAYC,mBAAAA,UAAwB;EACxC,MAAM;EACN;EACA;EACA;EACA,SAAA,qBAAA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,sBAAAA,eAAD;EACE,OAAO;GACL;GACA;GACA,SAAS,YAAY,OAAO,QAAQ,WAAW,KAAA;GAC/C;GACA;GACA;GACA,aAAa,eAAe;GAC7B;YAED,iBAAA,GAAA,kBAAA,KAACC,YAAAA,KAAD;GACE,WAAU;GACV,KAAK,CAAC;IAAE,0BAA0B;IAAiB,qBAAqB;IAAa,EAAE,IAAI;GAC3F,GAAI,UAAU,QAAQ;GACtB,GAAI;aAEH,YAAa,CAAC,CAAC,QAAQ,iBAAA,GAAA,kBAAA,KAACC,0BAAAA,mBAAD,EAAyB,MAAQ,CAAA;GACrD,CAAA;EACQ,CAAA;EAElB;AAEF,MAAM,UAAUC,qBAAAA;AAChB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,KAAKC,yBAAAA;AACX,MAAM,KAAKC,yBAAAA;AACX,MAAM,KAAKC,yBAAAA;AACX,MAAM,QAAQC,yBAAAA;AACd,MAAM,QAAQC,yBAAAA;AACd,MAAM,QAAQC,yBAAAA;AACd,MAAM,UAAUC,yBAAAA;AAChB,MAAM,kBAAkBC,6BAAAA;AACxB,MAAM,eAAeT,0BAAAA"}