@parto-system-design/ui 1.1.5 → 1.1.8
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/AGENTS.md +233 -0
- package/LICENSE +21 -0
- package/README.md +96 -43
- package/dist/chunk-2ACKKPWA.cjs +112 -0
- package/dist/chunk-2ACKKPWA.cjs.map +1 -0
- package/dist/chunk-2UD3LGVX.cjs +316 -0
- package/dist/chunk-2UD3LGVX.cjs.map +1 -0
- package/dist/chunk-3QYYPPFJ.js +269 -0
- package/dist/chunk-3QYYPPFJ.js.map +1 -0
- package/dist/chunk-4SVQNEVH.js +173 -0
- package/dist/chunk-4SVQNEVH.js.map +1 -0
- package/dist/chunk-4WONHORR.cjs +152 -0
- package/dist/chunk-4WONHORR.cjs.map +1 -0
- package/dist/chunk-5HCXH6GS.js +409 -0
- package/dist/chunk-5HCXH6GS.js.map +1 -0
- package/dist/chunk-5JJSRGJD.js +31 -0
- package/dist/chunk-5JJSRGJD.js.map +1 -0
- package/dist/chunk-5K6E4ZSW.cjs +77 -0
- package/dist/chunk-5K6E4ZSW.cjs.map +1 -0
- package/dist/chunk-5NY26ULO.js +89 -0
- package/dist/chunk-5NY26ULO.js.map +1 -0
- package/dist/chunk-7RVPG3LE.cjs +231 -0
- package/dist/chunk-7RVPG3LE.cjs.map +1 -0
- package/dist/chunk-AYEK3WOM.js +207 -0
- package/dist/chunk-AYEK3WOM.js.map +1 -0
- package/dist/chunk-BRMBLIQG.js +53 -0
- package/dist/chunk-BRMBLIQG.js.map +1 -0
- package/dist/chunk-CAJKSTXX.cjs +54 -0
- package/dist/chunk-CAJKSTXX.cjs.map +1 -0
- package/dist/chunk-CKFWMHQU.js +401 -0
- package/dist/chunk-CKFWMHQU.js.map +1 -0
- package/dist/chunk-CV3N3HVK.js +672 -0
- package/dist/chunk-CV3N3HVK.js.map +1 -0
- package/dist/chunk-D2EBLE2B.cjs +220 -0
- package/dist/chunk-D2EBLE2B.cjs.map +1 -0
- package/dist/chunk-GCZ6YATL.js +940 -0
- package/dist/chunk-GCZ6YATL.js.map +1 -0
- package/dist/chunk-GKRAZGDI.cjs +84 -0
- package/dist/chunk-GKRAZGDI.cjs.map +1 -0
- package/dist/chunk-GPYJ66CG.js +45 -0
- package/dist/chunk-GPYJ66CG.js.map +1 -0
- package/dist/chunk-HF6XU5NI.js +84 -0
- package/dist/chunk-HF6XU5NI.js.map +1 -0
- package/dist/chunk-HJPDZOMJ.cjs +87 -0
- package/dist/chunk-HJPDZOMJ.cjs.map +1 -0
- package/dist/chunk-HS3XI3CC.cjs +69 -0
- package/dist/chunk-HS3XI3CC.cjs.map +1 -0
- package/dist/chunk-HUCC3QH5.cjs +53 -0
- package/dist/chunk-HUCC3QH5.cjs.map +1 -0
- package/dist/chunk-HYZ6BQPS.cjs +425 -0
- package/dist/chunk-HYZ6BQPS.cjs.map +1 -0
- package/dist/chunk-ISCSZMYW.cjs +106 -0
- package/dist/chunk-ISCSZMYW.cjs.map +1 -0
- package/dist/chunk-IXFEFIDO.js +82 -0
- package/dist/chunk-IXFEFIDO.js.map +1 -0
- package/dist/chunk-JCJLN437.js +108 -0
- package/dist/chunk-JCJLN437.js.map +1 -0
- package/dist/chunk-JMKNNH63.cjs +982 -0
- package/dist/chunk-JMKNNH63.cjs.map +1 -0
- package/dist/chunk-JUBHQAA2.js +53 -0
- package/dist/chunk-JUBHQAA2.js.map +1 -0
- package/dist/chunk-K6G63EED.cjs +41 -0
- package/dist/chunk-K6G63EED.cjs.map +1 -0
- package/dist/chunk-KCWRCSI7.js +62 -0
- package/dist/chunk-KCWRCSI7.js.map +1 -0
- package/dist/chunk-KYM7NIJO.cjs +433 -0
- package/dist/chunk-KYM7NIJO.cjs.map +1 -0
- package/dist/chunk-L2L5CKC2.js +291 -0
- package/dist/chunk-L2L5CKC2.js.map +1 -0
- package/dist/chunk-M5CHZ5BA.js +124 -0
- package/dist/chunk-M5CHZ5BA.js.map +1 -0
- package/dist/chunk-MEK4RSGC.js +65 -0
- package/dist/chunk-MEK4RSGC.js.map +1 -0
- package/dist/chunk-MEKWH3GS.js +89 -0
- package/dist/chunk-MEKWH3GS.js.map +1 -0
- package/dist/chunk-MFTX2DDQ.js +27 -0
- package/dist/chunk-MFTX2DDQ.js.map +1 -0
- package/dist/chunk-MMC6M35Q.cjs +272 -0
- package/dist/chunk-MMC6M35Q.cjs.map +1 -0
- package/dist/chunk-NMH43BDC.js +130 -0
- package/dist/chunk-NMH43BDC.js.map +1 -0
- package/dist/chunk-NORDUD2T.cjs +135 -0
- package/dist/chunk-NORDUD2T.cjs.map +1 -0
- package/dist/chunk-NV4JOKWL.cjs +197 -0
- package/dist/chunk-NV4JOKWL.cjs.map +1 -0
- package/dist/chunk-O2JG7WY5.cjs +121 -0
- package/dist/chunk-O2JG7WY5.cjs.map +1 -0
- package/dist/chunk-ONO2FTV4.cjs +68 -0
- package/dist/chunk-ONO2FTV4.cjs.map +1 -0
- package/dist/chunk-OQB6HIUL.cjs +108 -0
- package/dist/chunk-OQB6HIUL.cjs.map +1 -0
- package/dist/chunk-OS6CMYAS.cjs +79 -0
- package/dist/chunk-OS6CMYAS.cjs.map +1 -0
- package/dist/chunk-PYURPUTV.js +402 -0
- package/dist/chunk-PYURPUTV.js.map +1 -0
- package/dist/chunk-RJ3HYZ7S.js +44 -0
- package/dist/chunk-RJ3HYZ7S.js.map +1 -0
- package/dist/chunk-RZNRIOLT.js +128 -0
- package/dist/chunk-RZNRIOLT.js.map +1 -0
- package/dist/chunk-S3T2L6NA.js +38 -0
- package/dist/chunk-S3T2L6NA.js.map +1 -0
- package/dist/chunk-S5IPJQZ3.cjs +161 -0
- package/dist/chunk-S5IPJQZ3.cjs.map +1 -0
- package/dist/chunk-SB5DSYR5.js +211 -0
- package/dist/chunk-SB5DSYR5.js.map +1 -0
- package/dist/chunk-SFXV2DUH.js +106 -0
- package/dist/chunk-SFXV2DUH.js.map +1 -0
- package/dist/chunk-SXEPGD4Z.cjs +152 -0
- package/dist/chunk-SXEPGD4Z.cjs.map +1 -0
- package/dist/chunk-SXWSOU3Y.js +89 -0
- package/dist/chunk-SXWSOU3Y.js.map +1 -0
- package/dist/chunk-SZMVOHT7.cjs +107 -0
- package/dist/chunk-SZMVOHT7.cjs.map +1 -0
- package/dist/chunk-TWJXOV4C.js +145 -0
- package/dist/chunk-TWJXOV4C.js.map +1 -0
- package/dist/chunk-U3ADRIVO.cjs +434 -0
- package/dist/chunk-U3ADRIVO.cjs.map +1 -0
- package/dist/chunk-U5FLLCGC.cjs +151 -0
- package/dist/chunk-U5FLLCGC.cjs.map +1 -0
- package/dist/chunk-UOZN45G4.cjs +130 -0
- package/dist/chunk-UOZN45G4.cjs.map +1 -0
- package/dist/chunk-VHLDOG74.cjs +167 -0
- package/dist/chunk-VHLDOG74.cjs.map +1 -0
- package/dist/chunk-YC5KLN6I.js +139 -0
- package/dist/chunk-YC5KLN6I.js.map +1 -0
- package/dist/chunk-YENXXYUV.cjs +111 -0
- package/dist/chunk-YENXXYUV.cjs.map +1 -0
- package/dist/chunk-YFQWC2PW.js +113 -0
- package/dist/chunk-YFQWC2PW.js.map +1 -0
- package/dist/chunk-Z2TY4A75.cjs +700 -0
- package/dist/chunk-Z2TY4A75.cjs.map +1 -0
- package/dist/chunk-Z56O7UEU.cjs +136 -0
- package/dist/chunk-Z56O7UEU.cjs.map +1 -0
- package/dist/chunk-ZBZDR4ZC.js +106 -0
- package/dist/chunk-ZBZDR4ZC.js.map +1 -0
- package/dist/components/charts/PartoAreaChart.cjs +15 -0
- package/dist/components/charts/PartoAreaChart.cjs.map +1 -0
- package/dist/components/charts/PartoAreaChart.d.cts +53 -0
- package/dist/components/charts/PartoAreaChart.d.ts +53 -0
- package/dist/components/charts/PartoAreaChart.js +6 -0
- package/dist/components/charts/PartoAreaChart.js.map +1 -0
- package/dist/components/charts/PartoBarChart.cjs +15 -0
- package/dist/components/charts/PartoBarChart.cjs.map +1 -0
- package/dist/components/charts/PartoBarChart.d.cts +61 -0
- package/dist/components/charts/PartoBarChart.d.ts +61 -0
- package/dist/components/charts/PartoBarChart.js +6 -0
- package/dist/components/charts/PartoBarChart.js.map +1 -0
- package/dist/components/charts/PartoLineChart.cjs +15 -0
- package/dist/components/charts/PartoLineChart.cjs.map +1 -0
- package/dist/components/charts/PartoLineChart.d.cts +57 -0
- package/dist/components/charts/PartoLineChart.d.ts +57 -0
- package/dist/components/charts/PartoLineChart.js +6 -0
- package/dist/components/charts/PartoLineChart.js.map +1 -0
- package/dist/components/charts/PartoPieChart.cjs +15 -0
- package/dist/components/charts/PartoPieChart.cjs.map +1 -0
- package/dist/components/charts/PartoPieChart.d.cts +52 -0
- package/dist/components/charts/PartoPieChart.d.ts +52 -0
- package/dist/components/charts/PartoPieChart.js +6 -0
- package/dist/components/charts/PartoPieChart.js.map +1 -0
- package/dist/components/ui/alert-rule-card.cjs +15 -0
- package/dist/components/ui/alert-rule-card.cjs.map +1 -0
- package/dist/components/ui/alert-rule-card.d.cts +38 -0
- package/dist/components/ui/alert-rule-card.d.ts +38 -0
- package/dist/components/ui/alert-rule-card.js +6 -0
- package/dist/components/ui/alert-rule-card.js.map +1 -0
- package/dist/components/ui/avatar.cjs +21 -0
- package/dist/components/ui/avatar.cjs.map +1 -0
- package/dist/components/ui/avatar.d.cts +18 -0
- package/dist/components/ui/avatar.d.ts +18 -0
- package/dist/components/ui/avatar.js +4 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.cjs +17 -0
- package/dist/components/ui/badge.cjs.map +1 -0
- package/dist/components/ui/badge.d.cts +16 -0
- package/dist/components/ui/badge.d.ts +16 -0
- package/dist/components/ui/badge.js +4 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.cjs +18 -0
- package/dist/components/ui/button.cjs.map +1 -0
- package/dist/components/ui/button.d.cts +37 -0
- package/dist/components/ui/button.d.ts +37 -0
- package/dist/components/ui/button.js +5 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.cjs +15 -0
- package/dist/components/ui/calendar.cjs.map +1 -0
- package/dist/components/ui/calendar.d.cts +17 -0
- package/dist/components/ui/calendar.d.ts +17 -0
- package/dist/components/ui/calendar.js +6 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.cjs +37 -0
- package/dist/components/ui/card.cjs.map +1 -0
- package/dist/components/ui/card.d.cts +18 -0
- package/dist/components/ui/card.d.ts +18 -0
- package/dist/components/ui/card.js +4 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/concept-card.cjs +18 -0
- package/dist/components/ui/concept-card.cjs.map +1 -0
- package/dist/components/ui/concept-card.d.cts +5 -0
- package/dist/components/ui/concept-card.d.ts +5 -0
- package/dist/components/ui/concept-card.js +9 -0
- package/dist/components/ui/concept-card.js.map +1 -0
- package/dist/components/ui/data-table.cjs +18 -0
- package/dist/components/ui/data-table.cjs.map +1 -0
- package/dist/components/ui/data-table.d.cts +181 -0
- package/dist/components/ui/data-table.d.ts +181 -0
- package/dist/components/ui/data-table.js +9 -0
- package/dist/components/ui/data-table.js.map +1 -0
- package/dist/components/ui/dialog.cjs +49 -0
- package/dist/components/ui/dialog.cjs.map +1 -0
- package/dist/components/ui/dialog.d.cts +22 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +4 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/filter-provider.cjs +20 -0
- package/dist/components/ui/filter-provider.cjs.map +1 -0
- package/dist/components/ui/filter-provider.d.cts +49 -0
- package/dist/components/ui/filter-provider.d.ts +49 -0
- package/dist/components/ui/filter-provider.js +3 -0
- package/dist/components/ui/filter-provider.js.map +1 -0
- package/dist/components/ui/input.cjs +22 -0
- package/dist/components/ui/input.cjs.map +1 -0
- package/dist/components/ui/input.d.cts +16 -0
- package/dist/components/ui/input.d.ts +16 -0
- package/dist/components/ui/input.js +5 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/iran-province-heat.cjs +13 -0
- package/dist/components/ui/iran-province-heat.cjs.map +1 -0
- package/dist/components/ui/iran-province-heat.d.cts +64 -0
- package/dist/components/ui/iran-province-heat.d.ts +64 -0
- package/dist/components/ui/iran-province-heat.js +4 -0
- package/dist/components/ui/iran-province-heat.js.map +1 -0
- package/dist/components/ui/page-card.cjs +16 -0
- package/dist/components/ui/page-card.cjs.map +1 -0
- package/dist/components/ui/page-card.d.cts +6 -0
- package/dist/components/ui/page-card.d.ts +6 -0
- package/dist/components/ui/page-card.js +7 -0
- package/dist/components/ui/page-card.js.map +1 -0
- package/dist/components/ui/popover.cjs +25 -0
- package/dist/components/ui/popover.cjs.map +1 -0
- package/dist/components/ui/popover.d.cts +9 -0
- package/dist/components/ui/popover.d.ts +9 -0
- package/dist/components/ui/popover.js +4 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/saved-query-card.cjs +15 -0
- package/dist/components/ui/saved-query-card.cjs.map +1 -0
- package/dist/components/ui/saved-query-card.d.cts +41 -0
- package/dist/components/ui/saved-query-card.d.ts +41 -0
- package/dist/components/ui/saved-query-card.js +6 -0
- package/dist/components/ui/saved-query-card.js.map +1 -0
- package/dist/components/ui/separator.cjs +13 -0
- package/dist/components/ui/separator.cjs.map +1 -0
- package/dist/components/ui/separator.d.cts +9 -0
- package/dist/components/ui/separator.d.ts +9 -0
- package/dist/components/ui/separator.js +4 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.cjs +45 -0
- package/dist/components/ui/sheet.cjs.map +1 -0
- package/dist/components/ui/sheet.d.cts +44 -0
- package/dist/components/ui/sheet.d.ts +44 -0
- package/dist/components/ui/sheet.js +4 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sparkline.cjs +13 -0
- package/dist/components/ui/sparkline.cjs.map +1 -0
- package/dist/components/ui/sparkline.d.cts +36 -0
- package/dist/components/ui/sparkline.d.ts +36 -0
- package/dist/components/ui/sparkline.js +4 -0
- package/dist/components/ui/sparkline.js.map +1 -0
- package/dist/components/ui/tooltip.cjs +25 -0
- package/dist/components/ui/tooltip.cjs.map +1 -0
- package/dist/components/ui/tooltip.d.cts +17 -0
- package/dist/components/ui/tooltip.d.ts +17 -0
- package/dist/components/ui/tooltip.js +4 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/concept-card-CcOBb2Nz.d.ts +83 -0
- package/dist/concept-card-RwPbqJ06.d.cts +83 -0
- package/dist/hooks/use-hotkey-registry.cjs +21 -0
- package/dist/hooks/use-hotkey-registry.cjs.map +1 -0
- package/dist/hooks/use-hotkey-registry.d.cts +65 -0
- package/dist/hooks/use-hotkey-registry.d.ts +65 -0
- package/dist/hooks/use-hotkey-registry.js +4 -0
- package/dist/hooks/use-hotkey-registry.js.map +1 -0
- package/dist/hooks/use-hotkeys.cjs +16 -0
- package/dist/hooks/use-hotkeys.cjs.map +1 -0
- package/dist/hooks/use-hotkeys.d.cts +66 -0
- package/dist/hooks/use-hotkeys.d.ts +66 -0
- package/dist/hooks/use-hotkeys.js +3 -0
- package/dist/hooks/use-hotkeys.js.map +1 -0
- package/dist/i18n-ArS3mqj0.d.ts +344 -0
- package/dist/i18n-CAd9wGOr.d.cts +344 -0
- package/dist/index.cjs +12195 -13224
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +490 -34
- package/dist/index.d.cts +1635 -1263
- package/dist/index.d.ts +1635 -1263
- package/dist/index.js +10693 -12364
- package/dist/index.js.map +1 -1
- package/dist/page-card-CmShVqG-.d.cts +100 -0
- package/dist/page-card-HBn-cy4J.d.ts +100 -0
- package/dist/utils-DlXWmDZ-.d.cts +35 -0
- package/dist/utils-DlXWmDZ-.d.ts +35 -0
- package/package.json +160 -4
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { cn } from './chunk-4SVQNEVH.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var skeletonVariants = cva("bg-accent animate-pulse", {
|
|
6
|
+
variants: {
|
|
7
|
+
shape: {
|
|
8
|
+
rect: "rounded-md",
|
|
9
|
+
line: "rounded-full h-4 w-full",
|
|
10
|
+
circle: "rounded-full",
|
|
11
|
+
text: "rounded h-4"
|
|
12
|
+
},
|
|
13
|
+
size: {
|
|
14
|
+
sm: "",
|
|
15
|
+
md: "",
|
|
16
|
+
lg: ""
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
compoundVariants: [
|
|
20
|
+
{ shape: "circle", size: "sm", class: "size-8" },
|
|
21
|
+
{ shape: "circle", size: "md", class: "size-10" },
|
|
22
|
+
{ shape: "circle", size: "lg", class: "size-14" }
|
|
23
|
+
],
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
shape: "rect",
|
|
26
|
+
size: "md"
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
function Skeleton({ className, shape, size, count, ...props }) {
|
|
30
|
+
if (count && count > 1) {
|
|
31
|
+
return /* @__PURE__ */ jsx("div", { role: "status", "aria-busy": "true", "aria-label": "Loading", className: "space-y-2", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
"data-slot": "skeleton",
|
|
35
|
+
"aria-hidden": "true",
|
|
36
|
+
className: cn(skeletonVariants({ shape, size }), className)
|
|
37
|
+
},
|
|
38
|
+
i
|
|
39
|
+
)) });
|
|
40
|
+
}
|
|
41
|
+
return /* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
"data-slot": "skeleton",
|
|
45
|
+
role: "status",
|
|
46
|
+
"aria-busy": "true",
|
|
47
|
+
"aria-label": "Loading",
|
|
48
|
+
...props,
|
|
49
|
+
className: cn(skeletonVariants({ shape, size }), className)
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
Skeleton.displayName = "Skeleton";
|
|
54
|
+
function MetricCardSkeleton({ className }) {
|
|
55
|
+
return /* @__PURE__ */ jsxs(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "metric-card-skeleton",
|
|
59
|
+
role: "status",
|
|
60
|
+
"aria-busy": "true",
|
|
61
|
+
"aria-label": "Loading metric",
|
|
62
|
+
className: cn("rounded-lg border border-border bg-card p-4 space-y-3", className),
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-3 w-1/3", "aria-hidden": "true" }),
|
|
65
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "rect", className: "h-8 w-1/2", "aria-hidden": "true" }),
|
|
66
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-3 w-1/4", "aria-hidden": "true" })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
MetricCardSkeleton.displayName = "MetricCardSkeleton";
|
|
72
|
+
function ChartSkeleton({ className }) {
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
"div",
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "chart-skeleton",
|
|
77
|
+
role: "status",
|
|
78
|
+
"aria-busy": "true",
|
|
79
|
+
"aria-label": "Loading chart",
|
|
80
|
+
className: cn("w-full rounded-md overflow-hidden", className),
|
|
81
|
+
children: /* @__PURE__ */ jsx(Skeleton, { shape: "rect", className: "w-full h-full min-h-[200px]", "aria-hidden": "true" })
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
ChartSkeleton.displayName = "ChartSkeleton";
|
|
86
|
+
function TableSkeleton({ rows = 5, className }) {
|
|
87
|
+
return /* @__PURE__ */ jsxs(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
"data-slot": "table-skeleton",
|
|
91
|
+
role: "status",
|
|
92
|
+
"aria-busy": "true",
|
|
93
|
+
"aria-label": "Loading table",
|
|
94
|
+
className: cn("w-full rounded-md border border-border overflow-hidden", className),
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-4 bg-muted/50 px-4 py-3 border-b border-border", "aria-hidden": "true", children: [
|
|
97
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
98
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
99
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
100
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 w-16" })
|
|
101
|
+
] }),
|
|
102
|
+
Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ jsxs(
|
|
103
|
+
"div",
|
|
104
|
+
{
|
|
105
|
+
"aria-hidden": "true",
|
|
106
|
+
className: cn("flex gap-4 px-4 py-3", i !== rows - 1 && "border-b border-border"),
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
109
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
110
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 flex-1" }),
|
|
111
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 w-16" })
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
i
|
|
115
|
+
))
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
TableSkeleton.displayName = "TableSkeleton";
|
|
121
|
+
function TableRowSkeleton({ cells = 4, className }) {
|
|
122
|
+
return /* @__PURE__ */ jsx("tr", { "data-slot": "table-row-skeleton", "aria-busy": "true", className, children: Array.from({ length: cells }).map((_, i) => /* @__PURE__ */ jsx("td", { className: "px-3 py-2.5", "aria-hidden": "true", children: /* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-3.5 w-full max-w-[140px]" }) }, i)) });
|
|
123
|
+
}
|
|
124
|
+
TableRowSkeleton.displayName = "TableRowSkeleton";
|
|
125
|
+
function CardSkeleton({
|
|
126
|
+
withImage = false,
|
|
127
|
+
imageAspect = "video",
|
|
128
|
+
bodyLines = 2,
|
|
129
|
+
withFooter = false,
|
|
130
|
+
className
|
|
131
|
+
}) {
|
|
132
|
+
const aspectClass = imageAspect === "square" ? "aspect-square" : imageAspect === "wide" ? "aspect-[21/9]" : "aspect-video";
|
|
133
|
+
return /* @__PURE__ */ jsxs(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
"data-slot": "card-skeleton",
|
|
137
|
+
role: "status",
|
|
138
|
+
"aria-busy": "true",
|
|
139
|
+
"aria-label": "Loading card",
|
|
140
|
+
className: cn("rounded-lg border border-border bg-card overflow-hidden flex flex-col", className),
|
|
141
|
+
children: [
|
|
142
|
+
withImage && /* @__PURE__ */ jsx(Skeleton, { shape: "rect", className: cn("w-full", aspectClass), "aria-hidden": "true" }),
|
|
143
|
+
/* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3 flex-1", children: [
|
|
144
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-4 w-3/5", "aria-hidden": "true" }),
|
|
145
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-2", children: Array.from({ length: bodyLines }).map((_, i) => /* @__PURE__ */ jsx(
|
|
146
|
+
Skeleton,
|
|
147
|
+
{
|
|
148
|
+
shape: "line",
|
|
149
|
+
className: cn("h-3", i === bodyLines - 1 ? "w-2/3" : "w-full"),
|
|
150
|
+
"aria-hidden": "true"
|
|
151
|
+
},
|
|
152
|
+
i
|
|
153
|
+
)) })
|
|
154
|
+
] }),
|
|
155
|
+
withFooter && /* @__PURE__ */ jsxs("div", { className: "p-4 border-t border-border flex items-center justify-between gap-2", children: [
|
|
156
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-3 w-1/4", "aria-hidden": "true" }),
|
|
157
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "rect", className: "h-8 w-20", "aria-hidden": "true" })
|
|
158
|
+
] })
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
CardSkeleton.displayName = "CardSkeleton";
|
|
164
|
+
function AvatarTextSkeleton({ size = "md", lines = 2, className }) {
|
|
165
|
+
return /* @__PURE__ */ jsxs(
|
|
166
|
+
"div",
|
|
167
|
+
{
|
|
168
|
+
"data-slot": "avatar-text-skeleton",
|
|
169
|
+
role: "status",
|
|
170
|
+
"aria-busy": "true",
|
|
171
|
+
"aria-label": "Loading user",
|
|
172
|
+
className: cn("flex items-center gap-3", className),
|
|
173
|
+
children: [
|
|
174
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "circle", size, "aria-hidden": "true" }),
|
|
175
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0 space-y-2", children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx(
|
|
176
|
+
Skeleton,
|
|
177
|
+
{
|
|
178
|
+
shape: "line",
|
|
179
|
+
className: cn("h-3", i === 0 ? "w-1/3" : i === lines - 1 ? "w-1/2" : "w-full"),
|
|
180
|
+
"aria-hidden": "true"
|
|
181
|
+
},
|
|
182
|
+
i
|
|
183
|
+
)) })
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
AvatarTextSkeleton.displayName = "AvatarTextSkeleton";
|
|
189
|
+
function FormRowSkeleton({ field = "input", withHelp = false, className }) {
|
|
190
|
+
const inputClass = field === "textarea" ? "h-20" : field === "select" ? "h-9" : "h-9";
|
|
191
|
+
return /* @__PURE__ */ jsxs(
|
|
192
|
+
"div",
|
|
193
|
+
{
|
|
194
|
+
"data-slot": "form-row-skeleton",
|
|
195
|
+
role: "status",
|
|
196
|
+
"aria-busy": "true",
|
|
197
|
+
"aria-label": "Loading form field",
|
|
198
|
+
className: cn("space-y-2", className),
|
|
199
|
+
children: [
|
|
200
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-3 w-1/4", "aria-hidden": "true" }),
|
|
201
|
+
/* @__PURE__ */ jsx(Skeleton, { shape: "rect", className: cn("w-full", inputClass), "aria-hidden": "true" }),
|
|
202
|
+
withHelp && /* @__PURE__ */ jsx(Skeleton, { shape: "line", className: "h-2.5 w-1/3", "aria-hidden": "true" })
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
FormRowSkeleton.displayName = "FormRowSkeleton";
|
|
208
|
+
|
|
209
|
+
export { AvatarTextSkeleton, CardSkeleton, ChartSkeleton, FormRowSkeleton, MetricCardSkeleton, Skeleton, TableRowSkeleton, TableSkeleton };
|
|
210
|
+
//# sourceMappingURL=chunk-SB5DSYR5.js.map
|
|
211
|
+
//# sourceMappingURL=chunk-SB5DSYR5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/skeleton.tsx"],"names":[],"mappings":"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","file":"chunk-SB5DSYR5.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst skeletonVariants = cva('bg-accent animate-pulse', {\n variants: {\n shape: {\n rect: 'rounded-md',\n line: 'rounded-full h-4 w-full',\n circle: 'rounded-full',\n text: 'rounded h-4',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n { shape: 'circle', size: 'sm', class: 'size-8' },\n { shape: 'circle', size: 'md', class: 'size-10' },\n { shape: 'circle', size: 'lg', class: 'size-14' },\n ],\n defaultVariants: {\n shape: 'rect',\n size: 'md',\n },\n})\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {\n /**\n * تعداد عناصر skeleton برای نمایش (برای shape های line و text)\n * Number of skeleton elements to repeat (for line/text shapes)\n */\n count?: number\n}\n\nfunction Skeleton({ className, shape, size, count, ...props }: SkeletonProps) {\n if (count && count > 1) {\n return (\n <div role=\"status\" aria-busy=\"true\" aria-label=\"Loading\" className=\"space-y-2\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n data-slot=\"skeleton\"\n aria-hidden=\"true\"\n className={cn(skeletonVariants({ shape, size }), className)}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n data-slot=\"skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading\"\n {...props}\n className={cn(skeletonVariants({ shape, size }), className)}\n />\n )\n}\n\nSkeleton.displayName = 'Skeleton'\n\n/* -------------------------------------------------------------------------- */\n/* Named Skeleton Presets */\n/* -------------------------------------------------------------------------- */\n\nexport interface MetricCardSkeletonProps {\n className?: string\n}\n\nfunction MetricCardSkeleton({ className }: MetricCardSkeletonProps) {\n return (\n <div\n data-slot=\"metric-card-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading metric\"\n className={cn('rounded-lg border border-border bg-card p-4 space-y-3', className)}\n >\n <Skeleton shape=\"line\" className=\"h-3 w-1/3\" aria-hidden=\"true\" />\n <Skeleton shape=\"rect\" className=\"h-8 w-1/2\" aria-hidden=\"true\" />\n <Skeleton shape=\"line\" className=\"h-3 w-1/4\" aria-hidden=\"true\" />\n </div>\n )\n}\nMetricCardSkeleton.displayName = 'MetricCardSkeleton'\n\nexport interface ChartSkeletonProps {\n className?: string\n}\n\nfunction ChartSkeleton({ className }: ChartSkeletonProps) {\n return (\n <div\n data-slot=\"chart-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading chart\"\n className={cn('w-full rounded-md overflow-hidden', className)}\n >\n <Skeleton shape=\"rect\" className=\"w-full h-full min-h-[200px]\" aria-hidden=\"true\" />\n </div>\n )\n}\nChartSkeleton.displayName = 'ChartSkeleton'\n\nexport interface TableSkeletonProps {\n rows?: number\n className?: string\n}\n\nfunction TableSkeleton({ rows = 5, className }: TableSkeletonProps) {\n return (\n <div\n data-slot=\"table-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading table\"\n className={cn('w-full rounded-md border border-border overflow-hidden', className)}\n >\n <div className=\"flex gap-4 bg-muted/50 px-4 py-3 border-b border-border\" aria-hidden=\"true\">\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 w-16\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n aria-hidden=\"true\"\n className={cn('flex gap-4 px-4 py-3', i !== rows - 1 && 'border-b border-border')}\n >\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 flex-1\" />\n <Skeleton shape=\"line\" className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n )\n}\nTableSkeleton.displayName = 'TableSkeleton'\n\n/* -------------------------------------------------------------------------- */\n/* TableRowSkeleton — a single row inside an existing table */\n/* -------------------------------------------------------------------------- */\n\nexport interface TableRowSkeletonProps {\n /** Number of cells in the row */\n cells?: number\n className?: string\n}\n\nfunction TableRowSkeleton({ cells = 4, className }: TableRowSkeletonProps) {\n // Don't assign role=\"status\" to <tr> — it's a table-row element and\n // ARIA disallows that combination. The cell <td>s carry aria-hidden so\n // screen readers stay quiet during the brief loading window.\n return (\n <tr data-slot=\"table-row-skeleton\" aria-busy=\"true\" className={className}>\n {Array.from({ length: cells }).map((_, i) => (\n <td key={i} className=\"px-3 py-2.5\" aria-hidden=\"true\">\n <Skeleton shape=\"line\" className=\"h-3.5 w-full max-w-[140px]\" />\n </td>\n ))}\n </tr>\n )\n}\nTableRowSkeleton.displayName = 'TableRowSkeleton'\n\n/* -------------------------------------------------------------------------- */\n/* CardSkeleton — typical card with title + body lines + optional image */\n/* -------------------------------------------------------------------------- */\n\nexport interface CardSkeletonProps {\n /** Show a leading image/thumbnail block @default false */\n withImage?: boolean\n /** Aspect ratio of the image (when withImage) @default 'video' */\n imageAspect?: 'video' | 'square' | 'wide'\n /** Number of body lines @default 2 */\n bodyLines?: number\n /** Show a footer row (button-shaped placeholder) @default false */\n withFooter?: boolean\n className?: string\n}\n\nfunction CardSkeleton({\n withImage = false,\n imageAspect = 'video',\n bodyLines = 2,\n withFooter = false,\n className,\n}: CardSkeletonProps) {\n const aspectClass =\n imageAspect === 'square' ? 'aspect-square' : imageAspect === 'wide' ? 'aspect-[21/9]' : 'aspect-video'\n return (\n <div\n data-slot=\"card-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading card\"\n className={cn('rounded-lg border border-border bg-card overflow-hidden flex flex-col', className)}\n >\n {withImage && <Skeleton shape=\"rect\" className={cn('w-full', aspectClass)} aria-hidden=\"true\" />}\n <div className=\"p-4 space-y-3 flex-1\">\n <Skeleton shape=\"line\" className=\"h-4 w-3/5\" aria-hidden=\"true\" />\n <div className=\"space-y-2\">\n {Array.from({ length: bodyLines }).map((_, i) => (\n <Skeleton\n key={i}\n shape=\"line\"\n className={cn('h-3', i === bodyLines - 1 ? 'w-2/3' : 'w-full')}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n </div>\n {withFooter && (\n <div className=\"p-4 border-t border-border flex items-center justify-between gap-2\">\n <Skeleton shape=\"line\" className=\"h-3 w-1/4\" aria-hidden=\"true\" />\n <Skeleton shape=\"rect\" className=\"h-8 w-20\" aria-hidden=\"true\" />\n </div>\n )}\n </div>\n )\n}\nCardSkeleton.displayName = 'CardSkeleton'\n\n/* -------------------------------------------------------------------------- */\n/* AvatarTextSkeleton — circle avatar + 2 text lines (list/comment style) */\n/* -------------------------------------------------------------------------- */\n\nexport interface AvatarTextSkeletonProps {\n /** Avatar size @default 'md' */\n size?: 'sm' | 'md' | 'lg'\n /** Number of text lines beside the avatar @default 2 */\n lines?: number\n className?: string\n}\n\nfunction AvatarTextSkeleton({ size = 'md', lines = 2, className }: AvatarTextSkeletonProps) {\n return (\n <div\n data-slot=\"avatar-text-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading user\"\n className={cn('flex items-center gap-3', className)}\n >\n <Skeleton shape=\"circle\" size={size} aria-hidden=\"true\" />\n <div className=\"flex-1 min-w-0 space-y-2\">\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n shape=\"line\"\n className={cn('h-3', i === 0 ? 'w-1/3' : i === lines - 1 ? 'w-1/2' : 'w-full')}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n </div>\n )\n}\nAvatarTextSkeleton.displayName = 'AvatarTextSkeleton'\n\n/* -------------------------------------------------------------------------- */\n/* FormRowSkeleton — label + input placeholder for forms */\n/* -------------------------------------------------------------------------- */\n\nexport interface FormRowSkeletonProps {\n /** Field shape — 'input' (one-line), 'textarea' (3-line), 'select' (input + chevron) */\n field?: 'input' | 'textarea' | 'select'\n /** Show help text line below input @default false */\n withHelp?: boolean\n className?: string\n}\n\nfunction FormRowSkeleton({ field = 'input', withHelp = false, className }: FormRowSkeletonProps) {\n const inputClass = field === 'textarea' ? 'h-20' : field === 'select' ? 'h-9' : 'h-9'\n return (\n <div\n data-slot=\"form-row-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading form field\"\n className={cn('space-y-2', className)}\n >\n <Skeleton shape=\"line\" className=\"h-3 w-1/4\" aria-hidden=\"true\" />\n <Skeleton shape=\"rect\" className={cn('w-full', inputClass)} aria-hidden=\"true\" />\n {withHelp && <Skeleton shape=\"line\" className=\"h-2.5 w-1/3\" aria-hidden=\"true\" />}\n </div>\n )\n}\nFormRowSkeleton.displayName = 'FormRowSkeleton'\n\nexport {\n Skeleton,\n MetricCardSkeleton,\n ChartSkeleton,\n TableSkeleton,\n TableRowSkeleton,\n CardSkeleton,\n AvatarTextSkeleton,\n FormRowSkeleton,\n}\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { cn } from './chunk-4SVQNEVH.js';
|
|
2
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
3
|
+
import { XIcon } from 'lucide-react';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function Sheet({ ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
8
|
+
}
|
|
9
|
+
function SheetTrigger({ ...props }) {
|
|
10
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
11
|
+
}
|
|
12
|
+
function SheetClose({ ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
14
|
+
}
|
|
15
|
+
function SheetPortal({ ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
17
|
+
}
|
|
18
|
+
function SheetOverlay({ className, ...props }) {
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
SheetPrimitive.Overlay,
|
|
21
|
+
{
|
|
22
|
+
"data-slot": "sheet-overlay",
|
|
23
|
+
className: cn(
|
|
24
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
...props
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
function SheetContent({
|
|
32
|
+
className,
|
|
33
|
+
children,
|
|
34
|
+
side = "right",
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
return /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
38
|
+
/* @__PURE__ */ jsx(SheetOverlay, {}),
|
|
39
|
+
/* @__PURE__ */ jsxs(
|
|
40
|
+
SheetPrimitive.Content,
|
|
41
|
+
{
|
|
42
|
+
"data-slot": "sheet-content",
|
|
43
|
+
className: cn(
|
|
44
|
+
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-300",
|
|
45
|
+
side === "right" && "data-[state=closed]:slide-out-to-right data-[state=closed]:rtl:slide-out-to-left data-[state=open]:slide-in-from-right data-[state=open]:rtl:slide-in-from-left inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm",
|
|
46
|
+
side === "left" && "data-[state=closed]:slide-out-to-left data-[state=closed]:rtl:slide-out-to-right data-[state=open]:slide-in-from-left data-[state=open]:rtl:slide-in-from-right inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm",
|
|
47
|
+
side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
|
|
48
|
+
side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
...props,
|
|
52
|
+
children: [
|
|
53
|
+
children,
|
|
54
|
+
/* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute top-4 end-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted", children: [
|
|
55
|
+
/* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
|
|
56
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "\u0628\u0633\u062A\u0646" })
|
|
57
|
+
] })
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
] });
|
|
62
|
+
}
|
|
63
|
+
function SheetHeader({ className, ...props }) {
|
|
64
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-1.5 p-4", className), ...props });
|
|
65
|
+
}
|
|
66
|
+
function SheetBody({ className, ...props }) {
|
|
67
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "sheet-body", className: cn("flex-1 overflow-y-auto px-4 pb-4", className), ...props });
|
|
68
|
+
}
|
|
69
|
+
function SheetFooter({ className, ...props }) {
|
|
70
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "sheet-footer", className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props });
|
|
71
|
+
}
|
|
72
|
+
function SheetTitle({ className, ...props }) {
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
SheetPrimitive.Title,
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "sheet-title",
|
|
77
|
+
className: cn("text-foreground font-semibold", className),
|
|
78
|
+
...props
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
function SheetDescription({ className, ...props }) {
|
|
83
|
+
return /* @__PURE__ */ jsx(
|
|
84
|
+
SheetPrimitive.Description,
|
|
85
|
+
{
|
|
86
|
+
"data-slot": "sheet-description",
|
|
87
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
88
|
+
...props
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
Sheet.displayName = "Sheet";
|
|
93
|
+
SheetTrigger.displayName = "SheetTrigger";
|
|
94
|
+
SheetClose.displayName = "SheetClose";
|
|
95
|
+
SheetPortal.displayName = "SheetPortal";
|
|
96
|
+
SheetOverlay.displayName = "SheetOverlay";
|
|
97
|
+
SheetContent.displayName = "SheetContent";
|
|
98
|
+
SheetHeader.displayName = "SheetHeader";
|
|
99
|
+
SheetBody.displayName = "SheetBody";
|
|
100
|
+
SheetFooter.displayName = "SheetFooter";
|
|
101
|
+
SheetTitle.displayName = "SheetTitle";
|
|
102
|
+
SheetDescription.displayName = "SheetDescription";
|
|
103
|
+
|
|
104
|
+
export { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };
|
|
105
|
+
//# sourceMappingURL=chunk-SFXV2DUH.js.map
|
|
106
|
+
//# sourceMappingURL=chunk-SFXV2DUH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/sheet.tsx"],"names":[],"mappings":"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","file":"chunk-SFXV2DUH.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SheetPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-300',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=closed]:rtl:slide-out-to-left data-[state=open]:slide-in-from-right data-[state=open]:rtl:slide-in-from-left inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=closed]:rtl:slide-out-to-right data-[state=open]:slide-in-from-left data-[state=open]:rtl:slide-in-from-right inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute top-4 end-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-default focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-selection data-[state=open]:text-foreground-muted\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">بستن</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n}\n\nfunction SheetBody({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-body\" className={cn('flex-1 overflow-y-auto px-4 pb-4', className)} {...props} />\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-footer\" className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nSheet.displayName = 'Sheet'\nSheetTrigger.displayName = 'SheetTrigger'\nSheetClose.displayName = 'SheetClose'\nSheetPortal.displayName = 'SheetPortal'\nSheetOverlay.displayName = 'SheetOverlay'\nSheetContent.displayName = 'SheetContent'\nSheetHeader.displayName = 'SheetHeader'\nSheetBody.displayName = 'SheetBody'\nSheetFooter.displayName = 'SheetFooter'\nSheetTitle.displayName = 'SheetTitle'\nSheetDescription.displayName = 'SheetDescription'\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkNV4JOKWL_cjs = require('./chunk-NV4JOKWL.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule) return e;
|
|
10
|
+
var n = Object.create(null);
|
|
11
|
+
if (e) {
|
|
12
|
+
Object.keys(e).forEach(function (k) {
|
|
13
|
+
if (k !== 'default') {
|
|
14
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return e[k]; }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
27
|
+
|
|
28
|
+
var cardVariants = classVarianceAuthority.cva(
|
|
29
|
+
// A Card is a visual container, not a focusable surface. Do not apply
|
|
30
|
+
// focus-within rings to the base — that bleeds the ring of whatever
|
|
31
|
+
// input/button inside has focus onto the whole card. The `interactive`
|
|
32
|
+
// variant below opts into focus-visible explicitly because it IS clickable.
|
|
33
|
+
"overflow-hidden rounded-lg text-card-foreground transition-all duration-200",
|
|
34
|
+
{
|
|
35
|
+
variants: {
|
|
36
|
+
variant: {
|
|
37
|
+
default: "border bg-surface-100 shadow-sm",
|
|
38
|
+
outlined: "border-2 border-border bg-transparent",
|
|
39
|
+
elevated: "bg-surface-100 shadow-card hover:shadow-lg",
|
|
40
|
+
interactive: "border bg-surface-100 shadow-sm hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0 active:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
41
|
+
glass: "border border-border/50 bg-background/80 backdrop-blur-sm shadow-sm"
|
|
42
|
+
},
|
|
43
|
+
size: {
|
|
44
|
+
sm: "",
|
|
45
|
+
md: "",
|
|
46
|
+
lg: ""
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
defaultVariants: {
|
|
50
|
+
variant: "default",
|
|
51
|
+
size: "md"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
var Card = React__namespace.forwardRef(({ className, variant, size = "md", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
ref,
|
|
59
|
+
"data-slot": "card",
|
|
60
|
+
"data-size": size,
|
|
61
|
+
className: chunkNV4JOKWL_cjs.cn(cardVariants({ variant, size }), className),
|
|
62
|
+
...props
|
|
63
|
+
}
|
|
64
|
+
));
|
|
65
|
+
Card.displayName = "Card";
|
|
66
|
+
var CardHeader = React__namespace.forwardRef(
|
|
67
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
ref,
|
|
71
|
+
"data-slot": "card-header",
|
|
72
|
+
className: chunkNV4JOKWL_cjs.cn(
|
|
73
|
+
"flex flex-col space-y-1.5 border-b",
|
|
74
|
+
// Size variants inherited from Card
|
|
75
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
76
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
77
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
...props
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
CardHeader.displayName = "CardHeader";
|
|
85
|
+
var CardTitle = React__namespace.forwardRef(
|
|
86
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
+
"h3",
|
|
88
|
+
{
|
|
89
|
+
ref,
|
|
90
|
+
"data-slot": "card-title",
|
|
91
|
+
className: chunkNV4JOKWL_cjs.cn(
|
|
92
|
+
"font-semibold leading-tight tracking-tight",
|
|
93
|
+
"[[data-size=sm]_&]:text-sm",
|
|
94
|
+
"[[data-size=md]_&]:text-base",
|
|
95
|
+
"[[data-size=lg]_&]:text-lg",
|
|
96
|
+
className
|
|
97
|
+
),
|
|
98
|
+
...props
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
);
|
|
102
|
+
CardTitle.displayName = "CardTitle";
|
|
103
|
+
var CardDescription = React__namespace.forwardRef(
|
|
104
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("p", { ref, "data-slot": "card-description", className: chunkNV4JOKWL_cjs.cn("text-sm text-foreground-muted", className), ...props })
|
|
105
|
+
);
|
|
106
|
+
CardDescription.displayName = "CardDescription";
|
|
107
|
+
var CardContent = React__namespace.forwardRef(
|
|
108
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
"div",
|
|
110
|
+
{
|
|
111
|
+
ref,
|
|
112
|
+
"data-slot": "card-content",
|
|
113
|
+
className: chunkNV4JOKWL_cjs.cn(
|
|
114
|
+
"border-b last:border-none",
|
|
115
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
116
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
117
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
118
|
+
className
|
|
119
|
+
),
|
|
120
|
+
...props
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
CardContent.displayName = "CardContent";
|
|
125
|
+
var CardFooter = React__namespace.forwardRef(
|
|
126
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
ref,
|
|
130
|
+
"data-slot": "card-footer",
|
|
131
|
+
className: chunkNV4JOKWL_cjs.cn(
|
|
132
|
+
"flex items-center",
|
|
133
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
134
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
135
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
136
|
+
className
|
|
137
|
+
),
|
|
138
|
+
...props
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
);
|
|
142
|
+
CardFooter.displayName = "CardFooter";
|
|
143
|
+
|
|
144
|
+
exports.Card = Card;
|
|
145
|
+
exports.CardContent = CardContent;
|
|
146
|
+
exports.CardDescription = CardDescription;
|
|
147
|
+
exports.CardFooter = CardFooter;
|
|
148
|
+
exports.CardHeader = CardHeader;
|
|
149
|
+
exports.CardTitle = CardTitle;
|
|
150
|
+
exports.cardVariants = cardVariants;
|
|
151
|
+
//# sourceMappingURL=chunk-SXEPGD4Z.cjs.map
|
|
152
|
+
//# sourceMappingURL=chunk-SXEPGD4Z.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/card.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,YAAA,GAAeA,0BAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,6EAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,iCAAA;AAAA,QACT,QAAA,EAAU,uCAAA;AAAA,QACV,QAAA,EAAU,4CAAA;AAAA,QACV,WAAA,EACE,iOAAA;AAAA,QACF,KAAA,EAAO;AAAA,OACT;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAIA,IAAM,IAAA,GAAaC,gBAAA,CAAA,UAAA,CAAsC,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,GAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvGC,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,MAAA;AAAA,IACV,WAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAWC,qBAAG,YAAA,CAAa,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,IAAA,CAAK,WAAA,GAAc,MAAA;AAMnB,IAAM,UAAA,GAAmBF,gBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,oCAAA;AAAA;AAAA,QAEA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAMzB,IAAM,SAAA,GAAkBF,gBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBC,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,4CAAA;AAAA,QACA,4BAAA;AAAA,QACA,8BAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAMxB,IAAM,eAAA,GAAwBF,gBAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBC,cAAA,CAAC,GAAA,EAAA,EAAE,GAAA,EAAU,WAAA,EAAU,oBAAmB,SAAA,EAAWC,oBAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEpH;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAM9B,IAAM,WAAA,GAAoBF,gBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,2BAAA;AAAA,QACA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAM1B,IAAM,UAAA,GAAmBF,gBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,mBAAA;AAAA,QACA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-SXEPGD4Z.cjs","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Card */\n/* -------------------------------------------------------------------------- */\n\nconst cardVariants = cva(\n // A Card is a visual container, not a focusable surface. Do not apply\n // focus-within rings to the base — that bleeds the ring of whatever\n // input/button inside has focus onto the whole card. The `interactive`\n // variant below opts into focus-visible explicitly because it IS clickable.\n 'overflow-hidden rounded-lg text-card-foreground transition-all duration-200',\n {\n variants: {\n variant: {\n default: 'border bg-surface-100 shadow-sm',\n outlined: 'border-2 border-border bg-transparent',\n elevated: 'bg-surface-100 shadow-card hover:shadow-lg',\n interactive:\n 'border bg-surface-100 shadow-sm hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0 active:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n glass: 'border border-border/50 bg-background/80 backdrop-blur-sm shadow-sm',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, variant, size = 'md', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n data-size={size}\n className={cn(cardVariants({ variant, size }), className)}\n {...props}\n />\n))\nCard.displayName = 'Card'\n\n/* -------------------------------------------------------------------------- */\n/* CardHeader */\n/* -------------------------------------------------------------------------- */\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\n 'flex flex-col space-y-1.5 border-b',\n // Size variants inherited from Card\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\n/* -------------------------------------------------------------------------- */\n/* CardTitle */\n/* -------------------------------------------------------------------------- */\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'font-semibold leading-tight tracking-tight',\n '[[data-size=sm]_&]:text-sm',\n '[[data-size=md]_&]:text-base',\n '[[data-size=lg]_&]:text-lg',\n className\n )}\n {...props}\n />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\n/* -------------------------------------------------------------------------- */\n/* CardDescription */\n/* -------------------------------------------------------------------------- */\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} data-slot=\"card-description\" className={cn('text-sm text-foreground-muted', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\n/* -------------------------------------------------------------------------- */\n/* CardContent */\n/* -------------------------------------------------------------------------- */\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn(\n 'border-b last:border-none',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardContent.displayName = 'CardContent'\n\n/* -------------------------------------------------------------------------- */\n/* CardFooter */\n/* -------------------------------------------------------------------------- */\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\n 'flex items-center',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, cardVariants, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\nexport type { CardProps }\n"]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Button } from './chunk-3QYYPPFJ.js';
|
|
2
|
+
import { cn, convertToLocalNumbers } from './chunk-4SVQNEVH.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Search, Star, Clock, Play } from 'lucide-react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var STRINGS = {
|
|
8
|
+
fa: { run: "\u0627\u062C\u0631\u0627", runs: "\u0627\u062C\u0631\u0627", star: "\u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC", unstar: "\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627" },
|
|
9
|
+
ar: { run: "\u062A\u0634\u063A\u064A\u0644", runs: "\u062A\u0634\u063A\u064A\u0644", star: "\u0645\u0641\u0636\u0644\u0629", unstar: "\u0625\u0632\u0627\u0644\u0629 \u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644\u0629" },
|
|
10
|
+
en: { run: "Run", runs: "runs", star: "Favorite", unstar: "Unfavorite" }
|
|
11
|
+
};
|
|
12
|
+
var SavedQueryCard = React.forwardRef(
|
|
13
|
+
({ className, name, description, filters, runCount, lastRun, onRun, runLabel, favorite, locale = "fa", ...props }, ref) => {
|
|
14
|
+
const t = STRINGS[locale] ?? STRINGS.fa;
|
|
15
|
+
return /* @__PURE__ */ jsxs(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
ref,
|
|
19
|
+
"data-slot": "saved-query-card",
|
|
20
|
+
className: cn("flex flex-col gap-3 rounded-lg border border-border bg-background p-4", className),
|
|
21
|
+
...props,
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Search, { className: "size-4 mt-0.5 shrink-0 text-foreground-lighter", "aria-hidden": "true" }),
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground truncate", children: name }),
|
|
27
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-foreground-lighter line-clamp-2", children: description })
|
|
28
|
+
] }),
|
|
29
|
+
favorite && /* @__PURE__ */ jsx(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: "button",
|
|
33
|
+
onClick: () => favorite.onChange(!favorite.starred),
|
|
34
|
+
className: "shrink-0 inline-flex size-7 items-center justify-center rounded text-foreground-lighter hover:bg-surface-100 hover:text-foreground transition-colors",
|
|
35
|
+
"aria-label": favorite.starred ? t.unstar : t.star,
|
|
36
|
+
"aria-pressed": favorite.starred,
|
|
37
|
+
"data-slot": "saved-query-card-favorite",
|
|
38
|
+
children: /* @__PURE__ */ jsx(
|
|
39
|
+
Star,
|
|
40
|
+
{
|
|
41
|
+
className: cn("size-4", favorite.starred && "fill-warning-default text-warning-default"),
|
|
42
|
+
"aria-hidden": "true"
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
] }),
|
|
48
|
+
filters && filters.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: filters.map((f, i) => /* @__PURE__ */ jsxs(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
className: "inline-flex items-center gap-1 rounded-md border border-border bg-background-muted/40 px-2 py-0.5 text-2xs",
|
|
52
|
+
"data-slot": "saved-query-card-filter",
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ jsxs("span", { className: "text-foreground-lighter", children: [
|
|
55
|
+
f.label,
|
|
56
|
+
":"
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground font-medium", children: f.value })
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
i
|
|
62
|
+
)) }),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 pt-2 border-t border-border", children: [
|
|
64
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-2xs text-foreground-lighter", children: [
|
|
65
|
+
typeof runCount === "number" && /* @__PURE__ */ jsxs("span", { className: "tabular-nums", children: [
|
|
66
|
+
convertToLocalNumbers(runCount, locale),
|
|
67
|
+
" ",
|
|
68
|
+
t.runs
|
|
69
|
+
] }),
|
|
70
|
+
lastRun && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
71
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
|
|
72
|
+
lastRun
|
|
73
|
+
] })
|
|
74
|
+
] }),
|
|
75
|
+
onRun && /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", onClick: onRun, className: "gap-1.5", "data-slot": "saved-query-card-run", children: [
|
|
76
|
+
/* @__PURE__ */ jsx(Play, { className: "size-3", "aria-hidden": "true" }),
|
|
77
|
+
runLabel ?? t.run
|
|
78
|
+
] })
|
|
79
|
+
] })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
SavedQueryCard.displayName = "SavedQueryCard";
|
|
86
|
+
|
|
87
|
+
export { SavedQueryCard };
|
|
88
|
+
//# sourceMappingURL=chunk-SXWSOU3Y.js.map
|
|
89
|
+
//# sourceMappingURL=chunk-SXWSOU3Y.js.map
|