@blakesteve/roster 3.0.0 → 4.0.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.
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Table-CPAcmkIV.cjs"),j=require("react"),n=require("@tanstack/react-table"),p=n.tableFeatures({rowSortingFeature:n.rowSortingFeature,rowPaginationFeature:n.rowPaginationFeature,sortedRowModel:n.createSortedRowModel(),paginatedRowModel:n.createPaginatedRowModel(),sortFns:n.sortFns});function R({columns:a,data:r,className:i,tableClassName:l,paginationClassName:x,variant:c="default",size:u="md",hoverable:g=!1}){const[m,d]=j.useState([]),t=n.useTable({features:p,data:r,columns:a,onSortingChange:d,state:{sorting:m},initialState:{pagination:{pageIndex:0,pageSize:10}}});return e.jsxRuntimeExports.jsxs("div",{className:e.cn("flex flex-col gap-4",i),children:[e.jsxRuntimeExports.jsxs(e.Table,{variant:c,size:u,hoverable:g,className:l,children:[e.jsxRuntimeExports.jsx(e.TableHeader,{children:t.getHeaderGroups().map(o=>e.jsxRuntimeExports.jsx(e.TableRow,{children:o.headers.map(s=>e.jsxRuntimeExports.jsx(e.TableHead,{children:s.isPlaceholder?null:e.jsxRuntimeExports.jsxs("div",{className:e.cn("flex items-center gap-2 transition-opacity",s.column.getCanSort()&&"cursor-pointer select-none opacity-80 hover:opacity-100"),onClick:s.column.getToggleSortingHandler(),children:[n.flexRender(s.column.columnDef.header,s.getContext()),s.column.getCanSort()&&e.jsxRuntimeExports.jsx("span",{className:"w-4 flex justify-center text-primary-500",children:s.column.getIsSorted()==="asc"?e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faCaretUp}):s.column.getIsSorted()==="desc"?e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faCaretDown}):null})]})},s.id))},o.id))}),e.jsxRuntimeExports.jsx(e.TableBody,{children:t.getRowModel().rows?.length?t.getRowModel().rows.map(o=>e.jsxRuntimeExports.jsx(e.TableRow,{children:o.getAllCells().map(s=>e.jsxRuntimeExports.jsx(e.TableCell,{children:n.flexRender(s.column.columnDef.cell,s.getContext())},s.id))},o.id)):e.jsxRuntimeExports.jsx(e.TableRow,{children:e.jsxRuntimeExports.jsx(e.TableCell,{colSpan:a.length,className:"h-24 text-center text-gray-500 dark:text-gray-400 italic",children:"No results found."})})})]}),e.jsxRuntimeExports.jsxs("div",{className:e.cn("flex flex-col sm:flex-row items-center justify-between gap-4 px-2",x),children:[e.jsxRuntimeExports.jsxs("div",{className:"text-sm font-medium text-gray-500 dark:text-gray-400",children:["Page"," ",e.jsxRuntimeExports.jsx("strong",{className:"text-gray-900 dark:text-gray-100",children:t.state.pagination.pageIndex+1})," ","of"," ",e.jsxRuntimeExports.jsx("strong",{className:"text-gray-900 dark:text-gray-100",children:t.getPageCount()})]}),e.jsxRuntimeExports.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsxRuntimeExports.jsx(e.Button,{variant:"outline",colorScheme:"neutral",size:"sm",onClick:()=>t.setPageIndex(0),disabled:!t.getCanPreviousPage(),"aria-label":"Go to first page",children:e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faAnglesLeft})}),e.jsxRuntimeExports.jsx(e.Button,{variant:"outline",colorScheme:"neutral",size:"sm",onClick:()=>t.previousPage(),disabled:!t.getCanPreviousPage(),"aria-label":"Go to previous page",children:e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faAngleLeft})}),e.jsxRuntimeExports.jsx(e.Button,{variant:"outline",colorScheme:"neutral",size:"sm",onClick:()=>t.nextPage(),disabled:!t.getCanNextPage(),"aria-label":"Go to next page",children:e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faAngleRight})}),e.jsxRuntimeExports.jsx(e.Button,{variant:"outline",colorScheme:"neutral",size:"sm",onClick:()=>t.setPageIndex(t.getPageCount()-1),disabled:!t.getCanNextPage(),"aria-label":"Go to last page",children:e.jsxRuntimeExports.jsx(e.FontAwesomeIcon,{icon:e.faAnglesRight})})]})]})]})}exports.DataTable=R;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * DataTable lives behind its own entry point: `@blakesteve/roster/data-table`.
3
+ *
4
+ * It is the only component that needs TanStack Table, which Roster declares as
5
+ * an optional peer dependency. A static re-export from the main entry would
6
+ * make that peer mandatory in practice — a consumer's bundler resolves imports
7
+ * before it tree-shakes, so `import { Button } from "@blakesteve/roster"` would
8
+ * fail with "Cannot resolve '@tanstack/react-table'" in an app that has no
9
+ * tables at all. Splitting the entry keeps the cost with the component.
10
+ *
11
+ * Consumers of DataTable install the peer themselves:
12
+ *
13
+ * ```bash
14
+ * npm install @tanstack/react-table
15
+ * ```
16
+ *
17
+ * ```tsx
18
+ * import { DataTable, type RosterTableFeatures } from "@blakesteve/roster/data-table";
19
+ * ```
20
+ */
21
+ export * from './components/organisms/DataTable/DataTable';
@@ -0,0 +1,155 @@
1
+ "use client";
2
+ import { q as e, T as C, a0 as S, a1 as o, _ as P, F as s, a9 as v, aa as w, v as i, U as y, X as c, N as l, ab as N, ac as R, ad as T, ae as k } from "./Table-CG6Z6c1A.js";
3
+ import { useState as F } from "react";
4
+ import { tableFeatures as I, sortFns as A, rowPaginationFeature as M, rowSortingFeature as z, createPaginatedRowModel as D, createSortedRowModel as G, useTable as H, flexRender as g } from "@tanstack/react-table";
5
+ const B = I({
6
+ rowSortingFeature: z,
7
+ rowPaginationFeature: M,
8
+ sortedRowModel: G(),
9
+ paginatedRowModel: D(),
10
+ // The whole built-in registry, not a subset: DataTable is generic over
11
+ // consumer data, so auto sort detection has to be able to reach any of them.
12
+ sortFns: A
13
+ });
14
+ function E({
15
+ columns: r,
16
+ data: d,
17
+ className: x,
18
+ tableClassName: m,
19
+ paginationClassName: u,
20
+ variant: p = "default",
21
+ size: f = "md",
22
+ hoverable: j = !1
23
+ }) {
24
+ const [h, b] = F([]), a = H({
25
+ features: B,
26
+ data: d,
27
+ columns: r,
28
+ onSortingChange: b,
29
+ state: {
30
+ sorting: h
31
+ },
32
+ initialState: {
33
+ pagination: {
34
+ pageIndex: 0,
35
+ pageSize: 10
36
+ }
37
+ }
38
+ });
39
+ return /* @__PURE__ */ e.jsxs("div", { className: i("flex flex-col gap-4", x), children: [
40
+ /* @__PURE__ */ e.jsxs(
41
+ C,
42
+ {
43
+ variant: p,
44
+ size: f,
45
+ hoverable: j,
46
+ className: m,
47
+ children: [
48
+ /* @__PURE__ */ e.jsx(S, { children: a.getHeaderGroups().map((n) => /* @__PURE__ */ e.jsx(o, { children: n.headers.map((t) => /* @__PURE__ */ e.jsx(P, { children: t.isPlaceholder ? null : /* @__PURE__ */ e.jsxs(
49
+ "div",
50
+ {
51
+ className: i(
52
+ "flex items-center gap-2 transition-opacity",
53
+ t.column.getCanSort() && "cursor-pointer select-none opacity-80 hover:opacity-100"
54
+ ),
55
+ onClick: t.column.getToggleSortingHandler(),
56
+ children: [
57
+ g(
58
+ t.column.columnDef.header,
59
+ t.getContext()
60
+ ),
61
+ t.column.getCanSort() && /* @__PURE__ */ e.jsx("span", { className: "w-4 flex justify-center text-primary-500", children: t.column.getIsSorted() === "asc" ? /* @__PURE__ */ e.jsx(s, { icon: v }) : t.column.getIsSorted() === "desc" ? /* @__PURE__ */ e.jsx(s, { icon: w }) : null })
62
+ ]
63
+ }
64
+ ) }, t.id)) }, n.id)) }),
65
+ /* @__PURE__ */ e.jsx(y, { children: a.getRowModel().rows?.length ? (
66
+ // No data-state on the row: row selection is not one of the
67
+ // registered features, and v8's getIsSelected() was always false
68
+ // here, so React omitted the attribute anyway.
69
+ a.getRowModel().rows.map((n) => /* @__PURE__ */ e.jsx(o, { children: n.getAllCells().map((t) => /* @__PURE__ */ e.jsx(c, { children: g(t.column.columnDef.cell, t.getContext()) }, t.id)) }, n.id))
70
+ ) : /* @__PURE__ */ e.jsx(o, { children: /* @__PURE__ */ e.jsx(
71
+ c,
72
+ {
73
+ colSpan: r.length,
74
+ className: "h-24 text-center text-gray-500 dark:text-gray-400 italic",
75
+ children: "No results found."
76
+ }
77
+ ) }) })
78
+ ]
79
+ }
80
+ ),
81
+ /* @__PURE__ */ e.jsxs(
82
+ "div",
83
+ {
84
+ className: i(
85
+ "flex flex-col sm:flex-row items-center justify-between gap-4 px-2",
86
+ u
87
+ ),
88
+ children: [
89
+ /* @__PURE__ */ e.jsxs("div", { className: "text-sm font-medium text-gray-500 dark:text-gray-400", children: [
90
+ "Page",
91
+ " ",
92
+ /* @__PURE__ */ e.jsx("strong", { className: "text-gray-900 dark:text-gray-100", children: a.state.pagination.pageIndex + 1 }),
93
+ " ",
94
+ "of",
95
+ " ",
96
+ /* @__PURE__ */ e.jsx("strong", { className: "text-gray-900 dark:text-gray-100", children: a.getPageCount() })
97
+ ] }),
98
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
99
+ /* @__PURE__ */ e.jsx(
100
+ l,
101
+ {
102
+ variant: "outline",
103
+ colorScheme: "neutral",
104
+ size: "sm",
105
+ onClick: () => a.setPageIndex(0),
106
+ disabled: !a.getCanPreviousPage(),
107
+ "aria-label": "Go to first page",
108
+ children: /* @__PURE__ */ e.jsx(s, { icon: N })
109
+ }
110
+ ),
111
+ /* @__PURE__ */ e.jsx(
112
+ l,
113
+ {
114
+ variant: "outline",
115
+ colorScheme: "neutral",
116
+ size: "sm",
117
+ onClick: () => a.previousPage(),
118
+ disabled: !a.getCanPreviousPage(),
119
+ "aria-label": "Go to previous page",
120
+ children: /* @__PURE__ */ e.jsx(s, { icon: R })
121
+ }
122
+ ),
123
+ /* @__PURE__ */ e.jsx(
124
+ l,
125
+ {
126
+ variant: "outline",
127
+ colorScheme: "neutral",
128
+ size: "sm",
129
+ onClick: () => a.nextPage(),
130
+ disabled: !a.getCanNextPage(),
131
+ "aria-label": "Go to next page",
132
+ children: /* @__PURE__ */ e.jsx(s, { icon: T })
133
+ }
134
+ ),
135
+ /* @__PURE__ */ e.jsx(
136
+ l,
137
+ {
138
+ variant: "outline",
139
+ colorScheme: "neutral",
140
+ size: "sm",
141
+ onClick: () => a.setPageIndex(a.getPageCount() - 1),
142
+ disabled: !a.getCanNextPage(),
143
+ "aria-label": "Go to last page",
144
+ children: /* @__PURE__ */ e.jsx(s, { icon: k })
145
+ }
146
+ )
147
+ ] })
148
+ ]
149
+ }
150
+ )
151
+ ] });
152
+ }
153
+ export {
154
+ E as DataTable
155
+ };
package/dist/index.d.ts CHANGED
@@ -50,6 +50,5 @@ export * from './components/organisms/Navbar/Navbar';
50
50
  export * from './components/organisms/Navbar/navbar-variants';
51
51
  export * from './components/organisms/Table/Table';
52
52
  export * from './components/organisms/Table/table-variants';
53
- export * from './components/organisms/DataTable/DataTable';
54
53
  export * from './hooks/useCountdown';
55
54
  export * from './lib/utils';
@@ -1 +1 @@
1
- @layer roster-preflight{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer roster;
1
+ @layer roster-preflight{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer theme,base,components,roster,utilities;