@rudra-studio/rudra-layout 1.0.13 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Box/index.d.ts +64 -0
- package/components/Box/index.js +11 -0
- package/components/Carousel/index.d.ts +24 -0
- package/components/Carousel/index.js +93 -0
- package/components/DataCarousel/index.d.ts +38 -0
- package/components/DataCarousel/index.js +95 -0
- package/components/Grid/index.d.ts +27 -3
- package/components/Grid/index.js +4 -15
- package/components/Repeater/index.d.ts +37 -4
- package/components/Repeater/index.js +11 -20
- package/components/RepeaterTable/index.js +19 -19
- package/components/Stack/index.d.ts +53 -6
- package/components/Stack/index.js +4 -21
- package/components/StructuredGrid/index.d.ts +29 -0
- package/components/StructuredGrid/index.js +41 -0
- package/components/Table/index.js +19 -19
- package/index.d.ts +8 -0
- package/index.js +11 -7
- package/package.json +2 -2
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface BoxProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
children?: React.ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* The Custom Attributes Dictionary
|
|
6
|
+
* We use additionalProperties to tell the schema it's a dynamic key-value object
|
|
7
|
+
* @type|complex
|
|
8
|
+
* @schema {"type":"object"}
|
|
9
|
+
*/
|
|
10
|
+
customAttributes?: Record<string, string>;
|
|
11
|
+
/** * @type|class
|
|
12
|
+
* @schema [{
|
|
13
|
+
* "key": "Direction",
|
|
14
|
+
* "prefix": "flex",
|
|
15
|
+
* "type": "select",
|
|
16
|
+
* "options": [
|
|
17
|
+
* {"key": "row", "label": "Row"},
|
|
18
|
+
* {"key": "col", "label": "Column"}
|
|
19
|
+
* ]
|
|
20
|
+
* },{
|
|
21
|
+
* "key": "Wrap Content",
|
|
22
|
+
* "prefix": "flex",
|
|
23
|
+
* "type": "select",
|
|
24
|
+
* "options": [
|
|
25
|
+
* {"key": "wrap", "label": "Wrap"},
|
|
26
|
+
* {"key": "nowrap", "label": "No Wrap"}
|
|
27
|
+
* ]
|
|
28
|
+
* },{
|
|
29
|
+
* "key": "Justify (Main Axis)",
|
|
30
|
+
* "prefix": "justify",
|
|
31
|
+
* "type": "select",
|
|
32
|
+
* "options": [
|
|
33
|
+
* {"key": "start", "label": "Start"},
|
|
34
|
+
* {"key": "center", "label": "Center"},
|
|
35
|
+
* {"key": "end", "label": "End"},
|
|
36
|
+
* {"key": "between", "label": "Space Between"}
|
|
37
|
+
* ]
|
|
38
|
+
* },{
|
|
39
|
+
* "key": "Align (Cross Axis)",
|
|
40
|
+
* "prefix": "items",
|
|
41
|
+
* "type": "select",
|
|
42
|
+
* "options": [
|
|
43
|
+
* {"key": "start", "label": "Start"},
|
|
44
|
+
* {"key": "center", "label": "Center"},
|
|
45
|
+
* {"key": "end", "label": "End"},
|
|
46
|
+
* {"key": "stretch", "label": "Stretch"}
|
|
47
|
+
* ]
|
|
48
|
+
* },{
|
|
49
|
+
* "key": "Gap",
|
|
50
|
+
* "prefix": "gap",
|
|
51
|
+
* "type": "select",
|
|
52
|
+
* "options": [
|
|
53
|
+
* {"key": "0", "label": "None (0px)"},
|
|
54
|
+
* {"key": "2", "label": "Small (8px)"},
|
|
55
|
+
* {"key": "4", "label": "Medium (16px)"},
|
|
56
|
+
* {"key": "6", "label": "Large (24px)"},
|
|
57
|
+
* {"key": "8", "label": "Extra Large (32px)"}
|
|
58
|
+
* ]
|
|
59
|
+
* }]
|
|
60
|
+
*/
|
|
61
|
+
className?: string;
|
|
62
|
+
}
|
|
63
|
+
export declare const Box: React.FC<BoxProps>;
|
|
64
|
+
export default Box;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/Box/index.tsx
|
|
4
|
+
var t = ({ children: t, customAttributes: n = {}, className: r = "", ...i }) => /* @__PURE__ */ e("div", {
|
|
5
|
+
className: `flex ${r}`.trim(),
|
|
6
|
+
...n,
|
|
7
|
+
...i,
|
|
8
|
+
children: t
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { t as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface RudraCarouselProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
/** * @select|inline-arrows|bottom-controls */
|
|
5
|
+
variant?: 'inline-arrows' | 'bottom-controls';
|
|
6
|
+
/** * @select|one|multiple|fractional */
|
|
7
|
+
itemsPerView?: 'one' | 'multiple' | 'fractional';
|
|
8
|
+
/** * @select|none|sm|md|lg */
|
|
9
|
+
gap?: 'none' | 'sm' | 'md' | 'lg';
|
|
10
|
+
/** * @class|[{
|
|
11
|
+
* "key": "Outer Margin",
|
|
12
|
+
* "prefix": "m",
|
|
13
|
+
* "type": "select",
|
|
14
|
+
* "options": [
|
|
15
|
+
* {"key": "0", "label": "None"},
|
|
16
|
+
* {"key": "4", "label": "Medium"},
|
|
17
|
+
* {"key": "8", "label": "Large"}
|
|
18
|
+
* ]
|
|
19
|
+
* }]
|
|
20
|
+
*/
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
declare const RudraCarousel: React.FC<RudraCarouselProps>;
|
|
24
|
+
export default RudraCarousel;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import e, { useEffect as t, useRef as n, useState as r } from "react";
|
|
2
|
+
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronLeft as s, ChevronRight as c } from "lucide-react";
|
|
4
|
+
//#region src/components/Carousel/index.tsx
|
|
5
|
+
var l = ({ children: l, variant: u = "inline-arrows", itemsPerView: d = "one", gap: f = "md", className: p = "", ...m }) => {
|
|
6
|
+
let h = n(null), [g, _] = r(!0), [v, y] = r(!1), [b, x] = r(0), S = e.Children.toArray(l), C = S.length, w = {
|
|
7
|
+
one: "w-full",
|
|
8
|
+
multiple: "w-full sm:w-[calc(50%-1rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1rem)]",
|
|
9
|
+
fractional: "w-[85%] sm:w-[38%] md:w-[28%] lg:w-[21%]"
|
|
10
|
+
}, T = {
|
|
11
|
+
none: "gap-0",
|
|
12
|
+
sm: "gap-2",
|
|
13
|
+
md: "gap-4",
|
|
14
|
+
lg: "gap-8"
|
|
15
|
+
}, E = () => {
|
|
16
|
+
if (!h.current) return;
|
|
17
|
+
let { scrollLeft: e, scrollWidth: t, clientWidth: n } = h.current;
|
|
18
|
+
_(e <= 10), y(Math.ceil(e + n) >= t - 10);
|
|
19
|
+
let r = t - n;
|
|
20
|
+
x(r > 0 ? Math.round(e / r * (C - 1)) : 0);
|
|
21
|
+
};
|
|
22
|
+
t(() => {
|
|
23
|
+
E();
|
|
24
|
+
}, [l, d]);
|
|
25
|
+
let D = (e) => {
|
|
26
|
+
if (!h.current) return;
|
|
27
|
+
let t = h.current.clientWidth * .8;
|
|
28
|
+
h.current.scrollBy({
|
|
29
|
+
left: e === "left" ? -t : t,
|
|
30
|
+
behavior: "smooth"
|
|
31
|
+
});
|
|
32
|
+
}, O = (e) => {
|
|
33
|
+
if (!h.current) return;
|
|
34
|
+
let { scrollWidth: t, clientWidth: n } = h.current, r = t - n;
|
|
35
|
+
h.current.scrollTo({
|
|
36
|
+
left: r * (e / (C - 1 || 1)),
|
|
37
|
+
behavior: "smooth"
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
return C === 0 ? null : /* @__PURE__ */ o("div", {
|
|
41
|
+
className: `relative w-full flex flex-col group ${p}`.trim(),
|
|
42
|
+
...m,
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ a("div", {
|
|
45
|
+
ref: h,
|
|
46
|
+
onScroll: E,
|
|
47
|
+
className: `flex ${T[f]} overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none] relative z-10 py-4`,
|
|
48
|
+
children: S.map((e, t) => /* @__PURE__ */ a("div", {
|
|
49
|
+
className: `shrink-0 snap-center sm:snap-start transition-transform ${w[d] || w.one}`,
|
|
50
|
+
children: e
|
|
51
|
+
}, t))
|
|
52
|
+
}),
|
|
53
|
+
u === "inline-arrows" && /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("button", {
|
|
54
|
+
onClick: () => D("left"),
|
|
55
|
+
disabled: g,
|
|
56
|
+
className: "absolute left-0 sm:-left-4 top-1/2 -translate-y-1/2 z-20 w-10 h-10 bg-white border border-slate-200 shadow-lg rounded-full flex items-center justify-center text-slate-600 transition-all duration-300 hover:bg-slate-50 hover:scale-110 disabled:opacity-0 disabled:pointer-events-none",
|
|
57
|
+
children: /* @__PURE__ */ a(s, { size: 20 })
|
|
58
|
+
}), /* @__PURE__ */ a("button", {
|
|
59
|
+
onClick: () => D("right"),
|
|
60
|
+
disabled: v,
|
|
61
|
+
className: "absolute right-0 sm:-right-4 top-1/2 -translate-y-1/2 z-20 w-10 h-10 bg-white border border-slate-200 shadow-lg rounded-full flex items-center justify-center text-slate-600 transition-all duration-300 hover:bg-slate-50 hover:scale-110 disabled:opacity-0 disabled:pointer-events-none",
|
|
62
|
+
children: /* @__PURE__ */ a(c, { size: 20 })
|
|
63
|
+
})] }),
|
|
64
|
+
u === "bottom-controls" && /* @__PURE__ */ o("div", {
|
|
65
|
+
className: "flex items-center justify-between w-full mt-4 px-2",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ a("button", {
|
|
68
|
+
onClick: () => D("left"),
|
|
69
|
+
disabled: g,
|
|
70
|
+
className: "w-8 h-8 flex items-center justify-center text-slate-400 hover:text-blue-600 hover:bg-blue-50 rounded-full transition-colors disabled:opacity-30 disabled:pointer-events-none",
|
|
71
|
+
children: /* @__PURE__ */ a(s, { size: 20 })
|
|
72
|
+
}),
|
|
73
|
+
/* @__PURE__ */ a("div", {
|
|
74
|
+
className: "flex items-center gap-2",
|
|
75
|
+
children: Array.from({ length: C }).map((e, t) => /* @__PURE__ */ a("button", {
|
|
76
|
+
onClick: () => O(t),
|
|
77
|
+
className: `transition-all duration-300 rounded-full ${b === t ? "w-6 h-1.5 bg-blue-600" : "w-1.5 h-1.5 bg-slate-300 hover:bg-slate-400"}`,
|
|
78
|
+
"aria-label": `Go to slide ${t + 1}`
|
|
79
|
+
}, t))
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ a("button", {
|
|
82
|
+
onClick: () => D("right"),
|
|
83
|
+
disabled: v,
|
|
84
|
+
className: "w-8 h-8 flex items-center justify-center text-slate-400 hover:text-blue-600 hover:bg-blue-50 rounded-full transition-colors disabled:opacity-30 disabled:pointer-events-none",
|
|
85
|
+
children: /* @__PURE__ */ a(c, { size: 20 })
|
|
86
|
+
})
|
|
87
|
+
]
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
//#endregion
|
|
93
|
+
export { l as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface RepeaterCarouselProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
items?: any[];
|
|
4
|
+
children?: React.ReactNode | ((context: {
|
|
5
|
+
item: any;
|
|
6
|
+
index: number;
|
|
7
|
+
}) => React.ReactNode);
|
|
8
|
+
/** * @select|inline-arrows|bottom-controls
|
|
9
|
+
*/
|
|
10
|
+
variant?: 'inline-arrows' | 'bottom-controls';
|
|
11
|
+
/** * @select|one|multiple|fractional
|
|
12
|
+
*/
|
|
13
|
+
itemsPerView?: 'one' | 'multiple' | 'fractional';
|
|
14
|
+
/** * @type|class
|
|
15
|
+
* @schema [{
|
|
16
|
+
* "key": "Outer Margin",
|
|
17
|
+
* "prefix": "m",
|
|
18
|
+
* "type": "select",
|
|
19
|
+
* "options": [
|
|
20
|
+
* {"key": "0", "label": "None"},
|
|
21
|
+
* {"key": "4", "label": "Medium"}
|
|
22
|
+
* ]
|
|
23
|
+
* },{
|
|
24
|
+
* "key": "Gap",
|
|
25
|
+
* "prefix": "gap",
|
|
26
|
+
* "type": "select",
|
|
27
|
+
* "options": [
|
|
28
|
+
* {"key": "0", "label": "None (0px)"},
|
|
29
|
+
* {"key": "2", "label": "Small (8px)"},
|
|
30
|
+
* {"key": "4", "label": "Medium (16px)"},
|
|
31
|
+
* {"key": "8", "label": "Large (32px)"}
|
|
32
|
+
* ]
|
|
33
|
+
* }]
|
|
34
|
+
*/
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
declare const RepeaterCarousel: React.FC<RepeaterCarouselProps>;
|
|
38
|
+
export default RepeaterCarousel;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { useEffect as e, useRef as t, useState as n } from "react";
|
|
2
|
+
import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronLeft as o, ChevronRight as s } from "lucide-react";
|
|
4
|
+
//#region src/components/DataCarousel/index.tsx
|
|
5
|
+
var c = ({ items: c = [], children: l, variant: u = "inline-arrows", itemsPerView: d = "one", gap: f = "md", className: p = "" }) => {
|
|
6
|
+
let m = t(null), [h, g] = n(!0), [_, v] = n(!1), [y, b] = n(0), x = c?.length || 0, S = {
|
|
7
|
+
one: "w-full",
|
|
8
|
+
multiple: "w-full sm:w-[calc(50%-1rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1rem)]",
|
|
9
|
+
fractional: "w-[85%] sm:w-[38%] md:w-[28%] lg:w-[21%]"
|
|
10
|
+
}, C = {
|
|
11
|
+
none: "gap-0",
|
|
12
|
+
sm: "gap-2",
|
|
13
|
+
md: "gap-4",
|
|
14
|
+
lg: "gap-8"
|
|
15
|
+
}, w = () => {
|
|
16
|
+
if (!m.current) return;
|
|
17
|
+
let { scrollLeft: e, scrollWidth: t, clientWidth: n } = m.current;
|
|
18
|
+
g(e <= 10), v(Math.ceil(e + n) >= t - 10);
|
|
19
|
+
let r = t - n;
|
|
20
|
+
b(r > 0 ? Math.round(e / r * (x - 1)) : 0);
|
|
21
|
+
};
|
|
22
|
+
e(() => {
|
|
23
|
+
w();
|
|
24
|
+
}, [c, d]);
|
|
25
|
+
let T = (e) => {
|
|
26
|
+
if (!m.current) return;
|
|
27
|
+
let t = m.current.clientWidth * .8;
|
|
28
|
+
m.current.scrollBy({
|
|
29
|
+
left: e === "left" ? -t : t,
|
|
30
|
+
behavior: "smooth"
|
|
31
|
+
});
|
|
32
|
+
}, E = (e) => {
|
|
33
|
+
if (!m.current) return;
|
|
34
|
+
let { scrollWidth: t, clientWidth: n } = m.current, r = t - n;
|
|
35
|
+
m.current.scrollTo({
|
|
36
|
+
left: r * (e / (x - 1 || 1)),
|
|
37
|
+
behavior: "smooth"
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
return x === 0 ? null : /* @__PURE__ */ a("div", {
|
|
41
|
+
className: `relative w-full flex flex-col group ${p}`.trim(),
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ i("div", {
|
|
44
|
+
ref: m,
|
|
45
|
+
onScroll: w,
|
|
46
|
+
className: `flex ${C[f]} overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none] relative z-10 py-4`,
|
|
47
|
+
children: c.map((e, t) => /* @__PURE__ */ i("div", {
|
|
48
|
+
className: `shrink-0 snap-center sm:snap-start transition-transform ${S[d]}`,
|
|
49
|
+
children: typeof l == "function" ? l({
|
|
50
|
+
item: e,
|
|
51
|
+
index: t
|
|
52
|
+
}) : l
|
|
53
|
+
}, t))
|
|
54
|
+
}),
|
|
55
|
+
u === "inline-arrows" && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("button", {
|
|
56
|
+
onClick: () => T("left"),
|
|
57
|
+
disabled: h,
|
|
58
|
+
className: "absolute left-0 sm:-left-4 top-1/2 -translate-y-1/2 z-20 w-10 h-10 bg-white border border-slate-200 shadow-lg rounded-full flex items-center justify-center text-slate-600 transition-all duration-300 hover:bg-slate-50 hover:scale-110 disabled:opacity-0 disabled:pointer-events-none",
|
|
59
|
+
children: /* @__PURE__ */ i(o, { size: 20 })
|
|
60
|
+
}), /* @__PURE__ */ i("button", {
|
|
61
|
+
onClick: () => T("right"),
|
|
62
|
+
disabled: _,
|
|
63
|
+
className: "absolute right-0 sm:-right-4 top-1/2 -translate-y-1/2 z-20 w-10 h-10 bg-white border border-slate-200 shadow-lg rounded-full flex items-center justify-center text-slate-600 transition-all duration-300 hover:bg-slate-50 hover:scale-110 disabled:opacity-0 disabled:pointer-events-none",
|
|
64
|
+
children: /* @__PURE__ */ i(s, { size: 20 })
|
|
65
|
+
})] }),
|
|
66
|
+
u === "bottom-controls" && /* @__PURE__ */ a("div", {
|
|
67
|
+
className: "flex items-center justify-between w-full mt-4 px-2",
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ i("button", {
|
|
70
|
+
onClick: () => T("left"),
|
|
71
|
+
disabled: h,
|
|
72
|
+
className: "w-8 h-8 flex items-center justify-center text-slate-400 hover:text-blue-600 hover:bg-blue-50 rounded-full transition-colors disabled:opacity-30 disabled:pointer-events-none",
|
|
73
|
+
children: /* @__PURE__ */ i(o, { size: 20 })
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ i("div", {
|
|
76
|
+
className: "flex items-center gap-2",
|
|
77
|
+
children: Array.from({ length: x }).map((e, t) => /* @__PURE__ */ i("button", {
|
|
78
|
+
onClick: () => E(t),
|
|
79
|
+
className: `transition-all duration-300 rounded-full ${y === t ? "w-6 h-1.5 bg-blue-600" : "w-1.5 h-1.5 bg-slate-300 hover:bg-slate-400"}`,
|
|
80
|
+
"aria-label": `Go to slide ${t + 1}`
|
|
81
|
+
}, t))
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ i("button", {
|
|
84
|
+
onClick: () => T("right"),
|
|
85
|
+
disabled: _,
|
|
86
|
+
className: "w-8 h-8 flex items-center justify-center text-slate-400 hover:text-blue-600 hover:bg-blue-50 rounded-full transition-colors disabled:opacity-30 disabled:pointer-events-none",
|
|
87
|
+
children: /* @__PURE__ */ i(s, { size: 20 })
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
export { c as default };
|
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
export interface GridProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
columns?: '1' | '2' | '3' | '4' | 'auto-fit';
|
|
4
|
-
gap?: 'sm' | 'md' | 'lg' | 'xl';
|
|
5
3
|
children?: React.ReactNode;
|
|
4
|
+
/** @type|class
|
|
5
|
+
* @schema [{
|
|
6
|
+
* "key": "Columns",
|
|
7
|
+
* "prefix": "grid-cols",
|
|
8
|
+
* "type": "select",
|
|
9
|
+
* "options": [
|
|
10
|
+
* {"key": "1", "label": "1 Column"},
|
|
11
|
+
* {"key": "2", "label": "2 Columns"},
|
|
12
|
+
* {"key": "3", "label": "3 Columns"},
|
|
13
|
+
* {"key": "4", "label": "4 Columns"},
|
|
14
|
+
* {"key": "[repeat(auto-fit,minmax(250px,1fr))]", "label": "Auto-Fit (Cards)"}
|
|
15
|
+
* ]
|
|
16
|
+
* },{
|
|
17
|
+
* "key": "Gap",
|
|
18
|
+
* "prefix": "gap",
|
|
19
|
+
* "type": "select",
|
|
20
|
+
* "options": [
|
|
21
|
+
* {"key": "0", "label": "None (0px)"},
|
|
22
|
+
* {"key": "4", "label": "Small (16px)"},
|
|
23
|
+
* {"key": "6", "label": "Medium (24px)"},
|
|
24
|
+
* {"key": "8", "label": "Large (32px)"},
|
|
25
|
+
* {"key": "12", "label": "Extra Large (48px)"}
|
|
26
|
+
* ]
|
|
27
|
+
* }]
|
|
28
|
+
*/
|
|
29
|
+
className?: string;
|
|
6
30
|
}
|
|
7
|
-
export default function Grid({
|
|
31
|
+
export default function Grid({ className, children, ...props }: GridProps): import("react/jsx-runtime").JSX.Element;
|
package/components/Grid/index.js
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import { jsx as e } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/Grid/index.tsx
|
|
4
|
-
function t({
|
|
4
|
+
function t({ className: t = "", children: n, ...r }) {
|
|
5
5
|
return /* @__PURE__ */ e("div", {
|
|
6
|
-
className: `grid w-full ${
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
3: "grid-cols-1 md:grid-cols-3",
|
|
10
|
-
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
|
|
11
|
-
"auto-fit": "grid-cols-[repeat(auto-fit,minmax(250px,1fr))]"
|
|
12
|
-
}[t]} ${{
|
|
13
|
-
sm: "gap-4",
|
|
14
|
-
md: "gap-6",
|
|
15
|
-
lg: "gap-8",
|
|
16
|
-
xl: "gap-12"
|
|
17
|
-
}[n]} ${r}`,
|
|
18
|
-
...a,
|
|
19
|
-
children: i
|
|
6
|
+
className: `grid w-full ${t}`.trim(),
|
|
7
|
+
...r,
|
|
8
|
+
children: n
|
|
20
9
|
});
|
|
21
10
|
}
|
|
22
11
|
//#endregion
|
|
@@ -1,12 +1,45 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
export interface RepeaterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
3
|
items?: any[];
|
|
4
|
-
layout?: 'grid' | 'stack';
|
|
5
|
-
columns?: number;
|
|
6
|
-
gap?: 'sm' | 'md' | 'lg';
|
|
7
4
|
children?: React.ReactNode | ((context: {
|
|
8
5
|
item: any;
|
|
9
6
|
index: number;
|
|
10
7
|
}) => React.ReactNode);
|
|
8
|
+
/** * @type|class
|
|
9
|
+
* @schema [{
|
|
10
|
+
* "key": "Layout",
|
|
11
|
+
* "prefix": "",
|
|
12
|
+
* "type": "select",
|
|
13
|
+
* "options": [
|
|
14
|
+
* {"key": "grid", "label": "Grid"},
|
|
15
|
+
* {"key": "flex flex-col", "label": "Stack (Vertical)"}
|
|
16
|
+
* ]
|
|
17
|
+
* },{
|
|
18
|
+
* "key": "Columns (Grid Only)",
|
|
19
|
+
* "prefix": "grid-cols",
|
|
20
|
+
* "type": "select",
|
|
21
|
+
* "options": [
|
|
22
|
+
* {"key": "1", "label": "1 Column"},
|
|
23
|
+
* {"key": "2", "label": "2 Columns"},
|
|
24
|
+
* {"key": "3", "label": "3 Columns"},
|
|
25
|
+
* {"key": "4", "label": "4 Columns"},
|
|
26
|
+
* {"key": "5", "label": "5 Columns"},
|
|
27
|
+
* {"key": "6", "label": "6 Columns"},
|
|
28
|
+
* {"key": "[repeat(auto-fit,minmax(250px,1fr))]", "label": "Auto-Fit Cards"}
|
|
29
|
+
* ]
|
|
30
|
+
* },{
|
|
31
|
+
* "key": "Gap",
|
|
32
|
+
* "prefix": "gap",
|
|
33
|
+
* "type": "select",
|
|
34
|
+
* "options": [
|
|
35
|
+
* {"key": "0", "label": "None (0px)"},
|
|
36
|
+
* {"key": "4", "label": "Small (16px)"},
|
|
37
|
+
* {"key": "6", "label": "Medium (24px)"},
|
|
38
|
+
* {"key": "8", "label": "Large (32px)"},
|
|
39
|
+
* {"key": "12", "label": "Extra Large (48px)"}
|
|
40
|
+
* ]
|
|
41
|
+
* }]
|
|
42
|
+
*/
|
|
43
|
+
className?: string;
|
|
11
44
|
}
|
|
12
|
-
export default function Repeater({ items,
|
|
45
|
+
export default function Repeater({ items, className, children, ...props }: RepeaterProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,36 +1,27 @@
|
|
|
1
1
|
import e from "react";
|
|
2
2
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/Repeater/index.tsx
|
|
4
|
-
function r({ items: r = [],
|
|
5
|
-
let
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
lg: "gap-8"
|
|
9
|
-
}, f = i === "grid" ? `grid ${{
|
|
10
|
-
1: "grid-cols-1",
|
|
11
|
-
2: "grid-cols-1 sm:grid-cols-2",
|
|
12
|
-
3: "grid-cols-1 md:grid-cols-3",
|
|
13
|
-
4: "grid-cols-1 md:grid-cols-2 xl:grid-cols-4"
|
|
14
|
-
}[a]} ${d[o]}` : `flex flex-col w-full ${d[o]}`;
|
|
15
|
-
return u.length === 0 ? /* @__PURE__ */ n("div", {
|
|
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}`,
|
|
4
|
+
function r({ items: r = [], className: i = "", children: a, ...o }) {
|
|
5
|
+
let s = Array.isArray(r) ? r : [];
|
|
6
|
+
return s.length === 0 ? /* @__PURE__ */ n("div", {
|
|
7
|
+
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",
|
|
17
8
|
children: [/* @__PURE__ */ t("span", {
|
|
18
9
|
className: "text-sm font-medium mb-2 opacity-70",
|
|
19
10
|
children: "Repeater (No Data Bound)"
|
|
20
11
|
}), /* @__PURE__ */ t("div", {
|
|
21
|
-
className:
|
|
22
|
-
children: typeof
|
|
12
|
+
className: `mt-4 w-full p-4 border border-dashed border-purple-300 rounded bg-white ${i}`,
|
|
13
|
+
children: typeof a == "function" ? a({
|
|
23
14
|
item: null,
|
|
24
15
|
index: 0
|
|
25
|
-
}) :
|
|
16
|
+
}) : a
|
|
26
17
|
})]
|
|
27
18
|
}) : /* @__PURE__ */ t("div", {
|
|
28
|
-
className:
|
|
29
|
-
...
|
|
30
|
-
children:
|
|
19
|
+
className: `w-full ${i}`.trim(),
|
|
20
|
+
...o,
|
|
21
|
+
children: s.map((n, r) => /* @__PURE__ */ t(e.Fragment, { children: typeof a == "function" ? a({
|
|
31
22
|
item: n,
|
|
32
23
|
index: r
|
|
33
|
-
}) :
|
|
24
|
+
}) : a }, n?.id || r))
|
|
34
25
|
});
|
|
35
26
|
}
|
|
36
27
|
//#endregion
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import e, { useEffect as t, useMemo as n, useRef as r, useState as i } from "react";
|
|
2
2
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ChevronDown as s, ChevronLeft as c, ChevronRight as l, ChevronsLeft as u, ChevronsRight as d, LayoutTemplate as f, Search as p } from "lucide-react";
|
|
4
|
+
import { flexRender as m, getCoreRowModel as h, getExpandedRowModel as g, getFilteredRowModel as _, getPaginationRowModel as v, useReactTable as y } from "@tanstack/react-table";
|
|
5
5
|
//#region src/components/RepeaterTable/index.tsx
|
|
6
6
|
function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5, globalFilterPlaceholder: w = "Search anywhere...", className: T = "" }) {
|
|
7
7
|
let [E, D] = i([]), [O, k] = i(""), [A, j] = i({}), M = r(x);
|
|
@@ -16,7 +16,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
16
16
|
children: e.label
|
|
17
17
|
}),
|
|
18
18
|
cell: ({ row: n }) => {
|
|
19
|
-
let r = M.current?.[t]?.template, i = t === 0,
|
|
19
|
+
let r = M.current?.[t]?.template, i = t === 0, c = {
|
|
20
20
|
item: n.original,
|
|
21
21
|
index: n.index,
|
|
22
22
|
isExpanded: n.getIsExpanded(),
|
|
@@ -27,13 +27,13 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
27
27
|
children: [i && S && /* @__PURE__ */ a("button", {
|
|
28
28
|
onClick: n.getToggleExpandedHandler(),
|
|
29
29
|
className: "p-1 hover:bg-slate-200 dark:hover:bg-white/10 rounded text-slate-500 transition-colors shrink-0",
|
|
30
|
-
children: n.getIsExpanded() ? /* @__PURE__ */ a(
|
|
30
|
+
children: n.getIsExpanded() ? /* @__PURE__ */ a(s, { size: 16 }) : /* @__PURE__ */ a(l, { size: 16 })
|
|
31
31
|
}), /* @__PURE__ */ a("div", {
|
|
32
32
|
className: "flex-1 w-full min-w-0",
|
|
33
|
-
children: typeof r == "function" ? r(
|
|
33
|
+
children: typeof r == "function" ? r(c) : r || /* @__PURE__ */ o("div", {
|
|
34
34
|
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",
|
|
35
35
|
children: [
|
|
36
|
-
/* @__PURE__ */ a(
|
|
36
|
+
/* @__PURE__ */ a(f, { size: 12 }),
|
|
37
37
|
" Drop ",
|
|
38
38
|
e.label,
|
|
39
39
|
" Cell"
|
|
@@ -42,7 +42,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
42
42
|
})]
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
})), [x?.length, S]), P =
|
|
45
|
+
})), [x?.length, S]), P = y({
|
|
46
46
|
data: Array.isArray(b) ? b : [],
|
|
47
47
|
columns: N,
|
|
48
48
|
state: {
|
|
@@ -54,10 +54,10 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
54
54
|
onSortingChange: D,
|
|
55
55
|
onExpandedChange: j,
|
|
56
56
|
onGlobalFilterChange: k,
|
|
57
|
-
getCoreRowModel:
|
|
58
|
-
getFilteredRowModel:
|
|
59
|
-
getPaginationRowModel:
|
|
60
|
-
getExpandedRowModel:
|
|
57
|
+
getCoreRowModel: h(),
|
|
58
|
+
getFilteredRowModel: _(),
|
|
59
|
+
getPaginationRowModel: v(),
|
|
60
|
+
getExpandedRowModel: g(),
|
|
61
61
|
globalFilterFn: (e, t, n) => {
|
|
62
62
|
let r = String(n).toLowerCase();
|
|
63
63
|
return Object.values(e.original).some((e) => String(e).toLowerCase().includes(r));
|
|
@@ -67,7 +67,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
67
67
|
P.setPageSize(C);
|
|
68
68
|
}, [C, P]), b.length === 0 && (!x || x.length === 0) ? /* @__PURE__ */ o("div", {
|
|
69
69
|
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",
|
|
70
|
-
children: [/* @__PURE__ */ a(
|
|
70
|
+
children: [/* @__PURE__ */ a(f, {
|
|
71
71
|
size: 32,
|
|
72
72
|
className: "mb-4 opacity-50"
|
|
73
73
|
}), /* @__PURE__ */ a("p", {
|
|
@@ -79,7 +79,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
79
79
|
children: [
|
|
80
80
|
/* @__PURE__ */ o("div", {
|
|
81
81
|
className: "relative w-full sm:w-96",
|
|
82
|
-
children: [/* @__PURE__ */ a(
|
|
82
|
+
children: [/* @__PURE__ */ a(p, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400 dark:text-slate-500" }), /* @__PURE__ */ a("input", {
|
|
83
83
|
value: O ?? "",
|
|
84
84
|
onChange: (e) => k(e.target.value),
|
|
85
85
|
placeholder: w,
|
|
@@ -96,7 +96,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
96
96
|
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",
|
|
97
97
|
children: P.getHeaderGroups().map((e) => /* @__PURE__ */ a("tr", { children: e.headers.map((e) => /* @__PURE__ */ a("th", {
|
|
98
98
|
className: "px-6 py-4 whitespace-nowrap",
|
|
99
|
-
children:
|
|
99
|
+
children: m(e.column.columnDef.header, e.getContext())
|
|
100
100
|
}, e.id)) }, e.id))
|
|
101
101
|
}), /* @__PURE__ */ a("tbody", {
|
|
102
102
|
className: "divide-y divide-slate-200 dark:divide-white/5",
|
|
@@ -104,7 +104,7 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
104
104
|
className: "hover:bg-slate-50 dark:hover:bg-white/5 transition-colors group",
|
|
105
105
|
children: t.getVisibleCells().map((e) => /* @__PURE__ */ a("td", {
|
|
106
106
|
className: "px-6 py-4 text-slate-700 dark:text-slate-300",
|
|
107
|
-
children:
|
|
107
|
+
children: m(e.column.columnDef.cell, e.getContext())
|
|
108
108
|
}, e.id))
|
|
109
109
|
}), t.getIsExpanded() && S && /* @__PURE__ */ a("tr", {
|
|
110
110
|
className: "bg-slate-50/50 dark:bg-white/[0.02]",
|
|
@@ -150,25 +150,25 @@ function b({ data: b = [], columns: x = [], expandedContent: S, pageSize: C = 5,
|
|
|
150
150
|
onClick: () => P.setPageIndex(0),
|
|
151
151
|
disabled: !P.getCanPreviousPage(),
|
|
152
152
|
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",
|
|
153
|
-
children: /* @__PURE__ */ a(
|
|
153
|
+
children: /* @__PURE__ */ a(u, { size: 16 })
|
|
154
154
|
}),
|
|
155
155
|
/* @__PURE__ */ a("button", {
|
|
156
156
|
onClick: () => P.previousPage(),
|
|
157
157
|
disabled: !P.getCanPreviousPage(),
|
|
158
158
|
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",
|
|
159
|
-
children: /* @__PURE__ */ a(
|
|
159
|
+
children: /* @__PURE__ */ a(c, { size: 16 })
|
|
160
160
|
}),
|
|
161
161
|
/* @__PURE__ */ a("button", {
|
|
162
162
|
onClick: () => P.nextPage(),
|
|
163
163
|
disabled: !P.getCanNextPage(),
|
|
164
164
|
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",
|
|
165
|
-
children: /* @__PURE__ */ a(
|
|
165
|
+
children: /* @__PURE__ */ a(l, { size: 16 })
|
|
166
166
|
}),
|
|
167
167
|
/* @__PURE__ */ a("button", {
|
|
168
168
|
onClick: () => P.setPageIndex(P.getPageCount() - 1),
|
|
169
169
|
disabled: !P.getCanNextPage(),
|
|
170
170
|
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",
|
|
171
|
-
children: /* @__PURE__ */ a(
|
|
171
|
+
children: /* @__PURE__ */ a(d, { size: 16 })
|
|
172
172
|
})
|
|
173
173
|
]
|
|
174
174
|
})]
|
|
@@ -1,10 +1,57 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
export interface StackProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
direction?: 'row' | 'col';
|
|
4
|
-
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
5
|
-
justify?: 'start' | 'center' | 'end' | 'between' | 'around';
|
|
6
|
-
gap?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
7
|
-
wrap?: boolean;
|
|
8
3
|
children?: React.ReactNode;
|
|
4
|
+
/** *@type|class
|
|
5
|
+
* @schema [{
|
|
6
|
+
* "key": "Direction",
|
|
7
|
+
* "prefix": "flex",
|
|
8
|
+
* "type": "select",
|
|
9
|
+
* "options": [
|
|
10
|
+
* {"key": "row", "label": "Row"},
|
|
11
|
+
* {"key": "col", "label": "Column"}
|
|
12
|
+
* ]
|
|
13
|
+
* },{
|
|
14
|
+
* "key": "Align Items (Cross Axis)",
|
|
15
|
+
* "prefix": "items",
|
|
16
|
+
* "type": "select",
|
|
17
|
+
* "options": [
|
|
18
|
+
* {"key": "start", "label": "Start"},
|
|
19
|
+
* {"key": "center", "label": "Center"},
|
|
20
|
+
* {"key": "end", "label": "End"},
|
|
21
|
+
* {"key": "stretch", "label": "Stretch"}
|
|
22
|
+
* ]
|
|
23
|
+
* },{
|
|
24
|
+
* "key": "Justify Content (Main Axis)",
|
|
25
|
+
* "prefix": "justify",
|
|
26
|
+
* "type": "select",
|
|
27
|
+
* "options": [
|
|
28
|
+
* {"key": "start", "label": "Start"},
|
|
29
|
+
* {"key": "center", "label": "Center"},
|
|
30
|
+
* {"key": "end", "label": "End"},
|
|
31
|
+
* {"key": "between", "label": "Space Between"},
|
|
32
|
+
* {"key": "around", "label": "Space Around"}
|
|
33
|
+
* ]
|
|
34
|
+
* },{
|
|
35
|
+
* "key": "Gap",
|
|
36
|
+
* "prefix": "gap",
|
|
37
|
+
* "type": "select",
|
|
38
|
+
* "options": [
|
|
39
|
+
* {"key": "0", "label": "None (0px)"},
|
|
40
|
+
* {"key": "2", "label": "Small (8px)"},
|
|
41
|
+
* {"key": "4", "label": "Medium (16px)"},
|
|
42
|
+
* {"key": "8", "label": "Large (32px)"},
|
|
43
|
+
* {"key": "12", "label": "Extra Large (48px)"}
|
|
44
|
+
* ]
|
|
45
|
+
* },{
|
|
46
|
+
* "key": "Wrap Content",
|
|
47
|
+
* "prefix": "flex",
|
|
48
|
+
* "type": "select",
|
|
49
|
+
* "options": [
|
|
50
|
+
* {"key": "wrap", "label": "Wrap"},
|
|
51
|
+
* {"key": "nowrap", "label": "No Wrap"}
|
|
52
|
+
* ]
|
|
53
|
+
* }]
|
|
54
|
+
*/
|
|
55
|
+
className?: string;
|
|
9
56
|
}
|
|
10
|
-
export default function Stack({
|
|
57
|
+
export default function Stack({ className, children, ...props }: StackProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,28 +1,11 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import { jsx as e } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/Stack/index.tsx
|
|
4
|
-
function t({
|
|
4
|
+
function t({ className: t = "", children: n, ...r }) {
|
|
5
5
|
return /* @__PURE__ */ e("div", {
|
|
6
|
-
className: `flex w-full ${t
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
end: "items-end",
|
|
10
|
-
stretch: "items-stretch"
|
|
11
|
-
}[n]} ${{
|
|
12
|
-
start: "justify-start",
|
|
13
|
-
center: "justify-center",
|
|
14
|
-
end: "justify-end",
|
|
15
|
-
between: "justify-between",
|
|
16
|
-
around: "justify-around"
|
|
17
|
-
}[r]} ${{
|
|
18
|
-
none: "gap-0",
|
|
19
|
-
sm: "gap-2",
|
|
20
|
-
md: "gap-4",
|
|
21
|
-
lg: "gap-8",
|
|
22
|
-
xl: "gap-12"
|
|
23
|
-
}[i]} ${o}`,
|
|
24
|
-
...c,
|
|
25
|
-
children: s
|
|
6
|
+
className: `flex w-full ${t}`.trim(),
|
|
7
|
+
...r,
|
|
8
|
+
children: n
|
|
26
9
|
});
|
|
27
10
|
}
|
|
28
11
|
//#endregion
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface ComplexGridProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** The data defining the names of the slots and their dropped content */
|
|
4
|
+
gridData?: {
|
|
5
|
+
name: string;
|
|
6
|
+
node: React.ReactNode;
|
|
7
|
+
}[];
|
|
8
|
+
templateColumns?: string;
|
|
9
|
+
templateRows?: string;
|
|
10
|
+
templateAreas?: string;
|
|
11
|
+
minHeight?: string;
|
|
12
|
+
/** * @type|class
|
|
13
|
+
* @schema [{
|
|
14
|
+
* "key": "Gap",
|
|
15
|
+
* "prefix": "gap",
|
|
16
|
+
* "type": "select",
|
|
17
|
+
* "options": [
|
|
18
|
+
* {"key": "0", "label": "None (0px)"},
|
|
19
|
+
* {"key": "4", "label": "Small (16px)"},
|
|
20
|
+
* {"key": "6", "label": "Medium (24px)"},
|
|
21
|
+
* {"key": "8", "label": "Large (32px)"},
|
|
22
|
+
* {"key": "12", "label": "Extra Large (48px)"}
|
|
23
|
+
* ]
|
|
24
|
+
* }]
|
|
25
|
+
*/
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare const ComplexGrid: React.FC<ComplexGridProps>;
|
|
29
|
+
export default ComplexGrid;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useMemo as e } from "react";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/StructuredGrid/index.tsx
|
|
4
|
+
var r = ({ gridData: r = [], templateColumns: i = "1fr 1fr", templateRows: a = "auto auto", templateAreas: o = "\"area1 area2\" \"area3 area4\"", minHeight: s = "300px", className: c = "", ...l }) => {
|
|
5
|
+
let u = e(() => {
|
|
6
|
+
if (!o) return [];
|
|
7
|
+
let e = o.replace(/"|'/g, "").split(/\s+/).filter((e) => e.trim() !== "" && e.trim() !== ".");
|
|
8
|
+
return Array.from(new Set(e));
|
|
9
|
+
}, [o]), d = (e) => r?.find((t) => t && t.name === e)?.node || null, f = {
|
|
10
|
+
display: "grid",
|
|
11
|
+
gridTemplateColumns: i,
|
|
12
|
+
gridTemplateRows: a,
|
|
13
|
+
gridTemplateAreas: o,
|
|
14
|
+
minHeight: s,
|
|
15
|
+
...l.style
|
|
16
|
+
};
|
|
17
|
+
return /* @__PURE__ */ t("div", {
|
|
18
|
+
className: `w-full grid ${c}`.trim(),
|
|
19
|
+
style: f,
|
|
20
|
+
...l,
|
|
21
|
+
children: u.map((e) => {
|
|
22
|
+
let r = d(e), i = !r;
|
|
23
|
+
return /* @__PURE__ */ n("div", {
|
|
24
|
+
style: { gridArea: e },
|
|
25
|
+
className: `
|
|
26
|
+
relative min-h-[50px] transition-colors
|
|
27
|
+
${i ? "border border-dashed border-slate-300 bg-slate-50/50 hover:bg-slate-100 hover:border-blue-400" : ""}
|
|
28
|
+
`,
|
|
29
|
+
children: [i && /* @__PURE__ */ t("div", {
|
|
30
|
+
className: "absolute inset-0 flex items-center justify-center pointer-events-none opacity-40",
|
|
31
|
+
children: /* @__PURE__ */ t("span", {
|
|
32
|
+
className: "font-mono text-xs font-bold uppercase tracking-wider text-slate-500",
|
|
33
|
+
children: e
|
|
34
|
+
})
|
|
35
|
+
}), r]
|
|
36
|
+
}, e);
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { r as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
|
|
2
2
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ChevronDown as o, ChevronLeft as s, ChevronRight as c, ChevronUp as l, ChevronsLeft as u, ChevronsRight as d, ChevronsUpDown as f, Loader2 as p, Search as m, SlidersHorizontal as h } from "lucide-react";
|
|
4
|
+
import { flexRender as g, getCoreRowModel as _, getFilteredRowModel as v, getPaginationRowModel as y, getSortedRowModel as b, useReactTable as x } from "@tanstack/react-table";
|
|
5
5
|
//#region src/components/Table/index.tsx
|
|
6
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
7
|
let [A, j] = r([]), [M, N] = r([]), [P, F] = r(""), [I, L] = r(!1), R = n(null), z = e((e) => {
|
|
@@ -12,7 +12,7 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
12
12
|
D,
|
|
13
13
|
O,
|
|
14
14
|
E
|
|
15
|
-
]), B =
|
|
15
|
+
]), B = x({
|
|
16
16
|
data: C,
|
|
17
17
|
columns: S,
|
|
18
18
|
state: {
|
|
@@ -25,10 +25,10 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
25
25
|
onColumnFiltersChange: N,
|
|
26
26
|
onGlobalFilterChange: F,
|
|
27
27
|
globalFilterFn: "includesString",
|
|
28
|
-
getCoreRowModel:
|
|
29
|
-
getFilteredRowModel:
|
|
30
|
-
getSortedRowModel:
|
|
31
|
-
getPaginationRowModel: T === "pagination" ?
|
|
28
|
+
getCoreRowModel: _(),
|
|
29
|
+
getFilteredRowModel: v(),
|
|
30
|
+
getSortedRowModel: b(),
|
|
31
|
+
getPaginationRowModel: T === "pagination" ? y() : void 0
|
|
32
32
|
});
|
|
33
33
|
return t(() => {
|
|
34
34
|
B.setPageSize(w);
|
|
@@ -39,7 +39,7 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
39
39
|
className: "flex flex-col sm:flex-row items-center justify-between gap-4",
|
|
40
40
|
children: [/* @__PURE__ */ a("div", {
|
|
41
41
|
className: "relative w-full sm:w-96",
|
|
42
|
-
children: [/* @__PURE__ */ i(
|
|
42
|
+
children: [/* @__PURE__ */ i(m, { 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
43
|
value: P ?? "",
|
|
44
44
|
onChange: (e) => F(e.target.value),
|
|
45
45
|
placeholder: k,
|
|
@@ -48,7 +48,7 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
48
48
|
}), /* @__PURE__ */ a("button", {
|
|
49
49
|
onClick: () => L(!I),
|
|
50
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(
|
|
51
|
+
children: [/* @__PURE__ */ i(h, { size: 14 }), /* @__PURE__ */ i("span", { children: "Filters" })]
|
|
52
52
|
})]
|
|
53
53
|
}),
|
|
54
54
|
/* @__PURE__ */ a("div", {
|
|
@@ -66,16 +66,16 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
66
66
|
children: [/* @__PURE__ */ a("div", {
|
|
67
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
68
|
onClick: e.column.getToggleSortingHandler(),
|
|
69
|
-
children: [
|
|
70
|
-
asc: /* @__PURE__ */ i(
|
|
69
|
+
children: [g(e.column.columnDef.header, e.getContext()), {
|
|
70
|
+
asc: /* @__PURE__ */ i(l, {
|
|
71
71
|
size: 14,
|
|
72
72
|
className: "text-blue-500 dark:text-cyan-400"
|
|
73
73
|
}),
|
|
74
|
-
desc: /* @__PURE__ */ i(
|
|
74
|
+
desc: /* @__PURE__ */ i(o, {
|
|
75
75
|
size: 14,
|
|
76
76
|
className: "text-blue-500 dark:text-cyan-400"
|
|
77
77
|
})
|
|
78
|
-
}[e.column.getIsSorted()] ?? (e.column.getCanSort() ? /* @__PURE__ */ i(
|
|
78
|
+
}[e.column.getIsSorted()] ?? (e.column.getCanSort() ? /* @__PURE__ */ i(f, {
|
|
79
79
|
size: 14,
|
|
80
80
|
className: "opacity-0 group-hover:opacity-50"
|
|
81
81
|
}) : null)]
|
|
@@ -95,7 +95,7 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
95
95
|
className: "hover:bg-slate-50 dark:hover:bg-white/5 transition-colors group",
|
|
96
96
|
children: e.getVisibleCells().map((e) => /* @__PURE__ */ i("td", {
|
|
97
97
|
className: "px-6 py-4 text-slate-700 dark:text-slate-300 whitespace-nowrap",
|
|
98
|
-
children:
|
|
98
|
+
children: g(e.column.columnDef.cell, e.getContext())
|
|
99
99
|
}, e.id))
|
|
100
100
|
}, e.id)) : /* @__PURE__ */ i("tr", { children: /* @__PURE__ */ i("td", {
|
|
101
101
|
colSpan: S.length,
|
|
@@ -109,7 +109,7 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
109
109
|
className: "flex items-center justify-center p-4 text-slate-500 border-t border-slate-200 dark:border-white/10",
|
|
110
110
|
children: D ? /* @__PURE__ */ a("span", {
|
|
111
111
|
className: "flex items-center gap-2 text-sm",
|
|
112
|
-
children: [/* @__PURE__ */ i(
|
|
112
|
+
children: [/* @__PURE__ */ i(p, {
|
|
113
113
|
className: "animate-spin",
|
|
114
114
|
size: 14
|
|
115
115
|
}), " Loading more..."]
|
|
@@ -146,25 +146,25 @@ function S({ columns: S = [], data: C = [], pageSize: w = 10, mode: T = "paginat
|
|
|
146
146
|
onClick: () => B.setPageIndex(0),
|
|
147
147
|
disabled: !B.getCanPreviousPage(),
|
|
148
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(
|
|
149
|
+
children: /* @__PURE__ */ i(u, { size: 16 })
|
|
150
150
|
}),
|
|
151
151
|
/* @__PURE__ */ i("button", {
|
|
152
152
|
onClick: () => B.previousPage(),
|
|
153
153
|
disabled: !B.getCanPreviousPage(),
|
|
154
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(
|
|
155
|
+
children: /* @__PURE__ */ i(s, { size: 16 })
|
|
156
156
|
}),
|
|
157
157
|
/* @__PURE__ */ i("button", {
|
|
158
158
|
onClick: () => B.nextPage(),
|
|
159
159
|
disabled: !B.getCanNextPage(),
|
|
160
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(
|
|
161
|
+
children: /* @__PURE__ */ i(c, { size: 16 })
|
|
162
162
|
}),
|
|
163
163
|
/* @__PURE__ */ i("button", {
|
|
164
164
|
onClick: () => B.setPageIndex(B.getPageCount() - 1),
|
|
165
165
|
disabled: !B.getCanNextPage(),
|
|
166
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(
|
|
167
|
+
children: /* @__PURE__ */ i(d, { size: 16 })
|
|
168
168
|
})
|
|
169
169
|
]
|
|
170
170
|
})]
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export type { BoxProps } from './components/Box';
|
|
2
|
+
export { default as Box } from './components/Box';
|
|
3
|
+
export type { RudraCarouselProps } from './components/Carousel';
|
|
4
|
+
export { default as RudraCarousel } from './components/Carousel';
|
|
5
|
+
export type { RepeaterCarouselProps } from './components/DataCarousel';
|
|
6
|
+
export { default as RepeaterCarousel } from './components/DataCarousel';
|
|
1
7
|
export type { GridProps } from './components/Grid';
|
|
2
8
|
export { default as Grid } from './components/Grid';
|
|
3
9
|
export type { RepeaterProps } from './components/Repeater';
|
|
@@ -6,5 +12,7 @@ export type { RepeaterTableProps } from './components/RepeaterTable';
|
|
|
6
12
|
export { default as RepeaterTable } from './components/RepeaterTable';
|
|
7
13
|
export type { StackProps } from './components/Stack';
|
|
8
14
|
export { default as Stack } from './components/Stack';
|
|
15
|
+
export type { ComplexGridProps } from './components/StructuredGrid';
|
|
16
|
+
export { default as ComplexGrid } from './components/StructuredGrid';
|
|
9
17
|
export type { DataTableProps } from './components/Table';
|
|
10
18
|
export { default as DataTable } from './components/Table';
|
package/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import e from "./components/
|
|
3
|
-
import t from "./components/
|
|
4
|
-
import n from "./components/
|
|
5
|
-
import r from "./components/
|
|
6
|
-
import i from "./components/
|
|
7
|
-
|
|
2
|
+
import e from "./components/Box/index.js";
|
|
3
|
+
import t from "./components/Carousel/index.js";
|
|
4
|
+
import n from "./components/DataCarousel/index.js";
|
|
5
|
+
import r from "./components/Grid/index.js";
|
|
6
|
+
import i from "./components/Repeater/index.js";
|
|
7
|
+
import a from "./components/RepeaterTable/index.js";
|
|
8
|
+
import o from "./components/Stack/index.js";
|
|
9
|
+
import s from "./components/StructuredGrid/index.js";
|
|
10
|
+
import c from "./components/Table/index.js";
|
|
11
|
+
export { e as Box, s as ComplexGrid, c as DataTable, r as Grid, i as Repeater, n as RepeaterCarousel, a as RepeaterTable, t as RudraCarousel, o as Stack };
|
|
8
12
|
|
|
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: }.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-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}.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)}.outline-none{outline-offset:2px;outline:2px solid #0000}.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){}
|
|
13
|
+
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: }.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.top-1\\/2{top:50%}.z-10{z-index:10}.z-20{z-index:20}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-4{margin-top:1rem}.inline{display:inline}.flex{display:flex}.\\!table{display:table!important}.table{display:table}.grid{display:grid}.h-1{height:.25rem}.h-1\\.5{height:.375rem}.h-10{height:2.5rem}.h-4{height:1rem}.h-8{height:2rem}.min-h-\\[50px\\]{min-height:50px}.w-1{width:.25rem}.w-1\\.5{width:.375rem}.w-10{width:2.5rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\\[85\\%\\]{width:85%}.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}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-center{scroll-snap-align:center}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.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-full{border-radius:9999px}.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-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/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-40{opacity:.4}.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-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px 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)}.outline-none{outline-offset:2px;outline:2px solid #0000}.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-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.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)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.\\[-ms-overflow-style\\:none\\]{-ms-overflow-style:none}.\\[scrollbar-width\\:none\\]{scrollbar-width:none}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;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))}.hover\\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.hover\\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-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-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/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-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-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\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-0:disabled{opacity:0}.disabled\\:opacity-30:disabled{opacity:.3}.group:hover .group-hover\\:opacity-50{opacity:.5}@media (width>=640px){.sm\\:-left-4{left:-1rem}.sm\\:-right-4{right:-1rem}.sm\\:w-96{width:24rem}.sm\\:w-\\[38\\%\\]{width:38%}.sm\\:w-\\[calc\\(50\\%-1rem\\)\\]{width:calc(50% - 1rem)}.sm\\:w-auto{width:auto}.sm\\:snap-start{scroll-snap-align:start}.sm\\:flex-row{flex-direction:row}}@media (width>=768px){.md\\:w-\\[28\\%\\]{width:28%}.md\\:w-\\[calc\\(33\\.333\\%-1rem\\)\\]{width:calc(33.333% - 1rem)}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width>=1024px){.lg\\:w-\\[21\\%\\]{width:21%}.lg\\:w-\\[calc\\(25\\%-1rem\\)\\]{width:calc(25% - 1rem)}}@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}}.\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar{display:none}";const target = window.__RUDRA_SHADOW_ROOT__ || document.head; target.appendChild(e);}}catch(err){}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"dependencies": {
|
|
3
3
|
"@react-three/fiber": "9.6.1",
|
|
4
4
|
"@tanstack/react-table": "8",
|
|
5
|
-
"gsap": "3.12.
|
|
5
|
+
"gsap": "3.12.5",
|
|
6
6
|
"lucide-react": "^1.8.0",
|
|
7
7
|
"motion": "12.0.0",
|
|
8
8
|
"tailwindcss": "3.4.4",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
},
|
|
43
43
|
"types": "./index.d.ts",
|
|
44
44
|
"unpkg": "./index.umd.js",
|
|
45
|
-
"version": "1.0.
|
|
45
|
+
"version": "1.0.15"
|
|
46
46
|
}
|