From 6242bff1a4cfd5ccfec3b3e77b250191804f040e Mon Sep 17 00:00:00 2001 From: Jorn Luiten Date: Wed, 17 Sep 2025 11:06:44 +0200 Subject: [PATCH 1/3] formatted files and wrote some docs --- README.md | 16 +++ bun.lockb | Bin 106192 -> 110803 bytes dist/components/table/table.d.ts | 2 +- dist/components/table/table.js | 60 +++++----- lefthook.yml | 7 ++ .../table/table-sort-button.module.scss | 12 +- lib/components/table/table-sort-button.tsx | 15 +-- lib/components/table/table.module.scss | 105 +++++++++--------- lib/components/table/table.tsx | 84 ++++++-------- lib/main.ts | 2 +- package.json | 12 +- src/main.tsx | 1 + vite.config.ts | 42 +++---- 13 files changed, 170 insertions(+), 188 deletions(-) mode change 100644 => 100755 bun.lockb create mode 100644 lefthook.yml diff --git a/README.md b/README.md index d954079..94ac48c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,22 @@ A simple table component for React. +## How to + +### Sort + +Use the `onSorted` function on a column item to enable sorting by that column. + +It supports sorting asynchronously. However if you are not able to do return a +promise (eg. because the actual request is a side-effect), the sort will not +work properly. +Eg: the _direction_ argument for `onSorted(direction)` will lag behind. + +Example: +`click sort -> set filters -> useEffect on filter -> fetch -> rerender table` + +In this case you need to figure out the sort direction yourself. + ## Development This component was developed [using Bun for running & package management](https://bun.sh), [BiomeJS for formatting and linting](https://biomejs.dev) [and `vite` for hosting](https://vite.dev). Run it locally using `bun run dev`. diff --git a/bun.lockb b/bun.lockb old mode 100644 new mode 100755 index 0335c7d0d00f2724191b0174b5b047d653c80021..ddba82f4f080d11ee13142cee14675a84fc7d9ae GIT binary patch delta 13009 zcmeHOcUTlxzn)oH+(kh^L_k!)f)(jYb3w(%3R09+M3YrPK?Eaq4U784_(e_B6CK3l zvwS8ob_GGKV2>?WuwccAu_Z>0HBs;To1KA;@#a4F`EKrC&hxzUo?kiV{7#!W%pS^j zS)Q)4obT24g5%;W&qU3m!#^~dTje~8Q?w6L&svo9YSt${u6CcfU+%Vv=jdv>K;K-^ z)@Adg!%E|ru_@!mrKOC`NJ$+xGAnD8cLc{da9pkn*b!_g$-jh~>KmM&J<{Swm4Jce5ME)q^}bEi-M5Av?Q%AjhdW&X`*c167pVPE_O`f(%3M zsO}tR4Yu!LlB*$GLEZ(KcnjqE;Fz8q*BIOlOchLkomkV$lz$eO{NG+qWNksadvl!4 zTM8;hK(^3djWQK{M&eW*$2EX{hmLvFZS9*KZK}@zrVi;FV~Q&nOzmqSaWL#{AgiL; zl)BA~MX@ILZ@^R<^_L+do6D2rwqQHxL%_CFOajL_gXe&$+4Ut3>}Trl^z4-EVd(Eq z;7_d?1#S*b@6U0r;3&xM;Gu~e*Npl<772~HSI|gZpnU(*5byXc?Mvo0Soqt@(a(2&B-}lfI<3ySv&y0oANWrl zvQX8vVcNv64IPpXeBAcN-6M}ZEt6+ge!1sT?@z65v=>IX%$?WRc}wDylEKrfD=rUR zo8Qv?T-nj$jmCe^`0f7Ei4nmChi%SytAh|k9W=s{xqG!|wti|A)<`gvJTnAn)R7S! z7gr-Kf`lQHYn1rumR+vsL}U7TA^JFbq;5Ga=P_o`Hm+l58z7$uW~8X%-|O zNcC8iqelGzk`|JJRXJb(6w3ERvRR3e57ui4 zY!<8vo|7a=B}!pfvt&b=s9`#!Fi4in;1y&+0=w)Os;JYGC3V%RQ?Sl4RdefzzB?dM zY$yjgpGy+z2u6ou<)e`lH=>yjiAqImej4>LNK~VW8A3E_ODuh|)g?*Ul_WMeBvhS) z6nZ{aDYo?(Bs3|P!}w_wwo%NbyH*{8rvU|kK}C1Wg@lqRI0SGfyRkqivKZVj)&Y&pm!}5D-75UMu5_CD5 zx%AR1Qe#*WXlo412i57zDtl>_u^8mBY_M;r@)A-(?6Oa&x&mv}A7vqE^h`rc3RB63 zt{O%6IOYJ5 zA9Q5^tL&>)w;E`g3QFp2^?Q&4#b8KU1W6jDV2$!3q(rfPpCpdU6x+Qli6zBp6;(+r zAJlOWtBljC$Kp{Y71B|oUJWTgjL5yaMtu_!%{-n#QnXEGmGN3dW-@b0&?+`2vn0^H zWR{Zvq&!8*#5~e%0G_Q+Y-}W{y=46>Cch4nA2B^wI{~Ek zme>bO7cuEE$Ha@6x&b3ZuUrm~BJlzn#e%Sc#mk(Xp)pAMzmJWk8vectYRhkg!GYUrt*e}37Vqw0Gd?uO$L!^(tIw- zf5jB=BFWF3)ok9t#%i)I19;YPXk!*O)K={Dm6AU()xQc*0^b63nKPBJ1|Yw60A1!x z_VuFH#MF*Wl1xnPD3oNdk@k07898Pj_Fn<2;ECk-S8PQ-l!>kymKR=)!ep;?_@8A< zxL6`T1)`G5c^i|7CLysEZj{fK`k%U_p=59%D=uQvHVS^;cXM_87^Jm;#KGxF47*90;Zg27&1!Cchz)Y|iBOKJ*qGHm<{wAVn&e3K}J4 zFlU<0S1#|N)WI?!PMj>mmRXO;R@ez3OnL{Fc#4-0PI zju1{JgsgkwT>2;>x6Y)lB|Pn&UNv|HE)nZB-7M}bx%KS)Rm&}(6pt^@>))wV6ZM{V z|Bn}D9aDIZX|dr+`tnBuOTAkUHl81pP!j!KUf4N@a~TH%b}p@NRrkiu;-y~%W1oUD zRkh2wRJOIZIyFw)8_j7m51{VwJ~~*x>#?- zg`>Nk{PN9(#qrUd5ARP6bMImO$UU5paN}t{F)${ZBqfWQGy6j}OLFapbk6ae({wivBpYzW9F1z*H z7M$~P^mQs1&s`Pmad(>+Tz1k}PrdY?CE3q=%*mQiSXB6leQMs1oeLMO9hL9&_0xR; z%|G+7nAGpP?&^W7{*iv~Bkx6@?fv;~@5GcF-*ybQ-AsQbP#06Vd(6v?>!FR0+fb^u zd1&YK!;M*nM*+dc>QgOd7roveQ|gj=`}beH3Xh(tcIrMr=iadQuJi*JCM?ZSR>YV5 z;QZG7gmHPB7_Y0sJU zuAW&r(XZi-2WxYux^~ufXfW<-uWS3qrA~Ng+!r-&TgY4~Vk)@Iyx^j|pjFoD=<5%h zEW0@@ifQ6ee;#LX@4dQXjz2C6FK%=hR0KUjam1`eWaiJwbZzKlLoo$sD)Oyx@G>XUA?m>F+x6 zdgW-l@2kT%XqGMJ_=K0$uTRf@wS02@XA2kp62GHiS^ex4<5lU^fwuLB&&wE;_M}mK z!~2C(r`y}I&TE`lz}Gtd0Gs}`o;_P*&8i_CVm{yK+3K~{Y|%G5{ySC$X}~&b)_t{( zKgt%Y)-%<5YxWq@an|KqJ=+H9t8aDu_v`_rksGX8|1~=PBwMjY&zv?|Gv!(xf11Uu z)w9EpwnD04{5n0Gw8@&Ktkd!5*k(v=He0hs>vjAEW>~Lh=OG<{bdlL@(6iZFtl9Vt zI{q>%gA`O?&01~L@mJXg8};lKqzXt?%zcxdYLLGmfJ%BW_ z1nt|Z;~%gUThYGlXkU?zf5hU7&^}08Aw6b%G1|8S?JL&tPuXTjZFZu4+jRVMX4r=I zK{^2GH)dCY_U%IZN_6~7Rt70(H`=#d$G>JDY)AVbRczNOc%FIeNMw0?(7+u!MID}< zg4nARE!?S7D0wzxXCiwBu^M7sp84)dWUI^2#$7svnrGK{B`U0V7P320QIBT}cPH}o z+3nqW-kNpUqvvhd65JcG2e{j^-lclpj;+Amo;}CCA&V>1^A7A=+#4}|uby{g195N6 zHskKZ)cf?jGc(}s!b)&&!tD0zdDnup{RKAe@-OmtwWc3V>2Ff`*LlBi{3gom4j*OZ z_7=?bv`RUl8@vka4nO5td3h|Ut-AIx{h->X56h{jRI1}3BF|MZPsBNuazQ_Q0fJ^K zX`JOBeurhGd8KEYz7mK(0<$iM1{IW-JE3G$mV7~_{2|$t@pM60rJX-){tC9-&dF+w z3)V8O^GyW34c}SZufBS1x=7!^wA97-iY(J73~Jg;QsAZQOZjnfbgONqEA*-Abs?-mUK9M(+*ELw~r?S5S(|9SYLf0Mr5s!1T5?{RUwN z9aYvs@}q|>^$6)&N;>)~Lgi6q@@Fv>MTKj*n~AN$#{2mSUpeqigf_N(kdf-6-#GpO z^K@VaFbkm1Hy;5rfn0z-|4atxvydmy251Yk1KI-=JP#;ZQ+w@!X{d*Ge6)!O z20{RuAz?sgKnsKe5kME9D-a2E2YLYX>B|S`1b72(0LG)9_!X4CkXrJ>K|6kk@jX=b zKF}RV1BL^`fDeFF0E>f52Sx!SfRVsxAPdL@#sK4h@jwcY0gMFi+a+RJSQwgBsa4ZucVF(3eWz!G37@HsFCmg)g0WAS{zyoMbo^D7q1)2d(09U{TZ~*9=j3dw(Xb;erLHf!#4oCoKXOjk` z10w+g5Dlz>FHLKj#x&*Wn=`Gw`T(sr8-Ui>GK%yXPz4+TXp!v)4gj}-JHXGtec%`1 zEN~7u53B?J4J-#%0P}$b00ZU$?SNLmAXGFEppU8P7@D<<*WFa3tg-#(|3A6#|3Dg!`43q#nfP7#C zkMkGbA#oUZ1e^g{1C5Y@o*4AUuPs1N3VJdemwYO~WFtRflFMm|fUCeY;0NF? zKy!fFoPyO8J_|)hn@gQz%z+SN0n0{6u|EQ zWu|~-9R*;?;|9D2y#nX~Z2`~&n+NFOO%;<*T|llcUT!_j4_c12ENQOMe3IuIF)apq zHPY*z76naan&7lhX#Tl*;)d&Nj8NplAM}&AE%Lc46+gts%g4{lo0B&=^2sY${Ja9a ze7WMOP56#ZM)~-le1gh?mojql0YmwWRjoxnf+(NDsUaoxDt2UE-7E(SAR%@}0Fy)aCjMZ9PU~$B|Rz6ZzYw?!y$cN6z;vsetCm%g@ zwztpd*P_801@)2-x{o{5P1x_p_i>d^Pp+wd_SNfd75?ymojh)K6FT_wsjl)l%73j{ zc-OJfsgK|h1P@=lWx5L+{COwWitgh3Huu?!sU!Ce`1~sczZ;sy2)4Sr@I@f+WTZn_ zHjsx8+_(2%4VEhv{C#*df<``7+5hytmQ%892a2VO5q3fzYk2rrJ-FMhhl7QJZvqWo zBsC{AV><0!>3n3L1M>KrVwTTzzRch^jq!-A6fHhpN;C(dszwJ)SNb z1D60~_8|{(yOi71qpC%z+M@)PK$E3gPvIEyy2?jI*Jb$>X8b(tU+}v(``2aF3O)zZ&dVQfSj1irv75ylXc`IhVhr*sq`q=}OMp@svWI+9_1^HL z{+Gi_BN0ZhmoJUT?%qN<%5s&Dn8xO0?7XzOU>!U(ra-So2^JcRyL|XGqS4j7kUgpo z;o)oY*r5|LG`z1u6)h~+piS~Q%%cU(qr%gB&lJn@4e$!)x#1`b0YwBOhkQ_!OWnQyr}-aT5<^GucrV5Z*FxYK5-WTP&p`RCs{gck zc@L*;xnc@1&?|tGPqhx5vTE1kMprh-7H^z;6)pv%`FXK|EtU06tk5n5a#5@>B!rJt z9F7%Mh43MYH|i3Ghw)Ap8XUV7vk5Vsc^BdRP=2K3=pbAP<(Dh!CkVN4bd^uxPJXcU z{KfE{IjG;;%g@UgQ(VecvEwb{_$C_3%kR4e^>dO@2x^kWB13 zSeOrepnPC=U8Q3{*^`))^gs-zMaaoVdK)|v7B|;^zr5CxK3KRydF4aECj$$*?m6*r zNUeu_OnBG2Ug56#pk=j|g26(EF1%Aq`CxJX&mv}Qh`QdQ*2Ar@>AkkRuQ0L;Uusn@ z$)THyeY^5@;Wk6lGCRqyG_PSo+;qOFr!05sSYzrazT>>cjhI3i(lUpqO!5+)jq;lk z&T_J&>5WI;HLBr;u@loWI~vB04)lLhImt|wk(N1r(i?6jow--)*p!r^*~8&C%Dg;T zZSI;iCMDD4YVIj(%{>v{@T`g1Z&WU8;VG1*@vdIdzZ-NkGnlvCOileDtPpsQn(ahQ zCb1vhmQ6I&WUTE{vw+RBnW<|s)z&6k|5V!_3^f^RYcuOe^V-bRHJNH_ldXTM?GJ{U zjO}ZtLCyG@*Hxpe$xs`f*(CXMmOu7j$C_HC8HjN-&r_?dspn7g^G^*jpUjjE@8aU{ J>HLDG{{@+o;++5h delta 10172 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 diff --git a/dist/components/table/table.d.ts b/dist/components/table/table.d.ts index e168a4b..4a05628 100644 --- a/dist/components/table/table.d.ts +++ b/dist/components/table/table.d.ts @@ -42,5 +42,5 @@ type TableProps = Readonly<{ /** An element that renders its `data` in a grid-like fashion, with native * HTML table elements underneath to keep it accessible. */ -declare const Table: ({ data, columns, makeKey, className, empty }: TableProps) => import("react/jsx-runtime").JSX.Element; +declare const Table: ({ data, columns, makeKey, className, empty, }: TableProps) => import("react/jsx-runtime").JSX.Element; export default Table; diff --git a/dist/components/table/table.js b/dist/components/table/table.js index 4b54b3a..fe4b46a 100644 --- a/dist/components/table/table.js +++ b/dist/components/table/table.js @@ -1,52 +1,50 @@ -import { jsxs as p, jsx as r } from "react/jsx-runtime"; -import b from "classnames"; -import { useState as u } from "react"; -import '../../assets/table.css';const k = "_table_1hpbm_1", _ = "_sticky_1hpbm_39", x = "_header_1hpbm_45", a = { - table: k, - sticky: _, - header: x -}, C = ({ +import { jsxs as b, jsx as n } from "react/jsx-runtime"; +import k from "classnames"; +import { useState as _ } from "react"; +import '../../assets/table.css';const u = "_table_1hpbm_1", x = "_sticky_1hpbm_39", D = "_header_1hpbm_45", a = { + table: u, + sticky: x, + header: D +}, m = ({ data: i, columns: t, - makeKey: n, + makeKey: r, className: o, - empty: f + empty: h }) => { - const [d, h] = m(t); - return /* @__PURE__ */ p( + const [d, S] = N(t); + return /* @__PURE__ */ b( "table", { cellSpacing: "0", - className: b([a.table, o]), + className: k([a.table, o]), style: { - // @ts-ignore Typescript doesnt like custom css vars "--columns": t.length }, children: [ - /* @__PURE__ */ r("thead", { children: /* @__PURE__ */ r("tr", { children: t.map((e, c) => { - const s = c === (d == null ? void 0 : d.index), S = d == null ? void 0 : d.direction, y = e.onSorted ? "button" : "div"; - return /* @__PURE__ */ r( + /* @__PURE__ */ n("thead", { children: /* @__PURE__ */ n("tr", { children: t.map((e, c) => { + const s = c === (d == null ? void 0 : d.index), y = d == null ? void 0 : d.direction, p = e.onSorted ? "button" : "div"; + return /* @__PURE__ */ n( "th", { scope: "col", className: e.sticky ? a.sticky : void 0, - children: /* @__PURE__ */ r( - y, + children: /* @__PURE__ */ n( + p, { type: e.onSorted && "button", className: a.header, onClick: e.onSorted ? async () => { + var f; const l = !s || (d == null ? void 0 : d.direction) !== "Desc" ? "Desc" : "Asc"; - await e.onSorted( - l - ), h({ + await ((f = e.onSorted) == null ? void 0 : f.call(e, l)), S({ index: c, direction: l }); } : void 0, children: typeof e.title == "function" ? e.title({ isSortedColumn: s, - direction: S + direction: y }) : e.title } ) @@ -54,31 +52,31 @@ import '../../assets/table.css';const k = "_table_1hpbm_1", _ = "_sticky_1hpbm_3 e.key ); }) }) }), - /* @__PURE__ */ r("tbody", { children: i != null && i.length ? i.map((e, c) => /* @__PURE__ */ r("tr", { children: t.map((s) => /* @__PURE__ */ r( + /* @__PURE__ */ n("tbody", { children: i != null && i.length ? i.map((e, c) => /* @__PURE__ */ n("tr", { children: t.map((s) => /* @__PURE__ */ n( "td", { className: s.sticky ? a.sticky : void 0, children: s.render(e) }, s.key - )) }, n(e, c))) : f }) + )) }, r(e, c))) : h }) ] } ); -}, m = (i) => u(() => { +}, N = (i) => _(() => { const t = i.findIndex( (o) => o.defaultSorted ); if (t === -1) return; - const n = i[t]; - return n.onSorted ? { - direction: n.defaultSorted === !0 ? "Desc" : n.defaultSorted || "Desc", + const r = i[t]; + return r.onSorted ? { + direction: r.defaultSorted === !0 ? "Desc" : r.defaultSorted || "Desc", index: t } : { index: t, - direction: typeof n.defaultSorted == "string" ? n.defaultSorted : void 0 + direction: typeof r.defaultSorted == "string" ? r.defaultSorted : void 0 }; }); export { - C as default + m as default }; diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..5e32d47 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,7 @@ +pre-commit: + parallel: true + jobs: + - run: bun run biome check --no-errors-on-unmatched --files-ignore-unknown=true {staged_files} + - run: bun run prettier --check {staged_files} + glob: "**/*.{s,}css" + diff --git a/lib/components/table/table-sort-button.module.scss b/lib/components/table/table-sort-button.module.scss index 8715bdf..e482625 100644 --- a/lib/components/table/table-sort-button.module.scss +++ b/lib/components/table/table-sort-button.module.scss @@ -1,17 +1,17 @@ .button { - transition: all 0.1s ease; - opacity: 0.5; - display: inline-block; + transition: all 0.1s ease; + opacity: 0.5; + display: inline-block; } .sorted { - opacity: 1; + opacity: 1; } .desc { - transform: rotateX(0deg); + transform: rotateX(0deg); } .asc { - transform: rotateX(180deg); + transform: rotateX(180deg); } diff --git a/lib/components/table/table-sort-button.tsx b/lib/components/table/table-sort-button.tsx index 501c939..1a7fa76 100644 --- a/lib/components/table/table-sort-button.tsx +++ b/lib/components/table/table-sort-button.tsx @@ -1,6 +1,6 @@ import classNames from "classnames"; -import { ReactNode } from "react"; -import { ColumnState } from "./table"; +import type { ReactNode } from "react"; +import type { ColumnState } from "./table"; import style from "./table-sort-button.module.scss"; type TableSortButtonProps = Readonly<{ @@ -8,17 +8,14 @@ type TableSortButtonProps = Readonly<{ children?: ReactNode; }>; -const TableSortButton = ({ - state, - children -}: TableSortButtonProps) => ( +const TableSortButton = ({ state, children }: TableSortButtonProps) => (
+ state.direction && style[state.direction.toLowerCase()], + ])} + > {children}
); diff --git a/lib/components/table/table.module.scss b/lib/components/table/table.module.scss index 4332c19..0425adc 100644 --- a/lib/components/table/table.module.scss +++ b/lib/components/table/table.module.scss @@ -1,62 +1,59 @@ .table { - display: grid; - grid-template-columns: repeat( - var(--columns), - minmax(max-content, 1fr) - ); - place-items: center; - overflow-x: auto; - grid-auto-rows: min-content; - - // Prevent depth/z-plane fighting - isolation: isolate; - - thead, - tbody { - display: contents; - } - - tr { - display: grid; - grid-template-columns: subgrid; - grid-column: 1 / -1; - - &:hover td { - background-color: var(--color-primary-095); - } - } - - td { - padding: var(--space-x-small) var(--space-small); - display: flex; - flex-direction: row; - align-items: center; - } - - th { - padding: var(--space-small) 0; - font-weight: unset; - background-color: var(--color-primary-095); - border-bottom: 2px solid var(--color-neutral-080); - } - - td { - background: var(--color-white); - border-bottom: 2px solid var(--color-neutral-090); - font: var(--font-body-small-regular); - } + display: grid; + grid-template-columns: repeat(var(--columns), minmax(max-content, 1fr)); + place-items: center; + overflow-x: auto; + grid-auto-rows: min-content; + + // Prevent depth/z-plane fighting + isolation: isolate; + + thead, + tbody { + display: contents; + } + + tr { + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / -1; + + &:hover td { + background-color: var(--color-primary-095); + } + } + + td { + padding: var(--space-x-small) var(--space-small); + display: flex; + flex-direction: row; + align-items: center; + } + + th { + padding: var(--space-small) 0; + font-weight: unset; + background-color: var(--color-primary-095); + border-bottom: 2px solid var(--color-neutral-080); + } + + td { + background: var(--color-white); + border-bottom: 2px solid var(--color-neutral-090); + font: var(--font-body-small-regular); + } } .sticky { - position: sticky; - inset-inline-start: 0; - z-index: 1; + position: sticky; + inset-inline-start: 0; + z-index: 1; } .header { - width: 100%; - border: none; - background: none; - text-align: start; - padding: 0; + width: 100%; + border: none; + background: none; + text-align: start; + padding: 0; } diff --git a/lib/components/table/table.tsx b/lib/components/table/table.tsx index 2adcd97..cc3d30c 100644 --- a/lib/components/table/table.tsx +++ b/lib/components/table/table.tsx @@ -1,5 +1,5 @@ import classNames from "classnames"; -import { ReactNode, useState } from "react"; +import { type ReactNode, useState } from "react"; import style from "./table.module.scss"; export type OrderDirection = "Asc" | "Desc"; @@ -17,9 +17,7 @@ export type TableColumn = Readonly<{ * * Can be any react node. */ - title: - | ((state: ColumnState) => ReactNode) - | ReactNode; + title: ((state: ColumnState) => ReactNode) | ReactNode; /** How to render the table cells. * @@ -28,9 +26,7 @@ export type TableColumn = Readonly<{ render: (cell: T) => ReactNode; /** The function to call when a column title is clicked to start sorting. */ - onSorted?: ( - direction: OrderDirection - ) => Promise | void; + onSorted?: (direction: OrderDirection) => Promise | void; /** Whether this column is sorted by default. * @@ -67,7 +63,7 @@ const Table = ({ columns, makeKey, className, - empty + empty, }: TableProps) => { const [sort, setSort] = useSort(columns); @@ -75,29 +71,25 @@ const Table = ({ + style={ + { + "--columns": columns.length, + } as React.CSSProperties + } + > {columns.map((column, columnIndex) => { - const isSortedColumn = - columnIndex === sort?.index; + const isSortedColumn = columnIndex === sort?.index; const direction = sort?.direction; - const Header = column.onSorted - ? "button" - : "div"; + const Header = column.onSorted ? "button" : "div"; return ( @@ -137,19 +127,16 @@ const Table = ({ ? empty : data.map((row, i) => ( - {columns.map(column => ( + {columns.map((column) => ( ))} - ))} + ))}
+ className={column.sticky ? style.sticky : undefined} + >
({ column.onSorted ? async () => { const newDirection = - !isSortedColumn || - sort?.direction !== "Desc" + !isSortedColumn || sort?.direction !== "Desc" ? "Desc" : "Asc"; - await column.onSorted!( - newDirection - ); + await column.onSorted?.(newDirection); setSort({ index: columnIndex, - direction: newDirection + direction: newDirection, }); - } + } : undefined - }> + } + > {typeof column.title === "function" ? column.title({ isSortedColumn, - direction - }) + direction, + }) : column.title}
+ className={column.sticky ? style.sticky : undefined} + > {column.render(row)}
); @@ -157,9 +144,7 @@ const Table = ({ export default Table; -const useSort = ( - columns: TableProps["columns"] -) => +const useSort = (columns: TableProps["columns"]) => useState< | Readonly<{ index?: number; @@ -168,30 +153,27 @@ const useSort = ( | undefined >(() => { const defaultSortedColumnIndex = columns.findIndex( - column => column.defaultSorted + (column) => column.defaultSorted, ); if (defaultSortedColumnIndex === -1) return; - const defaultSortedColumn = - columns[defaultSortedColumnIndex]!; + const defaultSortedColumn = columns[defaultSortedColumnIndex]; if (defaultSortedColumn.onSorted) { const direction = defaultSortedColumn.defaultSorted === true ? "Desc" - : defaultSortedColumn.defaultSorted || - "Desc"; + : defaultSortedColumn.defaultSorted || "Desc"; return { direction, - index: defaultSortedColumnIndex + index: defaultSortedColumnIndex, }; } return { index: defaultSortedColumnIndex, direction: - typeof defaultSortedColumn.defaultSorted === - "string" + typeof defaultSortedColumn.defaultSorted === "string" ? defaultSortedColumn.defaultSorted - : undefined + : undefined, }; }); diff --git a/lib/main.ts b/lib/main.ts index 03aa356..890cfbf 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -2,6 +2,6 @@ export { default as Table, type ColumnState, type OrderDirection, - type TableColumn + type TableColumn, } from "./components/table/table"; export { default as TableSortButton } from "./components/table/table-sort-button"; diff --git a/package.json b/package.json index 8d07ca0..00583da 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,12 @@ { "name": "react-table", "private": false, - "version": "1.0.0", + "version": "1.0.2", "type": "module", "main": "dist/main.js", "types": "dist/main.d.ts", - "files": [ - "dist" - ], - "sideEffects": [ - "**/*.css" - ], + "files": ["dist"], + "sideEffects": ["**/*.css"], "scripts": { "dev": "vite", "format": "bunx biome check --write --unsafe src", @@ -30,6 +26,8 @@ "@types/react-dom": "^18.3.5", "@vitejs/plugin-react": "^4.3.4", "glob": "^11.0.1", + "lefthook": "^1.13.0", + "prettier": "^3.6.2", "typescript": "~5.6.2", "vite": "^6.0.5", "vite-plugin-dts": "^4.5.0", diff --git a/src/main.tsx b/src/main.tsx index e86d14b..ac9fad8 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -51,6 +51,7 @@ const App = () => { Title v ), + defaultSorted: true, render: (post) => post.title, onSorted: (dir) => { setParams((params) => { diff --git a/vite.config.ts b/vite.config.ts index aa72984..f787253 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,7 @@ -import react from "@vitejs/plugin-react"; -import { glob } from "glob"; import * as Path from "node:path"; import * as NodeUrl from "node:url"; +import react from "@vitejs/plugin-react"; +import { glob } from "glob"; import { defineConfig } from "vite"; import dts from "vite-plugin-dts"; import { libInjectCss } from "vite-plugin-lib-inject-css"; @@ -9,49 +9,35 @@ import { libInjectCss } from "vite-plugin-lib-inject-css"; // https://dev.to/receter/how-to-create-a-react-component-library-using-vites-library-mode-4lma // https://vite.dev/config/ export default defineConfig({ - plugins: [ - react(), - dts({ include: ["lib"] }), - libInjectCss() - ], + plugins: [react(), dts({ include: ["lib"] }), libInjectCss()], server: { - open: true + open: true, }, build: { copyPublicDir: false, rollupOptions: { - external: [ - "classnames", - "react", - "react-dom", - "react/jsx-runtime" - ], + external: ["classnames", "react", "react-dom", "react/jsx-runtime"], input: Object.fromEntries( glob .sync("lib/**/*.{ts,tsx}", { - ignore: ["lib/**/*.d.ts"] + ignore: ["lib/**/*.d.ts"], }) .map((file: string) => [ Path.relative( "lib", - file.slice( - 0, - file.length - Path.extname(file).length - ) + file.slice(0, file.length - Path.extname(file).length), ), - NodeUrl.fileURLToPath( - new URL(file, import.meta.url) - ) - ]) + NodeUrl.fileURLToPath(new URL(file, import.meta.url)), + ]), ), output: { assetFileNames: "assets/[name][extname]", - entryFileNames: "[name].js" - } + entryFileNames: "[name].js", + }, }, lib: { entry: Path.resolve(__dirname, "lib/main.ts"), - formats: ["es"] - } - } + formats: ["es"], + }, + }, }); From aae3a1659c4bc6594ecf6bb7f8ef930974355c14 Mon Sep 17 00:00:00 2001 From: Jorn Luiten Date: Wed, 17 Sep 2025 11:16:22 +0200 Subject: [PATCH 2/3] update some packages and fix by new biome version --- biome.json | 8 +++----- bun.lockb | Bin 110803 -> 117501 bytes lib/components/table/table.tsx | 1 - lib/main.ts | 2 +- package.json | 30 +++++++++++++++++------------- tsconfig.json | 2 +- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/biome.json b/biome.json index 9541a13..0ca97eb 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", "vcs": { "enabled": false, "clientKind": "git", @@ -7,15 +7,13 @@ }, "files": { "ignoreUnknown": false, - "ignore": ["node_modules", "dist"] + "includes": ["**", "!**/node_modules", "!**/dist"] }, "formatter": { "enabled": true, "indentStyle": "tab" }, - "organizeImports": { - "enabled": true - }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, "linter": { "enabled": true, "rules": { diff --git a/bun.lockb b/bun.lockb index ddba82f4f080d11ee13142cee14675a84fc7d9ae..e16e25647776548b842126772fa0a8e87085dec2 100755 GIT binary patch delta 35835 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 F{{kTtH9!CW delta 32204 zcmeFacT^P5_Afd;!~sU4WE3Sz&QU-V1O!BKP>`IH1PLkwqKE+%TWnB7P%&Tv3>Xm! z3YbyMD5xkPV$SLAnwf^d?>Xmp-+Oo6_5L`$_^^BLs@k<{SL~jds$V61xB7TD>P)*Y zxg|->$Mi${vx)2aWa21P&FQp)l7Qa@YxLzsH%#f7Rf|#3rBLiUnL16jE^`Kk-@_Cc z>qICNF$yI&3#d5I2%r)`J=t;_Ha`uhB*-O!qIek4i9p{7v(i5Viqf?KMe*v`{8pe+ zz^`D-7Xd}-16kpWTxYmJ2AHx0xl@251rvaxh~Fl#GU^A4GPn*Dg`Z*b`+=hLDM|71 z>B$s|yet$FcnVN?pf6-7=r*?lD3aF#g}>ZQ@NW`@LCH;o8)Xp81*!;CgUt&uBT#Y& zr7098kY55i73e;olYy>g(>S1$fOi9mGSp+sCD{BoD83xXhk??8z7(QR;4gRo6p%CE z=00#xh+GrM1u2$d({GR)Qv8rj8-bz{RI%wwpeVywpeO@(pkQ-u5L7cbFV_pG08nW) z3WWxA7n>%Bq(w(SSVDY!7UWN%q(>$pLJ0{=N=XD7mXsJ7nv_Y2ONviQiAhZhj|feV z0(n9zibbLDgCeN@+|R0P*K4pci~x#CxBw{1aF!-ZUJ4Wy(2X5#2UHMv0}b#$syn7R zp!kRuE8!G~APVwuZB_=Cfg;5biD@xuF%hYaY<`yx%az=^tg0CV9(jTe=}}wJ(PQc9 z2Sbs*OTY^N?E)UPt>=7Deq`xs5I}Y1?lWMy+zBXhZIL0%(vaB2%#y1au@p-HMGAO; zB3GxU#AwHYcaqZ+v%-?XBk~{}s^ip%gvAjlaBsrOCo3dA9vn(ZiAYU~UmQW{Wk3L` z^E*J1W$i$btD-|vlQI&a<(jcd9vhp^G+;5?pvYA1h|IK<5E*k;MzN_-XEE^+6M#pq zm4*VKZl?d@Qz%|wK8lx|5|IW~m=YfmnHHUt#E8?I!E&iA zP-Gb|n}2J=;vWH(0Qp5We+;M?@Re+N5l~csOrU5$ii%GPg}f*)X0Z%Uh)Ik|4oOWV ztKbI6Q9dk#q5oe30crzr_AFP6&1Uiaz$1�gq@s@TgAbIzRjkQ&McRoamF9;sWMVsS^0$kMGkSB%d*QH zC@P>5o0>zoI`I5Jk)33lL`?>=r$j|0re-CEQBKTb>Ddbu)hu#kNPH@#l+8~AiaL=6 zP!S4+k*nm%8gJGDMQu%pO--P#QBB0AMx=&825TU}1mNRl03O~BJZo&!_@joc}4gCdeuOZF}aP>c*{c4M_+aVR-- z@LWAGMg%B~_RMth^I0VdOHED7N{&G7omq1|AV)327ji=$3thm9uLu;$Ay3K#E4aB9 z$QqH40!8D_R-kAEUJeuuC$Vhm2~-MrE1;-q)B=wV(X27tQBaX#;&SCg)uvGztCU2Ph8633vM~A6kD{l&_HyVPv2>e&_eEm(F;W_GPUBQ_&&76 z&VIQi?R}Na=QE*_KWV~~B|gUo@BDM8_>`@Nn7Sdh_F2`)S?f6D{+3o)mr?=#{}c+pH5aZnwk&Y(-#4OSdpd`WNS)`bnc!qf^m zz0P!AzM(0vAiB4mZyqswAffs3;R+>Gib!H8Xv==dRDE81>0^ zUfg}Gwfp$p4UYQ=X^HoF2^x6sglPU|#@xQ7Cuf3iM`1_Bmb-Stc`uhJdj}8y`Mxpa z^A&ZuzSnb#YD`~zo>><=gMnw#oABHT(t2rDjH6Ze`yRO+x|#9%u8i@$1=CGx0_R5C zw}gdVRr`>FKZ-t0_j}m6|KMU;aHwSu?l?hF@A>d)*(SwbHz!k{2Dy)nB>SHq;VFOo zTD_xa=>#cicV^Sm#a7$R=ic6-lB=b;G9nZg5h>&+Bjcqa_xSe|i(FVvS-KRj6;pIn zRg^THywtnr*tba!Hs)5Goaof=L*JzQ%pxT;$V&P^MzE}#X}OQ!)mH;sw|eTfxX6A@ zc)j0w>KdKKlR7gE)VpT7dAqq5;f*-In7Vr3@2iK^jp(JXJmy%xdhYSc;c2|R#)XDc z{@J_FeVX|AaM1m?I&&*!SL3;&e$tf4#@5#x7d={b)-%`g!m6IjM<>s*iFL}y?}^Qr zx9f6g){fY&n4RVE`xdpR9`@caWBK7ZPnAw@jgWTO9NTj4prehvui1{9CP!zUzxF=J zMteVh?1M>fgg+2lCR<;xJorG;_`>J8H~YUC#ywZ!qT<2gUYIwoZ>)(|it`^G5Z}m; zf0fY_<%iy;51oS-dKbC`@epw}6a`y?56aunjzYKzg!AL?#7${~z`+!hi{Xo;OlgKN zzQ9zR%Z2Ovn$lB%GX)N5k;dOyXyUz=G$H8ucH@N-Od$;495Eq3x;hMVFo<(Vdu?e# zARM1QScfSb9}}hj2~l0frLUYu6M~^_d{&BTOd*W!966!%_aN%{tdLY5X1Vcs1xwL{ zK=@Zy5ViInQIUeLAcZ-BBeP(0nh?yb|5UIEq~ncc+6B__79go247KB}MRtMkpHUBj z^q-l11?fLCvxb3kylaB(XhIS0dX+APQjEe3C}{7z)|2* z#OsWhV-4L~iDlk+Y5hN>ie@w+WmeUVj~e?grEMTZMvsp>N#$QjGeC-pGCuA#kfP=@ zUaF)@p}7AorKN!sbr)`CLABvo42^?4kd%*Xy0jROTA-B7vGO3B!|-=7R=xnv0K%yF zI|Wm!v^uUa)0*a}PNC?45TfXt@dINB3_o6{Yf7z$7_+RY1L}CqENhzLG*)VEe36_f z%>y_smM%S0S`Kii$MNEeWX!N>_>hG)El-1GEmVuNDeV$)Ga&{A*Vi|t(lqfJOKX~k zCMyb+8D$S}b`S+D0rQ45@!09sRBbK121t|^J~Z8$b`r8gxk3~RQ`&R5MP+3s;F+Wi z%J4(eEqNBhog=!V-Ge)nE3?EjStutwRk8d>jnctmt*v>EfY1U@u(qVB>QX3?5DdyJBGN1o;A(V zh(ehMLJZe8Fr}>p4vp@tYQ1lS59wJ`CmZ7$`qn(2Fu0lFuca($YvFFjXqtP#K{6=o zA{|reL=#-Yz?$Y}!kTBfky`3T6TAk5e?W-5!pw^rVTx-QT2re`@mND^+6z;b7M6R} zz_-ZRP~ozsJTbuO;0bb;Gy?8W5m;)w&F~r{YnqBV%N%CaQzOiA4P$HSc5^%y$Rl%n z$kdvuZh>o9~f8HMLh92z`WG5f}anLq`(j)vs}Hx~0Y zaPZv3PNxLVqG+ySX(<2>+H$TSv!}iT4%H}?+5U8)29S68P`%TlfJ5W2AnL`moxphk z2W`UKjGrAOz;uYdJ?bK~Ona6$VQ~lXr^EP$x-=hCa~^QWgWxD>Q=UtR!w*SYQn?)P zAt!5E1o$2G7+Cv3H#h?vGK!zcePeSlRvLjTVQ@lClQqz61dd&~Fp69O4rK}Hj7@30 zPOLC6z}S>$CgN~yV@p~N+=0(?d6ywsgp>A-QIB^@{@A=|0#z#)rSWfO2=xtQ7NX$yd3kK>MJ{G$vw zf!+ih%8r{tp+ID2+olOYjYEy)f{ZeO9EGSou6V3Jbg#L14Upq=@gX2wZn#E(HEkZW zgA_=?913|J0cXY>BD-PKLBj@=4dxSZXgh2>oJ^_q?zo1ZHElTv!3b6{c&-6AgPC*! zbUD;Y1o1^?rnK3>%^)+N7XXLc$p;3?k_OT{L5f_!lGZ7(`ss8}e8|U|wiDVWI1~9* z)|5KziEH>;^Eg9On~lGgv7~KUn8StBdx0?>tmM|Gk>w%3Ek4?^a6j0S#s zFL2?bQP|nia-pFGAt^J?W8hF-jWWXm}zlJ5ra0QR%PIVsXx13>W(vcp*v{Eu!> zghT8AL{Z6W**v1Cu1u75?54Ud_jEQ$)*%jOY9wmfI^h$4OffZ`1S(1j?{^BREi z8-cgpK$tho1n-#~g@P!G@PW<$D~iHD0#F8@+424p6+m%NB6N*XvS*A6Sm9$4{%4*S zqVPg`WC%Z7&%dH5hz9=<6@Y&zoe1(ja)~%QKmvurg(#9sv3X94MAGmNQ5kkPqA0#R zTdu&CBZ}mTZ2oV`Kmug>RCWYJQ34g9NTkY^b5bNyW6KdmCDCT{h@uW+02GM~+0+Oq z%EyFF&49wJz@Rw54Z8jlMHBN}c05Fpf$nVT1r%lI4-{oEA1JyIMe%~zJSRo*fDFohldpD2ow%8rL9(x1-e5k-6kPz<%dOtv7K9f6Y~ z(Gqs}GN6dhLI2nk-J&*x)(orI^8Y6kRUITe`XI>Qzq2&*1)8o|*Z*}&jz#||V^qce zouwe`jfM0&+$#0A0NRG>$z7pbJsN|96(=oUKs@`|m9M-&y+q zSFALKSlv5jSrjdRLT!_EUR{| zDlZUH8j)!B?9h*0KUZq4ZD)qBz{~z>UNu{u{x$C~Q>VbGU*}7fKG|_ltl1lS2}b!X z{2QnWvWXS?$hW?^<6C?bt<8B z{f7Gb{-4qU;>stt9^e%ab-jga=Snkv+^yU_@vKsEet+uYuAIDO)(czDzB@ec!vQt> zo&!(i-bAhSpC$O=h+c;NK3nfwPn(R3PdWIs=||l@Y#g5<xHdMz1&Q_+T_z3($B4< zZZ|8~cAC4hnXdoT+rJ6};%eOzYV@9MKU2LTo2PAsw(aMgBYXQ#dFD@9mvH;5!Y*ay z>j}Sa1$=0FB%SkW5n8Pynj1fCV2U_pyrhQ!jbxG*oqZFp)RQvDED{8 zu2&YWhE-~6Do1V}<<$<~lC`MlXW9d)_jeT*z0KA?=%c%DXXO(;MLheceXEnu6W)o* zF5#IGS8LiAd{&Z0&nvK6=cXXVdYpr^XV)m6|Xs8e>AQen9kIw#6c#(r{EQxcD9a$?bep z*ZP;5-TMqoXMVhg%N=Qb((0=|x3 zwn2GF=b+L}mR>5-Ys9J7c}B>M2^mSV`53wptqZh|#ixu&w^T_Oo|b+r*Hd^?>&PFm z?L$Pyf!%k7H`@kf^z_wHlrYNG`Y!_CCoa1&f15K)G5W3=dKEi*arZr68IW!@Nh`A6@c;nv0wVZ^!Ws2^!tG*WO0S?ETz6_0+UQYi@^p-DmTh;r8N|Xy$N--cIF^ z>rol&J~0*NG8LPQss&Hf%S}8?DSLT5?%sLTZH#bB{Q8vhXP+(dI2O00He_Fo`j(JR zHD`J8HLvspy`92qcbO;&Qra_~nwfb|5lI?YfgUyCkEz#`Lob87utRyI=1+6raKl|+eSd)1j2pWQM~`JK%Z%&BEV z)fo=O@Ug+@#m)a@M&x;Av5eU}S2Vm>;#sxn){MH=_1(5Fa(al13tVya@``5KN5-K; zg>hFFF3IF8-|y3{Rx51gaQvNkd+*M^3rxlQOpDD&)q*GLetbL@c4Otmxp@ZbALrVA zk##sVr}E^Iu3d%wKlop2VllDhIp=0PisOAd{b8OWuY#RmyO7j z{g%SC&6$s11rE`B<@JMfv8m zwaPam56C>mcR5>!F`m9{oOkM_V2+HF#(TjWTr!!4%KRlJ^HoN>b9RrG*fc+%%)KI+4#qoWu1yeE7?mQG!6S2pZ9 z_hZ}XA5mrZ>}Cx+ByyLxqgtWr{GT7#Cd3#0jqXtVrDN4Vv*ZFs;>m)VH3nyvw*OgFuzMk;!y*3g z(T@vv9xh#Rk*j-s=hT44MP;5`7thPRT^4ppk*S!Q`H*45sd$rB)Ap6+U)6S(m32MO zANgprDxjPH*}eHYG)y%)Gcy;yVveoR`qJ&wFG0*f)9>g z=AsuS@W+q-&EQnbx7#R$GGsV;*2tOml(r|O#2feJ12*SQB=TL@JhDLcgLhI1ejyIY|4L{sX_+XEGaS8suY(E%?mM80WdK{Vu}oQw**#6|*M) znVgDG#H&0N3#WZ>XquN%E_wF4x4{z)|Glzx%Zw%@r~hsfN$Dum+3s`yW-UN-GKx4-U% zQic7q4OTzpOY$Q(#!T3q(EM<~{dv{J)S2=No(iSaPBS`ICcwR*Wd&0&Yk_AsrWfYF zT9MnkB<*5%j(p-PiuL$;KJ)Eh^z}_6ddrIIUFY_XBt#1i4bE2gP5t&~@`&-Xi{WzC zzFTyu@*Tr}zO+dn7@WdXOyNgEvHh503U{>OrS|JB_ceT%Db4f_u4~U)zwb$G(y=YY zMLFlHhxBeq)%*DEkmFzG`-yt$e)gU#1zo>4Z?YZ?+}~dPIhnst$OFH+TAHz8pe_AF zeR93Xu=kqcBmNoLM{3s{UOvG&YuhTR{X8Yv7Wzu%g9^z{PDuFbPTWo1{=wslU-YT` zuEo!PSsB`Gf?0#vuu$K1;IwXwROkiaU5w743;DQQ!GnA|g;&i{cYak``W-8?+$sEA zxnbMYrRj4Rzb$T!^e1(+Esbc8xSE|MZyZ@r{!DOxRTo=vE+}>6RD5X8km8-Xo0hMp zPkbe@&nV=W{@s?C={;9XPO8S#Shb1IcjMbV;z^jFT=f37!F#^yGT~nBs`~EOglg9c z^(~HD*?LjmbsD!m%j2K(=DOyLvU7XQiH^6nA67c}D7MZPnQ|p^M@yf1*_kKN4qpNXFjb?No-oPfL9CyYAk1;k!?*`q)t8`7zV@r1ItasS8UU-+u5xSK|SC zU5imzQ>HVg;`|S%rj}|S64;O}IJ9%yi?k`r8Z*|4H`IiDaq~|ySoiTP<4}w7{szxn zQC-igMw3o1SUgLXZs6L6(`zQ2S~Per zUAl0cR=IhNjGJ}hxy>U=1D&%%KW=mJz?Wzqj3knRZocZg_0>o?U>oLgC*1vBKg$zL zy{?>kSClTSwMoGzEi2k~xQbue&3#2O<5p;o$Ud>if#-cYQ276H1VWKGcj#o!_ojWPQu$ez3W88E8&GXiEFQ+Yz zPztmPn8{;xX8SXrXKVPcmiAIK3XYbE)_r#idVIz){q%`yUN_$W7uK4cH9W#6)uR{p zz=Fyz%5qJcb2{w<-5yTO2#~)&JgG>h>Y31uE%#S1Q#tkM@iDp2RiDdx7X;HYbQz48 zDjU}}p6Xbw#fcq(+CHvKPq0=G9;0f(Vh{K5uX8P2i`83g5|`HJ^O<(Z)$hEOF)$=Y zx0i5`dV2Wmovd>`?)F})?+PMh+aD<>i9Xy;NF35P`dt5GWyu>3y`CI;8QhWIgx5&b z2X*&LRt?tO(@LFuDC%Ui!;U2LR|#hYo|ZdLJ3zd1G^$*>aP3Qh8nxS*4TIkvFWuYK zT$hyUgL7*NZoGYX<7wH; z1MeP(TxIJ;!=}%;^_gbz4*xetj?eD2qb)`eZFLzinK zKA)M?`IGwSq3Vy_bIXNfub(`c7rfwocimY0TX*ZPw!AXF_vgQkM^2kvzCn`c(C0 zM*L}}V%F5=hhNz1i}~Xnn|!eVdT~gX1Qy?S2 zt=>53&7+!~@~UozZ(#eqKfhPssGm{&-q2{8S`lq>KmmsZ%H9o=79Y0*6f+6E0I zH+?w7IDhu@o)hJ>KZdF3=W)N(w|~fguoPn|X1zQK<}|p^V-L5V=Z))Hw@)+$4sMvR z=si_`>Wg*CH7-B<_cL@?Ur!wR=y>zhO}zbcZC0ho#J87~*UroMX#CzN=%7qju*wKq zF>-MTr{WKfC(n40M|Wtp`CgiM^pWO~L;Ct!#n+Gch6KICho$BPW>DM=( zXHPn>-9BCw*1{jvb}CB!-D#1V+(<7>NzBDgD5v6uJW4J7$8Cd~tf%Kpx_CBL)Yc2Tn7dhq(wDuswk~T{x%W_0B}z!wW8lAGij!@3dG)n|(>V;Dee0Bj$Em z-GJm*S+Cy%jJ@KCw2iVvoux)ZrBj55bH!%r5>MCV&>P9AckQ<9LD6>;KDjcU**>B7xYgSAN#F0+Qxbn{C~>-Q*&n+H`=gGS ztbQGHdGCCsw0pHyzuwD<#w<`E6kYcGnpvq+`R~Z-2yVDk};a5VxDc52oU~OviOHL%GJatu<+CzD-1;AMnMa%jtN@0cUI(-UpoYb~3UkF?)UScHp)Hmxm7?^u;qP z=(y`4XDlBtJLHS2@1WzqfLn<>9rnfV0e9%IGqwu<23%n!9S=O>jIG8+L5o=x=!7@2 z7T4t zBgFqwW^)<;9Ufu3L500vh_$%8xITPEeDS_m}nJ{M&n^TsYB_t2e%*PH5IELOV#(wCMVsk((N1Zcr_34KfV-DLz3rmo$AK%xv8_;Vz(s6z#&En2xP80n_(XV1 zRf30XgL^L9YJ?T7jXZWpd!3H4S3^zU2bf+`6A9sQPQ`3)9Zv7X#hT+_9y6e!>5EA#YJYMRVRYiD#jPdq?)` zq?=0xs8skbP$&tv-Q4lj*yVZG<11)W2ka=J;dqnJ^POe zZQOIy=&Y|=%??xANQPbz|62NlwLTGda}InifB)TU-EWU_e0TT42(g&UQ*-7`kF7eF zG}Wqlb@gOk%b!2-qC?X7_9|!W2tHT^?mi3+6^c=Zm+b_10~b;4?0S?l$AS5xn4tcw zLy;{*8@kIM>fTuJ=E~x|c#R2HOhqn_w#D7|Idd+SrU`WPmF_GGG~N|dZLT|Kw$-G* zP&dMV>-U@Z_9N1aLd^~G`oRa&e@u>RRr(ea<6UtATB;p$P4yhilT2z#;Aoj*|lFi%) z>8oiS7c^g1&UH6*yIQZdv#_Y=+ouEgFVJdy+!;HC=NVsp4ZL%MI*0Y~gv3|Cm`nI&z5$-E12m_UTakaRVbA8F}bdLNwIrS!NQ*!uP zygtws_f}pPJLAgHg)<+GtTBsvAZ)NdVau<#X~wc{x`y`_CP}U1{*l%VOrFKy5by)FXR4ae6cHd9sIwF)6V*0*YFVde;q${7TWbGI<9ce8M}$coP%}^ z+*ROi;WCXdjGU(9%Nm`rZoC6HzcVmxoOj0V;#ucm7&!~m25|TBX-zPU09VxHj6KBf z0~dXc?xNjO`TlfM`$e7w(sui<{0zq~tX-aYN;~wY)@(iVXYJnG)7mb3Hx1s}J}cr! zW5fBaNym>2Drr>5)Jqh8b8l#4y+dTp?>+eH3osfr((%_9oUtdkc{7Ygz-@1K#`^F< z;4;rc=WKDtp5bLJ&=8vF3`fNc+}r%LZ%(&j{D`1vbyH;CZmnH2`Iwj3$ToN0n&9QO z`*ZYGYG`Ra>nSmK|MH=r1I2Lp%@XAo!z*YP!oPB^>H9e=W}W7X`t!%9*sb%_x>hWu zyWQt*&lc*Cu;+x@hmw7fb{1!*TN^}2UY1e6EjZ-5t6ZS_z4X0{llpu_WcUtP$?NYA z$FDX?;}g4_sV^ybXqOLOcmW1yU?H`CPWurTuW}>|oB7#w$+S zouqe73Q4n4>eb5iD~Y+-C10U@R!Tg$a!=a>y`k3)@%z90v7nr_kg0MC`?yCZYNqS0 zV_!4HCr(LJS^LN1j#ZvC-qS3NUu}1$zNX+cH+=BY78vMnI8)zH@SWFvaK~0Uzn#sL zH}tz_uv98rM$V=%bGOyHY4rtpzdqBm4AXwwRy#K{5$w&CnL+oWHI zn@gg59<2U4QoJ*l$6U9XZ+KQso{81G74I_!k=%A=jtX)WGleAAbXQ8XY@e7{ws6^5u1U7E!6Mm!RXJr*_BM8NbZIgh z{gYyR$8=8{gh0?Rx*>CY!xiKd!%IKC-t)Zehdm%>47+ zzxi5fwVU!+p4sT~;hgB28qJS;Ui0nbdK#6o)mwu;VWQsAowRjkgE^7>3puR&M8UUS z^TGWt!YqB+nfir-zXz885*_!x?o9ng!8cv?!B1YIGv3~Os{2H@URyQ(qiQg=<-!-9 z=;4zaLhe1gdskU)gnr5H^#}f1M!;}XKvuRR@5NhhmRb6{3GjDjRol-pYMlI$BhMe4 z_0{^O?o4HtW|W~=n!%Dv2d>(I&F+!TDHldAJB0hJ*FG1+#dTaEv`gmQr>1WMXyQbV5_xzKbWhckXqp<8w#Ob*&p)-XraYcPMwg9)x( zn~vr1mI_&17w0*;T_#R*-O}XF%_Fzaw=Bsgf#>D#UDUg7Su;b(^njma zfW(XHpBk1cAGx}D$*le~yg%@VnT(9|>ZUVz__?WbQoJ;l*-Csq#r@e|ZAz*&ey&3r zr(blYVi+E9(Ff1$q~qs+<-%}*OFp>zWjda4$(hQ7;irMU2dn~gYCa5)ZHEEr3Z3!9 zvFsRE@Aap*rmUH?=6mU`YZ(mJT|6tczv$a5TgKx%%e3{?vgpTOvQH@n)5<)H-u3wo zrKG%@-?cwKElW#Bn)R^P6IK@VJz-y^qT|6Rr6zKUX+Gw(0F=c=?z!@A|)e*{;|Rx+MiEu|2) zk>BC%N%37_jMsusKV&J0R%`2-)mGOxZR*O8=2Ee5&dSpA-caY0{oLOmef}E!|%I5O?(Yfm>adcCk~vGMT78a!)B&Kfl24 z)@h1K_Yx;A-CyfxR{Tu3;}CoNwdci^orf8>cOE&g_42(fKaT$438Yezjf33p>ha8( z#L<97@tfVSe7FwJ2zQ)a(ei`5xD%e-lQ`b!E^T|IZRE(Len0v3XNFTfpX^Rbn_u}V zC@}ZQ{8w>bw*-8-Rc{j3Ze*MHYhS8Hola`!qw|IEfnJ>(zWs(Y71mZ#$9Gxbufk2|V$kNneb+zI*OD>J z`!qvklAB(Dg_K22)M4RW=NG8=b}|@E)DSA`VTAQYMv_x;u4CwLqr8>d_q^ioez{Eg z^7S1iRcEL3?={SxIIOk)$6ix@$MgZmquUY^73LdwiDH9dLT`)PiAvsJ&F`~zTcIzd zqt9m1ixVk~<2@*M{JeOp*sF~Wa}M4p%@oMFShOmurC_?yx%o;dd|x{&GPdWNXU@-i z_z5=*zVqbWEvjsUg42Qi;LPG%Ua}#RmZq{5=YnEsPJ>VQ^y#>52`sB@UM|p-!Y3l> z)gn{<`k2#lSE&arjQ7S0U0*U3W*;U_&y%sIrVsn@${Fun;?R32dCs1o{@&}Btk%GC zG5I3`)CRbhZj!w9^xkRHFb}HJ8NP!yc}j{h4AYN~%$K#F&Fh%)kW%w$F@K8s@{Zgu zxo&d%?qfzLC+XImU$L88Laf0v^EWaWz4St^kmaBDHzp*X< z*|n)fAE$p$ncBs_Zuy(w?io5K*^1HYKlJkn^5QNLS$+OfXpet#SwptwkjRaF&hkwL zwNF%natmK)tRf`0u6MOKQ`hKm!Nbzkm3l2Sw0}*RPuNzaqiVdfR+q*JHN(yx&PiiDfpoT zhz+Uuyq<7e;;96lE2jwecFbtx9&?M;;d`qPO^%rwuY3`VCyPsLddbb>0pG8hi1!Vi zXU0DW-!Y<7D7mMAih}eqlH&5u_<1hFS7YdS)d2cIC}hvxQEerBuLW5J*@HgZs9!<_ z8BK0G_6oi+0FKK=GWHf^afUXqy%VWgfZRW9@vNhd2TfR7AOnG!@F5-iCMVa$1%Etv znzTZOX$4y$xuX^hJ`@rFg->wBH@t$ZO|XjL;}IIjmY|f9B-W0^b~6@Xp^vAer4v@5yb^#HJI%Iv5Y*_aD{;2`FeJ zN9`gPF>oOs{SX9Yl8*#%vA%%El3TJH5$mZAx)g+;WyWItt_P*#0iY*y6cr6bh@#(O zoMOos%pd+BAs;{zfG#uuAQ}32nw$zz-$e>(0Q7u{F4R5HEx4CyERvy?jf@rqTt))8 zCbQ!S!F@Xb8LG&XK?jCLLb(k|XKn@{0TGY^=!Zh^hknFEK`%8?X6(<;nV*#+ zk06;cJDw=qBYh|{^2bH|?EY4Xa)nD^db**3wW5(CVP%Mk6GA$e9Rqz8ArG(|Pyj&d zu$6#(KrSE~kOe?r3PCT%)dAB08URfIG7^1sKm~9C&|7&Pz-I{h0{9Ll{e1DFFW z0H|e52Ur2D0XBdc09(LJfE~adFdL8#&GfFHV4uD>fM*|W7Nq|H&1t!By8Xz5jdR{yr1rP#g z0-zUO#{j5roCh=l&H+vUP6AE?>HzhCLx978BY-Uc0#FJl18f6q2CN0F11tt)D#E`E zz*0aCAPbNU0J|v5085DbdYGFPTEC$=7Cp&&0=xh*fLK5@AOzqFsDUJ?b)(jdTD|~4 zkSNx{#2Gsvs29)&=menN)e2|>3<8D#BY-!6w}3lv>Cozb+8#uL=B(9qBiiC+R<0G z0iOW(0o4FCKoX>bMGW&Nr4N8t2cV&68qfy7DZm-PRzMWyMWJ-SO*`NN;5I-NfR=4& zs6d0D2mlQcXh^uqj?)bkg`s$eBK`(y<8TeD5;}(1RBd#Rbf5tjeGZDoJX8qeU1S7m zB*-A-p$H<&5ZfV&8nHhB*^I8m?9V@&N?^q#x-i1o)wtDDoNrQd|vm58wpgD4-0m1%SFDDn$|C5TFLI4}iKI zijUHvuqr?$Uh-2819i?WW;{J0RS=(<$*dM8efh87-(=orKtrR10c5^2ebg10T%#G zfb)Pxz&XHK0O|;*0jN`T0y+Q}0quY`z$G@1s_HV}9^g9Q4&W*Pwfif``CV{>0+8?; zo8AO^18@s~I@Ut~Qh*ZQWzz>h?*kqKdH_!WeSjx`UcfWJD*zg?hJd~R^aE4?s7>Sn z22te?z|Bjx5CxEdXu?4X(4_ML=tsaWzz@K808;QC@D_m5ya6NuMgXq?!vHcJ85hMv zaoz!#`9S{6NK=5S15hjd1|W_20{5Q)p8)}YuWX8BD037K8SoQ;(jtRN88QIPmK4Ar zAin`TaL)}uD+07Sh(*f-lrf6L2Ou*fOOM8%2>`UlLgN`4v&bA1tue>Z>9&KBG7LO&+O@v&bX;HmmRlzsy>7m=oo;GNtRdy)y%kIr6pFx z#RW2AvLhx(=-FUKhUDW2xhp9ZsWUJHedP0th?3Q;489Ky5Td7J0D(lE4JOHLq+?`G z6x(6agwzb|mNB^pY_V=Yk?L_Pa|z6x&f2av6sQoGm2)yZwcV`SKmy99V*sV2BodQt zF&P>1;c21UWaX*Nch*8ihTtDF3bDf$GiHz*my`Raa$_trppQ;~c?2|*JFJd{kei>A zd$5j$klUk^yR?plkQ=Cz`?#`0(8kZ?9_!>*uVabGUD(OZV8=qpecH+GV#h+ro!rR{ zWyeC;o4x0<_nf_eLKw*9F!w;6i$ht-ZE436kvqnd8`qA7kbBCLTicF>kh{*4o8OLw zv_U?SkPo>%E;nP;-Q?Ewl3|3jmlL5%hjK>m@X9tkm9gl^Orwfo9B9Dcz4j_PS`X8UKTJGqG9MZoemR&jy{DvJAm9;8iI^<^wDHTo-%M=I4$(zV8bAU80Z-3 z=<8EHs}jkMm^77NjhGIU=yJe}q{(9$$lb6ZI!uIUT64tYiL;KF5mD=bNy$O6$&(w% z4YMICOf?X--V>WgxOiel)Lm-Ca!<^Fpn74l^5ppkIoB$)1iS=Ys8|l$k|`R*gn5{> z2^_t^+-qGm7q1 zwmqI|aP zf6mXYi@tY)={7x>>?!aYuXS!YqR|c0Qufq`=U>Q*Jg4Dc;8};QhDR2WTQB?K)NjjQ5d1-aWf6?(M3k&X#G_%lA;T)8UL z9>suW2L&uLBx;>8Y0Q^+G6$0(o;qVjCOl9)w49V_FQ)aZtUbW24^RjzD+ob_o-cRl zM5giYAqX)5Jy2jZBf=VLiU@as4kctlY<0m5sO_*wb%Ewfp3sqB8*yF3-0c)3L)n|c zQ;P{fb%o|jp4G9ftW$PT!bw494Ctq@&N3(FK@6&lIZ@#XO@U3N$V+%rY zE*O+=NgSMmNz48F`eFO_hAZ^wh0_VUIbaicHb{_AW9HSK0cdj2cnv}Ae`r{5rxU~A zf_dcGFyx;3Y-fQx|NS^Yo+(1^ua6ofG+1bqnKr~EFX+MKVIay=?q0auaD>4Pix_>> zh$!T7A%S`Q-94cPwvL4yvmxRktvq?ah|_xd1nc{8Fdvg?AK4Iw$_3}OV*hUu|m5U;u-mvSAvGZuq9?n6dQEZ$2=_%?U~ ze28o&PbO)SRpC9eFt`^&j93N!=b#XzuSeYU#wMGP=bO|B-TD1zR<{w;vCMArVis#; zUn#O6K7IvO4k4)FLq^cn8@-`@l0!9l6iP+SrdN^^yH-L>Gl&T-x!#@-@&RXc+p`}2 zzJ6a4-R!rynu;}oL<+i9zdbPnVlcR8vpzBk_it&g5U%8*Vs9YEM2JBijN*N3SUEdM z#Gk31SzujA15Z`C`U3A>Y0Q>@AzBV35+ETDS(&Tbyi=yLMFP?wSAgy0u`IvhvD)OR zb`O{#`Z_!i1g41iViPCBEqRDb09O8R_Lm*W5DVrs)OJ{rq)o_EScby`ynCiM*)gqR z=0G0!axh8%So}y>1%yD8LV24y5<$MuFvufcZu-^SaQe8TpV`5fYl44aw+X9q!IK9e zEtTyr>bcoOF9$FGFYGagIUnkv(TULUgE}D3g_)NVfA&$`(Su-@Da)=WbBIts%!L~1 zOw>Y5>KSLE(+@fH!ZMP}s-j~gB>y%a#}Nw)x8|p=X#KdOet)4Dw=>h$+LUNqd{1)P*L{IBbpXKu~00|Ws)>` z3=nzB2qa;S62uJ$OlmUICFF@gpvy?muy@l`|%$P!+j}+__COCDqHyWYX1N{Ce#Lpn;0VZC= z++b+IZHdsW1qtUYFpB2jK8!EeY6;WBqjbuSf~^@Kn$ zgDfOR``|)8S>yyCZsyF#_!;C$OK)43C70j5atm~!haVV5$xpPCO0Ns&6uJ-)0;^0I zqbcOEP8a3He{UZYmS*LT92x4vdXx6*Kty##*ABF1W?M#{>}0qpEc?Rt%4Jk6!WUYY zIh34r`V%Ghm1RgshrwJLB+`easi`4_JRhn-y6w@88^51J2x__d=J3%vVZ8uzk@(w4 z5scO!HgK>DN^UweVi@vCJP>z$RUe7M{3D1?1dus3f8pf zsSQSO3VD(gdA1Hr7-r~EN00LN`^GVCAG%&8{F~G(DK9O1=YaLG> zzJrz>=4k0pABkLMW+Ay2C!5AYcaAtkwZxooY!JOgHjcoAg)n`>ei62SADWH6PFhqpQNIW)A=FbbNkS~!!%5RP*1~z z3E^yvhxm@}a?`->{ppxIe?m-hs)jv2uJ8A;LIooDLzPXYpT2lKxf- z0zTw49wHuX zFwt>R`ZA10h-Lp37o_7IbuI(E<)4jB9G4iR<89lK2_>a2{Yx82Cyz^4mi<>Dp>2&< z#B6NC*_hb4bnajlYL7(1GHeFb(5T_aGH9pVAt_NbqV1V-s zmSa+*sq>a&DkNjbk*{`CV!E!jF6)CCZB~>1D_9%7=49DWkw2P=3GpW%<6#x1Z#ncP z#0sObnHV9Zqp9?WfEAb~J8yHMX$7V=%BZcxG}w$Dk(&cu3}1;UuqD%pk(HxGowFnX+t1$V|I7e2E7JVua+=}rMzgK~C3(8^SFet>@F@uI5g;+2K z@9Czj14mb`hA6dbFm9rJ4JOZ$>JhqYK>B74rpytIMtH7;9?49nN9H}pjZJSgbgN_Q;I#-l5lCUMEW#vNf+>Ve5vIzc#~kIF)??CQGgwuln;f4W z1p`i6Ogyo?2ve2`OG<#FKO?l^B-7NGq{P(tq_B{9?c}&9;${(MiU6?wtp&E-P^sBL1w9uGDUFO&Rh`MC>c+O%EW=Q;~hC8W3_?NH;TS9y*hP#qo zm?N>L99zl{M|LKJq=iK{Oxcb_a=|y~(o!NKv@=5D26eR$?Ehgh(DV z&-2@0+6Q;GjRHm@c7|1Qj-?6oz%hjo36yzhTZsY!xp7noc3{0m8WyqF&p8 zNkOMGAqF;J+QiK**iu%SunpK$Ue+r%V$BB3oaj9a_2ETepNS2Lkj`~0lylK8OqrNg zflZY_D^=EH1Ly9Bg`_d<15e4zj!_z(3RhT6k zY7aoiCwjNTCz<-A5honNq`Bbvy-TK$3JPGEG{n7-(t4g;sInW2eMvJMn>O(#c>@EAIROE^>CI zf+F}pT_jUXLNhVROuBI8#zp^uU=dvC%J1GuYzppfzB}h}&*R>6ZiZy41WP7LbRv-y ze~Foo$+=WYOqzy1Z)v8H#(mOlQQeKjBg@MX*+}~%bdo~1CQbErCnSMtpZiP(@sCw_ z>P?BxtEefrn|;R^hZk;>^Zg~PBKqSn&3Juffq;@X^H>Eat-5s;goupfSLaDDjJ!TA?@ z3T)J&D}1#|Ay{~*MbS{V$ABlgBTcjz6TDP}R4h&5_v?tWpU>$y|EeNYPx+_m)+&-Y zQKQ2ODqb0nkL!3YSEISW#3X;M(QAHHr<;6voo;Z<#?y}+3i@J4S&{=)I9x$vA`C35 z5-jroN2-9$3It+K@jnKu2xKS`=Rai>AG0<^cR?^`Y+_$IZHOsgm7w!kPn=iQV>_Zo|cm;Mm9!K5Eig&KSKLx=Y5gh4;R7dL3QAKuSH9U75HYJ*n( E0^Pq$QUCw| diff --git a/lib/components/table/table.tsx b/lib/components/table/table.tsx index cc3d30c..750534a 100644 --- a/lib/components/table/table.tsx +++ b/lib/components/table/table.tsx @@ -91,7 +91,6 @@ const Table = ({ className={column.sticky ? style.sticky : undefined} >
Date: Fri, 19 Sep 2025 11:05:26 +0200 Subject: [PATCH 3/3] update docs --- README.md | 61 +++++++++++++++++----- dist/components/table/table-sort-button.js | 5 +- dist/components/table/table.js | 42 +++++++-------- dist/main.d.ts | 2 +- 4 files changed, 71 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 94ac48c..80d9723 100644 --- a/README.md +++ b/README.md @@ -4,19 +4,54 @@ A simple table component for React. ## How to -### Sort - -Use the `onSorted` function on a column item to enable sorting by that column. - -It supports sorting asynchronously. However if you are not able to do return a -promise (eg. because the actual request is a side-effect), the sort will not -work properly. -Eg: the _direction_ argument for `onSorted(direction)` will lag behind. - -Example: -`click sort -> set filters -> useEffect on filter -> fetch -> rerender table` - -In this case you need to figure out the sort direction yourself. +### Render columns + +It is advisable to define a columns variable with `useMemo()` so that it will +not be re-generated on each component render. +But take care what value you use to watch for changes! + +When working with async data with Tanstack query, it is best to use the `data` +attribute from useQuery. + +```tsx +const { data } = useQuery({ /* options */ }) +const columns = useMemo(() => [ + { + key: "name", + title: (state) => "User name", + /* etc */ + }, +], [data]); // <-- columns will only rerender when there's new data +``` + +### Sorting + +The data you provide to the table determines the content and order of the rows. +**Any of the `sort`-related props are only intended for displaying a sort state in the table header.** + +```tsx +const columns = useMemo(() => [ + { + title: (state) => ( + <> + {/* Only show an error when it is the sorted column and point it to the right direction */} + User Name {state.isSortedColumn + ? state.direction === "Asc" + ? "↓" + : "↑" + : ""} + + ), + /* etc */ + }, +], [data]); +``` + +The `onSorted` callback will be fired after you click a sortable header. +Use it to trigger a change of the data you pass to the table. + +Note that currently, when selecting a new column it will always default to `"Desc"`. +**This is rather limiting**: a PR will be made to fix this. ## Development diff --git a/dist/components/table/table-sort-button.js b/dist/components/table/table-sort-button.js index 6acd9b5..601ff14 100644 --- a/dist/components/table/table-sort-button.js +++ b/dist/components/table/table-sort-button.js @@ -5,10 +5,7 @@ import '../../assets/table-sort-button.css';const n = "_button_158ku_1", r = "_s sorted: r, desc: d, asc: _ -}, i = ({ - state: o, - children: s -}) => /* @__PURE__ */ c( +}, i = ({ state: o, children: s }) => /* @__PURE__ */ c( "div", { className: e([ diff --git a/dist/components/table/table.js b/dist/components/table/table.js index fe4b46a..af0d035 100644 --- a/dist/components/table/table.js +++ b/dist/components/table/table.js @@ -1,18 +1,18 @@ import { jsxs as b, jsx as n } from "react/jsx-runtime"; import k from "classnames"; import { useState as _ } from "react"; -import '../../assets/table.css';const u = "_table_1hpbm_1", x = "_sticky_1hpbm_39", D = "_header_1hpbm_45", a = { - table: u, - sticky: x, +import '../../assets/table.css';const x = "_table_1hpbm_1", v = "_sticky_1hpbm_39", D = "_header_1hpbm_45", a = { + table: x, + sticky: v, header: D -}, m = ({ - data: i, +}, j = ({ + data: r, columns: t, - makeKey: r, + makeKey: d, className: o, - empty: h + empty: f }) => { - const [d, S] = N(t); + const [i, S] = N(t); return /* @__PURE__ */ b( "table", { @@ -23,7 +23,7 @@ import '../../assets/table.css';const u = "_table_1hpbm_1", x = "_sticky_1hpbm_3 }, children: [ /* @__PURE__ */ n("thead", { children: /* @__PURE__ */ n("tr", { children: t.map((e, c) => { - const s = c === (d == null ? void 0 : d.index), y = d == null ? void 0 : d.direction, p = e.onSorted ? "button" : "div"; + const s = c === (i == null ? void 0 : i.index), y = i == null ? void 0 : i.direction, p = e.onSorted ? "button" : "div"; return /* @__PURE__ */ n( "th", { @@ -35,9 +35,9 @@ import '../../assets/table.css';const u = "_table_1hpbm_1", x = "_sticky_1hpbm_3 type: e.onSorted && "button", className: a.header, onClick: e.onSorted ? async () => { - var f; - const l = !s || (d == null ? void 0 : d.direction) !== "Desc" ? "Desc" : "Asc"; - await ((f = e.onSorted) == null ? void 0 : f.call(e, l)), S({ + var h; + const l = !s || (i == null ? void 0 : i.direction) !== "Desc" ? "Desc" : "Asc"; + await ((h = e.onSorted) == null ? void 0 : h.call(e, l)), S({ index: c, direction: l }); @@ -52,31 +52,31 @@ import '../../assets/table.css';const u = "_table_1hpbm_1", x = "_sticky_1hpbm_3 e.key ); }) }) }), - /* @__PURE__ */ n("tbody", { children: i != null && i.length ? i.map((e, c) => /* @__PURE__ */ n("tr", { children: t.map((s) => /* @__PURE__ */ n( + /* @__PURE__ */ n("tbody", { children: r != null && r.length ? r.map((e, c) => /* @__PURE__ */ n("tr", { children: t.map((s) => /* @__PURE__ */ n( "td", { className: s.sticky ? a.sticky : void 0, children: s.render(e) }, s.key - )) }, r(e, c))) : h }) + )) }, d(e, c))) : f }) ] } ); -}, N = (i) => _(() => { - const t = i.findIndex( +}, N = (r) => _(() => { + const t = r.findIndex( (o) => o.defaultSorted ); if (t === -1) return; - const r = i[t]; - return r.onSorted ? { - direction: r.defaultSorted === !0 ? "Desc" : r.defaultSorted || "Desc", + const d = r[t]; + return d.onSorted ? { + direction: d.defaultSorted === !0 ? "Desc" : d.defaultSorted || "Desc", index: t } : { index: t, - direction: typeof r.defaultSorted == "string" ? r.defaultSorted : void 0 + direction: typeof d.defaultSorted == "string" ? d.defaultSorted : void 0 }; }); export { - m as default + j as default }; diff --git a/dist/main.d.ts b/dist/main.d.ts index 17738ad..67d4f4a 100644 --- a/dist/main.d.ts +++ b/dist/main.d.ts @@ -1,2 +1,2 @@ -export { default as Table, type ColumnState, type OrderDirection, type TableColumn } from './components/table/table'; +export { type ColumnState, default as Table, type OrderDirection, type TableColumn, } from './components/table/table'; export { default as TableSortButton } from './components/table/table-sort-button';