@etus/ui 0.4.0-beta.3 → 0.4.0-beta.5
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/dist/chunk-2HM5Z2YP.js +834 -0
- package/dist/chunk-2HM5Z2YP.js.map +1 -0
- package/dist/{chunk-LMTNDUIP.js → chunk-2Y7PQ6ZL.js} +4 -4
- package/dist/{chunk-LMTNDUIP.js.map → chunk-2Y7PQ6ZL.js.map} +1 -1
- package/dist/{chunk-SAKW2OKH.js → chunk-32IJQOUV.js} +15 -26
- package/dist/chunk-32IJQOUV.js.map +1 -0
- package/dist/{chunk-CXHA5D3I.js → chunk-33JGPMUW.js} +4 -4
- package/dist/{chunk-CXHA5D3I.js.map → chunk-33JGPMUW.js.map} +1 -1
- package/dist/{chunk-JLVL76SW.js → chunk-36XTKR3B.js} +4 -4
- package/dist/{chunk-JLVL76SW.js.map → chunk-36XTKR3B.js.map} +1 -1
- package/dist/{chunk-CUWQUGGB.js → chunk-4GQN76L7.js} +3 -3
- package/dist/{chunk-CUWQUGGB.js.map → chunk-4GQN76L7.js.map} +1 -1
- package/dist/{chunk-7BAL24EU.js → chunk-5XQIH6WM.js} +4 -4
- package/dist/{chunk-7BAL24EU.js.map → chunk-5XQIH6WM.js.map} +1 -1
- package/dist/chunk-5ZWFIDO2.js +3 -0
- package/dist/{chunk-NNOGFX66.js.map → chunk-5ZWFIDO2.js.map} +1 -1
- package/dist/{chunk-43SINRHH.js → chunk-AUCDXPWH.js} +5 -5
- package/dist/{chunk-43SINRHH.js.map → chunk-AUCDXPWH.js.map} +1 -1
- package/dist/{chunk-4HRQX2IA.js → chunk-AWYOWR5N.js} +3 -3
- package/dist/{chunk-4HRQX2IA.js.map → chunk-AWYOWR5N.js.map} +1 -1
- package/dist/{chunk-YTGYSNFR.js → chunk-B4ETIQOO.js} +4 -4
- package/dist/{chunk-YTGYSNFR.js.map → chunk-B4ETIQOO.js.map} +1 -1
- package/dist/{chunk-D5DM6GZB.js → chunk-D6TH3EGA.js} +12 -12
- package/dist/chunk-D6TH3EGA.js.map +1 -0
- package/dist/{chunk-ZJVZ3LQS.js → chunk-DDM2I5C6.js} +3 -3
- package/dist/{chunk-ZJVZ3LQS.js.map → chunk-DDM2I5C6.js.map} +1 -1
- package/dist/{chunk-3JIXCWJO.js → chunk-DDR24GOP.js} +3 -3
- package/dist/{chunk-3JIXCWJO.js.map → chunk-DDR24GOP.js.map} +1 -1
- package/dist/{chunk-GBTVAO4V.js → chunk-EGYWK2XX.js} +3 -3
- package/dist/{chunk-GBTVAO4V.js.map → chunk-EGYWK2XX.js.map} +1 -1
- package/dist/{chunk-CCUCWL6M.js → chunk-HT5XM6XK.js} +12 -7
- package/dist/chunk-HT5XM6XK.js.map +1 -0
- package/dist/{chunk-KNH7JW6E.js → chunk-IBVCSZCH.js} +3 -3
- package/dist/{chunk-KNH7JW6E.js.map → chunk-IBVCSZCH.js.map} +1 -1
- package/dist/{chunk-GLEKBJLR.js → chunk-ILAV2AZ4.js} +3 -3
- package/dist/{chunk-GLEKBJLR.js.map → chunk-ILAV2AZ4.js.map} +1 -1
- package/dist/{chunk-MDQFZEIC.js → chunk-J62TFQHR.js} +6 -6
- package/dist/chunk-J62TFQHR.js.map +1 -0
- package/dist/{chunk-AWWBBMMY.js → chunk-JKYB5QAP.js} +5 -5
- package/dist/{chunk-AWWBBMMY.js.map → chunk-JKYB5QAP.js.map} +1 -1
- package/dist/{chunk-UKC3Q6OA.js → chunk-JMZ4CO6R.js} +3 -3
- package/dist/{chunk-UKC3Q6OA.js.map → chunk-JMZ4CO6R.js.map} +1 -1
- package/dist/{chunk-VJITPUUS.js → chunk-JONTKXGK.js} +26 -24
- package/dist/chunk-JONTKXGK.js.map +1 -0
- package/dist/{chunk-POZNQWZE.js → chunk-KC6CHPT3.js} +4 -4
- package/dist/{chunk-POZNQWZE.js.map → chunk-KC6CHPT3.js.map} +1 -1
- package/dist/{chunk-4J6DHPYY.js → chunk-KPNNSUXM.js} +3 -3
- package/dist/{chunk-4J6DHPYY.js.map → chunk-KPNNSUXM.js.map} +1 -1
- package/dist/{chunk-RPV77BCQ.js → chunk-ONQCNOLU.js} +4 -9
- package/dist/chunk-ONQCNOLU.js.map +1 -0
- package/dist/{chunk-QSY52N3A.js → chunk-OWOVCGUZ.js} +3 -3
- package/dist/{chunk-QSY52N3A.js.map → chunk-OWOVCGUZ.js.map} +1 -1
- package/dist/{chunk-QWRHPNBY.js → chunk-QIETN4UU.js} +4 -4
- package/dist/{chunk-QWRHPNBY.js.map → chunk-QIETN4UU.js.map} +1 -1
- package/dist/{chunk-NWFRMVI2.js → chunk-QZWKXUZP.js} +3 -3
- package/dist/{chunk-NWFRMVI2.js.map → chunk-QZWKXUZP.js.map} +1 -1
- package/dist/{chunk-7QDWREVG.js → chunk-R4UOT76L.js} +3 -3
- package/dist/{chunk-7QDWREVG.js.map → chunk-R4UOT76L.js.map} +1 -1
- package/dist/{chunk-HIEOL77G.js → chunk-RVUO7SDG.js} +4 -4
- package/dist/{chunk-HIEOL77G.js.map → chunk-RVUO7SDG.js.map} +1 -1
- package/dist/{chunk-XPVKJIWY.js → chunk-SCGKQ5RE.js} +3 -3
- package/dist/{chunk-XPVKJIWY.js.map → chunk-SCGKQ5RE.js.map} +1 -1
- package/dist/{chunk-UCGT2IR4.js → chunk-SJSYKUCL.js} +3 -3
- package/dist/{chunk-UCGT2IR4.js.map → chunk-SJSYKUCL.js.map} +1 -1
- package/dist/{chunk-KOTCWE7V.js → chunk-TNROOKX3.js} +11 -4
- package/dist/chunk-TNROOKX3.js.map +1 -0
- package/dist/{chunk-PGTCXLGY.js → chunk-U6EOAIPK.js} +3 -3
- package/dist/chunk-U6EOAIPK.js.map +1 -0
- package/dist/{chunk-KXSJSLPJ.js → chunk-V7XHE25E.js} +4 -4
- package/dist/{chunk-KXSJSLPJ.js.map → chunk-V7XHE25E.js.map} +1 -1
- package/dist/{chunk-5ZKKXLPF.js → chunk-VPNFYQBL.js} +10 -15
- package/dist/chunk-VPNFYQBL.js.map +1 -0
- package/dist/{chunk-FUCQNVJL.js → chunk-XLTSCY22.js} +10 -7
- package/dist/chunk-XLTSCY22.js.map +1 -0
- package/dist/{chunk-K3J7YLL4.js → chunk-XOGMDABS.js} +5 -6
- package/dist/chunk-XOGMDABS.js.map +1 -0
- package/dist/{chunk-53RWD44Z.js → chunk-XRMKL43Y.js} +3 -3
- package/dist/{chunk-53RWD44Z.js.map → chunk-XRMKL43Y.js.map} +1 -1
- package/dist/{chunk-DZALMUQD.js → chunk-Y3BOERVB.js} +3 -3
- package/dist/{chunk-DZALMUQD.js.map → chunk-Y3BOERVB.js.map} +1 -1
- package/dist/{chunk-AV5YQ2Z4.js → chunk-Y7UFBSAD.js} +3 -3
- package/dist/{chunk-AV5YQ2Z4.js.map → chunk-Y7UFBSAD.js.map} +1 -1
- package/dist/{chunk-HNYBLROK.js → chunk-YP2ATSXP.js} +11 -28
- package/dist/chunk-YP2ATSXP.js.map +1 -0
- package/dist/{chunk-75QBUI2P.js → chunk-ZO2EKJZM.js} +16 -8
- package/dist/chunk-ZO2EKJZM.js.map +1 -0
- package/dist/{chunk-VOCA4KZB.js → chunk-ZS2WS5NJ.js} +4 -4
- package/dist/{chunk-VOCA4KZB.js.map → chunk-ZS2WS5NJ.js.map} +1 -1
- package/dist/components/advanced/Calendar/index.js +3 -3
- package/dist/components/advanced/EventCalendar/index.js +3 -3
- package/dist/components/advanced/FilterBuilder/index.js +3 -3
- package/dist/components/advanced/ReportBuilder/index.js +11 -0
- package/dist/components/advanced/ReportBuilder/index.js.map +1 -0
- package/dist/components/advanced/index.js +14 -10
- package/dist/components/data-display/Callout/index.js +1 -1
- package/dist/components/data-display/Carousel/index.js +3 -3
- package/dist/components/data-display/ChartCard/index.js +2 -2
- package/dist/components/data-display/DashboardFilterbar/index.js +5 -5
- package/dist/components/data-display/DataTable/FilterBuilder/index.js +3 -3
- package/dist/components/data-display/DataTable/index.js +5 -5
- package/dist/components/data-display/KPICard/index.js +3 -2
- package/dist/components/data-display/List/index.js +3 -3
- package/dist/components/data-display/SingleStat/index.js +1 -1
- package/dist/components/data-display/VirtualTable/index.js +2 -2
- package/dist/components/data-display/index.js +29 -29
- package/dist/components/feedback/AlertDialog/index.js +3 -3
- package/dist/components/feedback/ConfirmModal/index.js +4 -4
- package/dist/components/feedback/Notification/index.js +2 -2
- package/dist/components/feedback/index.js +8 -8
- package/dist/components/forms/DatePicker/index.js +4 -4
- package/dist/components/forms/DateRangePicker/index.js +4 -4
- package/dist/components/forms/Field/index.js +2 -2
- package/dist/components/forms/Form/index.js +2 -2
- package/dist/components/forms/InputGroup/index.js +4 -4
- package/dist/components/forms/InputOTPField/index.js +3 -3
- package/dist/components/forms/NativeSelect/index.js +1 -1
- package/dist/components/forms/TagsInput/index.js +2 -2
- package/dist/components/forms/Textarea/index.js +1 -1
- package/dist/components/forms/TextareaField/index.js +4 -4
- package/dist/components/forms/index.js +26 -26
- package/dist/components/index.js +105 -104
- package/dist/components/layout/index.js +3 -3
- package/dist/components/navigation/AccountSwitch/index.js +3 -3
- package/dist/components/navigation/Header/index.js +1 -1
- package/dist/components/navigation/MobileSidebar/index.js +2 -2
- package/dist/components/navigation/Pagination/index.js +3 -3
- package/dist/components/navigation/Sidebar/index.js +4 -4
- package/dist/components/navigation/index.js +10 -10
- package/dist/components/primitives/Avatar/index.js +1 -1
- package/dist/components/primitives/Badge/index.js +1 -1
- package/dist/components/primitives/Button/index.js +2 -2
- package/dist/components/primitives/ConfirmButton/index.js +4 -4
- package/dist/components/primitives/Label/index.js +1 -1
- package/dist/components/primitives/SplitButton/index.js +1 -1
- package/dist/components/primitives/index.js +17 -17
- package/dist/components/workflow/ApprovalFlow/index.js +4 -4
- package/dist/components/workflow/CommentSystem/index.js +5 -5
- package/dist/components/workflow/Dashboard/index.js +3 -3
- package/dist/components/workflow/DashboardBuilder/index.js +4 -4
- package/dist/components/workflow/KanbanBoard/index.js +4 -4
- package/dist/components/workflow/ReportGenerator/index.js +4 -4
- package/dist/components/workflow/Wizard/index.js +3 -3
- package/dist/components/workflow/index.js +15 -15
- package/dist/fonts/inter-OFL.txt +92 -0
- package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-500-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-700-normal.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-OFL.txt +93 -0
- package/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
- package/dist/index.d.ts +132 -33
- package/dist/index.js +105 -104
- package/dist/styles.css +291 -13
- package/package.json +2 -2
- package/dist/chunk-5ZKKXLPF.js.map +0 -1
- package/dist/chunk-75QBUI2P.js.map +0 -1
- package/dist/chunk-CCUCWL6M.js.map +0 -1
- package/dist/chunk-D5DM6GZB.js.map +0 -1
- package/dist/chunk-FUCQNVJL.js.map +0 -1
- package/dist/chunk-HNYBLROK.js.map +0 -1
- package/dist/chunk-K3J7YLL4.js.map +0 -1
- package/dist/chunk-KOTCWE7V.js.map +0 -1
- package/dist/chunk-MDQFZEIC.js.map +0 -1
- package/dist/chunk-NNOGFX66.js +0 -3
- package/dist/chunk-PGTCXLGY.js.map +0 -1
- package/dist/chunk-RPV77BCQ.js.map +0 -1
- package/dist/chunk-SAKW2OKH.js.map +0 -1
- package/dist/chunk-VJITPUUS.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/navigation/Sidebar/Sidebar.variants.ts","../src/components/navigation/Sidebar/Sidebar.tsx"],"names":["open"],"mappings":"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","file":"chunk-HT5XM6XK.js","sourcesContent":["import { cva } from \"class-variance-authority\"\n\n/* eslint-disable sonarjs/no-duplicate-string -- Tailwind class combinations naturally repeat in variant definitions */\n\n/**\n * Common peer menu button position styles\n */\nconst PEER_SIZE_POSITIONS = [\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n]\n\n/**\n * SidebarProvider wrapper variant styles\n */\nexport const sidebarProviderVariants = cva([\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n])\n\n/**\n * Sidebar (non-collapsible) variant styles\n */\nexport const sidebarNonCollapsibleVariants = cva([\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n])\n\n/**\n * Sidebar mobile content variant styles\n */\nexport const sidebarMobileVariants = cva([\n \"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\",\n])\n\n/**\n * Sidebar desktop wrapper variant styles\n */\nexport const sidebarDesktopVariants = cva([\n \"group peer text-sidebar-foreground hidden md:block\",\n])\n\n/**\n * Sidebar gap variant styles\n */\nexport const sidebarGapVariants = cva([\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n])\n\n/**\n * Sidebar container variant styles\n */\nexport const sidebarContainerVariants = cva([\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n])\n\n/**\n * Sidebar inner variant styles\n */\nexport const sidebarInnerVariants = cva([\n \"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col\",\n \"group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\",\n])\n\n/**\n * SidebarTrigger variant styles\n */\nexport const sidebarTriggerVariants = cva([\"size-7\"])\n\n/**\n * SidebarRail variant styles\n */\nexport const sidebarRailVariants = cva([\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear\",\n \"group-data-[side=left]:-right-4 group-data-[side=right]:left-0\",\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n])\n\n/**\n * SidebarInset variant styles\n */\nexport const sidebarInsetVariants = cva([\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0\",\n \"md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm\",\n \"md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n \"peer-data-[mode=dual]:bg-[color:var(--sidebar-background,var(--sidebar))] peer-data-[mode=dual]:flex peer-data-[mode=dual]:flex-col peer-data-[mode=dual]:gap-3 peer-data-[mode=dual]:pt-5\",\n])\n\n/**\n * SidebarInput variant styles\n */\nexport const sidebarInputVariants = cva([\n \"bg-background h-8 w-full shadow-none\",\n])\n\n/**\n * SidebarHeader variant styles\n *\n * Dual mode consumes sidebar.tokens.json (Figma 1092:542 panel header):\n * - padding-x = 16px (--sidebar-panel-header-padding-x)\n * - padding-top = 28px (--sidebar-panel-padding-top) when at top of panel\n */\nexport const sidebarHeaderVariants = cva([\n \"flex flex-col gap-2 p-2\",\n \"group-data-[mode]:gap-0\",\n \"group-data-[mode]:px-[var(--sidebar-panel-header-padding-x)]\",\n \"group-data-[mode]:pt-[var(--sidebar-panel-padding-top)]\",\n \"group-data-[mode]:pb-0\",\n])\n\n/**\n * SidebarFooter variant styles\n */\nexport const sidebarFooterVariants = cva([\n \"flex flex-col gap-2 p-2\",\n])\n\n/**\n * SidebarSeparator variant styles\n */\nexport const sidebarSeparatorVariants = cva([\n \"bg-sidebar-border mx-2 w-auto\",\n])\n\n/**\n * SidebarContent variant styles\n */\nexport const sidebarContentVariants = cva([\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n])\n\n/**\n * SidebarGroup variant styles\n *\n * Dual mode consumes sidebar.tokens.json (Figma 1092:542 Sub Categoria block):\n * - padding-x = 8px (--sidebar-section-padding-x)\n * - vertical gap with header handled by panel gap (--sidebar-panel-gap = 28px)\n */\nexport const sidebarGroupVariants = cva([\n \"relative flex w-full min-w-0 flex-col p-2\",\n \"group-data-[mode]:px-[var(--sidebar-section-padding-x)]\",\n \"group-data-[mode]:pt-[var(--sidebar-panel-gap)]\",\n \"group-data-[mode]:gap-[var(--sidebar-section-gap)]\",\n])\n\n/**\n * SidebarGroupLabel variant styles\n *\n * Dual mode consumes sidebar.tokens.json (Figma 1092:542 section title \"Dashboards\"):\n * - padding-x = 8px (--sidebar-section-title-padding-x)\n * - font 10px Regular leading-1 (not 12px uppercase!)\n * - color = muted-foreground tertiary\n */\nexport const sidebarGroupLabelVariants = cva([\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium\",\n \"outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2\",\n \"[&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n \"group-data-[mode]:h-auto\",\n \"group-data-[mode]:px-[var(--sidebar-section-title-padding-x)]\",\n \"group-data-[mode]:py-0\",\n \"group-data-[mode]:text-[length:var(--sidebar-section-title-font-size)]\",\n \"group-data-[mode]:font-[var(--sidebar-section-title-font-weight)]\",\n \"group-data-[mode]:leading-[var(--sidebar-section-title-line-height)]\",\n \"group-data-[mode]:tracking-normal\",\n \"group-data-[mode]:normal-case\",\n \"group-data-[mode]:text-[color:var(--sidebar-section-title-color)]\",\n])\n\n/**\n * SidebarGroupAction variant styles\n */\nexport const sidebarGroupActionVariants = cva([\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0\",\n \"outline-hidden transition-transform focus-visible:ring-2\",\n \"[&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n])\n\n/**\n * SidebarGroupContent variant styles\n */\nexport const sidebarGroupContentVariants = cva([\n \"w-full text-sm\",\n])\n\n/**\n * SidebarMenu variant styles\n *\n * Figma spacing differs per variant:\n * - Single (Expanded 1091:8942): gap-y 20px between items (--sidebar-rail-item-gap)\n * - Dual panel (1092:542): gap-y 8px between sub-items (--sidebar-section-content-gap)\n */\nexport const sidebarMenuVariants = cva([\n \"flex w-full min-w-0 flex-col gap-1\",\n \"group-data-[mode=single]:gap-[var(--sidebar-rail-item-gap)]\",\n \"group-data-[mode=dual]:gap-[var(--sidebar-section-content-gap)]\",\n \"group-data-[mode=dual]:px-[var(--sidebar-section-content-padding-x)]\",\n])\n\n/**\n * SidebarMenuItem variant styles\n */\nexport const sidebarMenuItemVariants = cva([\n \"group/menu-item relative\",\n])\n\n/**\n * SidebarMenuButton variant styles\n */\nexport const sidebarMenuButtonVariants = cva(\n [\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm\",\n \"outline-hidden ring-sidebar-ring transition-[width,height,padding]\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:ring-2\",\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"group-has-data-[sidebar=menu-action]/menu-item:pr-8\",\n \"aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground\",\n \"data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground\",\n \"group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!\",\n \"[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n // Dual mode — consumes Figma 1092:446 nav-item tokens:\n // padding 8px, radius 4px, gap 12px, font 14px Regular leading-1,\n // color muted-foreground default / foreground active, icon 20px\n \"group-data-[mode]:p-[var(--sidebar-nav-item-padding)]\",\n \"group-data-[mode]:rounded-[var(--sidebar-nav-item-radius)]\",\n \"group-data-[mode]:gap-[var(--sidebar-nav-item-gap)]\",\n \"group-data-[mode]:text-[length:var(--sidebar-nav-item-font-size)]\",\n \"group-data-[mode]:font-[var(--sidebar-nav-item-font-weight)]\",\n \"group-data-[mode]:leading-[var(--sidebar-nav-item-line-height)]\",\n \"group-data-[mode]:text-[color:var(--sidebar-nav-item-fg-default)]\",\n \"group-data-[mode]:[&>svg]:size-[var(--sidebar-nav-item-icon-size)]\",\n \"group-data-[mode]:hover:bg-[color:var(--sidebar-nav-item-bg-hover)]\",\n \"group-data-[mode]:hover:text-[color:var(--sidebar-nav-item-fg-active)]\",\n // Scoped `!` so the token-mode active bg/fg wins the Tailwind v4 stacked-variant\n // cascade over the base `data-[active=true]:bg-sidebar-accent` (which otherwise wins\n // by sort order). Idiomatic here (cf. `size-8!`/`p-2!` above). Gated on data-mode →\n // legacy sidebars (no data-mode) keep the shadcn mint; fixes single + dual alike.\n \"group-data-[mode]:data-[active=true]:bg-[color:var(--sidebar-nav-item-bg-hover)]!\",\n \"group-data-[mode]:data-[active=true]:text-[color:var(--sidebar-nav-item-fg-active)]!\",\n ],\n {\n variants: {\n variant: {\n default:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\n/**\n * SidebarRailButton variant styles\n *\n * Consumes sidebar.tokens.json sub-tokens (Figma 1087:204 Nav Item, status=Default/Active):\n * - padding 8px, radius 4px (rounded-md)\n * - icon size 20px (was 16px — Figma canonical)\n * - fg default = muted-foreground, active = foreground\n * - bg hover/active = muted\n */\nexport const sidebarRailButtonVariants = cva(\n [\n \"inline-flex items-center justify-center transition-colors shrink-0\",\n \"p-[var(--sidebar-rail-item-padding)]\",\n \"rounded-[var(--sidebar-rail-item-radius)]\",\n \"outline-hidden ring-sidebar-ring focus-visible:ring-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&>svg]:size-[var(--sidebar-rail-item-icon-size)] [&>svg]:shrink-0\",\n ],\n {\n variants: {\n isActive: {\n true: \"bg-[color:var(--sidebar-rail-item-bg-hover)] text-[color:var(--sidebar-rail-item-fg-active)]\",\n false: \"bg-[color:var(--sidebar-rail-item-bg-default)] text-[color:var(--sidebar-rail-item-fg-default)] hover:bg-[color:var(--sidebar-rail-item-bg-hover)] hover:text-[color:var(--sidebar-rail-item-fg-active)]\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n }\n)\n\n/**\n * SidebarMenuAction variant styles\n */\nexport const sidebarMenuActionVariants = cva([\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground\",\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0\",\n \"outline-hidden transition-transform focus-visible:ring-2\",\n \"[&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after:hidden\",\n ...PEER_SIZE_POSITIONS,\n \"group-data-[collapsible=icon]:hidden\",\n])\n\n/**\n * SidebarMenuAction showOnHover variant styles\n */\nexport const sidebarMenuActionShowOnHoverVariants = cva([\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100\",\n \"data-[state=open]:opacity-100 md:opacity-0\",\n])\n\n/**\n * SidebarMenuBadge variant styles\n */\nexport const sidebarMenuBadgeVariants = cva([\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center\",\n \"rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n ...PEER_SIZE_POSITIONS,\n \"group-data-[collapsible=icon]:hidden\",\n])\n\n/**\n * SidebarMenuSkeleton variant styles\n */\nexport const sidebarMenuSkeletonVariants = cva([\n \"flex h-8 items-center gap-2 rounded-md px-2\",\n])\n\n/**\n * SidebarMenuSub variant styles\n */\nexport const sidebarMenuSubVariants = cva([\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n])\n\n/**\n * SidebarMenuSubItem variant styles\n */\nexport const sidebarMenuSubItemVariants = cva([\n \"group/menu-sub-item relative\",\n])\n\n/**\n * SidebarMenuSubButton variant styles\n */\nexport const sidebarMenuSubButtonVariants = cva(\n [\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"active:bg-sidebar-accent active:text-sidebar-accent-foreground\",\n \"[&>svg]:text-sidebar-accent-foreground\",\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2\",\n \"outline-hidden focus-visible:ring-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n \"group-data-[collapsible=icon]:hidden\",\n ],\n {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n","\"use client\"\n\nimport type {\n SidebarContentProps,\n SidebarContextProps,\n SidebarFooterProps,\n SidebarGroupActionProps,\n SidebarGroupContentProps,\n SidebarGroupLabelProps,\n SidebarGroupProps,\n SidebarHeaderProps,\n SidebarInputProps,\n SidebarInsetProps,\n SidebarMenuActionProps,\n SidebarMenuBadgeProps,\n SidebarMenuButtonProps,\n SidebarMenuItemProps,\n SidebarMenuProps,\n SidebarMenuSkeletonProps,\n SidebarMenuSubButtonProps,\n SidebarMenuSubItemProps,\n SidebarMenuSubProps,\n SidebarPanelContentProps,\n SidebarProps,\n SidebarProviderProps,\n SidebarRailButtonProps,\n SidebarRailContentProps,\n SidebarRailProps,\n SidebarSeparatorProps,\n SidebarTriggerProps,\n} from \"./Sidebar.types\"\n\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronDown, MoonIcon, PanelLeftIcon, SunIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { useIsMobile } from \"../../../hooks/use-mobile\"\nimport { cn } from \"../../../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../../feedback/Tooltip\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"../../layout/Sheet\"\nimport { Avatar } from \"../../primitives/Avatar\"\nimport { Button } from \"../../primitives/Button\"\nimport { Divider } from \"../../primitives/Divider\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport {\n sidebarContainerVariants,\n sidebarContentVariants,\n sidebarDesktopVariants,\n sidebarFooterVariants,\n sidebarGapVariants,\n sidebarGroupActionVariants,\n sidebarGroupContentVariants,\n sidebarGroupLabelVariants,\n sidebarGroupVariants,\n sidebarHeaderVariants,\n sidebarInnerVariants,\n sidebarInputVariants,\n sidebarInsetVariants,\n sidebarMenuActionShowOnHoverVariants,\n sidebarMenuActionVariants,\n sidebarMenuBadgeVariants,\n sidebarMenuButtonVariants,\n sidebarMenuItemVariants,\n sidebarMenuSkeletonVariants,\n sidebarMenuSubButtonVariants,\n sidebarMenuSubItemVariants,\n sidebarMenuSubVariants,\n sidebarMenuVariants,\n sidebarMobileVariants,\n sidebarNonCollapsibleVariants,\n sidebarProviderVariants,\n sidebarRailButtonVariants,\n sidebarRailVariants,\n sidebarSeparatorVariants,\n sidebarTriggerVariants,\n} from \"./Sidebar.variants\"\n\n// App-level constants — NOT design tokens. Persistence + keyboard config.\n// Width tokens read from CSS vars (--sidebar-width, --sidebar-width-icon,\n// --sidebar-width-mobile, --sidebar-rail-width, --sidebar-panel-width)\n// emitted by @etus/tokens. See packages/tokens/src/components/sidebar.tokens.json.\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\nconst SidebarContext = React.createContext<null | SidebarContextProps>(null)\n\n/**\n * useSidebar - Hook to access sidebar context.\n *\n * Must be used within a SidebarProvider.\n */\nfunction useSidebar() {\n const context = React.use(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\n/**\n * SidebarProvider - Context provider for sidebar state management.\n *\n * Provides state for expanded/collapsed, mobile/desktop, and keyboard shortcuts.\n *\n * @example\n * <SidebarProvider>\n * <Sidebar>...</Sidebar>\n * <SidebarInset>...</SidebarInset>\n * </SidebarProvider>\n */\nfunction SidebarProvider({\n defaultOpen = true,\n mode,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const open = openProp ?? internalOpen\n const cookieTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n const persistCookie = React.useCallback((openState: boolean) => {\n clearTimeout(cookieTimeoutRef.current)\n cookieTimeoutRef.current = setTimeout(() => {\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${String(openState)}; path=/; max-age=${String(SIDEBAR_COOKIE_MAX_AGE)}`\n }, 300)\n }, [])\n\n const setOpen = React.useCallback(\n (value: ((value: boolean) => boolean) | boolean) => {\n if (typeof value === \"function\") {\n if (setOpenProp) {\n const resolved = value(open)\n setOpenProp(resolved)\n persistCookie(resolved)\n } else {\n setInternalOpen((prev) => {\n const next = value(prev)\n persistCookie(next)\n return next\n })\n }\n } else {\n if (setOpenProp) {\n setOpenProp(value)\n } else {\n setInternalOpen(value)\n }\n persistCookie(value)\n }\n },\n [setOpenProp, open, persistCookie]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) { setOpenMobile((open) => !open); } else { setOpen((open) => !open); }\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.repeat) return\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => { window.removeEventListener(\"keydown\", handleKeyDown); }\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n mode,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, mode, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n // Mode \"dual\" overrides --sidebar-width and --sidebar-width-icon to compose\n // rail + panel widths. Single mode uses the base token values from\n // @etus/tokens (--sidebar-width, --sidebar-width-icon) without override.\n ...(mode === \"dual\" && {\n \"--sidebar-width\": \"calc(var(--sidebar-rail-width) + var(--sidebar-panel-width))\",\n \"--sidebar-width-icon\": \"var(--sidebar-rail-width)\",\n }),\n ...style,\n } as React.CSSProperties\n }\n className={cn(sidebarProviderVariants(), className)}\n data-mode={mode}\n data-slot=\"sidebar-wrapper\"\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext>\n )\n}\n\n/**\n * SidebarDualMode - Private dual-mode rendering path (icon rail + text panel).\n *\n * Desktop: fixed sidebar with rail and panel children side by side.\n * Mobile: falls back to Sheet with panel content only (rail hidden).\n */\nfunction SidebarDualMode({\n side = \"left\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n style={\n {\n \"--sidebar-width\": \"var(--sidebar-width-mobile)\",\n } as React.CSSProperties\n }\n className={cn(sidebarMobileVariants())}\n data-mobile=\"true\"\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <nav aria-label=\"Main navigation\" className=\"flex h-full w-full flex-col\">{children}</nav>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className={cn(sidebarDesktopVariants())}\n data-collapsible={state === \"collapsed\" ? \"icon\" : \"\"}\n data-mode=\"dual\"\n data-side={side}\n data-slot=\"sidebar\"\n data-state={state}\n data-variant=\"sidebar\"\n >\n {/* Gap spacer transitions between rail-only and rail+panel widths */}\n <div\n className={cn(\n sidebarGapVariants(),\n \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n data-slot=\"sidebar-gap\"\n />\n <div\n className={cn(\n sidebarContainerVariants(),\n side === \"left\" ? \"left-0\" : \"right-0\",\n \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n className\n )}\n data-slot=\"sidebar-container\"\n {...props}\n >\n <nav\n aria-label=\"Main navigation\"\n className=\"flex h-full w-full flex-row\"\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n >\n {children}\n </nav>\n </div>\n </div>\n )\n}\n\n/**\n * Sidebar - The main sidebar component.\n *\n * Supports multiple variants and collapsible modes.\n * When `mode=\"dual\"` is set on SidebarProvider, delegates to SidebarDualMode.\n */\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { isMobile, mode, state, openMobile, setOpenMobile } = useSidebar()\n\n if (mode === \"dual\") {\n return (\n <SidebarDualMode className={className} side={side} {...props}>\n {children}\n </SidebarDualMode>\n )\n }\n\n if (collapsible === \"none\") {\n return (\n <nav\n aria-label=\"Main navigation\"\n className={cn(sidebarNonCollapsibleVariants(), className)}\n data-slot=\"sidebar\"\n {...props}\n >\n {children}\n </nav>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n style={\n {\n \"--sidebar-width\": \"var(--sidebar-width-mobile)\",\n } as React.CSSProperties\n }\n className={cn(sidebarMobileVariants())}\n data-mobile=\"true\"\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <nav aria-label=\"Main navigation\" className=\"flex h-full w-full flex-col\">{children}</nav>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className={cn(sidebarDesktopVariants())}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-mode={mode}\n data-side={side}\n data-slot=\"sidebar\"\n data-state={state}\n data-variant={variant}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n sidebarGapVariants(),\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n data-slot=\"sidebar-gap\"\n />\n <div\n className={cn(\n sidebarContainerVariants(),\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n className\n )}\n data-slot=\"sidebar-container\"\n {...props}\n >\n <nav\n aria-label=\"Main navigation\"\n className={cn(sidebarInnerVariants())}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n >\n {children}\n </nav>\n </div>\n </div>\n )\n}\n\n/**\n * SidebarTrigger - Button to toggle the sidebar.\n */\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: SidebarTriggerProps) {\n const { toggleSidebar, state } = useSidebar()\n\n return (\n <Button\n aria-expanded={state === \"expanded\"}\n className={cn(sidebarTriggerVariants(), className)}\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={(event, payload) => {\n onClick?.(event, payload)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\n/**\n * SidebarRail - Clickable edge to toggle sidebar.\n */\nfunction SidebarRail({ className, ...props }: SidebarRailProps) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n aria-label=\"Toggle Sidebar\"\n className={cn(sidebarRailVariants(), className)}\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n tabIndex={-1}\n title=\"Toggle Sidebar\"\n onClick={toggleSidebar}\n {...props}\n />\n )\n}\n\n/**\n * SidebarInset - Main content area adjacent to sidebar.\n */\nfunction SidebarInset({ className, ...props }: SidebarInsetProps) {\n return (\n <main\n className={cn(sidebarInsetVariants(), className)}\n data-slot=\"sidebar-inset\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarInput - Input field styled for sidebar.\n */\nfunction SidebarInput({\n className,\n ...props\n}: SidebarInputProps) {\n return (\n <TextInput\n className={cn(sidebarInputVariants(), className)}\n data-sidebar=\"input\"\n data-slot=\"sidebar-input\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarHeader - Header section of the sidebar.\n */\nfunction SidebarHeader({ className, ...props }: SidebarHeaderProps) {\n return (\n <div\n className={cn(sidebarHeaderVariants(), className)}\n data-sidebar=\"header\"\n data-slot=\"sidebar-header\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarFooter - Footer section of the sidebar.\n */\nfunction SidebarFooter({ className, ...props }: SidebarFooterProps) {\n return (\n <div\n className={cn(sidebarFooterVariants(), className)}\n data-sidebar=\"footer\"\n data-slot=\"sidebar-footer\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarSeparator - Divider for sidebar sections.\n */\nfunction SidebarSeparator({\n className,\n ...props\n}: SidebarSeparatorProps) {\n return (\n <Divider\n className={cn(sidebarSeparatorVariants(), className)}\n data-sidebar=\"separator\"\n data-slot=\"sidebar-separator\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarContent - Main scrollable content area.\n */\nfunction SidebarContent({ className, ...props }: SidebarContentProps) {\n return (\n <div\n className={cn(sidebarContentVariants(), className)}\n data-sidebar=\"content\"\n data-slot=\"sidebar-content\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarGroup - Group container for sidebar items.\n */\nfunction SidebarGroup({ className, ...props }: SidebarGroupProps) {\n return (\n <div\n className={cn(sidebarGroupVariants(), className)}\n data-sidebar=\"group\"\n data-slot=\"sidebar-group\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarGroupLabel - Label for a sidebar group.\n */\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: SidebarGroupLabelProps) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(sidebarGroupLabelVariants(), className)}\n data-sidebar=\"group-label\"\n data-slot=\"sidebar-group-label\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarGroupAction - Action button for a sidebar group.\n */\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: SidebarGroupActionProps) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n className={cn(sidebarGroupActionVariants(), className)}\n data-sidebar=\"group-action\"\n data-slot=\"sidebar-group-action\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarGroupContent - Content container for a sidebar group.\n */\nfunction SidebarGroupContent({\n className,\n ...props\n}: SidebarGroupContentProps) {\n return (\n <div\n className={cn(sidebarGroupContentVariants(), className)}\n data-sidebar=\"group-content\"\n data-slot=\"sidebar-group-content\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenu - Menu list container.\n */\nfunction SidebarMenu({ className, ...props }: SidebarMenuProps) {\n return (\n <ul\n className={cn(sidebarMenuVariants(), className)}\n data-sidebar=\"menu\"\n data-slot=\"sidebar-menu\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuItem - Individual menu item.\n */\nfunction SidebarMenuItem({ className, ...props }: SidebarMenuItemProps) {\n return (\n <li\n className={cn(sidebarMenuItemVariants(), className)}\n data-sidebar=\"menu-item\"\n data-slot=\"sidebar-menu-item\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuButton - Interactive menu button with variants.\n */\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: SidebarMenuButtonProps) {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n data-active={isActive}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-slot=\"sidebar-menu-button\"\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n side=\"right\"\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\n/**\n * SidebarMenuAction - Action button within a menu item.\n */\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: SidebarMenuActionProps) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n className={cn(\n sidebarMenuActionVariants(),\n showOnHover && sidebarMenuActionShowOnHoverVariants(),\n className\n )}\n data-sidebar=\"menu-action\"\n data-slot=\"sidebar-menu-action\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuBadge - Badge displayed in a menu item.\n */\nfunction SidebarMenuBadge({\n className,\n ...props\n}: SidebarMenuBadgeProps) {\n return (\n <div\n className={cn(sidebarMenuBadgeVariants(), className)}\n data-sidebar=\"menu-badge\"\n data-slot=\"sidebar-menu-badge\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuSkeleton - Loading skeleton for menu items.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: SidebarMenuSkeletonProps) {\n const skeletonId = React.useId()\n // Deterministic width between 50 to 90% based on component id.\n const width = React.useMemo(() => {\n let hash = 0\n for (let i = 0; i < skeletonId.length; i += 1) {\n hash = Math.trunc(hash * 31 + skeletonId.charCodeAt(i))\n }\n const normalized = Math.abs(hash) % 41 + 50\n return `${String(normalized)}%`\n }, [skeletonId])\n\n return (\n <div\n className={cn(sidebarMenuSkeletonVariants(), className)}\n data-sidebar=\"menu-skeleton\"\n data-slot=\"sidebar-menu-skeleton\"\n {...props}\n >\n {showIcon && (\n <SkeletonLoader\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <SkeletonLoader\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n />\n </div>\n )\n}\n\n/**\n * SidebarMenuSub - Submenu container.\n */\nfunction SidebarMenuSub({ className, ...props }: SidebarMenuSubProps) {\n return (\n <ul\n className={cn(sidebarMenuSubVariants(), className)}\n data-sidebar=\"menu-sub\"\n data-slot=\"sidebar-menu-sub\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuSubItem - Individual submenu item.\n */\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: SidebarMenuSubItemProps) {\n return (\n <li\n className={cn(sidebarMenuSubItemVariants(), className)}\n data-sidebar=\"menu-sub-item\"\n data-slot=\"sidebar-menu-sub-item\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarMenuSubButton - Interactive button within a submenu.\n */\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: SidebarMenuSubButtonProps) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n className={cn(sidebarMenuSubButtonVariants({ size }), className)}\n data-active={isActive}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-slot=\"sidebar-menu-sub-button\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarRailContent - Icon rail zone in dual mode (always visible, 3rem wide).\n */\nfunction SidebarRailContent({\n className,\n ...props\n}: SidebarRailContentProps) {\n const { isMobile, mode } = useSidebar()\n\n if (isMobile && mode === \"dual\") return null\n\n return (\n <div\n className={cn(\n \"flex h-full w-[var(--rail-width)] shrink-0 flex-col items-center\",\n \"border-r border-[color:var(--rail-border)]\",\n \"bg-[color:var(--rail-background)]\",\n className\n )}\n data-sidebar=\"rail-content\"\n data-slot=\"sidebar-rail-content\"\n {...props}\n />\n )\n}\n\n/**\n * SidebarRailButton - Icon button for the sidebar rail (32×32).\n *\n * Supports active/inactive states with Figma-aligned sizing.\n */\nfunction SidebarRailButton({\n isActive = false,\n tooltip,\n className,\n ...props\n}: SidebarRailButtonProps) {\n const button = (\n <button\n className={cn(sidebarRailButtonVariants({ isActive: isActive ?? undefined }), className)}\n data-active={isActive}\n data-sidebar=\"rail-button\"\n data-slot=\"sidebar-rail-button\"\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\n/**\n * SidebarPanelContent - Text panel zone in dual mode (toggleable, 13.5rem wide).\n *\n * Collapses to width 0 when sidebar state is \"collapsed\".\n */\nfunction SidebarPanelContent({\n className,\n ...props\n}: SidebarPanelContentProps) {\n const { open } = useSidebar()\n\n return (\n <div\n className={cn(\n \"flex h-full flex-col overflow-hidden\",\n \"w-[var(--sidebar-panel-width)]\",\n \"bg-sidebar text-sidebar-foreground\",\n \"transition-[width,opacity] duration-200 ease-linear motion-reduce:transition-none\",\n !open && \"w-0 opacity-0\",\n className\n )}\n data-sidebar=\"panel-content\"\n data-slot=\"sidebar-panel-content\"\n data-state={open ? \"expanded\" : \"collapsed\"}\n {...props}\n />\n )\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Sub-componentes alinhados aos Figma nodes:\n * - Sidebar / Logo (1087-323) → SidebarLogo\n * - Sidebar / Avatar (1088-627) → SidebarAvatar\n * - Sidebar / Color Mode Toggle (1089-324) → SidebarThemeToggle\n * Valores numéricos pinados em docs/proposals/sidebar-filetree-components/\n * 11-Prototype-values.md (seção 9).\n * ─────────────────────────────────────────────────────────────*/\n\nfunction SevenLogo({ className, ...props }: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n viewBox=\"0 0 447 421\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n height=\"420.697\"\n rx=\"52.3255\"\n style={{ fill: \"var(--brand-primary-500, var(--primary))\" }}\n width=\"446.511\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M297.097 126.658C313.023 126.661 327.15 131.593 337.759 140.229L337.772 140.241C342.56 143.898 346.681 148.278 349.989 153.277C360.539 169.219 361.562 189.733 351.524 207.699C341.313 225.975 325.169 234.706 307.327 237.12C289.856 239.483 270.755 235.793 253.953 229.106C257.099 236.591 262.271 243.904 268.869 249.321C273.202 252.609 278.097 255.077 283.391 256.278C304.929 261.165 323.562 252.744 336.549 236.264L337.34 235.261L365.526 256.947L365.513 256.964L366.897 258.029L366.095 259.055C346.033 284.695 314.063 300.49 276.874 292.052C264.669 289.283 254.128 283.966 245.384 276.913L245.377 276.907L245.36 276.894L245.353 276.888L244.889 276.528C224.237 260.353 213.344 234.603 213.866 209.528C213.876 209.081 214.479 202.313 214.479 202.313C214.479 202.313 218.001 182.504 224.799 169.993C237.562 146.503 261.564 126.651 297.097 126.658ZM298.448 163.313C276.722 163.308 261.843 176.856 255.022 192.602C262.048 196.07 269.076 198.519 275.811 199.995C299.647 205.218 314.251 197.954 319.102 189.272C322.736 182.767 322.06 176.535 318.957 171.845C318.134 170.602 317.053 169.35 315.692 168.179L315.341 167.93L314.978 167.684C311.174 165.165 305.764 163.314 298.448 163.313Z\"\n fill=\"black\"\n fillRule=\"evenodd\"\n />\n <path\n d=\"M246.018 186.67C268.826 199.868 252.621 219.225 249.886 226.823C212.772 211.745 200.922 187.978 177.479 169.658C158.128 154.537 139.239 156.58 131.217 162.056C127.067 164.888 125.582 168.878 125.582 173.623C125.582 176.588 126.375 179.159 127.957 181.334C129.538 183.509 131.716 185.286 134.484 186.67C137.449 188.054 140.808 189.34 144.562 190.526L170.368 198.237C183.616 202.192 193.804 208.125 200.922 216.034C208.237 223.942 211.893 233.632 211.893 245.099C211.893 254.788 209.323 263.391 204.182 270.905C199.041 278.22 191.923 283.954 182.828 288.106C173.732 292.258 163.052 294.336 150.792 294.336C133.591 294.336 118.561 290.28 105.709 282.174C93.0569 273.87 84.3585 262.7 79.613 248.665L108.679 234.724C112.831 243.818 118.564 250.937 125.88 256.078C133.393 261.218 141.698 263.789 150.792 263.789C157.911 263.789 163.551 262.204 167.703 259.04C171.853 255.878 173.925 251.727 173.926 246.588C173.926 243.426 173.039 240.854 171.261 238.877C169.679 236.702 167.402 234.917 164.436 233.533C161.668 231.952 158.604 230.665 155.243 229.677L128.85 222.264C115.206 218.309 104.818 212.276 97.7 204.169C90.7811 196.063 87.3242 186.473 87.3242 175.401C87.3242 165.515 89.7943 156.912 94.7376 149.596C99.8784 142.083 106.897 136.249 115.794 132.097C137.208 122.527 166.002 124.69 188.861 140.375C214.713 158.114 223.21 173.473 246.018 186.67Z\"\n fill=\"black\"\n />\n </svg>\n )\n}\n\ninterface SidebarLogoProps extends Omit<React.ComponentProps<\"div\">, \"onClick\"> {\n brand?: string\n collapseLabel?: string\n mark?: React.ReactNode\n onClick?: (event: React.MouseEvent) => void\n showCollapse?: boolean\n sub?: string\n}\n\n/**\n * SidebarLogo — branding header inside `<SidebarHeader>`.\n *\n * Renders a logomark + brand name + (optional) sub line + (optional) collapse trigger.\n * Aligned with Figma node `Sidebar / Logo` (1087-323).\n *\n * Default `mark` is the Seven brand logo. Pass a custom `mark` to override.\n *\n * @example\n * <SidebarHeader>\n * <SidebarLogo brand=\"ETUS · DAM\" showCollapse />\n * </SidebarHeader>\n */\nfunction SidebarLogo({\n mark = <SevenLogo className=\"size-full\" />,\n brand,\n sub,\n showCollapse = false,\n collapseLabel = \"Colapsar painel\",\n onClick,\n className,\n ...props\n}: SidebarLogoProps) {\n const { toggleSidebar } = useSidebar()\n return (\n <div\n className={cn(\n \"flex items-center gap-2.5 px-3.5 pt-4 pb-3\",\n className,\n )}\n data-slot=\"sidebar-logo\"\n {...props}\n >\n {mark && (\n <button\n className={cn(\n \"grid place-items-center shrink-0 size-7 rounded-md\",\n \"bg-[color:var(--brand-primary-500,var(--primary))] text-[color:var(--brand-primary-900,var(--primary-foreground))]\",\n onClick && \"cursor-pointer transition-transform hover:translate-y-px active:translate-y-0.5 motion-reduce:transform-none\",\n )}\n aria-label={brand ?? \"Home\"}\n data-slot=\"sidebar-logo-mark\"\n type=\"button\"\n onClick={onClick}\n >\n {mark}\n </button>\n )}\n {(brand ?? sub) && (\n <div className=\"flex flex-col min-w-0 flex-1 leading-tight\" data-slot=\"sidebar-logo-meta\">\n {brand && (\n <span\n className=\"text-[14px] font-bold tracking-[-0.005em] truncate\"\n data-slot=\"sidebar-logo-brand\"\n >\n {brand}\n </span>\n )}\n {sub && (\n <span\n className=\"text-[11px] text-[color:var(--muted-foreground)] truncate\"\n data-slot=\"sidebar-logo-sub\"\n >\n {sub}\n </span>\n )}\n </div>\n )}\n {showCollapse && (\n <button\n className={cn(\n \"grid place-items-center shrink-0 size-[26px] rounded-md\",\n \"bg-transparent text-[color:var(--muted-foreground)] cursor-pointer\",\n \"transition-colors hover:bg-[color:var(--muted)] hover:text-[color:var(--foreground)]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--ring)]\",\n )}\n aria-label={collapseLabel}\n data-slot=\"sidebar-logo-collapse\"\n type=\"button\"\n onClick={() => { toggleSidebar(); }}\n >\n <PanelLeftIcon size={14} />\n </button>\n )}\n </div>\n )\n}\n\ninterface SidebarAvatarProps {\n \"aria-label\"?: string\n avatar?: React.ComponentProps<typeof Avatar>\n className?: string\n compact?: boolean\n email?: string\n name?: string\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void\n showChevron?: boolean\n}\n\n/**\n * SidebarAvatar — user-identity footer button inside `<SidebarFooter>`.\n *\n * Renders avatar + name + email + (optional) chevron, opens user menu on click.\n * Aligned with Figma node `Sidebar / Avatar` (1088-627).\n *\n * @example\n * <SidebarFooter>\n * <SidebarAvatar\n * avatar={{ initials: \"CR\", tone: \"mint\", size: \"sm\" }}\n * name=\"Camila Reis\"\n * email=\"camila@etus.com.br\"\n * onClick={() => userMenu.toggle()}\n * />\n * <SidebarThemeToggle />\n * </SidebarFooter>\n */\nfunction SidebarAvatar({\n avatar,\n name,\n email,\n showChevron = true,\n compact = false,\n onClick,\n className,\n \"aria-label\": ariaLabel,\n}: SidebarAvatarProps) {\n return (\n <button\n className={cn(\n \"flex items-center gap-2.5 px-2 py-1.5 flex-1 min-w-0 rounded-md text-left\",\n \"bg-transparent cursor-pointer transition-colors hover:bg-[color:var(--muted)]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--ring)]\",\n className,\n )}\n aria-haspopup={onClick ? \"menu\" : undefined}\n aria-label={ariaLabel ?? (name ? `User menu — ${name}` : \"User menu\")}\n data-compact={compact || undefined}\n data-slot=\"sidebar-avatar\"\n type=\"button\"\n onClick={onClick}\n >\n {avatar && (\n <Avatar\n size=\"sm\"\n {...avatar}\n />\n )}\n {!compact && (name ?? email) && (\n <span className=\"flex flex-col min-w-0 flex-1 leading-tight\" data-slot=\"sidebar-avatar-meta\">\n {name && (\n <span className=\"text-[13px] font-medium text-[color:var(--foreground)] truncate\" data-slot=\"sidebar-avatar-name\">\n {name}\n </span>\n )}\n {email && (\n <span className=\"text-[11px] text-[color:var(--muted-foreground)] truncate\" data-slot=\"sidebar-avatar-email\">\n {email}\n </span>\n )}\n </span>\n )}\n {!compact && showChevron && (\n <ChevronDown\n aria-hidden=\"true\"\n className=\"shrink-0 text-[color:var(--muted-foreground)]\"\n data-slot=\"sidebar-avatar-chevron\"\n size={12}\n />\n )}\n </button>\n )\n}\n\ninterface SidebarThemeToggleProps {\n className?: string\n darkIcon?: React.ReactNode\n label?: (mode: \"dark\" | \"light\") => string\n lightIcon?: React.ReactNode\n mode?: \"dark\" | \"light\"\n onToggle?: (next: \"dark\" | \"light\") => void\n size?: \"default\" | \"sm\"\n}\n\n/**\n * useSidebarTheme — internal hook to read/write `class=\"dark\"|\"light\"` on `<html>`.\n *\n * Persists choice to localStorage under \"seven-theme\". Reacts to external changes\n * via a MutationObserver on `<html>.class`. Used by SidebarThemeToggle when no\n * `mode` prop is provided (uncontrolled mode).\n */\nfunction useSidebarTheme(): readonly [\"dark\" | \"light\", () => void] {\n const read = React.useCallback((): \"dark\" | \"light\" => {\n if (typeof document === \"undefined\") return \"light\"\n const html = document.documentElement\n if (html.classList.contains(\"dark\")) return \"dark\"\n if (html.classList.contains(\"light\")) return \"light\"\n return typeof window !== \"undefined\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }, [])\n const [mode, setMode] = React.useState<\"dark\" | \"light\">(read)\n React.useEffect(() => {\n if (typeof document === \"undefined\") return\n const obs = new MutationObserver(() => { setMode(read()); })\n obs.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] })\n return () => { obs.disconnect(); }\n }, [read])\n const toggle = React.useCallback(() => {\n if (typeof document === \"undefined\") return\n const next: \"dark\" | \"light\" = mode === \"dark\" ? \"light\" : \"dark\"\n const html = document.documentElement\n html.classList.remove(\"dark\", \"light\")\n html.classList.add(next)\n try { localStorage.setItem(\"seven-theme\", next) } catch {\n // localStorage may be unavailable (private browsing, SSR); fail silently\n }\n setMode(next)\n }, [mode])\n return [mode, toggle] as const\n}\n\n/**\n * SidebarThemeToggle — sun/moon button that flips `<html>` class between\n * `light` and `dark`. Use inside `<SidebarFooter>` next to `<SidebarAvatar>`.\n *\n * Aligned with Figma node `Sidebar / Color Mode Toggle` (1089-324).\n *\n * @example\n * // Uncontrolled — reads/writes html.classList + localStorage\n * <SidebarThemeToggle />\n *\n * @example\n * // Controlled\n * <SidebarThemeToggle mode={themeStore.mode} onToggle={themeStore.set} />\n */\nfunction SidebarThemeToggle({\n mode: controlledMode,\n onToggle,\n lightIcon,\n darkIcon,\n label = (m) => (m === \"dark\" ? \"Modo claro\" : \"Modo escuro\"),\n size = \"default\",\n className,\n}: SidebarThemeToggleProps) {\n const [internalMode, internalToggle] = useSidebarTheme()\n const mode = controlledMode ?? internalMode\n const handleClick = () => {\n if (onToggle) {\n onToggle(mode === \"dark\" ? \"light\" : \"dark\")\n } else {\n internalToggle()\n }\n }\n const iconSize = size === \"sm\" ? 14 : 16\n const containerSize = size === \"sm\" ? \"size-7\" : \"size-8\"\n return (\n <button\n className={cn(\n \"grid place-items-center shrink-0 rounded-md cursor-pointer\",\n \"bg-transparent text-[color:var(--muted-foreground)]\",\n \"transition-colors hover:bg-[color:var(--muted)] hover:text-[color:var(--foreground)]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--ring)]\",\n containerSize,\n className,\n )}\n aria-label={label(mode)}\n aria-pressed={mode === \"dark\"}\n data-mode={mode}\n data-slot=\"sidebar-theme-toggle\"\n title={label(mode)}\n type=\"button\"\n onClick={handleClick}\n >\n {mode === \"dark\"\n ? (lightIcon ?? <SunIcon size={iconSize} />)\n : (darkIcon ?? <MoonIcon size={iconSize} />)}\n </button>\n )\n}\n\nexport {\n Sidebar,\n SidebarAvatar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarLogo,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarPanelContent,\n SidebarProvider,\n SidebarRail,\n SidebarRailButton,\n SidebarRailContent,\n SidebarSeparator,\n SidebarThemeToggle,\n SidebarTrigger,\n useSidebar,\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buttonVariants } from './chunk-
|
|
1
|
+
import { buttonVariants } from './chunk-ONQCNOLU.js';
|
|
2
2
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
3
3
|
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
4
4
|
import 'react';
|
|
@@ -138,5 +138,5 @@ function AlertDialogCancel({
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
141
|
+
//# sourceMappingURL=chunk-IBVCSZCH.js.map
|
|
142
|
+
//# sourceMappingURL=chunk-IBVCSZCH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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","file":"chunk-IBVCSZCH.js","sourcesContent":["\"use client\"\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { buttonVariants } from \"../../primitives/Button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.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-[color:var(--modal-overlay-bg)]\",\n className\n )}\n data-slot=\"alert-dialog-overlay\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\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 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] duration-200\",\n \"bg-[color:var(--modal-content-bg)] rounded-[var(--modal-content-radius)] border-[color:var(--modal-content-border)] shadow-[var(--modal-content-shadow)] gap-[var(--modal-content-gap)] p-[var(--modal-content-padding)] max-w-[var(--modal-content-max-width)]\",\n className\n )}\n data-slot=\"alert-dialog-content\"\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"flex flex-col gap-[var(--modal-header-gap)] text-center sm:text-left\", className)}\n data-slot=\"alert-dialog-header\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse gap-[var(--modal-footer-gap)] sm:flex-row sm:justify-end\",\n className\n )}\n data-slot=\"alert-dialog-footer\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n className={cn(\"text-lg font-semibold\", className)}\n data-slot=\"alert-dialog-title\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"alert-dialog-description\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n data-slot=\"alert-dialog-action\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n data-slot=\"alert-dialog-cancel\"\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-65YSTUD2.js';
|
|
2
|
-
import { Checkbox } from './chunk-XETKCF73.js';
|
|
3
2
|
import { SkeletonLoader } from './chunk-QHKOBGLW.js';
|
|
3
|
+
import { Checkbox } from './chunk-XETKCF73.js';
|
|
4
4
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
5
5
|
import { useReactTable, getCoreRowModel, flexRender } from '@tanstack/react-table';
|
|
6
6
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
@@ -222,5 +222,5 @@ function VirtualTable({
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
export { VirtualTable };
|
|
225
|
-
//# sourceMappingURL=chunk-
|
|
226
|
-
//# sourceMappingURL=chunk-
|
|
225
|
+
//# sourceMappingURL=chunk-ILAV2AZ4.js.map
|
|
226
|
+
//# sourceMappingURL=chunk-ILAV2AZ4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/VirtualTable/VirtualTable.tsx"],"names":["table"],"mappings":"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","file":"chunk-GLEKBJLR.js","sourcesContent":["import type { VirtualTableProps } from \"./VirtualTable.types\"\nimport type {\n Table as ReactTable,\n Row,\n RowSelectionState,\n} from \"@tanstack/react-table\"\n\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { useVirtualizer } from \"@tanstack/react-virtual\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../Table\"\n\n// Static keys for skeleton loader to avoid array index as key\nconst SKELETON_KEYS = [\n \"skeleton-row-1\",\n \"skeleton-row-2\",\n \"skeleton-row-3\",\n \"skeleton-row-4\",\n \"skeleton-row-5\",\n] as const\n\n/**\n * VirtualTable - High-performance virtualized table for large datasets.\n *\n * Renders only visible rows in the viewport, enabling smooth scrolling\n * with thousands or millions of rows. Built on TanStack Virtual and\n * TanStack Table.\n *\n * @example\n * ```tsx\n * import { VirtualTable } from '@etus/ui'\n * import { ColumnDef } from '@tanstack/react-table'\n *\n * interface LogEntry {\n * id: string\n * timestamp: Date\n * level: 'info' | 'warn' | 'error'\n * message: string\n * }\n *\n * const columns: ColumnDef<LogEntry>[] = [\n * { accessorKey: 'timestamp', header: 'Time', size: 150 },\n * { accessorKey: 'level', header: 'Level', size: 80 },\n * { accessorKey: 'message', header: 'Message' },\n * ]\n *\n * function LogViewer() {\n * const { data } = useLogs() // 100k+ entries\n *\n * return (\n * <VirtualTable\n * data={data}\n * columns={columns}\n * rowHeight={36}\n * containerHeight={600}\n * getRowId={(row) => row.id}\n * />\n * )\n * }\n * ```\n */\nfunction VirtualTable<TData>({\n data,\n columns,\n rowHeight = 40,\n overscan = 5,\n estimateSize,\n containerHeight = 400,\n enableRowSelection = false,\n onRowClick,\n getRowId,\n loading = false,\n loadingComponent,\n emptyState,\n className,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n onSelectionChange,\n rowClassName,\n stickyHeader = true,\n}: VirtualTableProps<TData>) {\n const parentRef = React.useRef<HTMLDivElement>(null)\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({})\n\n const rowSelection = controlledRowSelection ?? internalRowSelection\n\n // Create wrapper for row selection change to also notify onSelectionChange\n const handleRowSelectionChange = React.useCallback(\n (\n updaterOrValue:\n | ((old: RowSelectionState) => RowSelectionState)\n | RowSelectionState\n ) => {\n const newValue =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(rowSelection)\n : updaterOrValue\n\n // Update internal or controlled state\n if (onRowSelectionChange) {\n onRowSelectionChange(newValue)\n } else {\n setInternalRowSelection(newValue)\n }\n\n // Notify parent of selected rows as TData array\n if (onSelectionChange) {\n const selectedIndices = Object.keys(newValue).filter(\n (key) => newValue[key]\n )\n const selectedRows = selectedIndices\n .map((idx) => data[Number(idx)])\n .filter(Boolean) as TData[]\n onSelectionChange(selectedRows)\n }\n },\n [rowSelection, onRowSelectionChange, onSelectionChange, data]\n )\n\n // Memoize column definitions with selection column\n const tableColumns = React.useMemo(() => {\n if (!enableRowSelection) return columns\n\n return [\n {\n id: \"select\",\n header: ({ table }: { table: ReactTable<TData> }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n aria-label=\"Select all\"\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(!!value)\n }}\n />\n ),\n cell: ({ row }: { row: Row<TData> }) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(!!value)\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 40,\n },\n ...columns,\n ]\n }, [columns, enableRowSelection])\n\n // Initialize table\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table's API is required here.\n const table = useReactTable({\n data,\n columns: tableColumns,\n state: {\n rowSelection,\n },\n enableRowSelection,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n onRowSelectionChange: handleRowSelectionChange,\n })\n\n const { rows } = table.getRowModel()\n\n // Initialize virtualizer\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: estimateSize ?? (() => rowHeight),\n overscan,\n })\n\n const virtualItems = virtualizer.getVirtualItems()\n const totalSize = virtualizer.getTotalSize()\n\n // Calculate container height style\n const containerStyle: React.CSSProperties = {\n height:\n typeof containerHeight === \"number\"\n ? `${String(containerHeight)}px`\n : containerHeight,\n overflow: \"auto\",\n willChange: \"transform\",\n }\n\n // Render loading state\n if (loading) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"virtual-table\">\n {loadingComponent ?? (\n <div className=\"space-y-2\" data-slot=\"virtual-table-loading\">\n {SKELETON_KEYS.map((key) => (\n <SkeletonLoader key={key} className=\"h-10 w-full\" />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Render empty state\n if (data.length === 0) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"virtual-table\">\n {emptyState ?? (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n data-slot=\"virtual-table-empty\"\n >\n <p className=\"text-muted-foreground text-sm\">No data available</p>\n </div>\n )}\n </div>\n )\n }\n\n // Calculate padding for virtual items\n const firstItem = virtualItems[0]\n const lastItem = virtualItems[virtualItems.length - 1]\n const paddingTop = firstItem ? firstItem.start : 0\n const paddingBottom = lastItem ? totalSize - lastItem.end : 0\n\n return (\n <div\n className={cn(\"rounded-md border\", className)}\n data-slot=\"virtual-table\"\n >\n <div\n ref={parentRef}\n className=\"relative\"\n data-slot=\"virtual-table-container\"\n style={containerStyle}\n >\n <Table>\n <TableHeader\n className={cn(\n stickyHeader && \"bg-[color:var(--table-header-bg)] sticky top-0 z-10\"\n )}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{\n width: header.getSize() !== 150 ? header.getSize() : undefined,\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {/* Top padding row */}\n {paddingTop > 0 && (\n <tr aria-hidden=\"true\">\n <td\n colSpan={tableColumns.length}\n style={{ height: `${String(paddingTop)}px`, padding: 0 }}\n />\n </tr>\n )}\n\n {/* Virtual rows */}\n {virtualItems.map((virtualRow) => {\n const row = rows[virtualRow.index]\n if (!row) return null\n return (\n <TableRow\n key={row.id}\n className={cn(\n onRowClick && \"cursor-pointer\",\n rowClassName?.(row)\n )}\n style={{\n height: `${String(virtualRow.size)}px`,\n }}\n aria-rowindex={virtualRow.index + 1}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n onClick={\n onRowClick\n ? () => {\n onRowClick(row.original)\n }\n : undefined\n }\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n width:\n cell.column.getSize() !== 150\n ? cell.column.getSize()\n : undefined,\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n\n {/* Bottom padding row */}\n {paddingBottom > 0 && (\n <tr aria-hidden=\"true\">\n <td\n colSpan={tableColumns.length}\n style={{ height: `${String(paddingBottom)}px`, padding: 0 }}\n />\n </tr>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n )\n}\n\nexport { VirtualTable }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/VirtualTable/VirtualTable.tsx"],"names":["table"],"mappings":"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","file":"chunk-ILAV2AZ4.js","sourcesContent":["import type { VirtualTableProps } from \"./VirtualTable.types\"\nimport type {\n Table as ReactTable,\n Row,\n RowSelectionState,\n} from \"@tanstack/react-table\"\n\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { useVirtualizer } from \"@tanstack/react-virtual\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../Table\"\n\n// Static keys for skeleton loader to avoid array index as key\nconst SKELETON_KEYS = [\n \"skeleton-row-1\",\n \"skeleton-row-2\",\n \"skeleton-row-3\",\n \"skeleton-row-4\",\n \"skeleton-row-5\",\n] as const\n\n/**\n * VirtualTable - High-performance virtualized table for large datasets.\n *\n * Renders only visible rows in the viewport, enabling smooth scrolling\n * with thousands or millions of rows. Built on TanStack Virtual and\n * TanStack Table.\n *\n * @example\n * ```tsx\n * import { VirtualTable } from '@etus/ui'\n * import { ColumnDef } from '@tanstack/react-table'\n *\n * interface LogEntry {\n * id: string\n * timestamp: Date\n * level: 'info' | 'warn' | 'error'\n * message: string\n * }\n *\n * const columns: ColumnDef<LogEntry>[] = [\n * { accessorKey: 'timestamp', header: 'Time', size: 150 },\n * { accessorKey: 'level', header: 'Level', size: 80 },\n * { accessorKey: 'message', header: 'Message' },\n * ]\n *\n * function LogViewer() {\n * const { data } = useLogs() // 100k+ entries\n *\n * return (\n * <VirtualTable\n * data={data}\n * columns={columns}\n * rowHeight={36}\n * containerHeight={600}\n * getRowId={(row) => row.id}\n * />\n * )\n * }\n * ```\n */\nfunction VirtualTable<TData>({\n data,\n columns,\n rowHeight = 40,\n overscan = 5,\n estimateSize,\n containerHeight = 400,\n enableRowSelection = false,\n onRowClick,\n getRowId,\n loading = false,\n loadingComponent,\n emptyState,\n className,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n onSelectionChange,\n rowClassName,\n stickyHeader = true,\n}: VirtualTableProps<TData>) {\n const parentRef = React.useRef<HTMLDivElement>(null)\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({})\n\n const rowSelection = controlledRowSelection ?? internalRowSelection\n\n // Create wrapper for row selection change to also notify onSelectionChange\n const handleRowSelectionChange = React.useCallback(\n (\n updaterOrValue:\n | ((old: RowSelectionState) => RowSelectionState)\n | RowSelectionState\n ) => {\n const newValue =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(rowSelection)\n : updaterOrValue\n\n // Update internal or controlled state\n if (onRowSelectionChange) {\n onRowSelectionChange(newValue)\n } else {\n setInternalRowSelection(newValue)\n }\n\n // Notify parent of selected rows as TData array\n if (onSelectionChange) {\n const selectedIndices = Object.keys(newValue).filter(\n (key) => newValue[key]\n )\n const selectedRows = selectedIndices\n .map((idx) => data[Number(idx)])\n .filter(Boolean) as TData[]\n onSelectionChange(selectedRows)\n }\n },\n [rowSelection, onRowSelectionChange, onSelectionChange, data]\n )\n\n // Memoize column definitions with selection column\n const tableColumns = React.useMemo(() => {\n if (!enableRowSelection) return columns\n\n return [\n {\n id: \"select\",\n header: ({ table }: { table: ReactTable<TData> }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n aria-label=\"Select all\"\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(!!value)\n }}\n />\n ),\n cell: ({ row }: { row: Row<TData> }) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(!!value)\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 40,\n },\n ...columns,\n ]\n }, [columns, enableRowSelection])\n\n // Initialize table\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table's API is required here.\n const table = useReactTable({\n data,\n columns: tableColumns,\n state: {\n rowSelection,\n },\n enableRowSelection,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n onRowSelectionChange: handleRowSelectionChange,\n })\n\n const { rows } = table.getRowModel()\n\n // Initialize virtualizer\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: estimateSize ?? (() => rowHeight),\n overscan,\n })\n\n const virtualItems = virtualizer.getVirtualItems()\n const totalSize = virtualizer.getTotalSize()\n\n // Calculate container height style\n const containerStyle: React.CSSProperties = {\n height:\n typeof containerHeight === \"number\"\n ? `${String(containerHeight)}px`\n : containerHeight,\n overflow: \"auto\",\n willChange: \"transform\",\n }\n\n // Render loading state\n if (loading) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"virtual-table\">\n {loadingComponent ?? (\n <div className=\"space-y-2\" data-slot=\"virtual-table-loading\">\n {SKELETON_KEYS.map((key) => (\n <SkeletonLoader key={key} className=\"h-10 w-full\" />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Render empty state\n if (data.length === 0) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"virtual-table\">\n {emptyState ?? (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n data-slot=\"virtual-table-empty\"\n >\n <p className=\"text-muted-foreground text-sm\">No data available</p>\n </div>\n )}\n </div>\n )\n }\n\n // Calculate padding for virtual items\n const firstItem = virtualItems[0]\n const lastItem = virtualItems[virtualItems.length - 1]\n const paddingTop = firstItem ? firstItem.start : 0\n const paddingBottom = lastItem ? totalSize - lastItem.end : 0\n\n return (\n <div\n className={cn(\"rounded-md border\", className)}\n data-slot=\"virtual-table\"\n >\n <div\n ref={parentRef}\n className=\"relative\"\n data-slot=\"virtual-table-container\"\n style={containerStyle}\n >\n <Table>\n <TableHeader\n className={cn(\n stickyHeader && \"bg-[color:var(--table-header-bg)] sticky top-0 z-10\"\n )}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{\n width: header.getSize() !== 150 ? header.getSize() : undefined,\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {/* Top padding row */}\n {paddingTop > 0 && (\n <tr aria-hidden=\"true\">\n <td\n colSpan={tableColumns.length}\n style={{ height: `${String(paddingTop)}px`, padding: 0 }}\n />\n </tr>\n )}\n\n {/* Virtual rows */}\n {virtualItems.map((virtualRow) => {\n const row = rows[virtualRow.index]\n if (!row) return null\n return (\n <TableRow\n key={row.id}\n className={cn(\n onRowClick && \"cursor-pointer\",\n rowClassName?.(row)\n )}\n style={{\n height: `${String(virtualRow.size)}px`,\n }}\n aria-rowindex={virtualRow.index + 1}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n onClick={\n onRowClick\n ? () => {\n onRowClick(row.original)\n }\n : undefined\n }\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n width:\n cell.column.getSize() !== 150\n ? cell.column.getSize()\n : undefined,\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n\n {/* Bottom padding row */}\n {paddingBottom > 0 && (\n <tr aria-hidden=\"true\">\n <td\n colSpan={tableColumns.length}\n style={{ height: `${String(paddingBottom)}px`, padding: 0 }}\n />\n </tr>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n )\n}\n\nexport { VirtualTable }\n"]}
|
|
@@ -18,14 +18,14 @@ var splitButtonVariants = cva(
|
|
|
18
18
|
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50"
|
|
19
19
|
},
|
|
20
20
|
size: {
|
|
21
|
-
|
|
21
|
+
md: "h-[var(--button-size-default-h)] px-[var(--button-size-default-px)] py-[var(--button-size-default-py)]",
|
|
22
22
|
sm: "h-[var(--button-size-sm-h)] gap-[var(--button-size-sm-gap)] px-[var(--button-size-sm-px)]",
|
|
23
23
|
lg: "h-[var(--button-size-lg-h)] px-[var(--button-size-lg-px)]"
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
defaultVariants: {
|
|
27
27
|
variant: "default",
|
|
28
|
-
size: "
|
|
28
|
+
size: "md"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
);
|
|
@@ -42,14 +42,14 @@ var splitButtonTriggerVariants = cva(
|
|
|
42
42
|
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50"
|
|
43
43
|
},
|
|
44
44
|
size: {
|
|
45
|
-
|
|
45
|
+
md: "h-[var(--button-size-default-h)] px-[var(--split-button-trigger-padding-x)]",
|
|
46
46
|
sm: "h-[var(--button-size-sm-h)] px-1.5",
|
|
47
47
|
lg: "h-[var(--button-size-lg-h)] px-3"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
defaultVariants: {
|
|
51
51
|
variant: "default",
|
|
52
|
-
size: "
|
|
52
|
+
size: "md"
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
);
|
|
@@ -170,5 +170,5 @@ function SplitButton({
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
export { SplitButton, splitButtonVariants };
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-J62TFQHR.js.map
|
|
174
|
+
//# sourceMappingURL=chunk-J62TFQHR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/SplitButton/SplitButton.variants.ts","../src/components/primitives/SplitButton/SplitButton.tsx"],"names":[],"mappings":"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","file":"chunk-J62TFQHR.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Primary action button variants (left half of SplitButton).\n */\nexport const splitButtonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n primary: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n },\n size: {\n md:\n \"h-[var(--button-size-default-h)] px-[var(--button-size-default-px)] py-[var(--button-size-default-py)]\",\n sm: \"h-[var(--button-size-sm-h)] gap-[var(--button-size-sm-gap)] px-[var(--button-size-sm-px)]\",\n lg: \"h-[var(--button-size-lg-h)] px-[var(--button-size-lg-px)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\n/**\n * Trigger button variants (right half of SplitButton — icon-only chevron).\n */\nexport const splitButtonTriggerVariants = cva(\n \"inline-flex items-center justify-center transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n primary: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n },\n size: {\n md:\n \"h-[var(--button-size-default-h)] px-[var(--split-button-trigger-padding-x)]\",\n sm: \"h-[var(--button-size-sm-h)] px-1.5\",\n lg: \"h-[var(--button-size-lg-h)] px-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport type SplitButtonVariantProps = VariantProps<typeof splitButtonVariants>\nexport type SplitButtonTriggerVariantProps = VariantProps<\n typeof splitButtonTriggerVariants\n>\n","\"use client\"\n\nimport type {\n SplitButtonEventPayload,\n SplitButtonMenuItem,\n SplitButtonProps,\n} from \"./SplitButton.types\"\n\nimport { ChevronDown, LoaderCircle } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from \"../../navigation/DropdownMenu\"\nimport {\n splitButtonVariants,\n splitButtonTriggerVariants as triggerVariants,\n} from \"./SplitButton.variants\"\n\nfunction SplitButton({\n className,\n variant,\n size,\n children,\n onClick,\n menuItems,\n loading = false,\n loadingText,\n disabled,\n leftIcon,\n \"data-id\": dataId,\n triggerAriaLabel = \"Open menu\",\n defaultOpen,\n open,\n onOpenChange,\n ...props\n}: SplitButtonProps) {\n const isDisabled = disabled ?? loading\n\n // Create event payload for callbacks\n const createPayload = React.useCallback((): SplitButtonEventPayload => ({\n ...(dataId ? { id: dataId } : {}),\n timestamp: Date.now(),\n isLoading: loading,\n }), [dataId, loading])\n\n // Wrapped event handler that emits SplitButtonEventPayload\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event, createPayload())\n },\n [onClick, createPayload]\n )\n\n // Determine what to render as primary button content\n const renderPrimaryContent = () => {\n if (loading) {\n return (\n <>\n <LoaderCircle\n aria-hidden=\"true\"\n className=\"animate-spin\"\n data-slot=\"loading-icon\"\n />\n {loadingText ?? children}\n </>\n )\n }\n\n return (\n <>\n {leftIcon && (\n <span aria-hidden=\"true\" data-slot=\"left-icon\">\n {leftIcon}\n </span>\n )}\n {children}\n </>\n )\n }\n\n // Render a single menu item\n const renderMenuItem = (item: SplitButtonMenuItem, index: number) => {\n // Guard onClick - don't call if item is disabled\n const handleItemClick = item.disabled ? undefined : item.onClick\n\n return (\n <DropdownMenuItem\n key={index}\n {...(handleItemClick ? { onClick: handleItemClick } : {})}\n disabled={item.disabled ?? false}\n variant={item.variant ?? \"default\"}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.shortcut && (\n <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>\n )}\n </DropdownMenuItem>\n )\n }\n\n // Divider class for visual separation between buttons\n const dividerClass =\n variant === \"outline\" || variant === \"ghost\"\n ? \"border-l border-border\"\n : \"border-l border-current/20\"\n\n return (\n <div\n className={cn(\"inline-flex\", className)}\n data-id={dataId}\n data-slot=\"split-button\"\n {...props}\n >\n {/* Primary action button */}\n <button\n className={cn(\n splitButtonVariants({ variant, size }),\n \"rounded-l-[var(--button-radius-default)] rounded-r-none\"\n )}\n aria-busy={loading || undefined}\n aria-disabled={isDisabled || undefined}\n data-loading={loading || undefined}\n data-slot=\"split-button-primary\"\n disabled={isDisabled}\n type=\"button\"\n onClick={handleClick}\n >\n {renderPrimaryContent()}\n </button>\n\n {/* Dropdown trigger button */}\n <DropdownMenu defaultOpen={defaultOpen} open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n triggerVariants({ variant, size }),\n \"rounded-r-[var(--button-radius-default)] rounded-l-none\",\n dividerClass\n )}\n aria-disabled={isDisabled || undefined}\n aria-label={triggerAriaLabel}\n data-slot=\"split-button-trigger\"\n disabled={isDisabled}\n type=\"button\"\n >\n <ChevronDown className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {menuItems.map(renderMenuItem)}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n}\n\nexport { SplitButton, splitButtonVariants }\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Textarea } from './chunk-
|
|
2
|
-
import { Avatar, AvatarImage, AvatarFallback } from './chunk-
|
|
3
|
-
import { Button } from './chunk-
|
|
1
|
+
import { Textarea } from './chunk-U6EOAIPK.js';
|
|
2
|
+
import { Avatar, AvatarImage, AvatarFallback } from './chunk-YP2ATSXP.js';
|
|
3
|
+
import { Button } from './chunk-ONQCNOLU.js';
|
|
4
4
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
5
5
|
import { Paperclip, Smile, Send, MoreHorizontal, Edit2, Trash2, CornerDownRight, X, MessageCircle } from 'lucide-react';
|
|
6
6
|
import { useId, useRef, useState, useMemo, useCallback } from 'react';
|
|
@@ -1066,5 +1066,5 @@ function CommentSystem({
|
|
|
1066
1066
|
}
|
|
1067
1067
|
|
|
1068
1068
|
export { CommentInput, CommentItem, CommentReactions, CommentSystem, commentActionsVariants, commentContentVariants, commentEmptyStateVariants, commentHeaderVariants, commentInputContainerVariants, commentItemVariants, commentMentionVariants, commentReactionVariants, commentRepliesVariants, commentSystemVariants, commentThreadLineVariants, commentTimelineMarkerVariants, defaultReactions, mentionSuggestionItemVariants, mentionSuggestionsVariants };
|
|
1069
|
-
//# sourceMappingURL=chunk-
|
|
1070
|
-
//# sourceMappingURL=chunk-
|
|
1069
|
+
//# sourceMappingURL=chunk-JKYB5QAP.js.map
|
|
1070
|
+
//# sourceMappingURL=chunk-JKYB5QAP.js.map
|