UNPKG

ivt

Version:

Ivt Components Library

121 lines (117 loc) 5.67 kB
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