@coveord/plasma-mantine 52.13.1 → 52.14.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.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +34 -32
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/copyToClipboard/CopyToClipboard.d.ts.map +1 -1
- package/dist/cjs/components/copyToClipboard/CopyToClipboard.js +1 -0
- package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -1
- package/dist/cjs/components/header/Header.d.ts.map +1 -1
- package/dist/cjs/components/header/Header.js +2 -1
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirm.d.ts +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirm.d.ts.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
- package/dist/cjs/components/table/TableFilter.d.ts.map +1 -1
- package/dist/cjs/components/table/TableFilter.js +17 -8
- package/dist/cjs/components/table/TableFilter.js.map +1 -1
- package/dist/cjs/components/table/layouts/RowLayout.js +3 -3
- package/dist/cjs/components/table/layouts/RowLayout.js.map +1 -1
- package/dist/cjs/theme/Plasmantine.d.ts +1 -1
- package/dist/cjs/theme/Plasmantine.d.ts.map +1 -1
- package/dist/cjs/theme/Plasmantine.js.map +1 -1
- package/dist/esm/components/copyToClipboard/CopyToClipboard.d.ts.map +1 -1
- package/dist/esm/components/copyToClipboard/CopyToClipboard.js +1 -0
- package/dist/esm/components/copyToClipboard/CopyToClipboard.js.map +1 -1
- package/dist/esm/components/header/Header.d.ts.map +1 -1
- package/dist/esm/components/header/Header.js +2 -1
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirm.d.ts +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirm.d.ts.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -1
- package/dist/esm/components/table/TableFilter.d.ts.map +1 -1
- package/dist/esm/components/table/TableFilter.js +18 -9
- package/dist/esm/components/table/TableFilter.js.map +1 -1
- package/dist/esm/components/table/layouts/RowLayout.js +3 -3
- package/dist/esm/components/table/layouts/RowLayout.js.map +1 -1
- package/dist/esm/theme/Plasmantine.d.ts +1 -1
- package/dist/esm/theme/Plasmantine.d.ts.map +1 -1
- package/dist/esm/theme/Plasmantine.js.map +1 -1
- package/package.json +24 -24
- package/src/components/copyToClipboard/CopyToClipboard.tsx +1 -0
- package/src/components/header/Header.tsx +1 -0
- package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/src/components/inline-confirm/InlineConfirm.tsx +1 -1
- package/src/components/table/TableFilter.tsx +15 -10
- package/src/components/table/__tests__/TableFilter.spec.tsx +20 -5
- package/src/components/table/layouts/RowLayout.tsx +1 -1
- package/src/theme/Plasmantine.tsx +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {ActionIcon,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {ActionIcon, DefaultProps, Grid, Selectors, TextInput, createStyles} from '@mantine/core';\nimport {ChangeEventHandler, FunctionComponent, MouseEventHandler, useState} from 'react';\n\nimport {useDebouncedValue, useDidUpdate} from '@mantine/hooks';\nimport {TableComponentsOrder} from './Table.styles';\nimport {useTable} from './TableContext';\n\nconst useStyles = createStyles((theme) => ({\n root: {},\n wrapper: {\n marginBottom: '0 !important',\n },\n empty: {\n color: theme.colors.gray[4],\n },\n}));\n\ntype TableFilterStylesNames = Selectors<typeof useStyles>;\ninterface TableFilterProps extends DefaultProps<TableFilterStylesNames> {\n /**\n * The placeholder for the filter input\n *\n * @default \"Search by any field\"\n */\n placeholder?: string;\n}\n\nexport const TableFilter: FunctionComponent<TableFilterProps> = ({\n placeholder = 'Search by any field',\n classNames,\n styles,\n unstyled,\n ...others\n}) => {\n const {classes} = useStyles(null, {name: 'TableFilter', classNames, styles, unstyled});\n const {state, setState} = useTable();\n const [filter, setFilter] = useState(state.globalFilter);\n const [debounced, cancel] = useDebouncedValue(filter, 300);\n\n useDidUpdate(() => {\n setState((prevState) => ({\n ...prevState,\n pagination: prevState.pagination\n ? {pageIndex: 0, pageSize: prevState.pagination.pageSize}\n : prevState.pagination,\n globalFilter: debounced,\n }));\n return cancel;\n }, [debounced]);\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const {value} = event.currentTarget;\n setFilter(value);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n setFilter('');\n };\n\n return (\n <Grid.Col span=\"content\" order={TableComponentsOrder.Filter} py=\"sm\" className={classes.root}>\n <TextInput\n className={classes.wrapper}\n placeholder={placeholder}\n autoComplete=\"off\"\n mb=\"md\"\n rightSection={\n filter ? (\n <ActionIcon onClick={handleClear}>\n <CrossSize16Px height={16} />\n </ActionIcon>\n ) : (\n <SearchSize16Px height={16} className={classes.empty} />\n )\n }\n value={filter}\n onChange={handleChange}\n {...others}\n />\n </Grid.Col>\n );\n};\n"],"names":["CrossSize16Px","SearchSize16Px","ActionIcon","Grid","TextInput","createStyles","useState","useDebouncedValue","useDidUpdate","TableComponentsOrder","useTable","useStyles","theme","root","wrapper","marginBottom","empty","color","colors","gray","TableFilter","placeholder","classNames","styles","unstyled","others","classes","name","state","setState","globalFilter","filter","setFilter","debounced","cancel","prevState","pagination","pageIndex","pageSize","handleChange","event","value","currentTarget","handleClear","Col","span","order","Filter","py","className","autoComplete","mb","rightSection","onClick","height","onChange"],"mappings":";;;;;AAAA,SAAQA,aAAa,EAAEC,cAAc,QAAO,8BAA8B;AAC1E,SAAQC,UAAU,EAAgBC,IAAI,EAAaC,SAAS,EAAEC,YAAY,QAAO,gBAAgB;AACjG,SAAkEC,QAAQ,QAAO,QAAQ;AAEzF,SAAQC,iBAAiB,EAAEC,YAAY,QAAO,iBAAiB;AAC/D,SAAQC,oBAAoB,QAAO,iBAAiB;AACpD,SAAQC,QAAQ,QAAO,iBAAiB;AAExC,IAAMC,YAAYN,aAAa,SAACO;WAAW;QACvCC,MAAM,CAAC;QACPC,SAAS;YACLC,cAAc;QAClB;QACAC,OAAO;YACHC,OAAOL,MAAMM,MAAM,CAACC,IAAI,CAAC,EAAE;QAC/B;IACJ;;AAYA,OAAO,IAAMC,cAAmD;oCAC5DC,aAAAA,8CAAc,4CACdC,oBAAAA,YACAC,gBAAAA,QACAC,kBAAAA,UACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAM,AAACE,UAAWf,UAAU,MAAM;QAACgB,MAAM;QAAeL,YAAAA;QAAYC,QAAAA;QAAQC,UAAAA;IAAQ,GAA7EE;IACP,IAA0BhB,YAAAA,YAAnBkB,QAAmBlB,UAAnBkB,OAAOC,WAAYnB,UAAZmB;IACd,IAA4BvB,6BAAAA,SAASsB,MAAME,YAAY,OAAhDC,SAAqBzB,cAAb0B,YAAa1B;IAC5B,IAA4BC,sCAAAA,kBAAkBwB,QAAQ,UAA/CE,YAAqB1B,uBAAV2B,SAAU3B;IAE5BC,aAAa;QACTqB,SAAS,SAACM;mBAAe,wCAClBA;gBACHC,YAAYD,UAAUC,UAAU,GAC1B;oBAACC,WAAW;oBAAGC,UAAUH,UAAUC,UAAU,CAACE,QAAQ;gBAAA,IACtDH,UAAUC,UAAU;gBAC1BN,cAAcG;;;QAElB,OAAOC;IACX,GAAG;QAACD;KAAU;IAEd,IAAMM,eAAqD,SAACC;QACxD,IAAM,AAACC,QAASD,MAAME,aAAa,CAA5BD;QACPT,UAAUS;IACd;IAEA,IAAME,cAAoD;QACtDX,UAAU;IACd;IAEA,qBACI,KAAC7B,KAAKyC,GAAG;QAACC,MAAK;QAAUC,OAAOrC,qBAAqBsC,MAAM;QAAEC,IAAG;QAAKC,WAAWvB,QAAQb,IAAI;kBACxF,cAAA,KAACT;YACG6C,WAAWvB,QAAQZ,OAAO;YAC1BO,aAAaA;YACb6B,cAAa;YACbC,IAAG;YACHC,cACIrB,uBACI,KAAC7B;gBAAWmD,SAASV;0BACjB,cAAA,KAAC3C;oBAAcsD,QAAQ;;+BAG3B,KAACrD;gBAAeqD,QAAQ;gBAAIL,WAAWvB,QAAQV,KAAK;;YAG5DyB,OAAOV;YACPwB,UAAUhB;WACNd;;AAIpB,EAAE"}
|
|
@@ -55,7 +55,8 @@ var useStyles = createStyles(function(theme, param) {
|
|
|
55
55
|
},
|
|
56
56
|
"&:hover": {
|
|
57
57
|
backgroundColor: rowBackgroundColor
|
|
58
|
-
}
|
|
58
|
+
},
|
|
59
|
+
overflowWrap: "anywhere"
|
|
59
60
|
},
|
|
60
61
|
cell: {
|
|
61
62
|
verticalAlign: "middle",
|
|
@@ -146,8 +147,7 @@ var RowLayoutBody = function(param) {
|
|
|
146
147
|
style: {
|
|
147
148
|
width: (_columnSizing_size = columnSizing.size) !== null && _columnSizing_size !== void 0 ? _columnSizing_size : "auto",
|
|
148
149
|
minWidth: columnSizing.minSize,
|
|
149
|
-
maxWidth: columnSizing.maxSize
|
|
150
|
-
overflowWrap: "break-word"
|
|
150
|
+
maxWidth: columnSizing.maxSize
|
|
151
151
|
},
|
|
152
152
|
className: cx(classes.cell, _define_property({}, classes.rowCollapsibleButtonCell, cell.column.id === TableCollapsibleColumn.id)),
|
|
153
153
|
onClick: onCollapsibleCellClick,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/table/layouts/RowLayout.tsx"],"sourcesContent":["import {ListSize16Px} from '@coveord/plasma-react-icons';\nimport {Box, Collapse, createStyles, rem} from '@mantine/core';\nimport {flexRender} from '@tanstack/react-table';\nimport {defaultColumnSizing} from '@tanstack/table-core';\nimport {Fragment, type MouseEvent} from 'react';\nimport {TableLayout, TableLayoutProps} from '../Table.types';\nimport {TableCollapsibleColumn} from '../TableCollapsibleColumn';\nimport {useTable} from '../TableContext';\nimport {TableLoading} from '../TableLoading';\nimport {TableSelectableColumn} from '../TableSelectableColumn';\nimport {Th} from '../Th';\n\ninterface TableStylesParams {\n multiRowSelectionEnabled: boolean;\n disableRowSelection: boolean;\n}\n\nconst useStyles = createStyles<string, TableStylesParams>((theme, {multiRowSelectionEnabled, disableRowSelection}) => {\n const rowBackgroundColor =\n theme.colorScheme === 'dark' ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2) : theme.colors.gray[1];\n const border = `${rem(1)} solid ${theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[3]}`;\n return {\n headerColumns: {\n '& th:first-of-type > *': {\n paddingLeft: '40px',\n },\n\n '& input[type=checkbox]': {\n backgroundColor: disableRowSelection ? `${theme.colors.gray[2]}` : undefined,\n borderColor: disableRowSelection ? `${theme.colors.gray[3]}` : `${theme.colors.gray[4]}`,\n pointerEvents: disableRowSelection ? 'none' : 'auto',\n cursor: disableRowSelection ? 'not-allowed' : 'default',\n\n '& + svg': {\n color: disableRowSelection ? `${theme.colors.gray[5]}` : 'inherit',\n },\n },\n },\n\n rowSelected: {\n backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,\n },\n\n rowUnselectable: {\n '& input[type=checkbox]': {\n backgroundColor: `${theme.colors.gray[2]}`,\n borderColor: `${theme.colors.gray[3]}`,\n pointerEvents: 'none',\n cursor: 'not-allowed',\n\n '&:checked + svg': {\n color: `${theme.colors.gray[5]}`,\n },\n },\n },\n\n rowCollapsibleButtonCell: {\n textAlign: 'right',\n padding: `calc(${theme.spacing.xs}/2) ${theme.spacing.sm} !important`,\n },\n\n row: {\n '& td:first-of-type': {\n paddingLeft: '40px',\n },\n '&:hover': {\n backgroundColor: rowBackgroundColor,\n },\n },\n\n cell: {\n verticalAlign: 'middle',\n // We must use height instead of minHeight here, otherwise it doesn't apply\n height: '56px',\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\n borderBottom: border,\n },\n\n collapsible: {\n backgroundColor: rowBackgroundColor,\n borderBottom: border,\n },\n };\n});\n\nconst RowLayoutHeader = <T,>({table}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes} = useStyles({disableRowSelection, multiRowSelectionEnabled});\n const headers = table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className={classes.headerColumns}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ));\n return <>{headers}</>;\n};\n\nconst RowLayoutBody = <T,>({\n table,\n doubleClickAction,\n getExpandChildren,\n loading,\n keepSelection,\n}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes, cx} = useStyles({disableRowSelection, multiRowSelectionEnabled});\n\n const toggleCollapsible = (el: HTMLTableRowElement) => {\n const cell = el.children[el.children.length - 1] as HTMLTableCellElement;\n cell.querySelector('button').click();\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n const isSelected = !!row.getIsSelected();\n const shouldKeepSelection = keepSelection && isSelected;\n const onClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (rowChildren) {\n toggleCollapsible(event.currentTarget);\n }\n if (!disableRowSelection && !multiRowSelectionEnabled && !shouldKeepSelection) {\n row.toggleSelected();\n }\n };\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={onClick}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {\n [classes.rowSelected]: isSelected,\n [classes.rowUnselectable]: disableRowSelection,\n })}\n aria-selected={isSelected}\n data-testid={row.id}\n >\n {row.getVisibleCells().map((cell) => {\n const columnSizing = {\n ...defaultColumnSizing,\n size: cell.column.columnDef.size,\n minSize: cell.column.columnDef.minSize,\n maxSize: cell.column.columnDef.maxSize,\n };\n\n const onCollapsibleCellClick = (event: MouseEvent<HTMLTableCellElement>) => {\n if (cell.column.id === TableSelectableColumn.id && !disableRowSelection) {\n event.stopPropagation();\n row.getToggleSelectedHandler();\n }\n };\n return (\n <td\n key={cell.id}\n data-testid={cell.id}\n style={{\n width: columnSizing.size ?? 'auto',\n minWidth: columnSizing.minSize,\n maxWidth: columnSizing.maxSize,\n overflowWrap: 'break-word',\n }}\n className={cx(classes.cell, {\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n onClick={onCollapsibleCellClick}\n >\n <TableLoading visible={loading}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableLoading>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={table.getAllColumns().length}\n style={{\n padding: 0,\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box className={classes.collapsible} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return <>{rows}</>;\n};\n\nexport const RowLayout: TableLayout = {\n name: 'Rows',\n icon: ListSize16Px,\n Header: RowLayoutHeader,\n Body: RowLayoutBody,\n};\n"],"names":["ListSize16Px","Box","Collapse","createStyles","rem","flexRender","defaultColumnSizing","Fragment","TableCollapsibleColumn","useTable","TableLoading","TableSelectableColumn","Th","useStyles","theme","multiRowSelectionEnabled","disableRowSelection","rowBackgroundColor","colorScheme","fn","rgba","colors","primaryColor","gray","border","dark","headerColumns","paddingLeft","backgroundColor","undefined","borderColor","pointerEvents","cursor","color","rowSelected","rowUnselectable","rowCollapsibleButtonCell","textAlign","padding","spacing","xs","sm","row","cell","verticalAlign","height","borderBottom","collapsible","RowLayoutHeader","table","classes","headers","getHeaderGroups","map","headerGroup","tr","className","columnHeader","header","id","RowLayoutBody","doubleClickAction","getExpandChildren","loading","keepSelection","cx","toggleCollapsible","el","children","length","querySelector","click","rows","getRowModel","rowChildren","original","isSelected","getIsSelected","shouldKeepSelection","onClick","event","currentTarget","toggleSelected","onDoubleClick","aria-selected","data-testid","getVisibleCells","columnSizing","size","column","columnDef","minSize","maxSize","onCollapsibleCellClick","stopPropagation","getToggleSelectedHandler","td","style","width","minWidth","maxWidth","overflowWrap","visible","getContext","colSpan","getAllColumns","in","getIsExpanded","px","py","RowLayout","name","icon","Header","Body"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/table/layouts/RowLayout.tsx"],"sourcesContent":["import {ListSize16Px} from '@coveord/plasma-react-icons';\nimport {Box, Collapse, createStyles, rem} from '@mantine/core';\nimport {flexRender} from '@tanstack/react-table';\nimport {defaultColumnSizing} from '@tanstack/table-core';\nimport {Fragment, type MouseEvent} from 'react';\nimport {TableLayout, TableLayoutProps} from '../Table.types';\nimport {TableCollapsibleColumn} from '../TableCollapsibleColumn';\nimport {useTable} from '../TableContext';\nimport {TableLoading} from '../TableLoading';\nimport {TableSelectableColumn} from '../TableSelectableColumn';\nimport {Th} from '../Th';\n\ninterface TableStylesParams {\n multiRowSelectionEnabled: boolean;\n disableRowSelection: boolean;\n}\n\nconst useStyles = createStyles<string, TableStylesParams>((theme, {multiRowSelectionEnabled, disableRowSelection}) => {\n const rowBackgroundColor =\n theme.colorScheme === 'dark' ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2) : theme.colors.gray[1];\n const border = `${rem(1)} solid ${theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[3]}`;\n return {\n headerColumns: {\n '& th:first-of-type > *': {\n paddingLeft: '40px',\n },\n\n '& input[type=checkbox]': {\n backgroundColor: disableRowSelection ? `${theme.colors.gray[2]}` : undefined,\n borderColor: disableRowSelection ? `${theme.colors.gray[3]}` : `${theme.colors.gray[4]}`,\n pointerEvents: disableRowSelection ? 'none' : 'auto',\n cursor: disableRowSelection ? 'not-allowed' : 'default',\n\n '& + svg': {\n color: disableRowSelection ? `${theme.colors.gray[5]}` : 'inherit',\n },\n },\n },\n\n rowSelected: {\n backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,\n },\n\n rowUnselectable: {\n '& input[type=checkbox]': {\n backgroundColor: `${theme.colors.gray[2]}`,\n borderColor: `${theme.colors.gray[3]}`,\n pointerEvents: 'none',\n cursor: 'not-allowed',\n\n '&:checked + svg': {\n color: `${theme.colors.gray[5]}`,\n },\n },\n },\n\n rowCollapsibleButtonCell: {\n textAlign: 'right',\n padding: `calc(${theme.spacing.xs}/2) ${theme.spacing.sm} !important`,\n },\n\n row: {\n '& td:first-of-type': {\n paddingLeft: '40px',\n },\n '&:hover': {\n backgroundColor: rowBackgroundColor,\n },\n overflowWrap: 'anywhere',\n },\n\n cell: {\n verticalAlign: 'middle',\n // We must use height instead of minHeight here, otherwise it doesn't apply\n height: '56px',\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\n borderBottom: border,\n },\n\n collapsible: {\n backgroundColor: rowBackgroundColor,\n borderBottom: border,\n },\n };\n});\n\nconst RowLayoutHeader = <T,>({table}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes} = useStyles({disableRowSelection, multiRowSelectionEnabled});\n const headers = table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className={classes.headerColumns}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ));\n return <>{headers}</>;\n};\n\nconst RowLayoutBody = <T,>({\n table,\n doubleClickAction,\n getExpandChildren,\n loading,\n keepSelection,\n}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes, cx} = useStyles({disableRowSelection, multiRowSelectionEnabled});\n\n const toggleCollapsible = (el: HTMLTableRowElement) => {\n const cell = el.children[el.children.length - 1] as HTMLTableCellElement;\n cell.querySelector('button').click();\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n const isSelected = !!row.getIsSelected();\n const shouldKeepSelection = keepSelection && isSelected;\n const onClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (rowChildren) {\n toggleCollapsible(event.currentTarget);\n }\n if (!disableRowSelection && !multiRowSelectionEnabled && !shouldKeepSelection) {\n row.toggleSelected();\n }\n };\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={onClick}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {\n [classes.rowSelected]: isSelected,\n [classes.rowUnselectable]: disableRowSelection,\n })}\n aria-selected={isSelected}\n data-testid={row.id}\n >\n {row.getVisibleCells().map((cell) => {\n const columnSizing = {\n ...defaultColumnSizing,\n size: cell.column.columnDef.size,\n minSize: cell.column.columnDef.minSize,\n maxSize: cell.column.columnDef.maxSize,\n };\n\n const onCollapsibleCellClick = (event: MouseEvent<HTMLTableCellElement>) => {\n if (cell.column.id === TableSelectableColumn.id && !disableRowSelection) {\n event.stopPropagation();\n row.getToggleSelectedHandler();\n }\n };\n return (\n <td\n key={cell.id}\n data-testid={cell.id}\n style={{\n width: columnSizing.size ?? 'auto',\n minWidth: columnSizing.minSize,\n maxWidth: columnSizing.maxSize,\n }}\n className={cx(classes.cell, {\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n onClick={onCollapsibleCellClick}\n >\n <TableLoading visible={loading}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableLoading>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={table.getAllColumns().length}\n style={{\n padding: 0,\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box className={classes.collapsible} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return <>{rows}</>;\n};\n\nexport const RowLayout: TableLayout = {\n name: 'Rows',\n icon: ListSize16Px,\n Header: RowLayoutHeader,\n Body: RowLayoutBody,\n};\n"],"names":["ListSize16Px","Box","Collapse","createStyles","rem","flexRender","defaultColumnSizing","Fragment","TableCollapsibleColumn","useTable","TableLoading","TableSelectableColumn","Th","useStyles","theme","multiRowSelectionEnabled","disableRowSelection","rowBackgroundColor","colorScheme","fn","rgba","colors","primaryColor","gray","border","dark","headerColumns","paddingLeft","backgroundColor","undefined","borderColor","pointerEvents","cursor","color","rowSelected","rowUnselectable","rowCollapsibleButtonCell","textAlign","padding","spacing","xs","sm","row","overflowWrap","cell","verticalAlign","height","borderBottom","collapsible","RowLayoutHeader","table","classes","headers","getHeaderGroups","map","headerGroup","tr","className","columnHeader","header","id","RowLayoutBody","doubleClickAction","getExpandChildren","loading","keepSelection","cx","toggleCollapsible","el","children","length","querySelector","click","rows","getRowModel","rowChildren","original","isSelected","getIsSelected","shouldKeepSelection","onClick","event","currentTarget","toggleSelected","onDoubleClick","aria-selected","data-testid","getVisibleCells","columnSizing","size","column","columnDef","minSize","maxSize","onCollapsibleCellClick","stopPropagation","getToggleSelectedHandler","td","style","width","minWidth","maxWidth","visible","getContext","colSpan","getAllColumns","in","getIsExpanded","px","py","RowLayout","name","icon","Header","Body"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plasmantine.d.ts","sourceRoot":"","sources":["../../../src/theme/Plasmantine.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAI3D,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"Plasmantine.d.ts","sourceRoot":"","sources":["../../../src/theme/Plasmantine.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAI3D,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAIrE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/theme/Plasmantine.tsx"],"sourcesContent":["import {MantineProvider} from '@mantine/core';\nimport {FunctionComponent, PropsWithChildren} from 'react';\n\nimport {plasmaTheme} from './Theme';\n\nexport const Plasmantine: FunctionComponent<PropsWithChildren
|
|
1
|
+
{"version":3,"sources":["../../../src/theme/Plasmantine.tsx"],"sourcesContent":["import {MantineProvider} from '@mantine/core';\nimport {FunctionComponent, PropsWithChildren} from 'react';\n\nimport {plasmaTheme} from './Theme';\n\nexport const Plasmantine: FunctionComponent<PropsWithChildren<unknown>> = ({children}) => (\n <MantineProvider withGlobalStyles withNormalizeCSS theme={plasmaTheme}>\n {children}\n </MantineProvider>\n);\n"],"names":["MantineProvider","plasmaTheme","Plasmantine","children","withGlobalStyles","withNormalizeCSS","theme"],"mappings":";AAAA,SAAQA,eAAe,QAAO,gBAAgB;AAG9C,SAAQC,WAAW,QAAO,UAAU;AAEpC,OAAO,IAAMC,cAA6D;QAAEC,iBAAAA;yBACxE,KAACH;QAAgBI,gBAAgB;QAACC,gBAAgB;QAACC,OAAOL;kBACrDE;;EAEP"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coveord/plasma-mantine",
|
|
3
|
-
"version": "52.
|
|
3
|
+
"version": "52.14.0",
|
|
4
4
|
"description": "A Plasma flavoured Mantine theme",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plasma",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@dnd-kit/modifiers": "6.0.1",
|
|
32
32
|
"@dnd-kit/sortable": "7.0.2",
|
|
33
33
|
"@dnd-kit/utilities": "3.2.1",
|
|
34
|
-
"@mantine/utils": "6.0.
|
|
34
|
+
"@mantine/utils": "6.0.18",
|
|
35
35
|
"@monaco-editor/react": "4.5.1",
|
|
36
36
|
"@swc/helpers": "0.5.1",
|
|
37
37
|
"@tanstack/react-table": "8.9.3",
|
|
@@ -40,49 +40,49 @@
|
|
|
40
40
|
"fast-deep-equal": "3.1.3",
|
|
41
41
|
"lodash.debounce": "4.0.8",
|
|
42
42
|
"lodash.defaultsdeep": "4.6.1",
|
|
43
|
-
"monaco-editor": "0.
|
|
44
|
-
"@coveord/plasma-react-icons": "52.
|
|
45
|
-
"@coveord/plasma-tokens": "52.
|
|
43
|
+
"monaco-editor": "0.41.0",
|
|
44
|
+
"@coveord/plasma-react-icons": "52.14.0",
|
|
45
|
+
"@coveord/plasma-tokens": "52.14.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@emotion/react": "11.11.1",
|
|
49
|
-
"@mantine/carousel": "6.0.
|
|
50
|
-
"@mantine/core": "6.0.
|
|
51
|
-
"@mantine/dates": "6.0.
|
|
52
|
-
"@mantine/form": "6.0.
|
|
53
|
-
"@mantine/hooks": "6.0.
|
|
54
|
-
"@mantine/modals": "6.0.
|
|
55
|
-
"@mantine/notifications": "6.0.
|
|
49
|
+
"@mantine/carousel": "6.0.18",
|
|
50
|
+
"@mantine/core": "6.0.18",
|
|
51
|
+
"@mantine/dates": "6.0.18",
|
|
52
|
+
"@mantine/form": "6.0.18",
|
|
53
|
+
"@mantine/hooks": "6.0.18",
|
|
54
|
+
"@mantine/modals": "6.0.18",
|
|
55
|
+
"@mantine/notifications": "6.0.18",
|
|
56
56
|
"@swc/cli": "0.1.62",
|
|
57
|
-
"@swc/core": "1.3.
|
|
58
|
-
"@swc/jest": "0.2.
|
|
57
|
+
"@swc/core": "1.3.75",
|
|
58
|
+
"@swc/jest": "0.2.28",
|
|
59
59
|
"@testing-library/jest-dom": "5.17.0",
|
|
60
60
|
"@testing-library/react": "14.0.0",
|
|
61
61
|
"@testing-library/user-event": "14.4.3",
|
|
62
62
|
"@types/jest": "29.5.3",
|
|
63
63
|
"@types/lodash.debounce": "^4.0.7",
|
|
64
64
|
"@types/lodash.defaultsdeep": "4.6.7",
|
|
65
|
-
"@types/react": "18.2.
|
|
65
|
+
"@types/react": "18.2.19",
|
|
66
66
|
"@types/react-dom": "18.2.7",
|
|
67
|
-
"@types/testing-library__jest-dom": "5.14.
|
|
67
|
+
"@types/testing-library__jest-dom": "5.14.9",
|
|
68
68
|
"csstype": "3.1.2",
|
|
69
69
|
"embla-carousel-react": "7.1.0",
|
|
70
|
-
"eslint-plugin-testing-library": "5.11.
|
|
71
|
-
"eslint-plugin-vitest": "0.2.
|
|
70
|
+
"eslint-plugin-testing-library": "5.11.1",
|
|
71
|
+
"eslint-plugin-vitest": "0.2.8",
|
|
72
72
|
"eslint-plugin-vitest-globals": "1.4.0",
|
|
73
73
|
"identity-obj-proxy": "3.0.0",
|
|
74
|
-
"jest": "29.6.
|
|
75
|
-
"jest-environment-jsdom": "29.6.
|
|
74
|
+
"jest": "29.6.2",
|
|
75
|
+
"jest-environment-jsdom": "29.6.2",
|
|
76
76
|
"jest-junit": "16.0.0",
|
|
77
77
|
"npm-run-all": "4.1.5",
|
|
78
|
-
"publint": "0.
|
|
78
|
+
"publint": "0.2.0",
|
|
79
79
|
"react": "18.2.0",
|
|
80
80
|
"react-dom": "18.2.0",
|
|
81
81
|
"rimraf": "5.0.1",
|
|
82
|
-
"tslib": "2.6.
|
|
82
|
+
"tslib": "2.6.1",
|
|
83
83
|
"typescript": "5.1.6",
|
|
84
|
-
"vitest": "0.
|
|
85
|
-
"eslint-config-plasma": "52.
|
|
84
|
+
"vitest": "0.34.1",
|
|
85
|
+
"eslint-config-plasma": "52.14.0"
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
88
88
|
"@emotion/react": "^11.10.0",
|
|
@@ -5,7 +5,7 @@ import {InlineConfirmContext} from './InlineConfirmContext';
|
|
|
5
5
|
import {InlineConfirmMenuItem} from './InlineConfirmMenuItem';
|
|
6
6
|
import {InlineConfirmPrompt} from './InlineConfirmPrompt';
|
|
7
7
|
|
|
8
|
-
type InlineConfirmType = FunctionComponent<PropsWithChildren
|
|
8
|
+
type InlineConfirmType = FunctionComponent<PropsWithChildren<unknown>> & {
|
|
9
9
|
Prompt: typeof InlineConfirmPrompt;
|
|
10
10
|
Button: typeof InlineConfirmButton;
|
|
11
11
|
MenuItem: typeof InlineConfirmMenuItem;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';
|
|
2
|
-
import {ActionIcon,
|
|
3
|
-
import {ChangeEventHandler, FunctionComponent, MouseEventHandler} from 'react';
|
|
2
|
+
import {ActionIcon, DefaultProps, Grid, Selectors, TextInput, createStyles} from '@mantine/core';
|
|
3
|
+
import {ChangeEventHandler, FunctionComponent, MouseEventHandler, useState} from 'react';
|
|
4
4
|
|
|
5
|
+
import {useDebouncedValue, useDidUpdate} from '@mantine/hooks';
|
|
5
6
|
import {TableComponentsOrder} from './Table.styles';
|
|
6
7
|
import {useTable} from './TableContext';
|
|
7
8
|
|
|
@@ -34,24 +35,27 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
|
34
35
|
}) => {
|
|
35
36
|
const {classes} = useStyles(null, {name: 'TableFilter', classNames, styles, unstyled});
|
|
36
37
|
const {state, setState} = useTable();
|
|
38
|
+
const [filter, setFilter] = useState(state.globalFilter);
|
|
39
|
+
const [debounced, cancel] = useDebouncedValue(filter, 300);
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
useDidUpdate(() => {
|
|
39
42
|
setState((prevState) => ({
|
|
40
43
|
...prevState,
|
|
41
44
|
pagination: prevState.pagination
|
|
42
45
|
? {pageIndex: 0, pageSize: prevState.pagination.pageSize}
|
|
43
46
|
: prevState.pagination,
|
|
44
|
-
globalFilter:
|
|
47
|
+
globalFilter: debounced,
|
|
45
48
|
}));
|
|
46
|
-
|
|
49
|
+
return cancel;
|
|
50
|
+
}, [debounced]);
|
|
47
51
|
|
|
48
52
|
const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {
|
|
49
53
|
const {value} = event.currentTarget;
|
|
50
|
-
|
|
54
|
+
setFilter(value);
|
|
51
55
|
};
|
|
52
56
|
|
|
53
57
|
const handleClear: MouseEventHandler<HTMLButtonElement> = () => {
|
|
54
|
-
|
|
58
|
+
setFilter('');
|
|
55
59
|
};
|
|
56
60
|
|
|
57
61
|
return (
|
|
@@ -59,17 +63,18 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
|
59
63
|
<TextInput
|
|
60
64
|
className={classes.wrapper}
|
|
61
65
|
placeholder={placeholder}
|
|
66
|
+
autoComplete="off"
|
|
62
67
|
mb="md"
|
|
63
68
|
rightSection={
|
|
64
|
-
|
|
69
|
+
filter ? (
|
|
65
70
|
<ActionIcon onClick={handleClear}>
|
|
66
71
|
<CrossSize16Px height={16} />
|
|
67
72
|
</ActionIcon>
|
|
68
73
|
) : (
|
|
69
|
-
<SearchSize16Px height={
|
|
74
|
+
<SearchSize16Px height={16} className={classes.empty} />
|
|
70
75
|
)
|
|
71
76
|
}
|
|
72
|
-
value={
|
|
77
|
+
value={filter}
|
|
73
78
|
onChange={handleChange}
|
|
74
79
|
{...others}
|
|
75
80
|
/>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ColumnDef, createColumnHelper} from '@tanstack/table-core';
|
|
2
|
-
import {render, screen, userEvent, within} from '@test-utils';
|
|
2
|
+
import {act, render, screen, userEvent, within} from '@test-utils';
|
|
3
3
|
|
|
4
4
|
import {Table} from '../Table';
|
|
5
5
|
|
|
@@ -29,7 +29,7 @@ describe('Table.Filter', () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
it('calls onChange when typing something in the filter', async () => {
|
|
32
|
-
const user = userEvent.setup({
|
|
32
|
+
const user = userEvent.setup({advanceTimers: vi.advanceTimersByTime});
|
|
33
33
|
const onChange = vi.fn();
|
|
34
34
|
render(
|
|
35
35
|
<Table data={[{name: 'fruit'}, {name: 'vegetable'}]} columns={columns} onChange={onChange}>
|
|
@@ -40,13 +40,21 @@ describe('Table.Filter', () => {
|
|
|
40
40
|
);
|
|
41
41
|
|
|
42
42
|
await user.type(screen.getByRole('textbox'), 'vegetable');
|
|
43
|
-
|
|
43
|
+
|
|
44
|
+
act(() => {
|
|
45
|
+
// 300 ms debounce on TableFilter input
|
|
46
|
+
vi.advanceTimersByTime(300);
|
|
47
|
+
});
|
|
48
|
+
act(() => {
|
|
49
|
+
// 500 ms debounce on Table onChange callback
|
|
50
|
+
vi.advanceTimersByTime(500);
|
|
51
|
+
});
|
|
44
52
|
|
|
45
53
|
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({globalFilter: 'vegetable'}));
|
|
46
54
|
});
|
|
47
55
|
|
|
48
56
|
it('goes back to the first page when changing the filter', async () => {
|
|
49
|
-
const user = userEvent.setup({
|
|
57
|
+
const user = userEvent.setup({advanceTimers: vi.advanceTimersByTime});
|
|
50
58
|
const onChange = vi.fn();
|
|
51
59
|
render(
|
|
52
60
|
<Table data={[{name: 'fruit'}, {name: 'vegetable'}]} columns={columns} onChange={onChange}>
|
|
@@ -61,7 +69,14 @@ describe('Table.Filter', () => {
|
|
|
61
69
|
);
|
|
62
70
|
|
|
63
71
|
await user.type(screen.getByRole('textbox'), 'veg');
|
|
64
|
-
|
|
72
|
+
act(() => {
|
|
73
|
+
// 300 ms debounce on TableFilter input
|
|
74
|
+
vi.advanceTimersByTime(300);
|
|
75
|
+
});
|
|
76
|
+
act(() => {
|
|
77
|
+
// 500 ms debounce on Table onChange callback
|
|
78
|
+
vi.advanceTimersByTime(500);
|
|
79
|
+
});
|
|
65
80
|
|
|
66
81
|
expect(onChange).toHaveBeenCalledWith(
|
|
67
82
|
expect.objectContaining({globalFilter: 'veg', pagination: {pageIndex: 0, pageSize: 50}}),
|
|
@@ -66,6 +66,7 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {multiRowSelec
|
|
|
66
66
|
'&:hover': {
|
|
67
67
|
backgroundColor: rowBackgroundColor,
|
|
68
68
|
},
|
|
69
|
+
overflowWrap: 'anywhere',
|
|
69
70
|
},
|
|
70
71
|
|
|
71
72
|
cell: {
|
|
@@ -158,7 +159,6 @@ const RowLayoutBody = <T,>({
|
|
|
158
159
|
width: columnSizing.size ?? 'auto',
|
|
159
160
|
minWidth: columnSizing.minSize,
|
|
160
161
|
maxWidth: columnSizing.maxSize,
|
|
161
|
-
overflowWrap: 'break-word',
|
|
162
162
|
}}
|
|
163
163
|
className={cx(classes.cell, {
|
|
164
164
|
[classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,
|
|
@@ -3,7 +3,7 @@ import {FunctionComponent, PropsWithChildren} from 'react';
|
|
|
3
3
|
|
|
4
4
|
import {plasmaTheme} from './Theme';
|
|
5
5
|
|
|
6
|
-
export const Plasmantine: FunctionComponent<PropsWithChildren
|
|
6
|
+
export const Plasmantine: FunctionComponent<PropsWithChildren<unknown>> = ({children}) => (
|
|
7
7
|
<MantineProvider withGlobalStyles withNormalizeCSS theme={plasmaTheme}>
|
|
8
8
|
{children}
|
|
9
9
|
</MantineProvider>
|