@rudra-studio/rudra-layout 1.0.4 → 1.0.6

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.
@@ -1,10 +1,12 @@
1
1
  import { default as React } from 'react';
2
- export declare const RepeaterContext: React.Context<any>;
3
2
  export interface RepeaterProps extends React.HTMLAttributes<HTMLDivElement> {
4
3
  items?: any[];
5
4
  layout?: 'grid' | 'stack';
6
5
  columns?: '1' | '2' | '3' | '4';
7
6
  gap?: 'sm' | 'md' | 'lg';
8
- children?: React.ReactNode;
7
+ children?: React.ReactNode | ((context: {
8
+ item: any;
9
+ index: number;
10
+ }) => React.ReactNode);
9
11
  }
10
12
  export default function Repeater({ items, layout, columns, gap, className, children, ...props }: RepeaterProps): import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,8 @@
1
- import e, { createContext as t } from "react";
2
- import { jsx as n } from "react/jsx-runtime";
1
+ import e from "react";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
3
  //#region src/components/Repeater/index.tsx
4
- var r = t(null);
5
- function i({ items: t = [], layout: i = "grid", columns: a = "3", gap: o = "md", className: s = "", children: c, ...l }) {
6
- let u = Array.isArray(t) ? t : [], d = {
4
+ function r({ items: r = [], layout: i = "grid", columns: a = "4", gap: o = "md", className: s = "", children: c, ...l }) {
5
+ let u = Array.isArray(r) ? r : [], d = {
7
6
  sm: "gap-4",
8
7
  md: "gap-6",
9
8
  lg: "gap-8"
@@ -15,21 +14,24 @@ function i({ items: t = [], layout: i = "grid", columns: a = "3", gap: o = "md",
15
14
  }[a]} ${d[o]}` : `flex flex-col w-full ${d[o]}`;
16
15
  return u.length === 0 ? /* @__PURE__ */ n("div", {
17
16
  className: `w-full p-8 border-2 border-dashed border-purple-200 bg-purple-50 rounded-lg flex flex-col items-center justify-center text-purple-600 ${s}`,
18
- children: /* @__PURE__ */ n("div", {
17
+ children: [/* @__PURE__ */ t("span", {
18
+ className: "text-sm font-medium mb-2 opacity-70",
19
+ children: "Repeater (No Data Bound)"
20
+ }), /* @__PURE__ */ t("div", {
19
21
  className: "mt-4 w-full p-4 border border-dashed border-purple-300 rounded bg-white",
20
- children: c
21
- })
22
- }) : /* @__PURE__ */ n("div", {
22
+ children: typeof c == "function" ? c({
23
+ item: null,
24
+ index: 0
25
+ }) : c
26
+ })]
27
+ }) : /* @__PURE__ */ t("div", {
23
28
  className: `${f} ${s}`,
24
29
  ...l,
25
- children: u.map((t, i) => /* @__PURE__ */ n(r.Provider, {
26
- value: {
27
- item: t,
28
- index: i
29
- },
30
- children: /* @__PURE__ */ n(e.Fragment, { children: c }, t.id || i)
31
- }, t.id || i))
30
+ children: u.map((n, r) => /* @__PURE__ */ t(e.Fragment, { children: typeof c == "function" ? c({
31
+ item: n,
32
+ index: r
33
+ }) : c }, n?.id || r))
32
34
  });
33
35
  }
34
36
  //#endregion
35
- export { r as RepeaterContext, i as default };
37
+ export { r as default };
@@ -0,0 +1,18 @@
1
+ import { default as React } from 'react';
2
+ type TableRowPayload = {
3
+ item: any;
4
+ index: number;
5
+ isExpanded: boolean;
6
+ toggleExpanded: () => void;
7
+ };
8
+ export interface RepeaterTableProps {
9
+ data?: any[];
10
+ headerTemplates?: React.ReactNode[];
11
+ cellTemplates?: (React.ReactNode | ((context: TableRowPayload) => React.ReactNode))[];
12
+ expandedContent?: React.ReactNode | ((context: TableRowPayload) => React.ReactNode);
13
+ pageSize?: number;
14
+ globalFilterPlaceholder?: string;
15
+ className?: string;
16
+ }
17
+ export default function RepeaterTable({ data, headerTemplates, cellTemplates, expandedContent, pageSize, globalFilterPlaceholder, className, }: RepeaterTableProps): import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,197 @@
1
+ import e, { useEffect as t, useMemo as n, useState as r } from "react";
2
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
3
+ import { flexRender as o, getCoreRowModel as s, getExpandedRowModel as c, getFilteredRowModel as l, getPaginationRowModel as u, useReactTable as d } from "@tanstack/react-table";
4
+ import { ChevronDown as f, ChevronLeft as p, ChevronRight as m, ChevronsLeft as h, ChevronsRight as g, LayoutTemplate as _, Search as v } from "lucide-react";
5
+ //#region src/components/RepeaterTable/index.tsx
6
+ function y({ data: y = [], headerTemplates: b = [], cellTemplates: x = [], expandedContent: S, pageSize: C = 5, globalFilterPlaceholder: w = "Search anywhere...", className: T = "" }) {
7
+ let [E, D] = r([]), [O, k] = r(""), [A, j] = r({}), M = Array.isArray(y) ? y : [], N = Array.isArray(b) ? b : [], P = Array.isArray(x) ? x : [], F = n(() => {
8
+ let e = Math.max(N.length, P.length);
9
+ return Array.from({ length: e }).map((e, t) => ({
10
+ id: `col_${t}`,
11
+ accessorFn: (e) => e,
12
+ header: () => N[t] || /* @__PURE__ */ a("div", {
13
+ className: "py-1 px-2 border border-dashed border-slate-300 dark:border-slate-700 rounded text-slate-400 dark:text-slate-500 text-[10px] font-mono flex items-center gap-1",
14
+ children: [
15
+ /* @__PURE__ */ i(_, { size: 10 }),
16
+ " H-Slot ",
17
+ t + 1
18
+ ]
19
+ }),
20
+ cell: ({ row: e }) => {
21
+ let n = e.original, r = P[t], o = t === 0, s = {
22
+ item: n,
23
+ index: e.index,
24
+ isExpanded: e.getIsExpanded(),
25
+ toggleExpanded: e.getToggleExpandedHandler()
26
+ };
27
+ return /* @__PURE__ */ a("div", {
28
+ className: "flex items-center gap-3",
29
+ children: [o && S && /* @__PURE__ */ i("button", {
30
+ onClick: e.getToggleExpandedHandler(),
31
+ className: "p-1 hover:bg-slate-200 dark:hover:bg-white/10 rounded text-slate-500 transition-colors shrink-0",
32
+ children: e.getIsExpanded() ? /* @__PURE__ */ i(f, { size: 16 }) : /* @__PURE__ */ i(m, { size: 16 })
33
+ }), /* @__PURE__ */ i("div", {
34
+ className: "flex-1 w-full min-w-0",
35
+ children: typeof r == "function" ? r(s) : r || /* @__PURE__ */ a("div", {
36
+ className: "py-2 px-3 border border-dashed border-slate-300 dark:border-slate-700 rounded text-slate-400 dark:text-slate-500 text-xs italic flex items-center gap-2",
37
+ children: [
38
+ /* @__PURE__ */ i(_, { size: 12 }),
39
+ " C-Slot ",
40
+ t + 1
41
+ ]
42
+ })
43
+ })]
44
+ });
45
+ }
46
+ }));
47
+ }, [
48
+ N,
49
+ P,
50
+ S
51
+ ]), I = d({
52
+ data: M,
53
+ columns: F,
54
+ state: {
55
+ sorting: E,
56
+ globalFilter: O,
57
+ expanded: A
58
+ },
59
+ initialState: { pagination: { pageSize: C } },
60
+ onSortingChange: D,
61
+ onExpandedChange: j,
62
+ onGlobalFilterChange: k,
63
+ getCoreRowModel: s(),
64
+ getFilteredRowModel: l(),
65
+ getPaginationRowModel: u(),
66
+ getExpandedRowModel: c(),
67
+ globalFilterFn: (e, t, n) => {
68
+ let r = String(n).toLowerCase();
69
+ return Object.values(e.original).some((e) => String(e).toLowerCase().includes(r));
70
+ }
71
+ });
72
+ return t(() => {
73
+ I.setPageSize(C);
74
+ }, [C, I]), M.length === 0 && N.length === 0 && P.length === 0 ? /* @__PURE__ */ a("div", {
75
+ className: "w-full p-12 border-2 border-dashed border-slate-200 dark:border-slate-800 bg-white dark:bg-[#0A0A0A] rounded-2xl flex flex-col items-center justify-center text-slate-400",
76
+ children: [
77
+ /* @__PURE__ */ i(_, {
78
+ size: 32,
79
+ className: "mb-4 opacity-50"
80
+ }),
81
+ /* @__PURE__ */ i("p", {
82
+ className: "text-sm font-medium text-slate-600 dark:text-slate-400",
83
+ children: "Repeater Table Empty"
84
+ }),
85
+ /* @__PURE__ */ i("p", {
86
+ className: "text-xs mt-1 text-slate-500",
87
+ children: "Provide Data, Header Templates, or Cell Templates to begin."
88
+ })
89
+ ]
90
+ }) : /* @__PURE__ */ a("div", {
91
+ className: `space-y-4 w-full ${T}`,
92
+ children: [
93
+ /* @__PURE__ */ a("div", {
94
+ className: "relative w-full sm:w-96",
95
+ children: [/* @__PURE__ */ i(v, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400 dark:text-slate-500" }), /* @__PURE__ */ i("input", {
96
+ value: O ?? "",
97
+ onChange: (e) => k(e.target.value),
98
+ placeholder: w,
99
+ className: "w-full bg-white dark:bg-[#0A0A0A] border border-slate-200 dark:border-white/10 rounded-xl pl-10 pr-4 py-2 text-sm text-slate-900 dark:text-slate-200 placeholder:text-slate-400 focus:outline-none focus:border-blue-500 transition-colors shadow-sm dark:shadow-none"
100
+ })]
101
+ }),
102
+ /* @__PURE__ */ i("div", {
103
+ className: "rounded-2xl border border-slate-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A] overflow-hidden shadow-sm dark:shadow-none",
104
+ children: /* @__PURE__ */ i("div", {
105
+ className: "overflow-x-auto custom-scrollbar",
106
+ children: /* @__PURE__ */ a("table", {
107
+ className: "w-full text-sm text-left",
108
+ children: [/* @__PURE__ */ i("thead", {
109
+ className: "bg-slate-50 dark:bg-white/5 border-b border-slate-200 dark:border-white/10 text-slate-500 dark:text-slate-400 tracking-wider",
110
+ children: I.getHeaderGroups().map((e) => /* @__PURE__ */ i("tr", { children: e.headers.map((e) => /* @__PURE__ */ i("th", {
111
+ className: "px-6 py-4 whitespace-nowrap",
112
+ children: o(e.column.columnDef.header, e.getContext())
113
+ }, e.id)) }, e.id))
114
+ }), /* @__PURE__ */ a("tbody", {
115
+ className: "divide-y divide-slate-200 dark:divide-white/5",
116
+ children: [I.getRowModel().rows.map((t) => /* @__PURE__ */ a(e.Fragment, { children: [/* @__PURE__ */ i("tr", {
117
+ className: "hover:bg-slate-50 dark:hover:bg-white/5 transition-colors group",
118
+ children: t.getVisibleCells().map((e) => /* @__PURE__ */ i("td", {
119
+ className: "px-6 py-4 text-slate-700 dark:text-slate-300",
120
+ children: o(e.column.columnDef.cell, e.getContext())
121
+ }, e.id))
122
+ }), t.getIsExpanded() && S && /* @__PURE__ */ i("tr", {
123
+ className: "bg-slate-50/50 dark:bg-white/[0.02]",
124
+ children: /* @__PURE__ */ i("td", {
125
+ colSpan: F.length,
126
+ className: "p-0 border-b border-slate-200 dark:border-white/5",
127
+ children: /* @__PURE__ */ i("div", {
128
+ className: "p-6",
129
+ children: typeof S == "function" ? S({
130
+ item: t.original,
131
+ index: t.index,
132
+ isExpanded: !0,
133
+ toggleExpanded: t.getToggleExpandedHandler()
134
+ }) : S
135
+ })
136
+ })
137
+ })] }, t.id)), I.getRowModel().rows.length === 0 && /* @__PURE__ */ i("tr", { children: /* @__PURE__ */ i("td", {
138
+ colSpan: F.length,
139
+ className: "px-6 py-12 text-center text-slate-500",
140
+ children: "No results found matching your filters."
141
+ }) })]
142
+ })]
143
+ })
144
+ })
145
+ }),
146
+ /* @__PURE__ */ a("div", {
147
+ className: "flex items-center justify-between px-4 py-2 text-sm text-slate-500 dark:text-slate-400",
148
+ children: [/* @__PURE__ */ a("div", {
149
+ className: "flex-1",
150
+ children: [
151
+ "Page ",
152
+ /* @__PURE__ */ i("span", {
153
+ className: "font-semibold text-slate-700 dark:text-slate-200",
154
+ children: I.getState().pagination.pageIndex + 1
155
+ }),
156
+ " of",
157
+ " ",
158
+ /* @__PURE__ */ i("span", {
159
+ className: "font-semibold text-slate-700 dark:text-slate-200",
160
+ children: I.getPageCount() || 1
161
+ })
162
+ ]
163
+ }), /* @__PURE__ */ a("div", {
164
+ className: "flex items-center gap-1.5",
165
+ children: [
166
+ /* @__PURE__ */ i("button", {
167
+ onClick: () => I.setPageIndex(0),
168
+ disabled: !I.getCanPreviousPage(),
169
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
170
+ children: /* @__PURE__ */ i(h, { size: 16 })
171
+ }),
172
+ /* @__PURE__ */ i("button", {
173
+ onClick: () => I.previousPage(),
174
+ disabled: !I.getCanPreviousPage(),
175
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
176
+ children: /* @__PURE__ */ i(p, { size: 16 })
177
+ }),
178
+ /* @__PURE__ */ i("button", {
179
+ onClick: () => I.nextPage(),
180
+ disabled: !I.getCanNextPage(),
181
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
182
+ children: /* @__PURE__ */ i(m, { size: 16 })
183
+ }),
184
+ /* @__PURE__ */ i("button", {
185
+ onClick: () => I.setPageIndex(I.getPageCount() - 1),
186
+ disabled: !I.getCanNextPage(),
187
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
188
+ children: /* @__PURE__ */ i(g, { size: 16 })
189
+ })
190
+ ]
191
+ })]
192
+ })
193
+ ]
194
+ });
195
+ }
196
+ //#endregion
197
+ export { y as default };
@@ -0,0 +1,12 @@
1
+ import { ColumnDef } from '@tanstack/react-table';
2
+ export interface DataTableProps {
3
+ columns: ColumnDef<any, any>[];
4
+ data: any[];
5
+ pageSize?: number;
6
+ mode?: "pagination" | "infinite";
7
+ onLoadMore?: () => void;
8
+ isFetching?: boolean;
9
+ hasMore?: boolean;
10
+ globalFilterPlaceholder?: string;
11
+ }
12
+ export default function DataTable({ columns, data, pageSize, mode, onLoadMore, isFetching, hasMore, globalFilterPlaceholder, }: DataTableProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,176 @@
1
+ import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
3
+ import { flexRender as o, getCoreRowModel as s, getFilteredRowModel as c, getPaginationRowModel as l, getSortedRowModel as u, useReactTable as d } from "@tanstack/react-table";
4
+ import { ChevronDown as f, ChevronLeft as p, ChevronRight as m, ChevronUp as h, ChevronsLeft as g, ChevronsRight as _, ChevronsUpDown as v, Loader2 as y, Search as b, SlidersHorizontal as x } from "lucide-react";
5
+ //#region src/components/Table/index.tsx
6
+ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "pagination", onLoadMore: E, isFetching: D = !1, hasMore: O = !1, globalFilterPlaceholder: k = "Search all records..." }) {
7
+ let [A, j] = r([]), [M, N] = r([]), [P, F] = r(""), [I, L] = r(!1), R = n(null), z = e((e) => {
8
+ D || (R.current && R.current.disconnect(), R.current = new IntersectionObserver((e) => {
9
+ e[0].isIntersecting && O && E && E();
10
+ }), e && R.current.observe(e));
11
+ }, [
12
+ D,
13
+ O,
14
+ E
15
+ ]), B = d({
16
+ data: C,
17
+ columns: S,
18
+ state: {
19
+ sorting: A,
20
+ columnFilters: M,
21
+ globalFilter: P
22
+ },
23
+ initialState: { pagination: { pageSize: w } },
24
+ onSortingChange: j,
25
+ onColumnFiltersChange: N,
26
+ onGlobalFilterChange: F,
27
+ globalFilterFn: "includesString",
28
+ getCoreRowModel: s(),
29
+ getFilteredRowModel: c(),
30
+ getSortedRowModel: u(),
31
+ getPaginationRowModel: T === "pagination" ? l() : void 0
32
+ });
33
+ return t(() => {
34
+ B.setPageSize(w);
35
+ }, [w, B]), /* @__PURE__ */ a("div", {
36
+ className: "space-y-4 w-full",
37
+ children: [
38
+ /* @__PURE__ */ a("div", {
39
+ className: "flex flex-col sm:flex-row items-center justify-between gap-4",
40
+ children: [/* @__PURE__ */ a("div", {
41
+ className: "relative w-full sm:w-96",
42
+ children: [/* @__PURE__ */ i(b, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400 dark:text-slate-500" }), /* @__PURE__ */ i("input", {
43
+ value: P ?? "",
44
+ onChange: (e) => F(e.target.value),
45
+ placeholder: k,
46
+ className: "w-full bg-white dark:bg-[#0A0A0A] border border-slate-200 dark:border-white/10 rounded-xl pl-10 pr-4 py-2 text-sm text-slate-900 dark:text-slate-200 placeholder:text-slate-400 dark:placeholder:text-slate-600 focus:outline-none focus:border-blue-500 dark:focus:border-cyan-500/50 transition-colors shadow-sm dark:shadow-none"
47
+ })]
48
+ }), /* @__PURE__ */ a("button", {
49
+ onClick: () => L(!I),
50
+ className: `flex items-center gap-2 px-4 py-2 border rounded-xl text-sm font-medium transition-colors w-full sm:w-auto shadow-sm dark:shadow-none ${I ? "bg-blue-50 dark:bg-white/10 border-blue-200 dark:border-white/20 text-blue-700 dark:text-white" : "border-slate-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A] hover:bg-slate-50 dark:hover:bg-white/5 text-slate-700 dark:text-slate-300"}`,
51
+ children: [/* @__PURE__ */ i(x, { size: 14 }), /* @__PURE__ */ i("span", { children: "Filters" })]
52
+ })]
53
+ }),
54
+ /* @__PURE__ */ a("div", {
55
+ className: "rounded-2xl border border-slate-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A] overflow-hidden shadow-sm dark:shadow-none flex flex-col",
56
+ children: [/* @__PURE__ */ i("div", {
57
+ className: "overflow-x-auto custom-scrollbar",
58
+ children: /* @__PURE__ */ a("table", {
59
+ className: "w-full text-sm text-left",
60
+ children: [/* @__PURE__ */ i("thead", {
61
+ className: "bg-slate-50 dark:bg-white/5 border-b border-slate-200 dark:border-white/10 text-slate-500 dark:text-slate-400 uppercase text-[10px] tracking-wider font-bold",
62
+ children: B.getHeaderGroups().map((e) => /* @__PURE__ */ i("tr", { children: e.headers.map((e) => /* @__PURE__ */ i("th", {
63
+ className: "px-6 py-4 whitespace-nowrap align-top",
64
+ children: e.isPlaceholder ? null : /* @__PURE__ */ a("div", {
65
+ className: "flex flex-col gap-3",
66
+ children: [/* @__PURE__ */ a("div", {
67
+ className: e.column.getCanSort() ? "cursor-pointer select-none flex items-center gap-2 hover:text-slate-900 dark:hover:text-white transition-colors" : "flex items-center gap-2",
68
+ onClick: e.column.getToggleSortingHandler(),
69
+ children: [o(e.column.columnDef.header, e.getContext()), {
70
+ asc: /* @__PURE__ */ i(h, {
71
+ size: 14,
72
+ className: "text-blue-500 dark:text-cyan-400"
73
+ }),
74
+ desc: /* @__PURE__ */ i(f, {
75
+ size: 14,
76
+ className: "text-blue-500 dark:text-cyan-400"
77
+ })
78
+ }[e.column.getIsSorted()] ?? (e.column.getCanSort() ? /* @__PURE__ */ i(v, {
79
+ size: 14,
80
+ className: "opacity-0 group-hover:opacity-50"
81
+ }) : null)]
82
+ }), I && e.column.getCanFilter() ? /* @__PURE__ */ i("input", {
83
+ type: "text",
84
+ value: e.column.getFilterValue() ?? "",
85
+ onChange: (t) => e.column.setFilterValue(t.target.value),
86
+ placeholder: "Filter...",
87
+ className: "w-full min-w-[120px] px-2 py-1.5 text-xs font-normal normal-case border rounded-lg bg-white dark:bg-black/40 border-slate-200 dark:border-white/10 text-slate-700 dark:text-slate-300 focus:outline-none focus:border-blue-500 dark:focus:border-cyan-500/50 transition-colors shadow-inner",
88
+ onClick: (e) => e.stopPropagation()
89
+ }) : null]
90
+ })
91
+ }, e.id)) }, e.id))
92
+ }), /* @__PURE__ */ i("tbody", {
93
+ className: "divide-y divide-slate-200 dark:divide-white/5",
94
+ children: B.getRowModel().rows?.length ? B.getRowModel().rows.map((e) => /* @__PURE__ */ i("tr", {
95
+ className: "hover:bg-slate-50 dark:hover:bg-white/5 transition-colors group",
96
+ children: e.getVisibleCells().map((e) => /* @__PURE__ */ i("td", {
97
+ className: "px-6 py-4 text-slate-700 dark:text-slate-300 whitespace-nowrap",
98
+ children: o(e.column.columnDef.cell, e.getContext())
99
+ }, e.id))
100
+ }, e.id)) : /* @__PURE__ */ i("tr", { children: /* @__PURE__ */ i("td", {
101
+ colSpan: S.length,
102
+ className: "px-6 py-12 text-center text-slate-500",
103
+ children: "No results found matching your filters."
104
+ }) })
105
+ })]
106
+ })
107
+ }), T === "infinite" && /* @__PURE__ */ i("div", {
108
+ ref: z,
109
+ className: "flex items-center justify-center p-4 text-slate-500 border-t border-slate-200 dark:border-white/10",
110
+ children: D ? /* @__PURE__ */ a("span", {
111
+ className: "flex items-center gap-2 text-sm",
112
+ children: [/* @__PURE__ */ i(y, {
113
+ className: "animate-spin",
114
+ size: 14
115
+ }), " Loading more..."]
116
+ }) : O ? /* @__PURE__ */ i("span", {
117
+ className: "text-sm",
118
+ children: "Scroll for more"
119
+ }) : /* @__PURE__ */ i("span", {
120
+ className: "text-sm",
121
+ children: "End of results"
122
+ })
123
+ })]
124
+ }),
125
+ T === "pagination" && /* @__PURE__ */ a("div", {
126
+ className: "flex items-center justify-between px-4 py-2 text-sm text-slate-500 dark:text-slate-400",
127
+ children: [/* @__PURE__ */ a("div", {
128
+ className: "flex-1",
129
+ children: [
130
+ "Page ",
131
+ /* @__PURE__ */ i("span", {
132
+ className: "font-semibold text-slate-700 dark:text-slate-200",
133
+ children: B.getState().pagination.pageIndex + 1
134
+ }),
135
+ " of",
136
+ " ",
137
+ /* @__PURE__ */ i("span", {
138
+ className: "font-semibold text-slate-700 dark:text-slate-200",
139
+ children: B.getPageCount() || 1
140
+ })
141
+ ]
142
+ }), /* @__PURE__ */ a("div", {
143
+ className: "flex items-center gap-1.5",
144
+ children: [
145
+ /* @__PURE__ */ i("button", {
146
+ onClick: () => B.setPageIndex(0),
147
+ disabled: !B.getCanPreviousPage(),
148
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
149
+ children: /* @__PURE__ */ i(g, { size: 16 })
150
+ }),
151
+ /* @__PURE__ */ i("button", {
152
+ onClick: () => B.previousPage(),
153
+ disabled: !B.getCanPreviousPage(),
154
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
155
+ children: /* @__PURE__ */ i(p, { size: 16 })
156
+ }),
157
+ /* @__PURE__ */ i("button", {
158
+ onClick: () => B.nextPage(),
159
+ disabled: !B.getCanNextPage(),
160
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
161
+ children: /* @__PURE__ */ i(m, { size: 16 })
162
+ }),
163
+ /* @__PURE__ */ i("button", {
164
+ onClick: () => B.setPageIndex(B.getPageCount() - 1),
165
+ disabled: !B.getCanNextPage(),
166
+ className: "p-1.5 rounded-lg text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-white/5 disabled:opacity-30 transition-colors",
167
+ children: /* @__PURE__ */ i(_, { size: 16 })
168
+ })
169
+ ]
170
+ })]
171
+ })
172
+ ]
173
+ });
174
+ }
175
+ //#endregion
176
+ export { S as default };
package/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  export type { GridProps } from './components/Grid';
2
2
  export { default as Grid } from './components/Grid';
3
- export { RepeaterContext } from './components/Repeater';
4
3
  export type { RepeaterProps } from './components/Repeater';
5
4
  export { default as Repeater } from './components/Repeater';
5
+ export type { RepeaterTableProps } from './components/RepeaterTable';
6
+ export { default as RepeaterTable } from './components/RepeaterTable';
6
7
  export type { StackProps } from './components/Stack';
7
8
  export { default as Stack } from './components/Stack';
9
+ export type { DataTableProps } from './components/Table';
10
+ export { default as DataTable } from './components/Table';
package/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  /* empty css */
2
2
  import e from "./components/Grid/index.js";
3
- import t, { RepeaterContext as n } from "./components/Repeater/index.js";
3
+ import t from "./components/Repeater/index.js";
4
+ import n from "./components/RepeaterTable/index.js";
4
5
  import r from "./components/Stack/index.js";
5
- export { e as Grid, t as Repeater, n as RepeaterContext, r as Stack };
6
+ import i from "./components/Table/index.js";
7
+ export { i as DataTable, e as Grid, t as Repeater, n as RepeaterTable, r as Stack };
6
8
 
7
- try{if(typeof document!=="undefined"){const e=document.createElement("style");e.textContent="*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:\"\"}html,:host{-webkit-text-size-adjust:100%;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}body{line-height:inherit;margin:0}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}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.mt-4{margin-top:1rem}.flex{display:flex}.grid{display:grid}.w-full{width:100%}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\\[repeat\\(auto-fit\\,minmax\\(250px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0{gap:0}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-dashed{border-style:dashed}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-4{padding:1rem}.p-8{padding:2rem}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}@media (width>=640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width>=1280px){.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}";const target = window.__RUDRA_SHADOW_ROOT__ || document.head; target.appendChild(e);}}catch(err){}
9
+ try{if(typeof document!=="undefined"){const e=document.createElement("style");e.textContent="*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:\"\"}html,:host{-webkit-text-size-adjust:100%;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}body{line-height:inherit;margin:0}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}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.static{position:static}.absolute{position:absolute}.relative{position:relative}.left-3{left:.75rem}.top-1\\/2{top:50%}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-1{margin-top:.25rem}.mt-4{margin-top:1rem}.flex{display:flex}.\\!table{display:table!important}.table{display:table}.grid{display:grid}.h-4{height:1rem}.w-4{width:1rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\\[120px\\]{min-width:120px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\\[repeat\\(auto-fit\\,minmax\\(250px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-50\\/50{background-color:#f8fafc80}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-1\\.5{padding:.375rem}.p-12{padding:3rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\\[10px\\]{font-size:10px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.italic{font-style:italic}.tracking-wider{letter-spacing:.05em}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.focus\\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.disabled\\:opacity-30:disabled{opacity:.3}.group:hover .group-hover\\:opacity-50{opacity:.5}@media (width>=640px){.sm\\:w-96{width:24rem}.sm\\:w-auto{width:auto}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}}@media (width>=768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width>=1280px){.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\\:divide-white\\/5>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.dark\\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.dark\\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.dark\\:border-white\\/10{border-color:#ffffff1a}.dark\\:border-white\\/20{border-color:#fff3}.dark\\:border-white\\/5{border-color:#ffffff0d}.dark\\:bg-\\[\\#0A0A0A\\]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.dark\\:bg-black\\/40{background-color:#0006}.dark\\:bg-white\\/10{background-color:#ffffff1a}.dark\\:bg-white\\/5{background-color:#ffffff0d}.dark\\:bg-white\\/\\[0\\.02\\]{background-color:#ffffff05}.dark\\:text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.dark\\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark\\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark\\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark\\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.dark\\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.dark\\:placeholder\\:text-slate-600::placeholder{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.dark\\:hover\\:bg-white\\/10:hover{background-color:#ffffff1a}.dark\\:hover\\:bg-white\\/5:hover{background-color:#ffffff0d}.dark\\:hover\\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\\:focus\\:border-cyan-500\\/50:focus{border-color:#06b6d480}}";const target = window.__RUDRA_SHADOW_ROOT__ || document.head; target.appendChild(e);}}catch(err){}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
3
  "@react-three/fiber": "9.6.1",
4
+ "@tanstack/react-table": "8",
4
5
  "gsap": "3.12.2",
5
6
  "lucide-react": "^1.8.0",
6
7
  "motion": "12.0.0",
@@ -41,5 +42,5 @@
41
42
  },
42
43
  "types": "./index.d.ts",
43
44
  "unpkg": "./index.umd.js",
44
- "version": "1.0.4"
45
+ "version": "1.0.6"
45
46
  }