{"version":3,"file":"NavigationRail.cjs","names":[],"sources":["../../../src/components/NavigationRail/NavigationRail.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./NavigationRail.module.css\";\n\nexport interface NavigationRailItem {\n    /** Unique identifier — used as React key and for value matching. */\n    key: string;\n    /** Visible label. */\n    label: ReactNode;\n    /** Icon rendered above the label. */\n    icon?: ReactNode;\n    /** Optional badge content rendered over the icon. */\n    badge?: ReactNode;\n    /** When true, the item is not selectable. */\n    disabled?: boolean;\n}\n\nexport type NavigationRailLabelVisibility = \"all\" | \"selected\" | \"none\";\n\nexport interface NavigationRailProps extends Omit<HTMLAttributes<HTMLElement>, \"onChange\"> {\n    items: NavigationRailItem[];\n    /** Selected key. */\n    value: string;\n    /** Called with the new selected key on click. */\n    onChange: (key: string) => void;\n    /** Top slot — e.g. a FAB or logo. */\n    header?: ReactNode;\n    /** Bottom slot — pushed to the bottom of the rail. */\n    footer?: ReactNode;\n    /** Which item labels to show. Default `\"all\"`. */\n    labelVisibility?: NavigationRailLabelVisibility;\n    /** Extra class names merged onto the root. */\n    className?: string;\n}\n\n/**\n * Vertical, compact navigation column for desktop and tablet layouts. Each item\n * stacks an icon over its label, with the active item flagged via\n * `aria-current=\"page\"`. Use `labelVisibility=\"selected\"` to show only the\n * active item's label, or `\"none\"` for an icon-only rail.\n *\n * @example\n * <NavigationRail\n *     header={<FloatingActionButton icon={<Plus />} position=\"none\" />}\n *     items={[\n *         { key: \"home\", label: \"Início\", icon: <Home /> },\n *         { key: \"inbox\", label: \"Caixa\", icon: <Inbox />, badge: 3 },\n *     ]}\n *     value={tab}\n *     onChange={setTab}\n * />\n */\nexport function NavigationRail({\n    items,\n    value,\n    onChange,\n    header,\n    footer,\n    labelVisibility = \"all\",\n    className,\n    ...props\n}: NavigationRailProps) {\n    return (\n        <nav className={cn(styles.rail, className)} aria-label=\"Navegação lateral\" {...props}>\n            {header !== undefined && <div className={styles.header}>{header}</div>}\n            <ul className={styles.list}>\n                {items.map((item) => {\n                    const active = item.key === value;\n                    const showLabel =\n                        labelVisibility === \"all\" || (labelVisibility === \"selected\" && active);\n                    return (\n                        <li key={item.key}>\n                            <button\n                                type=\"button\"\n                                className={cn(styles.item, active && styles.active)}\n                                aria-current={active ? \"page\" : undefined}\n                                disabled={item.disabled}\n                                onClick={() => onChange(item.key)}\n                            >\n                                <span className={styles.iconWrap}>\n                                    {item.icon && <span className={styles.icon}>{item.icon}</span>}\n                                    {item.badge !== undefined && (\n                                        <span className={styles.badge}>{item.badge}</span>\n                                    )}\n                                </span>\n                                {showLabel && <span className={styles.label}>{item.label}</span>}\n                            </button>\n                        </li>\n                    );\n                })}\n            </ul>\n            {footer !== undefined && <div className={styles.footer}>{footer}</div>}\n        </nav>\n    );\n}\n"],"mappings":"kHAoDA,SAAgB,EAAe,CAC3B,QACA,QACA,WACA,SACA,SACA,kBAAkB,MAClB,YACA,GAAG,GACiB,CACpB,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,KAAM,CAAS,EAAG,aAAW,oBAAoB,GAAI,EAA/E,SAAA,CACK,IAAW,IAAA,KAAa,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OAAS,SAAA,CAAY,CAAA,GACrE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,QAAO,KACjB,SAAA,EAAM,IAAK,GAAS,CACjB,IAAM,EAAS,EAAK,MAAQ,EACtB,EACF,IAAoB,OAAU,IAAoB,YAAc,EACpE,OACI,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,UACI,EAAA,EAAA,KAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,KAAM,GAAU,EAAA,QAAO,MAAM,EAClD,eAAc,EAAS,OAAS,IAAA,GAChC,SAAU,EAAK,SACf,YAAe,EAAS,EAAK,GAAG,EALpC,SAAA,EAOI,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,SAAxB,SAAA,CACK,EAAK,OAAQ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAO,SAAA,EAAK,IAAW,CAAA,EAC5D,EAAK,QAAU,IAAA,KACZ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAQ,SAAA,EAAK,KAAY,CAAA,CAEnD,CACL,CAAA,EAAA,IAAa,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAQ,SAAA,EAAK,KAAY,CAAA,CAC3D,CACR,CAAA,CAAA,EAhBK,EAAK,GAgBV,CAEZ,CAAC,CACD,CAAA,EACH,IAAW,IAAA,KAAa,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OAAS,SAAA,CAAY,CAAA,CACpE,GAEb"}