ivt
Version:
Ivt Components Library
121 lines (117 loc) • 5.67 kB
JavaScript
import React__default from 'react';
import { c as cn } from '../chunks/utils-05LlW3Cl.mjs';
import { D as DeleteConfirmationModal } from '../chunks/DeleteConfirmationModal-CjXlfOWx.mjs';
import { c as createLucideIcon } from '../chunks/createLucideIcon-DLrNgMqk.mjs';
import { A as Accordion, a as AccordionItem, b as AccordionTrigger, c as AccordionContent } from '../chunks/accordion-130n2E9C.mjs';
import { B as Badge } from '../chunks/badge-rV4HbE_R.mjs';
import { B as Button } from '../chunks/button-Co_1yLv6.mjs';
import '../chunks/bundle-mjs-BYcyWisL.mjs';
import '../chunks/dialog-BkF50Tmo.mjs';
import '../chunks/index-BRYGnp2Q.mjs';
import '../chunks/index-Bl-WJHvp.mjs';
import '../chunks/index-1tQVI0Jh.mjs';
import '../chunks/index-DT8WgpCS.mjs';
import 'react/jsx-runtime';
import '../chunks/index-tkRL9Tft.mjs';
import '../chunks/index-DKOlG3mh.mjs';
import '../chunks/index-D4FMFHi9.mjs';
import '../chunks/index-DUpRrJTH.mjs';
import '../chunks/index-DgKlJYZP.mjs';
import 'react-dom';
import '@radix-ui/react-slot';
import '../chunks/index-Cbm3--wc.mjs';
import '../chunks/index-DvCZGX3H.mjs';
import '../chunks/tslib.es6-DXUeYCTx.mjs';
import '../chunks/index-BTe1rv5Z.mjs';
import '../chunks/index-C6s8KI_8.mjs';
import '../chunks/x-BOMmTgZd.mjs';
import '../chunks/trash-2-D6lkozey.mjs';
import '@radix-ui/react-collection';
import '../chunks/index-DWJ_2Xiy.mjs';
import '../chunks/index-CGLjQEjG.mjs';
import '../chunks/chevron-down-DNXEgdv9.mjs';
import 'class-variance-authority';
const __iconNode = [
[
"path",
{
d: "M3 6h18",
key: "d0wm0j"
}
],
[
"path",
{
d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",
key: "4alrt4"
}
],
[
"path",
{
d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",
key: "v07s0e"
}
]
];
const Trash = createLucideIcon("Trash", __iconNode);
function AccordionTable({ data, renderContent, getItemId, onDelete, categoryTitle = (cat)=>cat }) {
const [openChildByCategory, setOpenChildByCategory] = React__default.useState(()=>Object.fromEntries(Object.entries(data).map(([category, dates])=>[
category,
Object.keys(dates)[0] || null
])));
return /*#__PURE__*/ React__default.createElement(Accordion, {
type: "single",
className: "*:font-lato space-y-2 rounded-lg",
collapsible: true
}, Object.entries(data).map(([category, dates])=>{
const anyChildOpen = openChildByCategory[category] != null;
return /*#__PURE__*/ React__default.createElement(AccordionItem, {
key: category,
value: category,
className: cn("bg-sidebar group rounded-lg border last:border-b", "data-[state=open]:pb-2")
}, /*#__PURE__*/ React__default.createElement(AccordionTrigger, {
className: cn("hover:bg-sidebar/80 bg-sidebar rounded-lg px-4 hover:no-underline")
}, /*#__PURE__*/ React__default.createElement("span", {
className: "text-sm font-medium"
}, categoryTitle(category))), /*#__PURE__*/ React__default.createElement(AccordionContent, {
className: "rounded-lg border-0 pb-0 group-data-[state=open]:border-0"
}, /*#__PURE__*/ React__default.createElement(Accordion, {
type: "single",
className: cn("mx-2 overflow-hidden rounded-lg border"),
defaultValue: Object.keys(dates)[0],
collapsible: true,
onValueChange: (v)=>setOpenChildByCategory((prev)=>({
...prev,
[category]: v || null
}))
}, Object.entries(dates).map(([date, item])=>{
const itemId = getItemId(item);
return /*#__PURE__*/ React__default.createElement(AccordionItem, {
key: `${category}-${date}-${itemId}`,
value: date,
className: cn("bg-sidebar pt-1 pb-0.75", anyChildOpen && "p-0")
}, /*#__PURE__*/ React__default.createElement(AccordionTrigger, {
className: cn("bg-sidebar hover:text-foreground [&>svg]:text-muted-foreground group mx-0 my-0 rounded-lg rounded-br-none rounded-bl-none py-1.5 pr-4 transition-all hover:no-underline data-[state=open]:pb-4", anyChildOpen && "bg-sidebar data-[state=open]:m-0 data-[state=open]:mx-0 data-[state=open]:mt-0 data-[state=open]:pl-0")
}, /*#__PURE__*/ React__default.createElement("div", {
className: "flex w-full items-center justify-between pr-2"
}, /*#__PURE__*/ React__default.createElement("div", {
className: cn("ml-2.5 flex flex-wrap items-center gap-2 transition-all")
}, /*#__PURE__*/ React__default.createElement(Badge, {
variant: "outline",
className: "text-xs font-semibold"
}, date), onDelete && /*#__PURE__*/ React__default.createElement(DeleteConfirmationModal, {
onConfirm: ()=>onDelete(category, item)
}, /*#__PURE__*/ React__default.createElement(Button, {
variant: "table",
size: "icon"
}, /*#__PURE__*/ React__default.createElement(Trash, {
className: "text-destructive size-3.5"
})))))), /*#__PURE__*/ React__default.createElement(AccordionContent, null, /*#__PURE__*/ React__default.createElement("div", {
className: "bg-card mr-4 ml-2 rounded-lg border"
}, renderContent(item, category, date))));
}))));
}));
}
export { AccordionTable };
//# sourceMappingURL=index.mjs.map