@definable/ui 0.1.0 → 0.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/README.md +6 -6
- package/dist/alert-dialog.d.ts +18 -0
- package/dist/alert.d.ts +18 -0
- package/dist/avatar.d.ts +9 -0
- package/dist/badge.d.ts +15 -0
- package/dist/button.d.ts +16 -0
- package/dist/calendar.d.ts +21 -0
- package/dist/card.d.ts +15 -0
- package/dist/carousel.d.ts +18 -0
- package/dist/charts.d.ts +26 -0
- package/dist/checkbox.d.ts +6 -0
- package/dist/collapse.d.ts +15 -0
- package/dist/command-menu.d.ts +12 -0
- package/dist/command.d.ts +89 -0
- package/dist/components/alert-dialog.d.ts +15 -0
- package/dist/components/alert-dialog.esm.js +59 -0
- package/dist/components/alert-dialog.esm.js.map +1 -0
- package/dist/components/alert-dialog.js +2 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +11 -0
- package/dist/components/alert.esm.js +51 -0
- package/dist/components/alert.esm.js.map +1 -0
- package/dist/components/alert.js +2 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.d.ts +5 -0
- package/dist/components/avatar.esm.js +42 -0
- package/dist/components/avatar.esm.js.map +1 -0
- package/dist/components/avatar.js +2 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +9 -0
- package/dist/components/badge.esm.js +27 -0
- package/dist/components/badge.esm.js.map +1 -0
- package/dist/components/badge.js +2 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +13 -0
- package/dist/components/button.esm.js +48 -0
- package/dist/components/button.esm.js.map +1 -0
- package/dist/components/button.js +2 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +18 -0
- package/dist/components/calendar.esm.js +5562 -0
- package/dist/components/calendar.esm.js.map +1 -0
- package/dist/components/calendar.js +2 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +8 -0
- package/dist/components/card.esm.js +62 -0
- package/dist/components/card.esm.js.map +1 -0
- package/dist/components/card.js +2 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +13 -0
- package/dist/components/carousel.esm.js +101 -0
- package/dist/components/carousel.esm.js.map +1 -0
- package/dist/components/carousel.js +2 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/charts.d.ts +17 -0
- package/dist/components/charts.esm.js +48 -0
- package/dist/components/charts.esm.js.map +1 -0
- package/dist/components/charts.js +2 -0
- package/dist/components/charts.js.map +1 -0
- package/dist/components/checkbox.d.ts +4 -0
- package/dist/components/checkbox.esm.js +32 -0
- package/dist/components/checkbox.esm.js.map +1 -0
- package/dist/components/checkbox.js +2 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapse.d.ts +11 -0
- package/dist/components/collapse.esm.js +50 -0
- package/dist/components/collapse.esm.js.map +1 -0
- package/dist/components/collapse.js +2 -0
- package/dist/components/collapse.js.map +1 -0
- package/dist/components/command-menu.d.ts +7 -0
- package/dist/components/command-menu.esm.js +90 -0
- package/dist/components/command-menu.esm.js.map +1 -0
- package/dist/components/command-menu.js +2 -0
- package/dist/components/command-menu.js.map +1 -0
- package/dist/components/command.d.ts +79 -0
- package/dist/components/command.esm.js +425 -0
- package/dist/components/command.esm.js.map +1 -0
- package/dist/components/command.js +2 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/confirmation-modal.d.ts +12 -0
- package/dist/components/confirmation-modal.esm.js +46 -0
- package/dist/components/confirmation-modal.esm.js.map +1 -0
- package/dist/components/confirmation-modal.js +2 -0
- package/dist/components/confirmation-modal.js.map +1 -0
- package/dist/components/context-menu.d.ts +26 -0
- package/dist/components/context-menu.esm.js +186 -0
- package/dist/components/context-menu.esm.js.map +1 -0
- package/dist/components/context-menu.js +2 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.d.ts +21 -0
- package/dist/components/dialog.esm.js +122 -0
- package/dist/components/dialog.esm.js.map +1 -0
- package/dist/components/dialog.js +2 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +9 -0
- package/dist/components/dropdown-menu.esm.js +49 -0
- package/dist/components/dropdown-menu.esm.js.map +1 -0
- package/dist/components/dropdown-menu.js +2 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/dropzone.d.ts +12 -0
- package/dist/components/dropzone.esm.js +45 -0
- package/dist/components/dropzone.esm.js.map +1 -0
- package/dist/components/dropzone.js +2 -0
- package/dist/components/dropzone.js.map +1 -0
- package/dist/components/image-cropper-modal.d.ts +10 -0
- package/dist/components/image-cropper-modal.esm.js +251 -0
- package/dist/components/image-cropper-modal.esm.js.map +1 -0
- package/dist/components/image-cropper-modal.js +2 -0
- package/dist/components/image-cropper-modal.js.map +1 -0
- package/dist/components/image-cropper.d.ts +11 -0
- package/dist/components/image-cropper.esm.js +131 -0
- package/dist/components/image-cropper.esm.js.map +1 -0
- package/dist/components/image-cropper.js +2 -0
- package/dist/components/image-cropper.js.map +1 -0
- package/dist/components/input.d.ts +5 -0
- package/dist/components/input.esm.js +22 -0
- package/dist/components/input.esm.js.map +1 -0
- package/dist/components/input.js +2 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.esm.js +20 -0
- package/dist/components/label.esm.js.map +1 -0
- package/dist/components/label.js +2 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/loader.d.ts +10 -0
- package/dist/components/loader.esm.js +70 -0
- package/dist/components/loader.esm.js.map +1 -0
- package/dist/components/loader.js +2 -0
- package/dist/components/loader.js.map +1 -0
- package/dist/components/loading-placeholder.d.ts +8 -0
- package/dist/components/loading-placeholder.esm.js +25 -0
- package/dist/components/loading-placeholder.esm.js.map +1 -0
- package/dist/components/loading-placeholder.js +2 -0
- package/dist/components/loading-placeholder.js.map +1 -0
- package/dist/components/markdown.d.ts +2 -0
- package/dist/components/markdown.esm.js +12066 -0
- package/dist/components/markdown.esm.js.map +1 -0
- package/dist/components/markdown.js +18 -0
- package/dist/components/markdown.js.map +1 -0
- package/dist/components/mention.d.ts +25 -0
- package/dist/components/mention.esm.js +154 -0
- package/dist/components/mention.esm.js.map +1 -0
- package/dist/components/mention.js +2 -0
- package/dist/components/mention.js.map +1 -0
- package/dist/components/modal.d.ts +19 -0
- package/dist/components/modal.esm.js +92 -0
- package/dist/components/modal.esm.js.map +1 -0
- package/dist/components/modal.js +2 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/monaco-editor.d.ts +2 -0
- package/dist/components/monaco-editor.esm.js +295 -0
- package/dist/components/monaco-editor.esm.js.map +1 -0
- package/dist/components/monaco-editor.js +8 -0
- package/dist/components/monaco-editor.js.map +1 -0
- package/dist/components/notification.d.ts +5 -0
- package/dist/components/notification.esm.js +26 -0
- package/dist/components/notification.esm.js.map +1 -0
- package/dist/components/notification.js +2 -0
- package/dist/components/notification.js.map +1 -0
- package/dist/components/popover.d.ts +6 -0
- package/dist/components/popover.esm.js +24 -0
- package/dist/components/popover.esm.js.map +1 -0
- package/dist/components/popover.js +2 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +4 -0
- package/dist/components/progress.esm.js +35 -0
- package/dist/components/progress.esm.js.map +1 -0
- package/dist/components/progress.js +2 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +5 -0
- package/dist/components/radio-group.esm.js +48 -0
- package/dist/components/radio-group.esm.js.map +1 -0
- package/dist/components/radio-group.js +2 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/scroll-area.d.ts +5 -0
- package/dist/components/scroll-area.esm.js +47 -0
- package/dist/components/scroll-area.esm.js.map +1 -0
- package/dist/components/scroll-area.js +2 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +20 -0
- package/dist/components/select.esm.js +131 -0
- package/dist/components/select.esm.js.map +1 -0
- package/dist/components/select.js +2 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/selection-bar.d.ts +11 -0
- package/dist/components/selection-bar.esm.js +54 -0
- package/dist/components/selection-bar.esm.js.map +1 -0
- package/dist/components/selection-bar.js +2 -0
- package/dist/components/selection-bar.js.map +1 -0
- package/dist/components/separator.d.ts +4 -0
- package/dist/components/separator.esm.js +25 -0
- package/dist/components/separator.esm.js.map +1 -0
- package/dist/components/separator.js +2 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +13 -0
- package/dist/components/sheet.esm.js +129 -0
- package/dist/components/sheet.esm.js.map +1 -0
- package/dist/components/sheet.js +2 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/skeleton.d.ts +2 -0
- package/dist/components/skeleton.esm.js +18 -0
- package/dist/components/skeleton.esm.js.map +1 -0
- package/dist/components/skeleton.js +2 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +4 -0
- package/dist/components/slider.esm.js +33 -0
- package/dist/components/slider.esm.js.map +1 -0
- package/dist/components/slider.js +2 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/stepper.d.ts +2 -0
- package/dist/components/stepper.esm.js +214 -0
- package/dist/components/stepper.esm.js.map +1 -0
- package/dist/components/stepper.js +2 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/switch.d.ts +4 -0
- package/dist/components/switch.esm.js +36 -0
- package/dist/components/switch.esm.js.map +1 -0
- package/dist/components/switch.js +2 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table-empty.d.ts +9 -0
- package/dist/components/table-empty.esm.js +23 -0
- package/dist/components/table-empty.esm.js.map +1 -0
- package/dist/components/table-empty.js +2 -0
- package/dist/components/table-empty.js.map +1 -0
- package/dist/components/table-mobile.d.ts +4 -0
- package/dist/components/table-mobile.esm.js +92 -0
- package/dist/components/table-mobile.esm.js.map +1 -0
- package/dist/components/table-mobile.js +2 -0
- package/dist/components/table-mobile.js.map +1 -0
- package/dist/components/table.d.ts +31 -0
- package/dist/components/table.esm.js +143 -0
- package/dist/components/table.esm.js.map +1 -0
- package/dist/components/table.js +2 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +7 -0
- package/dist/components/tabs.esm.js +47 -0
- package/dist/components/tabs.esm.js.map +1 -0
- package/dist/components/tabs.js +2 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/terminal.d.ts +43 -0
- package/dist/components/terminal.esm.js +50 -0
- package/dist/components/terminal.esm.js.map +1 -0
- package/dist/components/terminal.js +2 -0
- package/dist/components/terminal.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.esm.js +21 -0
- package/dist/components/textarea.esm.js.map +1 -0
- package/dist/components/textarea.js +2 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/tooltip.d.ts +8 -0
- package/dist/components/tooltip.esm.js +100 -0
- package/dist/components/tooltip.esm.js.map +1 -0
- package/dist/components/tooltip.js +2 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/use-toast.d.ts +21 -0
- package/dist/components/use-toast.esm.js +65 -0
- package/dist/components/use-toast.esm.js.map +1 -0
- package/dist/components/use-toast.js +2 -0
- package/dist/components/use-toast.js.map +1 -0
- package/dist/confirmation-modal.d.ts +16 -0
- package/dist/context-menu.d.ts +41 -0
- package/dist/dialog.d.ts +33 -0
- package/dist/dropdown-menu.d.ts +16 -0
- package/dist/dropzone.d.ts +16 -0
- package/dist/image-cropper-modal.d.ts +14 -0
- package/dist/image-cropper.d.ts +15 -0
- package/dist/index-DACAHwoB.js +35 -0
- package/dist/index-DACAHwoB.js.map +1 -0
- package/dist/index-Deooizx8.cjs +2 -0
- package/dist/index-Deooizx8.cjs.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.esm.js +111 -75430
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +8 -0
- package/dist/jsx-runtime-BYECrxsp.cjs +31 -0
- package/dist/jsx-runtime-BYECrxsp.cjs.map +1 -0
- package/dist/jsx-runtime-DGlMoOmv.js +631 -0
- package/dist/jsx-runtime-DGlMoOmv.js.map +1 -0
- package/dist/label.d.ts +6 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.esm.js +5 -0
- package/dist/lib/utils.esm.js.map +1 -0
- package/dist/lib/utils.js +2 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loading-placeholder.d.ts +12 -0
- package/dist/markdown.d.ts +122 -0
- package/dist/mention.d.ts +29 -0
- package/dist/modal.d.ts +24 -0
- package/dist/monaco-editor.d.ts +76 -0
- package/dist/notification.d.ts +9 -0
- package/dist/popover.d.ts +10 -0
- package/dist/progress.d.ts +6 -0
- package/dist/radio-group.d.ts +8 -0
- package/dist/scroll-area.d.ts +8 -0
- package/dist/select.d.ts +31 -0
- package/dist/selection-bar.d.ts +15 -0
- package/dist/separator.d.ts +6 -0
- package/dist/sheet.d.ts +17 -0
- package/dist/skeleton.d.ts +5 -0
- package/dist/slider.d.ts +6 -0
- package/dist/stepper.d.ts +71 -0
- package/dist/styles.css +1 -1
- package/dist/switch.d.ts +6 -0
- package/dist/table-empty.d.ts +13 -0
- package/dist/table-mobile.d.ts +37 -0
- package/dist/table.d.ts +37 -0
- package/dist/tabs.d.ts +12 -0
- package/dist/terminal.d.ts +47 -0
- package/dist/textarea.d.ts +8 -0
- package/dist/tooltip.d.ts +12 -0
- package/dist/use-toast.d.ts +28 -0
- package/dist/utils-DSKoFOjv.cjs +2 -0
- package/dist/utils-DSKoFOjv.cjs.map +1 -0
- package/dist/utils-qaFjX9_3.js +2279 -0
- package/dist/utils-qaFjX9_3.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/package.json +259 -1
- package/dist/index.cjs.js +0 -315
- package/dist/index.cjs.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { j as i } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import * as t from "react";
|
|
3
|
+
import * as e from "@radix-ui/react-switch";
|
|
4
|
+
import { c as a } from "../utils-qaFjX9_3.js";
|
|
5
|
+
import { motion as n } from "framer-motion";
|
|
6
|
+
const c = t.forwardRef(({ className: o, ...s }, r) => /* @__PURE__ */ i.jsx(
|
|
7
|
+
e.Root,
|
|
8
|
+
{
|
|
9
|
+
className: a(
|
|
10
|
+
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
11
|
+
o
|
|
12
|
+
),
|
|
13
|
+
...s,
|
|
14
|
+
ref: r,
|
|
15
|
+
children: /* @__PURE__ */ i.jsx(e.Thumb, { asChild: !0, children: /* @__PURE__ */ i.jsx(
|
|
16
|
+
n.div,
|
|
17
|
+
{
|
|
18
|
+
className: "block h-4 w-4 rounded-full bg-background shadow-lg ring-0",
|
|
19
|
+
initial: !1,
|
|
20
|
+
animate: {
|
|
21
|
+
x: s.checked ? 16 : 0
|
|
22
|
+
},
|
|
23
|
+
transition: {
|
|
24
|
+
type: "spring",
|
|
25
|
+
stiffness: 500,
|
|
26
|
+
damping: 30
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
) })
|
|
30
|
+
}
|
|
31
|
+
));
|
|
32
|
+
c.displayName = e.Root.displayName;
|
|
33
|
+
export {
|
|
34
|
+
c as Switch
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=switch.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.esm.js","sources":["../../src/components/switch.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\nimport { cn } from \"@/lib/utils\"\nimport { motion } from \"framer-motion\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb asChild>\n <motion.div\n className=\"block h-4 w-4 rounded-full bg-background shadow-lg ring-0\"\n initial={false}\n animate={{\n x: props.checked ? 16 : 0\n }}\n transition={{\n type: \"spring\",\n stiffness: 500,\n damping: 30\n }}\n />\n </SwitchPrimitives.Thumb>\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch } "],"names":["Switch","React","className","props","ref","jsx","SwitchPrimitives","cn","motion"],"mappings":";;;;;AAKA,MAAMA,IAASC,EAAM,WAGnB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACC,EAAiB;AAAA,EAAjB;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAL;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IACJ,KAAAC;AAAA,IAEA,UAAAC,gBAAAA,EAAAA,IAACC,EAAiB,OAAjB,EAAuB,SAAO,IAC7B,UAAAD,gBAAAA,EAAAA;AAAAA,MAACG,EAAO;AAAA,MAAP;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,UACP,GAAGL,EAAM,UAAU,KAAK;AAAA,QAAA;AAAA,QAE1B,YAAY;AAAA,UACV,MAAM;AAAA,UACN,WAAW;AAAA,UACX,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,IAAA,EACF,CACF;AAAA,EAAA;AACF,CACD;AACDH,EAAO,cAAcM,EAAiB,KAAK;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../jsx-runtime-BYECrxsp.cjs"),a=require("react"),l=require("@radix-ui/react-switch"),u=require("../utils-DSKoFOjv.cjs"),d=require("framer-motion");function o(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const f=o(a),s=o(l),c=f.forwardRef(({className:e,...t},i)=>r.jsxRuntimeExports.jsx(s.Root,{className:u.cn("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:i,children:r.jsxRuntimeExports.jsx(s.Thumb,{asChild:!0,children:r.jsxRuntimeExports.jsx(d.motion.div,{className:"block h-4 w-4 rounded-full bg-background shadow-lg ring-0",initial:!1,animate:{x:t.checked?16:0},transition:{type:"spring",stiffness:500,damping:30}})})}));c.displayName=s.Root.displayName;exports.Switch=c;
|
|
2
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.js","sources":["../../src/components/switch.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\nimport { cn } from \"@/lib/utils\"\nimport { motion } from \"framer-motion\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb asChild>\n <motion.div\n className=\"block h-4 w-4 rounded-full bg-background shadow-lg ring-0\"\n initial={false}\n animate={{\n x: props.checked ? 16 : 0\n }}\n transition={{\n type: \"spring\",\n stiffness: 500,\n damping: 30\n }}\n />\n </SwitchPrimitives.Thumb>\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch } "],"names":["Switch","React","className","props","ref","jsx","SwitchPrimitives","cn","motion"],"mappings":"qhBAKMA,EAASC,EAAM,WAGnB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,kBAAAA,IAACC,EAAiB,KAAjB,CACC,UAAWC,EAAAA,GACT,8XACAL,CAAA,EAED,GAAGC,EACJ,IAAAC,EAEA,SAAAC,EAAAA,kBAAAA,IAACC,EAAiB,MAAjB,CAAuB,QAAO,GAC7B,SAAAD,EAAAA,kBAAAA,IAACG,EAAAA,OAAO,IAAP,CACC,UAAU,4DACV,QAAS,GACT,QAAS,CACP,EAAGL,EAAM,QAAU,GAAK,CAAA,EAE1B,WAAY,CACV,KAAM,SACN,UAAW,IACX,QAAS,EAAA,CACX,CAAA,CACF,CACF,CAAA,CACF,CACD,EACDH,EAAO,YAAcM,EAAiB,KAAK"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface TableEmptyProps {
|
|
2
|
+
title?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
actionLabel?: string;
|
|
5
|
+
onAction?: () => void;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function TableEmpty({ title, description, actionLabel, onAction, icon }: TableEmptyProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { j as e } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import { FolderOpen as l } from "lucide-react";
|
|
3
|
+
import { Button as m } from "./button.esm.js";
|
|
4
|
+
function n({
|
|
5
|
+
title: s = "No data available",
|
|
6
|
+
description: r = "Get started by creating your first record.",
|
|
7
|
+
actionLabel: a = "Create New",
|
|
8
|
+
onAction: t,
|
|
9
|
+
icon: c = /* @__PURE__ */ e.jsx(l, { className: "w-10 h-10 text-muted-foreground" })
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ e.jsx("div", { className: "flex flex-col items-center justify-center py-12 px-4", children: /* @__PURE__ */ e.jsxs("div", { className: "space-y-5 text-center", children: [
|
|
12
|
+
/* @__PURE__ */ e.jsx("div", { className: "flex justify-center", children: c }),
|
|
13
|
+
/* @__PURE__ */ e.jsxs("div", { className: "space-y-2", children: [
|
|
14
|
+
/* @__PURE__ */ e.jsx("h3", { className: "text-lg font-medium", children: s }),
|
|
15
|
+
/* @__PURE__ */ e.jsx("p", { className: "text-sm text-muted-foreground max-w-sm mx-auto", children: r })
|
|
16
|
+
] }),
|
|
17
|
+
t && /* @__PURE__ */ e.jsx(m, { onClick: t, children: a })
|
|
18
|
+
] }) });
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
n as TableEmpty
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=table-empty.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-empty.esm.js","sources":["../../src/components/table-empty.tsx"],"sourcesContent":["import { FolderOpen } from \"lucide-react\";\nimport { Button } from \"./button\";\n\ninterface TableEmptyProps {\n title?: string;\n description?: string;\n actionLabel?: string;\n onAction?: () => void;\n icon?: React.ReactNode;\n}\n\nexport function TableEmpty({\n title = \"No data available\",\n description = \"Get started by creating your first record.\",\n actionLabel = \"Create New\",\n onAction,\n icon = <FolderOpen className=\"w-10 h-10 text-muted-foreground\" />\n}: TableEmptyProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 px-4\">\n <div className=\"space-y-5 text-center\">\n <div className=\"flex justify-center\">{icon}</div>\n <div className=\"space-y-2\">\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm mx-auto\">\n {description}\n </p>\n </div>\n {onAction && (\n <Button onClick={onAction}>\n {actionLabel}\n </Button>\n )}\n </div>\n </div>\n );\n} "],"names":["TableEmpty","title","description","actionLabel","onAction","icon","jsx","FolderOpen","jsxs","Button"],"mappings":";;;AAWO,SAASA,EAAW;AAAA,EACzB,OAAAC,IAAQ;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAAC,IAAOC,gBAAAA,EAAAA,IAACC,GAAA,EAAW,WAAU,kCAAA,CAAkC;AACjE,GAAoB;AAClB,+BACG,OAAA,EAAI,WAAU,wDACb,UAAAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,IAAAF,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,uBAAuB,UAAAD,GAAK;AAAA,IAC3CG,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAAF,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,uBAAuB,UAAAL,GAAM;AAAA,MAC3CK,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,kDACV,UAAAJ,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IACCE,KACCE,gBAAAA,EAAAA,IAACG,GAAA,EAAO,SAASL,GACd,UAAAD,EAAA,CACH;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),i=require("lucide-react"),c=require("./button.js");function a({title:s="No data available",description:r="Get started by creating your first record.",actionLabel:n="Create New",onAction:t,icon:x=e.jsxRuntimeExports.jsx(i.FolderOpen,{className:"w-10 h-10 text-muted-foreground"})}){return e.jsxRuntimeExports.jsx("div",{className:"flex flex-col items-center justify-center py-12 px-4",children:e.jsxRuntimeExports.jsxs("div",{className:"space-y-5 text-center",children:[e.jsxRuntimeExports.jsx("div",{className:"flex justify-center",children:x}),e.jsxRuntimeExports.jsxs("div",{className:"space-y-2",children:[e.jsxRuntimeExports.jsx("h3",{className:"text-lg font-medium",children:s}),e.jsxRuntimeExports.jsx("p",{className:"text-sm text-muted-foreground max-w-sm mx-auto",children:r})]}),t&&e.jsxRuntimeExports.jsx(c.Button,{onClick:t,children:n})]})})}exports.TableEmpty=a;
|
|
2
|
+
//# sourceMappingURL=table-empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-empty.js","sources":["../../src/components/table-empty.tsx"],"sourcesContent":["import { FolderOpen } from \"lucide-react\";\nimport { Button } from \"./button\";\n\ninterface TableEmptyProps {\n title?: string;\n description?: string;\n actionLabel?: string;\n onAction?: () => void;\n icon?: React.ReactNode;\n}\n\nexport function TableEmpty({\n title = \"No data available\",\n description = \"Get started by creating your first record.\",\n actionLabel = \"Create New\",\n onAction,\n icon = <FolderOpen className=\"w-10 h-10 text-muted-foreground\" />\n}: TableEmptyProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 px-4\">\n <div className=\"space-y-5 text-center\">\n <div className=\"flex justify-center\">{icon}</div>\n <div className=\"space-y-2\">\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm mx-auto\">\n {description}\n </p>\n </div>\n {onAction && (\n <Button onClick={onAction}>\n {actionLabel}\n </Button>\n )}\n </div>\n </div>\n );\n} "],"names":["TableEmpty","title","description","actionLabel","onAction","icon","jsx","FolderOpen","jsxs","Button"],"mappings":"kLAWO,SAASA,EAAW,CACzB,MAAAC,EAAQ,oBACR,YAAAC,EAAc,6CACd,YAAAC,EAAc,aACd,SAAAC,EACA,KAAAC,EAAOC,EAAAA,kBAAAA,IAACC,EAAAA,WAAA,CAAW,UAAU,iCAAA,CAAkC,CACjE,EAAoB,CAClB,+BACG,MAAA,CAAI,UAAU,uDACb,SAAAC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAF,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,sBAAuB,SAAAD,EAAK,EAC3CG,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAF,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,SAAAL,EAAM,EAC3CK,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,iDACV,SAAAJ,CAAA,CACH,CAAA,EACF,EACCE,GACCE,EAAAA,kBAAAA,IAACG,SAAA,CAAO,QAASL,EACd,SAAAD,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAEJ"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { j as r } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import { c as x } from "../utils-qaFjX9_3.js";
|
|
3
|
+
import { Checkbox as u } from "./checkbox.esm.js";
|
|
4
|
+
import { Tooltip as f } from "./tooltip.esm.js";
|
|
5
|
+
import { useState as v } from "react";
|
|
6
|
+
import { ChevronRight as b } from "lucide-react";
|
|
7
|
+
function T({
|
|
8
|
+
data: l,
|
|
9
|
+
columns: t,
|
|
10
|
+
showCheckbox: n = !0,
|
|
11
|
+
onRowClick: d,
|
|
12
|
+
selectedItems: a,
|
|
13
|
+
onSelect: o,
|
|
14
|
+
isLoading: p = !1,
|
|
15
|
+
loadingRows: c = 3
|
|
16
|
+
}) {
|
|
17
|
+
const [h, m] = v(null);
|
|
18
|
+
return p ? /* @__PURE__ */ r.jsx("div", { className: "space-y-4", children: Array(c).fill(0).map((s, i) => /* @__PURE__ */ r.jsxs(
|
|
19
|
+
"div",
|
|
20
|
+
{
|
|
21
|
+
className: "border border-border/40 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse",
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ r.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
24
|
+
/* @__PURE__ */ r.jsx("div", { className: "h-5 bg-muted/70 rounded-md w-2/5" }),
|
|
25
|
+
n && /* @__PURE__ */ r.jsx("div", { className: "h-4 w-4 rounded-md bg-muted/50" })
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ r.jsx("div", { className: "space-y-3 pt-2", children: t.slice(0, 4).map((e, j) => /* @__PURE__ */ r.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
28
|
+
/* @__PURE__ */ r.jsx("div", { className: "h-4 bg-muted/40 rounded-md w-1/4" }),
|
|
29
|
+
/* @__PURE__ */ r.jsx("div", { className: "h-4 bg-muted/60 rounded-md", style: { width: Math.random() * 50 + 30 + "%" } })
|
|
30
|
+
] }, `skeleton-col-${e.id}`)) })
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
`skeleton-${i}`
|
|
34
|
+
)) }) : l.length === 0 ? null : /* @__PURE__ */ r.jsx("div", { className: "space-y-4", children: l.map((s, i) => /* @__PURE__ */ r.jsxs(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
className: x(
|
|
38
|
+
"border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200",
|
|
39
|
+
d && "cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50"
|
|
40
|
+
),
|
|
41
|
+
onClick: () => d == null ? void 0 : d(s),
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ r.jsxs("div", { className: "flex items-center justify-between p-4 border-b border-border/30 bg-muted/5", children: [
|
|
44
|
+
/* @__PURE__ */ r.jsx("div", { className: "font-medium", children: t[0].cell(s) || `Item ${i + 1}` }),
|
|
45
|
+
/* @__PURE__ */ r.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
46
|
+
n && /* @__PURE__ */ r.jsx(
|
|
47
|
+
u,
|
|
48
|
+
{
|
|
49
|
+
checked: a == null ? void 0 : a.has(s.id),
|
|
50
|
+
onClick: (e) => {
|
|
51
|
+
e.stopPropagation(), o == null || o(s.id, !(a != null && a.has(s.id)));
|
|
52
|
+
},
|
|
53
|
+
className: "data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"
|
|
54
|
+
}
|
|
55
|
+
),
|
|
56
|
+
d && /* @__PURE__ */ r.jsx(b, { className: "h-4 w-4 text-muted-foreground/50" })
|
|
57
|
+
] })
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ r.jsx("div", { className: "px-4 py-3 space-y-3", children: t.slice(1).map((e) => /* @__PURE__ */ r.jsxs(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
className: "flex items-start gap-3 text-sm group",
|
|
63
|
+
onMouseEnter: () => e.tooltipValue && m(`${i}-${e.id}`),
|
|
64
|
+
onMouseLeave: () => m(null),
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ r.jsx("div", { className: "font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5", children: e.header }),
|
|
67
|
+
/* @__PURE__ */ r.jsx("div", { className: x(
|
|
68
|
+
"flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors",
|
|
69
|
+
e.truncate && "truncate"
|
|
70
|
+
), children: e.cell(s) }),
|
|
71
|
+
e.tooltipValue && h === `${i}-${e.id}` && /* @__PURE__ */ r.jsx(
|
|
72
|
+
f,
|
|
73
|
+
{
|
|
74
|
+
content: e.tooltipValue(s),
|
|
75
|
+
side: "bottom",
|
|
76
|
+
align: "start",
|
|
77
|
+
isVisible: !0
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
e.id
|
|
83
|
+
)) })
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
s.id
|
|
87
|
+
)) });
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
T as TableMobile
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=table-mobile.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-mobile.esm.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/40 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"h-5 bg-muted/70 rounded-md w-2/5\" />\n {showCheckbox && (\n <div className=\"h-4 w-4 rounded-md bg-muted/50\" />\n )}\n </div>\n <div className=\"space-y-3 pt-2\">\n {columns.slice(0, 4).map((column, colIndex) => (\n <div key={`skeleton-col-${column.id}`} className=\"flex items-start gap-3\">\n <div className=\"h-4 bg-muted/40 rounded-md w-1/4\" />\n <div className=\"h-4 bg-muted/60 rounded-md\" style={{ width: Math.random() * 50 + 30 + '%' }} />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (data.length === 0) {\n return null; // Empty state is handled by the main Table component\n }\n\n return (\n <div className=\"space-y-4\">\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200\",\n onRowClick && \"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50\"\n )}\n onClick={() => onRowClick?.(item)}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5\">\n <div className=\"font-medium\">\n {/* Display a primary identifier */}\n {columns[0].cell(item) || `Item ${index + 1}`}\n </div>\n <div className=\"flex items-center gap-2\">\n {showCheckbox && (\n <Checkbox\n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n className=\"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n />\n )}\n {onRowClick && (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50\" />\n )}\n </div>\n </div>\n \n <div className=\"px-4 py-3 space-y-3\">\n {columns.slice(1).map((column) => (\n <div\n key={column.id}\n className=\"flex items-start gap-3 text-sm group\"\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className=\"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5\">\n {column.header}\n </div>\n <div className={cn(\n \"flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align=\"start\"\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n} "],"names":["TableMobile","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","isLoading","loadingRows","hoveredText","setHoveredText","useState","jsx","_","index","jsxs","column","colIndex","item","cn","Checkbox","ChevronRight","Tooltip"],"mappings":";;;;;;AAOO,SAASA,EAAsC;AAAA,EACpD,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,aAAAC,IAAc;AAChB,GAAkB;AAChB,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAwB,IAAI;AAGlE,SAAIJ,IAEAK,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,aACZ,UAAA,MAAMJ,CAAW,EAAE,KAAK,CAAC,EAAE,IAAI,CAACK,GAAGC,MAClCC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,UAAAH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mCAAA,CAAmC;AAAA,UACjDT,KACCS,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iCAAA,CAAiC;AAAA,QAAA,GAEpD;AAAA,8BACC,OAAA,EAAI,WAAU,kBACZ,UAAAV,EAAQ,MAAM,GAAG,CAAC,EAAE,IAAI,CAACc,GAAQC,MAChCF,gBAAAA,EAAAA,KAAC,OAAA,EAAsC,WAAU,0BAC/C,UAAA;AAAA,UAAAH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mCAAA,CAAmC;AAAA,UAClDA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,KAAK,OAAA,IAAW,KAAK,KAAK,MAAI,CAAG;AAAA,QAAA,EAAA,GAFrF,gBAAgBI,EAAO,EAAE,EAGnC,CACD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,IAhBK,YAAYF,CAAK;AAAA,EAAA,CAkBzB,GACH,IAIAb,EAAK,WAAW,IACX,OAIPW,gBAAAA,MAAC,SAAI,WAAU,aACZ,YAAK,IAAI,CAACM,GAAMJ,MACfC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAWI;AAAA,QACT;AAAA,QACAf,KAAc;AAAA,MAAA;AAAA,MAEhB,SAAS,MAAMA,KAAA,gBAAAA,EAAac;AAAA,MAE5B,UAAA;AAAA,QAAAH,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,8EACb,UAAA;AAAA,UAAAH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,eAEZ,UAAAV,EAAQ,CAAC,EAAE,KAAKgB,CAAI,KAAK,QAAQJ,IAAQ,CAAC,IAC7C;AAAA,UACAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,YAAAZ,KACCS,gBAAAA,EAAAA;AAAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,SAASf,KAAA,gBAAAA,EAAe,IAAIa,EAAK;AAAA,gBACjC,SAAS,CAAC,MAAM;AACd,oBAAE,gBAAA,GACFZ,KAAA,QAAAA,EAAWY,EAAK,IAAI,EAACb,KAAA,QAAAA,EAAe,IAAIa,EAAK;AAAA,gBAC/C;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGbd,KACCQ,gBAAAA,EAAAA,IAACS,GAAA,EAAa,WAAU,mCAAA,CAAmC;AAAA,UAAA,EAAA,CAE/D;AAAA,QAAA,GACF;AAAA,QAEAT,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,uBACZ,UAAAV,EAAQ,MAAM,CAAC,EAAE,IAAI,CAACc,MACrBD,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YACV,cAAc,MAAMC,EAAO,gBAAgBN,EAAe,GAAGI,CAAK,IAAIE,EAAO,EAAE,EAAE;AAAA,YACjF,cAAc,MAAMN,EAAe,IAAI;AAAA,YAEvC,UAAA;AAAA,cAAAE,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+FACZ,UAAAI,EAAO,QACV;AAAA,cACAJ,gBAAAA,MAAC,SAAI,WAAWO;AAAA,gBACd;AAAA,gBACAH,EAAO,YAAY;AAAA,cAAA,GAElB,UAAAA,EAAO,KAAKE,CAAI,EAAA,CACnB;AAAA,cACCF,EAAO,gBAAgBP,MAAgB,GAAGK,CAAK,IAAIE,EAAO,EAAE,MAC3DJ,gBAAAA,EAAAA;AAAAA,gBAACU;AAAA,gBAAA;AAAA,kBACC,SAASN,EAAO,aAAaE,CAAI;AAAA,kBACjC,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,WAAW;AAAA,gBAAA;AAAA,cAAA;AAAA,YACb;AAAA,UAAA;AAAA,UApBGF,EAAO;AAAA,QAAA,CAuBf,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,IAxDKE,EAAK;AAAA,EAAA,CA0Db,GACH;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),l=require("../utils-DSKoFOjv.cjs"),j=require("./checkbox.js"),h=require("./tooltip.js"),b=require("react"),v=require("lucide-react");function g({data:x,columns:d,showCheckbox:n=!0,onRowClick:i,selectedItems:t,onSelect:o,isLoading:p=!1,loadingRows:c=3}){const[m,u]=b.useState(null);return p?e.jsxRuntimeExports.jsx("div",{className:"space-y-4",children:Array(c).fill(0).map((r,a)=>e.jsxRuntimeExports.jsxs("div",{className:"border border-border/40 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxRuntimeExports.jsx("div",{className:"h-5 bg-muted/70 rounded-md w-2/5"}),n&&e.jsxRuntimeExports.jsx("div",{className:"h-4 w-4 rounded-md bg-muted/50"})]}),e.jsxRuntimeExports.jsx("div",{className:"space-y-3 pt-2",children:d.slice(0,4).map((s,f)=>e.jsxRuntimeExports.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxRuntimeExports.jsx("div",{className:"h-4 bg-muted/40 rounded-md w-1/4"}),e.jsxRuntimeExports.jsx("div",{className:"h-4 bg-muted/60 rounded-md",style:{width:Math.random()*50+30+"%"}})]},`skeleton-col-${s.id}`))})]},`skeleton-${a}`))}):x.length===0?null:e.jsxRuntimeExports.jsx("div",{className:"space-y-4",children:x.map((r,a)=>e.jsxRuntimeExports.jsxs("div",{className:l.cn("border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200",i&&"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50"),onClick:()=>i==null?void 0:i(r),children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5",children:[e.jsxRuntimeExports.jsx("div",{className:"font-medium",children:d[0].cell(r)||`Item ${a+1}`}),e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-2",children:[n&&e.jsxRuntimeExports.jsx(j.Checkbox,{checked:t==null?void 0:t.has(r.id),onClick:s=>{s.stopPropagation(),o==null||o(r.id,!(t!=null&&t.has(r.id)))},className:"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"}),i&&e.jsxRuntimeExports.jsx(v.ChevronRight,{className:"h-4 w-4 text-muted-foreground/50"})]})]}),e.jsxRuntimeExports.jsx("div",{className:"px-4 py-3 space-y-3",children:d.slice(1).map(s=>e.jsxRuntimeExports.jsxs("div",{className:"flex items-start gap-3 text-sm group",onMouseEnter:()=>s.tooltipValue&&u(`${a}-${s.id}`),onMouseLeave:()=>u(null),children:[e.jsxRuntimeExports.jsx("div",{className:"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5",children:s.header}),e.jsxRuntimeExports.jsx("div",{className:l.cn("flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors",s.truncate&&"truncate"),children:s.cell(r)}),s.tooltipValue&&m===`${a}-${s.id}`&&e.jsxRuntimeExports.jsx(h.Tooltip,{content:s.tooltipValue(r),side:"bottom",align:"start",isVisible:!0})]},s.id))})]},r.id))})}exports.TableMobile=g;
|
|
2
|
+
//# sourceMappingURL=table-mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-mobile.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/40 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"h-5 bg-muted/70 rounded-md w-2/5\" />\n {showCheckbox && (\n <div className=\"h-4 w-4 rounded-md bg-muted/50\" />\n )}\n </div>\n <div className=\"space-y-3 pt-2\">\n {columns.slice(0, 4).map((column, colIndex) => (\n <div key={`skeleton-col-${column.id}`} className=\"flex items-start gap-3\">\n <div className=\"h-4 bg-muted/40 rounded-md w-1/4\" />\n <div className=\"h-4 bg-muted/60 rounded-md\" style={{ width: Math.random() * 50 + 30 + '%' }} />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (data.length === 0) {\n return null; // Empty state is handled by the main Table component\n }\n\n return (\n <div className=\"space-y-4\">\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200\",\n onRowClick && \"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50\"\n )}\n onClick={() => onRowClick?.(item)}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5\">\n <div className=\"font-medium\">\n {/* Display a primary identifier */}\n {columns[0].cell(item) || `Item ${index + 1}`}\n </div>\n <div className=\"flex items-center gap-2\">\n {showCheckbox && (\n <Checkbox\n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n className=\"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n />\n )}\n {onRowClick && (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50\" />\n )}\n </div>\n </div>\n \n <div className=\"px-4 py-3 space-y-3\">\n {columns.slice(1).map((column) => (\n <div\n key={column.id}\n className=\"flex items-start gap-3 text-sm group\"\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className=\"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5\">\n {column.header}\n </div>\n <div className={cn(\n \"flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align=\"start\"\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n} "],"names":["TableMobile","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","isLoading","loadingRows","hoveredText","setHoveredText","useState","jsx","_","index","jsxs","column","colIndex","item","cn","Checkbox","e","ChevronRight","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface Column<T> {
|
|
2
|
+
id: string;
|
|
3
|
+
header: string;
|
|
4
|
+
width?: string;
|
|
5
|
+
cell: (item: T) => React.ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
tooltipValue?: (item: T) => string;
|
|
8
|
+
truncate?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface TableProps<T> {
|
|
11
|
+
data: T[];
|
|
12
|
+
columns: Column<T>[];
|
|
13
|
+
showCheckbox?: boolean;
|
|
14
|
+
onRowClick?: (item: T) => void;
|
|
15
|
+
className?: string;
|
|
16
|
+
selectedItems?: Set<string>;
|
|
17
|
+
onSelect?: (id: string, checked: boolean) => void;
|
|
18
|
+
emptyState?: {
|
|
19
|
+
title?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
actionLabel?: string;
|
|
22
|
+
onAction?: () => void;
|
|
23
|
+
icon?: React.ReactNode;
|
|
24
|
+
};
|
|
25
|
+
isLoading?: boolean;
|
|
26
|
+
loadingRows?: number;
|
|
27
|
+
tableHeight?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function Table<T extends {
|
|
30
|
+
id: string;
|
|
31
|
+
}>({ data, columns, showCheckbox, onRowClick, className, selectedItems, onSelect, emptyState, isLoading, loadingRows, tableHeight }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { j as r } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import { c as s } from "../utils-qaFjX9_3.js";
|
|
3
|
+
import { Checkbox as j } from "./checkbox.esm.js";
|
|
4
|
+
import { Tooltip as y } from "./tooltip.esm.js";
|
|
5
|
+
import { useState as T } from "react";
|
|
6
|
+
import { TableEmpty as $ } from "./table-empty.esm.js";
|
|
7
|
+
const h = ({ children: d, className: t }) => /* @__PURE__ */ r.jsx("div", { className: s("border border-border/50 rounded-lg overflow-hidden bg-background shadow-sm", t), children: d });
|
|
8
|
+
function P({
|
|
9
|
+
data: d,
|
|
10
|
+
columns: t,
|
|
11
|
+
showCheckbox: o = !0,
|
|
12
|
+
onRowClick: p,
|
|
13
|
+
className: v,
|
|
14
|
+
selectedItems: a,
|
|
15
|
+
onSelect: l,
|
|
16
|
+
emptyState: u,
|
|
17
|
+
isLoading: f = !1,
|
|
18
|
+
loadingRows: g = 5,
|
|
19
|
+
tableHeight: m
|
|
20
|
+
}) {
|
|
21
|
+
const [b, c] = T(null), x = [
|
|
22
|
+
o ? "40px" : null,
|
|
23
|
+
...t.map((i) => i.width || "1fr")
|
|
24
|
+
].filter(Boolean).join(" "), N = () => /* @__PURE__ */ r.jsx("div", { className: s("divide-y divide-border/30 overflow-y-auto", `h-[calc(100vh-${m})]`), children: Array(g).fill(0).map((i, n) => /* @__PURE__ */ r.jsxs(
|
|
25
|
+
"div",
|
|
26
|
+
{
|
|
27
|
+
className: "grid items-center px-6 py-4 text-sm",
|
|
28
|
+
style: { gridTemplateColumns: x },
|
|
29
|
+
children: [
|
|
30
|
+
o && /* @__PURE__ */ r.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ r.jsx("div", { className: "h-4 w-4 rounded bg-muted animate-pulse" }) }),
|
|
31
|
+
t.map((e) => /* @__PURE__ */ r.jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
className: s("px-2 relative min-w-0", e.className),
|
|
35
|
+
children: /* @__PURE__ */ r.jsx(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
className: "h-4 bg-muted rounded animate-pulse",
|
|
39
|
+
style: { width: Math.random() * 40 + 40 + "%" }
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
},
|
|
43
|
+
`skeleton-col-${e.id}`
|
|
44
|
+
))
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
`skeleton-${n}`
|
|
48
|
+
)) });
|
|
49
|
+
return f ? /* @__PURE__ */ r.jsx(h, { className: v, children: /* @__PURE__ */ r.jsxs("div", { className: "relative", children: [
|
|
50
|
+
/* @__PURE__ */ r.jsxs(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
className: s(
|
|
54
|
+
"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10"
|
|
55
|
+
),
|
|
56
|
+
style: { gridTemplateColumns: x },
|
|
57
|
+
children: [
|
|
58
|
+
o && /* @__PURE__ */ r.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ r.jsx("div", { className: "h-4 w-4 rounded bg-muted animate-pulse" }) }),
|
|
59
|
+
t.map((i) => /* @__PURE__ */ r.jsx("div", { className: s("px-2 font-medium", i.className), children: i.header }, i.id))
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
/* @__PURE__ */ r.jsx(N, {})
|
|
64
|
+
] }) }) : d.length === 0 ? /* @__PURE__ */ r.jsx(h, { className: v, children: /* @__PURE__ */ r.jsx("div", { className: "relative", children: /* @__PURE__ */ r.jsx($, { ...u }) }) }) : /* @__PURE__ */ r.jsx(h, { className: v, children: /* @__PURE__ */ r.jsxs("div", { className: "relative", children: [
|
|
65
|
+
/* @__PURE__ */ r.jsxs(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
className: s(
|
|
69
|
+
"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10"
|
|
70
|
+
),
|
|
71
|
+
style: { gridTemplateColumns: x },
|
|
72
|
+
children: [
|
|
73
|
+
o && /* @__PURE__ */ r.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ r.jsx(
|
|
74
|
+
j,
|
|
75
|
+
{
|
|
76
|
+
checked: d.length > 0 && (a == null ? void 0 : a.size) === d.length,
|
|
77
|
+
onClick: (i) => {
|
|
78
|
+
i.stopPropagation(), d.forEach((n) => l == null ? void 0 : l(n.id, !(a != null && a.has(n.id))));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
) }),
|
|
82
|
+
t.map((i) => /* @__PURE__ */ r.jsx("div", { className: s("px-2 font-medium", i.className), children: i.header }, i.id))
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ r.jsx("div", { className: s("divide-y divide-border/30 overflow-y-auto", m || "h-[calc(100vh-12rem)]"), children: d.map((i, n) => /* @__PURE__ */ r.jsxs(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
className: s(
|
|
90
|
+
"grid items-center px-6 py-4 text-sm text-foreground bg-background hover:bg-muted/30 transition-colors duration-150 group cursor-pointer"
|
|
91
|
+
),
|
|
92
|
+
style: { gridTemplateColumns: x },
|
|
93
|
+
onClick: () => p == null ? void 0 : p(i),
|
|
94
|
+
children: [
|
|
95
|
+
o && /* @__PURE__ */ r.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ r.jsx(
|
|
96
|
+
j,
|
|
97
|
+
{
|
|
98
|
+
checked: a == null ? void 0 : a.has(i.id),
|
|
99
|
+
onClick: (e) => {
|
|
100
|
+
e.stopPropagation(), l == null || l(i.id, !(a != null && a.has(i.id)));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
) }),
|
|
104
|
+
t.map((e) => /* @__PURE__ */ r.jsxs(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
className: s(
|
|
108
|
+
"px-2 relative min-w-0",
|
|
109
|
+
e.className
|
|
110
|
+
),
|
|
111
|
+
onMouseEnter: () => e.tooltipValue && c(`${n}-${e.id}`),
|
|
112
|
+
onMouseLeave: () => c(null),
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ r.jsx("div", { className: s(
|
|
115
|
+
"flex items-center gap-2",
|
|
116
|
+
e.truncate && "overflow-hidden"
|
|
117
|
+
), children: /* @__PURE__ */ r.jsx("div", { className: s(
|
|
118
|
+
"w-full",
|
|
119
|
+
e.truncate && "truncate"
|
|
120
|
+
), children: e.cell(i) }) }),
|
|
121
|
+
e.tooltipValue && b === `${n}-${e.id}` && /* @__PURE__ */ r.jsx(
|
|
122
|
+
y,
|
|
123
|
+
{
|
|
124
|
+
content: e.tooltipValue(i),
|
|
125
|
+
side: "bottom",
|
|
126
|
+
align: "start",
|
|
127
|
+
isVisible: !0
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
e.id
|
|
133
|
+
))
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
i.id
|
|
137
|
+
)) })
|
|
138
|
+
] }) });
|
|
139
|
+
}
|
|
140
|
+
export {
|
|
141
|
+
P as Table
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=table.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.esm.js","sources":["../../src/components/table.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { TableEmpty } from \"./table-empty\"\n\nexport interface Column<T> {\n id: string\n header: string\n width?: string\n cell: (item: T) => React.ReactNode\n className?: string\n tooltipValue?: (item: T) => string\n truncate?: boolean\n}\n\nexport interface TableProps<T> {\n data: T[]\n columns: Column<T>[]\n showCheckbox?: boolean\n onRowClick?: (item: T) => void\n className?: string\n selectedItems?: Set<string>\n onSelect?: (id: string, checked: boolean) => void\n emptyState?: {\n title?: string\n description?: string\n actionLabel?: string\n onAction?: () => void\n icon?: React.ReactNode\n }\n isLoading?: boolean\n loadingRows?: number\n tableHeight?: string\n}\n\nconst TableContainer = ({ children, className }: { children: React.ReactNode, className?: string }) => {\n return (\n <div className={cn(\"border border-border/50 rounded-lg overflow-hidden bg-background shadow-sm\", className)}>\n {children}\n </div>\n )\n} \nexport function Table<T extends { id: string }>({ \n data, \n columns, \n showCheckbox = true,\n onRowClick,\n className,\n selectedItems,\n onSelect,\n emptyState,\n isLoading = false,\n loadingRows = 5,\n tableHeight\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Improved grid template calculation\n const gridTemplateColumns = [\n showCheckbox ? '40px' : null,\n ...columns.map(col => col.width || '1fr')\n ].filter(Boolean).join(' ');\n\n // Loading skeleton component\n const TableSkeleton = () => (\n <div className={cn(\"divide-y divide-border/30 overflow-y-auto\", `h-[calc(100vh-${tableHeight})]`)}>\n {Array(loadingRows).fill(0).map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"grid items-center px-6 py-4 text-sm\"\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n </div>\n )}\n \n {columns.map(column => (\n <div \n key={`skeleton-col-${column.id}`} \n className={cn(\"px-2 relative min-w-0\", column.className)}\n >\n <div className=\"h-4 bg-muted rounded animate-pulse\" \n style={{ width: Math.random() * 40 + 40 + '%' }} />\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n\n if (isLoading) {\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n {/* Header */}\n <div className={cn(\n \"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10\",\n )}\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n </div>\n )}\n {columns.map(column => (\n <div key={column.id} className={cn(\"px-2 font-medium\", column.className)}>\n {column.header}\n </div>\n ))}\n </div>\n\n <TableSkeleton />\n </div>\n </TableContainer>\n );\n }\n\n if (data.length === 0) {\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n <TableEmpty {...emptyState} />\n </div>\n </TableContainer>\n );\n }\n\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n {/* Header */}\n <div className={cn(\n \"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10\",\n )}\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <Checkbox \n checked={data.length > 0 && selectedItems?.size === data.length}\n onClick={(e) => {\n e.stopPropagation();\n data.forEach(item => onSelect?.(item.id, !selectedItems?.has(item.id)));\n }}\n />\n </div>\n )}\n {columns.map(column => (\n <div key={column.id} className={cn(\"px-2 font-medium\", column.className)}>\n {column.header}\n </div>\n ))}\n </div>\n\n {/* Body */}\n <div className={cn(\"divide-y divide-border/30 overflow-y-auto\", tableHeight || \"h-[calc(100vh-12rem)]\")}>\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"grid items-center px-6 py-4 text-sm text-foreground bg-background hover:bg-muted/30 transition-colors duration-150 group cursor-pointer\",\n )}\n style={{ gridTemplateColumns }}\n onClick={() => onRowClick?.(item)}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <Checkbox \n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n />\n </div>\n )}\n \n {columns.map(column => (\n <div \n key={column.id} \n className={cn(\n \"px-2 relative min-w-0\",\n column.className\n )}\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className={cn(\n \"flex items-center gap-2\",\n column.truncate && \"overflow-hidden\"\n )}>\n <div className={cn(\n \"w-full\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align='start'\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </TableContainer>\n );\n} "],"names":["TableContainer","children","className","cn","Table","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","emptyState","isLoading","loadingRows","tableHeight","hoveredText","setHoveredText","useState","gridTemplateColumns","col","TableSkeleton","jsx","_","index","jsxs","column","TableEmpty","Checkbox","e","item","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../jsx-runtime-BYECrxsp.cjs"),t=require("../utils-DSKoFOjv.cjs"),v=require("./checkbox.js"),g=require("./tooltip.js"),N=require("react"),y=require("./table-empty.js"),j=({children:n,className:x})=>s.jsxRuntimeExports.jsx("div",{className:t.cn("border border-border/50 rounded-lg overflow-hidden bg-background shadow-sm",x),children:n});function T({data:n,columns:x,showCheckbox:o=!0,onRowClick:p,className:l,selectedItems:i,onSelect:d,emptyState:h,isLoading:E=!1,loadingRows:b=5,tableHeight:m}){const[f,c]=N.useState(null),u=[o?"40px":null,...x.map(e=>e.width||"1fr")].filter(Boolean).join(" "),R=()=>s.jsxRuntimeExports.jsx("div",{className:t.cn("divide-y divide-border/30 overflow-y-auto",`h-[calc(100vh-${m})]`),children:Array(b).fill(0).map((e,a)=>s.jsxRuntimeExports.jsxs("div",{className:"grid items-center px-6 py-4 text-sm",style:{gridTemplateColumns:u},children:[o&&s.jsxRuntimeExports.jsx("div",{className:"flex items-center justify-center",children:s.jsxRuntimeExports.jsx("div",{className:"h-4 w-4 rounded bg-muted animate-pulse"})}),x.map(r=>s.jsxRuntimeExports.jsx("div",{className:t.cn("px-2 relative min-w-0",r.className),children:s.jsxRuntimeExports.jsx("div",{className:"h-4 bg-muted rounded animate-pulse",style:{width:Math.random()*40+40+"%"}})},`skeleton-col-${r.id}`))]},`skeleton-${a}`))});return E?s.jsxRuntimeExports.jsx(j,{className:l,children:s.jsxRuntimeExports.jsxs("div",{className:"relative",children:[s.jsxRuntimeExports.jsxs("div",{className:t.cn("grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10"),style:{gridTemplateColumns:u},children:[o&&s.jsxRuntimeExports.jsx("div",{className:"flex items-center justify-center",children:s.jsxRuntimeExports.jsx("div",{className:"h-4 w-4 rounded bg-muted animate-pulse"})}),x.map(e=>s.jsxRuntimeExports.jsx("div",{className:t.cn("px-2 font-medium",e.className),children:e.header},e.id))]}),s.jsxRuntimeExports.jsx(R,{})]})}):n.length===0?s.jsxRuntimeExports.jsx(j,{className:l,children:s.jsxRuntimeExports.jsx("div",{className:"relative",children:s.jsxRuntimeExports.jsx(y.TableEmpty,{...h})})}):s.jsxRuntimeExports.jsx(j,{className:l,children:s.jsxRuntimeExports.jsxs("div",{className:"relative",children:[s.jsxRuntimeExports.jsxs("div",{className:t.cn("grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10"),style:{gridTemplateColumns:u},children:[o&&s.jsxRuntimeExports.jsx("div",{className:"flex items-center justify-center",children:s.jsxRuntimeExports.jsx(v.Checkbox,{checked:n.length>0&&(i==null?void 0:i.size)===n.length,onClick:e=>{e.stopPropagation(),n.forEach(a=>d==null?void 0:d(a.id,!(i!=null&&i.has(a.id))))}})}),x.map(e=>s.jsxRuntimeExports.jsx("div",{className:t.cn("px-2 font-medium",e.className),children:e.header},e.id))]}),s.jsxRuntimeExports.jsx("div",{className:t.cn("divide-y divide-border/30 overflow-y-auto",m||"h-[calc(100vh-12rem)]"),children:n.map((e,a)=>s.jsxRuntimeExports.jsxs("div",{className:t.cn("grid items-center px-6 py-4 text-sm text-foreground bg-background hover:bg-muted/30 transition-colors duration-150 group cursor-pointer"),style:{gridTemplateColumns:u},onClick:()=>p==null?void 0:p(e),children:[o&&s.jsxRuntimeExports.jsx("div",{className:"flex items-center justify-center",children:s.jsxRuntimeExports.jsx(v.Checkbox,{checked:i==null?void 0:i.has(e.id),onClick:r=>{r.stopPropagation(),d==null||d(e.id,!(i!=null&&i.has(e.id)))}})}),x.map(r=>s.jsxRuntimeExports.jsxs("div",{className:t.cn("px-2 relative min-w-0",r.className),onMouseEnter:()=>r.tooltipValue&&c(`${a}-${r.id}`),onMouseLeave:()=>c(null),children:[s.jsxRuntimeExports.jsx("div",{className:t.cn("flex items-center gap-2",r.truncate&&"overflow-hidden"),children:s.jsxRuntimeExports.jsx("div",{className:t.cn("w-full",r.truncate&&"truncate"),children:r.cell(e)})}),r.tooltipValue&&f===`${a}-${r.id}`&&s.jsxRuntimeExports.jsx(g.Tooltip,{content:r.tooltipValue(e),side:"bottom",align:"start",isVisible:!0})]},r.id))]},e.id))})]})})}exports.Table=T;
|
|
2
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../src/components/table.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { TableEmpty } from \"./table-empty\"\n\nexport interface Column<T> {\n id: string\n header: string\n width?: string\n cell: (item: T) => React.ReactNode\n className?: string\n tooltipValue?: (item: T) => string\n truncate?: boolean\n}\n\nexport interface TableProps<T> {\n data: T[]\n columns: Column<T>[]\n showCheckbox?: boolean\n onRowClick?: (item: T) => void\n className?: string\n selectedItems?: Set<string>\n onSelect?: (id: string, checked: boolean) => void\n emptyState?: {\n title?: string\n description?: string\n actionLabel?: string\n onAction?: () => void\n icon?: React.ReactNode\n }\n isLoading?: boolean\n loadingRows?: number\n tableHeight?: string\n}\n\nconst TableContainer = ({ children, className }: { children: React.ReactNode, className?: string }) => {\n return (\n <div className={cn(\"border border-border/50 rounded-lg overflow-hidden bg-background shadow-sm\", className)}>\n {children}\n </div>\n )\n} \nexport function Table<T extends { id: string }>({ \n data, \n columns, \n showCheckbox = true,\n onRowClick,\n className,\n selectedItems,\n onSelect,\n emptyState,\n isLoading = false,\n loadingRows = 5,\n tableHeight\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Improved grid template calculation\n const gridTemplateColumns = [\n showCheckbox ? '40px' : null,\n ...columns.map(col => col.width || '1fr')\n ].filter(Boolean).join(' ');\n\n // Loading skeleton component\n const TableSkeleton = () => (\n <div className={cn(\"divide-y divide-border/30 overflow-y-auto\", `h-[calc(100vh-${tableHeight})]`)}>\n {Array(loadingRows).fill(0).map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"grid items-center px-6 py-4 text-sm\"\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n </div>\n )}\n \n {columns.map(column => (\n <div \n key={`skeleton-col-${column.id}`} \n className={cn(\"px-2 relative min-w-0\", column.className)}\n >\n <div className=\"h-4 bg-muted rounded animate-pulse\" \n style={{ width: Math.random() * 40 + 40 + '%' }} />\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n\n if (isLoading) {\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n {/* Header */}\n <div className={cn(\n \"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10\",\n )}\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n </div>\n )}\n {columns.map(column => (\n <div key={column.id} className={cn(\"px-2 font-medium\", column.className)}>\n {column.header}\n </div>\n ))}\n </div>\n\n <TableSkeleton />\n </div>\n </TableContainer>\n );\n }\n\n if (data.length === 0) {\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n <TableEmpty {...emptyState} />\n </div>\n </TableContainer>\n );\n }\n\n return (\n <TableContainer className={className}>\n <div className=\"relative\">\n {/* Header */}\n <div className={cn(\n \"grid items-center px-6 py-3 text-xs font-medium text-muted-foreground/80 bg-muted/30 border-b border-border/30 sticky top-0 z-10\",\n )}\n style={{ gridTemplateColumns }}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <Checkbox \n checked={data.length > 0 && selectedItems?.size === data.length}\n onClick={(e) => {\n e.stopPropagation();\n data.forEach(item => onSelect?.(item.id, !selectedItems?.has(item.id)));\n }}\n />\n </div>\n )}\n {columns.map(column => (\n <div key={column.id} className={cn(\"px-2 font-medium\", column.className)}>\n {column.header}\n </div>\n ))}\n </div>\n\n {/* Body */}\n <div className={cn(\"divide-y divide-border/30 overflow-y-auto\", tableHeight || \"h-[calc(100vh-12rem)]\")}>\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"grid items-center px-6 py-4 text-sm text-foreground bg-background hover:bg-muted/30 transition-colors duration-150 group cursor-pointer\",\n )}\n style={{ gridTemplateColumns }}\n onClick={() => onRowClick?.(item)}\n >\n {showCheckbox && (\n <div className=\"flex items-center justify-center\">\n <Checkbox \n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n />\n </div>\n )}\n \n {columns.map(column => (\n <div \n key={column.id} \n className={cn(\n \"px-2 relative min-w-0\",\n column.className\n )}\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className={cn(\n \"flex items-center gap-2\",\n column.truncate && \"overflow-hidden\"\n )}>\n <div className={cn(\n \"w-full\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align='start'\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </TableContainer>\n );\n} "],"names":["TableContainer","children","className","cn","Table","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","emptyState","isLoading","loadingRows","tableHeight","hoveredText","setHoveredText","useState","gridTemplateColumns","col","TableSkeleton","jsx","_","index","jsxs","column","TableEmpty","Checkbox","item","e","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
3
|
+
declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
5
|
+
declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
6
|
+
declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
export { Tabs, TabsList, TabsTrigger, TabsContent };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { j as a } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import * as o from "react";
|
|
3
|
+
import * as e from "@radix-ui/react-tabs";
|
|
4
|
+
import { c as n } from "../utils-qaFjX9_3.js";
|
|
5
|
+
const m = e.Root, r = o.forwardRef(({ className: i, ...s }, t) => /* @__PURE__ */ a.jsx(
|
|
6
|
+
e.List,
|
|
7
|
+
{
|
|
8
|
+
ref: t,
|
|
9
|
+
className: n(
|
|
10
|
+
"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
|
|
11
|
+
i
|
|
12
|
+
),
|
|
13
|
+
...s
|
|
14
|
+
}
|
|
15
|
+
));
|
|
16
|
+
r.displayName = e.List.displayName;
|
|
17
|
+
const f = o.forwardRef(({ className: i, ...s }, t) => /* @__PURE__ */ a.jsx(
|
|
18
|
+
e.Trigger,
|
|
19
|
+
{
|
|
20
|
+
ref: t,
|
|
21
|
+
className: n(
|
|
22
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",
|
|
23
|
+
i
|
|
24
|
+
),
|
|
25
|
+
...s
|
|
26
|
+
}
|
|
27
|
+
));
|
|
28
|
+
f.displayName = e.Trigger.displayName;
|
|
29
|
+
const c = o.forwardRef(({ className: i, ...s }, t) => /* @__PURE__ */ a.jsx(
|
|
30
|
+
e.Content,
|
|
31
|
+
{
|
|
32
|
+
ref: t,
|
|
33
|
+
className: n(
|
|
34
|
+
"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
35
|
+
i
|
|
36
|
+
),
|
|
37
|
+
...s
|
|
38
|
+
}
|
|
39
|
+
));
|
|
40
|
+
c.displayName = e.Content.displayName;
|
|
41
|
+
export {
|
|
42
|
+
m as Tabs,
|
|
43
|
+
c as TabsContent,
|
|
44
|
+
r as TabsList,
|
|
45
|
+
f as TabsTrigger
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=tabs.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.esm.js","sources":["../../src/components/tabs.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent } "],"names":["Tabs","TabsPrimitive","TabsList","React","className","props","ref","jsx","cn","TabsTrigger","TabsContent"],"mappings":";;;;AAIA,MAAMA,IAAOC,EAAc,MAErBC,IAAWC,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACN,EAAc;AAAA,EAAd;AAAA,IACC,KAAAK;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAS,cAAcD,EAAc,KAAK;AAE1C,MAAMQ,IAAcN,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACN,EAAc;AAAA,EAAd;AAAA,IACC,KAAAK;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDI,EAAY,cAAcR,EAAc,QAAQ;AAEhD,MAAMS,IAAcP,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACN,EAAc;AAAA,EAAd;AAAA,IACC,KAAAK;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDK,EAAY,cAAcT,EAAc,QAAQ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../jsx-runtime-BYECrxsp.cjs"),d=require("react"),b=require("@radix-ui/react-tabs"),r=require("../utils-DSKoFOjv.cjs");function c(e){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return s.default=e,Object.freeze(s)}const a=c(d),i=c(b),g=i.Root,u=a.forwardRef(({className:e,...s},t)=>n.jsxRuntimeExports.jsx(i.List,{ref:t,className:r.cn("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...s}));u.displayName=i.List.displayName;const l=a.forwardRef(({className:e,...s},t)=>n.jsxRuntimeExports.jsx(i.Trigger,{ref:t,className:r.cn("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",e),...s}));l.displayName=i.Trigger.displayName;const f=a.forwardRef(({className:e,...s},t)=>n.jsxRuntimeExports.jsx(i.Content,{ref:t,className:r.cn("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...s}));f.displayName=i.Content.displayName;exports.Tabs=g;exports.TabsContent=f;exports.TabsList=u;exports.TabsTrigger=l;
|
|
2
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sources":["../../src/components/tabs.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent } "],"names":["Tabs","TabsPrimitive","TabsList","React","className","props","ref","jsx","cn","TabsTrigger","TabsContent"],"mappings":"wfAIMA,EAAOC,EAAc,KAErBC,EAAWC,EAAM,WAGrB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,kBAAAA,IAACN,EAAc,KAAd,CACC,IAAAK,EACA,UAAWE,EAAAA,GACT,4FACAJ,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDH,EAAS,YAAcD,EAAc,KAAK,YAE1C,MAAMQ,EAAcN,EAAM,WAGxB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,kBAAAA,IAACN,EAAc,QAAd,CACC,IAAAK,EACA,UAAWE,EAAAA,GACT,iYACAJ,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDI,EAAY,YAAcR,EAAc,QAAQ,YAEhD,MAAMS,EAAcP,EAAM,WAGxB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,kBAAAA,IAACN,EAAc,QAAd,CACC,IAAAK,EACA,UAAWE,EAAAA,GACT,kIACAJ,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDK,EAAY,YAAcT,EAAc,QAAQ"}
|