Compare commits

..

No commits in common. "main" and "v1.0.6" have entirely different histories.
main ... v1.0.6

7 changed files with 732 additions and 867 deletions

View file

@ -90,6 +90,6 @@ export function RemoveDemoTable()
)
},
},
}))} disableFilter={true} disableSort={true} />
}))} />
);
}

View file

@ -1,4 +1,4 @@
import "@kernelui/core/lib/index.css";
import "@kernelui/core/lib/style.css";
import "../src/styles/smartable.less";
import React from "react";

View file

@ -1,5 +1,5 @@
{
"version": "1.1.2",
"version": "1.0.6",
"name": "@kernelui/smartable",
"description": "Kernel UI Smartable.",
"scripts": {
@ -17,22 +17,22 @@
"@kernelui:registry": "https://code.zeptotech.net/api/packages/UIKernel/npm/"
},
"devDependencies": {
"@kernelui/core": "^1.8.2",
"@kernelui/core": "^1.5.0",
"@phosphor-icons/react": "^2.1.7",
"@types/node": "^22.0.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.4",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.0",
"less": "^4.2.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^7.0.1",
"react-router-dom": "^6.26.2",
"typescript": "^5.4.5",
"vite": "^6.0.1",
"vite-plugin-dts": "^4.3.0"
"vite": "^5.2.11",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
"@kernelui/core": "^1.8.2"
"@kernelui/core": "^1.1.2"
},
"packageManager": "yarn@4.5.0"
}

View file

@ -5,7 +5,7 @@ import {RowInstance, RowLoader} from "./Row";
import {useAsyncManager} from "./AsyncManager";
import {ColumnHeading} from "./Columns/ColumnHeading";
import {sortRows} from "./Sort";
import {AutoPaginate, classes} from "@kernelui/core";
import {AutoPaginate} from "@kernelui/core";
/**
* Smartable instance component properties.
@ -66,10 +66,10 @@ export function PaginatedInstance<CK extends ColumnKey>(props: InstancePropertie
/**
* Base component for a Smartable table.
*/
export function Table<CK extends ColumnKey>({className, columns, children}: React.PropsWithChildren<InstanceProperties<CK>>)
export function Table<CK extends ColumnKey>({columns, children}: React.PropsWithChildren<InstanceProperties<CK>>)
{
return (
<table className={classes("smartable", className)}>
<table className={"smartable"}>
<thead>
<ColumnsHeadings columns={columns} />
</thead>
@ -85,12 +85,9 @@ export function Table<CK extends ColumnKey>({className, columns, children}: Reac
*/
export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Columns<CK>})
{
// Get feature disable options.
const {disableSort, disableFilter} = useTable<CK>();
return (
<>
<tr className={classes("headings", disableSort === true ? "disable-sort" : undefined)}>
<tr className={"headings"}>
{ // Showing title of each column.
Object.keys(columns).map((key) => (
<AutoColumnContextProvider key={key} columnKey={key}>
@ -99,21 +96,17 @@ export function ColumnsHeadings<CK extends ColumnKey>({columns}: {columns: Colum
))
}
</tr>
{ // Add filters if filter feature is not disabled.
disableFilter !== true && (
<tr className={"filters"}>
{ // Add columns filters, if there are some.
(Object.entries(columns) as [CK, Column][]).map(([columnKey, column]) => (
column.filter && (
<AutoColumnContextProvider key={columnKey as string} columnKey={columnKey}>
<td>{column.filter.element}</td>
</AutoColumnContextProvider>
)
))
}
</tr>
)
}
<tr className={"filters"}>
{ // Add columns filters, if there are some.
(Object.entries(columns) as [CK, Column][]).map(([columnKey, column]) => (
column.filter && (
<AutoColumnContextProvider key={columnKey as string} columnKey={columnKey}>
<td>{column.filter.element}</td>
</AutoColumnContextProvider>
)
))
}
</tr>
</>
);
}

View file

@ -15,11 +15,6 @@ export type SmartableData<CK extends ColumnKey> = Promisable<(Promisable<RowDefi
*/
export interface SmartableProperties<CK extends ColumnKey>
{
/**
* Table custom class name.
*/
className?: string;
/**
* Table data.
*/
@ -49,16 +44,6 @@ export interface SmartableProperties<CK extends ColumnKey>
*/
pageSize: number;
};
/**
* Disable sort feature.
*/
disableSort?: boolean;
/**
* Disable filter feature.
*/
disableFilter?: boolean;
}
/**

View file

@ -1,89 +1,81 @@
tr.headings
{
&.disable-sort
th
{
th { pointer-events: none; }
}
position: relative;
&:not(.disable-sort)
{
th
cursor: pointer;
&::before, &::after
{ // Sorting order indicator.
transition: height 0.2s ease, background 0.2s ease, top 0.2s ease, bottom 0.2s ease;
content: "";
position: absolute;
top: 0;
bottom: 0;
display: block;
margin: auto;
box-sizing: border-box;
background: var(--background-darkest);
}
&::before
{
position: relative;
right: calc(0.33em - 1px);
cursor: pointer;
width: 2px;
height: 0;
border-radius: 2px;
}
&::after
{
right: calc(0.33em - 3px);
&::before, &::after
{ // Sorting order indicator.
transition: height 0.2s ease, background 0.2s ease, top 0.2s ease, bottom 0.2s ease;
width: 6px;
height: 6px;
border-radius: 6px;
}
content: "";
position: absolute;
top: 0;
bottom: 0;
display: block;
margin: auto;
box-sizing: border-box;
background: var(--background-darkest);
&.asc, &.desc
{
&::after, &::before
{
background: var(--primary);
}
&::before
{
right: calc(0.33em - 1px);
width: 2px;
height: 0;
border-radius: 2px;
height: 0.8em;
}
&::after
{
right: calc(0.33em - 3px);
}
width: 6px;
height: 6px;
border-radius: 6px;
}
&.asc::after
{
top: 0.5em;
}
&.desc::after
{
bottom: 0.5em;
}
&.asc, &.desc
{
&::after, &::before
{
background: var(--primary);
}
.order
{ // Sort order indicator.
position: relative;
top: 0;
bottom: 0;
&::before
{
height: 0.8em;
}
}
display: block;
margin: auto 0;
padding: 0.3em 0.3em 0;
align-items: center;
justify-content: center;
color: var(--foreground-lightest);
font-size: 0.7em;
&.asc::after
{
top: 0.5em;
}
&.desc::after
{
bottom: 0.5em;
}
.order
{ // Sort order indicator.
position: relative;
top: 0;
bottom: 0;
display: block;
margin: auto 0;
padding: 0.3em 0.3em 0;
align-items: center;
justify-content: center;
color: var(--foreground-lightest);
font-size: 0.7em;
float: right;
}
float: right;
}
}
}

1395
yarn.lock

File diff suppressed because it is too large Load diff