@snksergio/design-system 0.37.2 → 0.38.0

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.
Files changed (47) hide show
  1. package/dist-lib/chunks/{kpi-delta-0eogwK3C.mjs → kpi-delta-BQ6waavJ.mjs} +2 -2
  2. package/dist-lib/chunks/{kpi-delta-0eogwK3C.mjs.map → kpi-delta-BQ6waavJ.mjs.map} +1 -1
  3. package/dist-lib/chunks/{kpi-delta-Cz6qAe4c.cjs → kpi-delta-NM4hUgz4.cjs} +2 -2
  4. package/dist-lib/chunks/{kpi-delta-Cz6qAe4c.cjs.map → kpi-delta-NM4hUgz4.cjs.map} +1 -1
  5. package/dist-lib/chunks/{panel-NCZKvmDE.mjs → panel-BYgb6UTx.mjs} +2 -2
  6. package/dist-lib/chunks/{panel-NCZKvmDE.mjs.map → panel-BYgb6UTx.mjs.map} +1 -1
  7. package/dist-lib/chunks/{panel-DNobvn1Z.cjs → panel-CmmbJAIs.cjs} +2 -2
  8. package/dist-lib/chunks/{panel-DNobvn1Z.cjs.map → panel-CmmbJAIs.cjs.map} +1 -1
  9. package/dist-lib/chunks/{useTheme-BeD_2lZN.cjs → useTheme-C8eZFGSb.cjs} +175 -33
  10. package/dist-lib/chunks/useTheme-C8eZFGSb.cjs.map +1 -0
  11. package/dist-lib/chunks/{useTheme-CYMBVr3I.mjs → useTheme-Chash1gR.mjs} +178 -36
  12. package/dist-lib/chunks/useTheme-Chash1gR.mjs.map +1 -0
  13. package/dist-lib/index.cjs +7 -3
  14. package/dist-lib/index.cjs.map +1 -1
  15. package/dist-lib/index.mjs +221 -217
  16. package/dist-lib/index.mjs.map +1 -1
  17. package/dist-lib/preview/chat.cjs +1 -1
  18. package/dist-lib/preview/chat.mjs +1 -1
  19. package/dist-lib/preview/clientes.cjs +2 -2
  20. package/dist-lib/preview/clientes.mjs +2 -2
  21. package/dist-lib/preview/dashboard.cjs +2 -2
  22. package/dist-lib/preview/dashboard.mjs +2 -2
  23. package/dist-lib/src/components/ui/AppShell/app-shell.d.ts +1 -1
  24. package/dist-lib/src/components/ui/AppShell/app-shell.d.ts.map +1 -1
  25. package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts +23 -3
  26. package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts.map +1 -1
  27. package/dist-lib/src/components/ui/MenuSidebar/index.d.ts +3 -1
  28. package/dist-lib/src/components/ui/MenuSidebar/index.d.ts.map +1 -1
  29. package/dist-lib/src/components/ui/MenuSidebar/menu-sidebar.d.ts +1 -1
  30. package/dist-lib/src/components/ui/MenuSidebar/menu-sidebar.d.ts.map +1 -1
  31. package/dist-lib/src/components/ui/MenuSidebar/nav-link.d.ts +29 -0
  32. package/dist-lib/src/components/ui/MenuSidebar/nav-link.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/MenuSidebar/sidebar-item.d.ts +16 -1
  34. package/dist-lib/src/components/ui/MenuSidebar/sidebar-item.d.ts.map +1 -1
  35. package/dist-lib/src/components/ui/MenuSidebar/sidebar-panel.d.ts +6 -4
  36. package/dist-lib/src/components/ui/MenuSidebar/sidebar-panel.d.ts.map +1 -1
  37. package/dist-lib/src/components/ui/MenuSidebar/sidebar-rail.d.ts +7 -3
  38. package/dist-lib/src/components/ui/MenuSidebar/sidebar-rail.d.ts.map +1 -1
  39. package/dist-lib/src/components/ui/MenuSidebar/sidebar-section.d.ts +4 -2
  40. package/dist-lib/src/components/ui/MenuSidebar/sidebar-section.d.ts.map +1 -1
  41. package/dist-lib/src/components/ui/MenuSidebar/sidebar-subgroup.d.ts +6 -3
  42. package/dist-lib/src/components/ui/MenuSidebar/sidebar-subgroup.d.ts.map +1 -1
  43. package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts +56 -2
  44. package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts.map +1 -1
  45. package/package.json +7 -4
  46. package/dist-lib/chunks/useTheme-BeD_2lZN.cjs.map +0 -1
  47. package/dist-lib/chunks/useTheme-CYMBVr3I.mjs.map +0 -1
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const avatar = require("../chunks/avatar-DSmxOg-W.cjs");
6
- const useTheme = require("../chunks/useTheme-BeD_2lZN.cjs");
6
+ const useTheme = require("../chunks/useTheme-C8eZFGSb.cjs");
7
7
  const lucideReact = require("lucide-react");
8
8
  const appShellMocks = require("../chunks/app-shell-mocks-oO_IV3Gw.cjs");
9
9
  const chatV2Mocks = require("../chunks/chat-v2-mocks-BV9Wha_Z.cjs");
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect, useCallback, useMemo } from "react";
3
3
  import { t as tv, v as DropdownMenu, N as DropdownMenuTrigger, B as Button, x as DropdownMenuContent, z as DropdownMenuItem, I as DropdownMenuSeparator, A as Avatar, a as AvatarFallback, c as cn } from "../chunks/avatar-c1_uhYC5.mjs";
4
- import { C as Chip, a as ChipGroup, b as ChipGroupItem, u as useTheme, A as AppShell } from "../chunks/useTheme-CYMBVr3I.mjs";
4
+ import { C as Chip, a as ChipGroup, b as ChipGroupItem, u as useTheme, A as AppShell } from "../chunks/useTheme-Chash1gR.mjs";
5
5
  import { MoreVertical, CheckCircle2, Phone, Video, Tag, UserPlus, Archive, CheckCheck, Check, ArrowLeft, PanelRightClose, PanelRightOpen, Paperclip, Smile, Send, Mic, ChevronDown, X, Plus, Menu, Search } from "lucide-react";
6
6
  import { e as APP_SHELL_THEME_OPTIONS, c as APP_SHELL_MESSAGES, d as APP_SHELL_NOTIFICATIONS, A as APP_SHELL_COMMANDS, a as APP_SHELL_CONTEXTS } from "../chunks/app-shell-mocks-kWIVSzLs.mjs";
7
7
  import { C as CHANNEL_LABEL, a as CHANNEL_HEX, S as SAMPLE_MESSAGES, b as STATUS_DOT, F as FILTER_GROUPS, d as CONVERSATIONS, e as CONVERSATION_DETAILS, D as DEFAULT_DETAIL } from "../chunks/chat-v2-mocks-DvZRkhmz.mjs";
@@ -2,10 +2,10 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
- const useTheme = require("../chunks/useTheme-BeD_2lZN.cjs");
5
+ const useTheme = require("../chunks/useTheme-C8eZFGSb.cjs");
6
6
  const lucideReact = require("lucide-react");
7
7
  const clientesShowcaseMocks = require("../chunks/clientes-showcase-mocks-CwhluBTT.cjs");
8
- const panel = require("../chunks/panel-DNobvn1Z.cjs");
8
+ const panel = require("../chunks/panel-CmmbJAIs.cjs");
9
9
  const avatar = require("../chunks/avatar-DSmxOg-W.cjs");
10
10
  require("../chunks/input-6P31vUfa.cjs");
11
11
  require("../chunks/textarea-BOEpteRb.cjs");
@@ -1,9 +1,9 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useRef, useCallback, useMemo } from "react";
3
- import { a as ChipGroup, b as ChipGroupItem, C as Chip, u as useTheme, A as AppShell } from "../chunks/useTheme-CYMBVr3I.mjs";
3
+ import { a as ChipGroup, b as ChipGroupItem, C as Chip, u as useTheme, A as AppShell } from "../chunks/useTheme-Chash1gR.mjs";
4
4
  import { Pencil, Trash2, ChevronDown, MoreHorizontal, Plus, Download, Maximize2, Copy, Upload, RotateCcw, MessageSquare, Archive, Clock } from "lucide-react";
5
5
  import { S as STATUSES, a as STATUS_DOT, C as CATEGORIES, b as CITIES, A as AGENTS, d as CATEGORY_KIND, f as formatBRL, e as formatShortDate, g as CLIENTS_87, K as KANBAN_COLUMNS, h as STATUS_OPTIONS, i as CATEGORY_OPTIONS, j as AGENTS_LOOKUP, k as AGENT_OPTIONS } from "../chunks/clientes-showcase-mocks-CwWGCCmf.mjs";
6
- import { P as Panel, F as FormFieldInput, a as FormField, b as FormFieldSelect, c as FormFieldTextarea, d as FloatingPanel, p as presetView, D as DataTable, B as BulkActionButton, A as AlertModal } from "../chunks/panel-NCZKvmDE.mjs";
6
+ import { P as Panel, F as FormFieldInput, a as FormField, b as FormFieldSelect, c as FormFieldTextarea, d as FloatingPanel, p as presetView, D as DataTable, B as BulkActionButton, A as AlertModal } from "../chunks/panel-BYgb6UTx.mjs";
7
7
  import { t as tv, B as Button, A as Avatar, a as AvatarFallback } from "../chunks/avatar-c1_uhYC5.mjs";
8
8
  import "../chunks/input-SiP1JWBU.mjs";
9
9
  import "../chunks/textarea-C1QmGVPr.mjs";
@@ -2,12 +2,12 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
- const useTheme = require("../chunks/useTheme-BeD_2lZN.cjs");
5
+ const useTheme = require("../chunks/useTheme-C8eZFGSb.cjs");
6
6
  const lucideReact = require("lucide-react");
7
7
  const RechartsPrimitive = require("recharts");
8
8
  const avatar = require("../chunks/avatar-DSmxOg-W.cjs");
9
9
  const pageHeader = require("../chunks/page-header-DEa2Lrl1.cjs");
10
- const kpiDelta = require("../chunks/kpi-delta-Cz6qAe4c.cjs");
10
+ const kpiDelta = require("../chunks/kpi-delta-NM4hUgz4.cjs");
11
11
  const appShellMocks = require("../chunks/app-shell-mocks-oO_IV3Gw.cjs");
12
12
  const BRAZIL_VIEWBOX = "0 0 1000 912";
13
13
  const BRAZIL_PATHS = [
@@ -1,11 +1,11 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { u as useTheme, A as AppShell, C as Chip } from "../chunks/useTheme-CYMBVr3I.mjs";
3
+ import { u as useTheme, A as AppShell, C as Chip } from "../chunks/useTheme-Chash1gR.mjs";
4
4
  import { MoreVertical, ChevronDown, Calendar, Phone, Timer, CheckCircle2, UserPlus, Clock, TrendingUp, Star, Headphones, Bot, Sun, ArrowRight, MessageSquare, Send, Mail, Search } from "lucide-react";
5
5
  import { ResponsiveContainer, BarChart, CartesianGrid, XAxis, YAxis, Tooltip, Bar, PieChart, Pie, Cell, RadialBarChart, PolarAngleAxis, RadialBar, AreaChart, Area } from "recharts";
6
6
  import { B as Button, c as cn, A as Avatar, a as AvatarFallback } from "../chunks/avatar-c1_uhYC5.mjs";
7
7
  import { P as PageHeader } from "../chunks/page-header-D3hIqlo2.mjs";
8
- import { K as KpiGroup, a as Kpi, b as KpiDelta } from "../chunks/kpi-delta-0eogwK3C.mjs";
8
+ import { K as KpiGroup, a as Kpi, b as KpiDelta } from "../chunks/kpi-delta-BQ6waavJ.mjs";
9
9
  import { e as APP_SHELL_THEME_OPTIONS, c as APP_SHELL_MESSAGES, d as APP_SHELL_NOTIFICATIONS, A as APP_SHELL_COMMANDS, a as APP_SHELL_CONTEXTS } from "../chunks/app-shell-mocks-kWIVSzLs.mjs";
10
10
  const BRAZIL_VIEWBOX = "0 0 1000 912";
11
11
  const BRAZIL_PATHS = [
@@ -20,7 +20,7 @@ import { AppShellProps } from './app-shell.types';
20
20
  * Pra uso real: declare um `MOCK_CONTEXTS`, `MOCK_COMMANDS`, etc compartilhados
21
21
  * num arquivo da app (ex: `src/config/app-shell-mocks.ts`) e passe nas pages.
22
22
  */
23
- export declare function AppShell({ contexts, defaultActiveContextId, activeContextId, onContextChange, defaultActiveItemHref, activeItemHref, onItemClick, breadcrumb, commandGroups, commandPlaceholder, commandEmptyMessage, searchPlaceholder, notifications, messages, theme, onThemeChange, themeOptions, headerRightSlot, user, layout, onLayoutChange, layoutOptions, onSettings, onLogout, menuCollapsed: controlledCollapsed, defaultMenuCollapsed, onMenuCollapseChange, children, bodyClassName, mobileEdgeToEdge, className, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function AppShell({ contexts, defaultActiveContextId, activeContextId, onContextChange, defaultActiveItemHref, activeItemHref, onItemClick, renderLink, brandHref, onBrandClick, breadcrumb, commandGroups, commandPlaceholder, commandEmptyMessage, searchPlaceholder, notifications, messages, theme, onThemeChange, themeOptions, headerRightSlot, user, layout, onLayoutChange, layoutOptions, onSettings, onLogout, menuCollapsed: controlledCollapsed, defaultMenuCollapsed, onMenuCollapseChange, children, bodyClassName, mobileEdgeToEdge, className, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
24
24
  export declare namespace AppShell {
25
25
  var displayName: string;
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/AppShell/app-shell.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CAAC,EAEvB,QAAQ,EACR,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,WAAW,EAEX,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,KAAK,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,IAAI,EACJ,MAAM,EACN,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EAER,aAAa,EAAE,mBAAmB,EAClC,oBAAoB,EACpB,oBAAoB,EAEpB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,EAAE,aAAa,2CAgHf;yBArJe,QAAQ"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/AppShell/app-shell.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CAAC,EAEvB,QAAQ,EACR,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,EAEZ,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,KAAK,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,IAAI,EACJ,MAAM,EACN,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EAER,aAAa,EAAE,mBAAmB,EAClC,oBAAoB,EACpB,oBAAoB,EAEpB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,EAAE,aAAa,2CAmHf;yBA3Je,QAAQ"}
@@ -1,7 +1,7 @@
1
- import { ReactNode } from 'react';
1
+ import { ReactNode, MouseEvent } from 'react';
2
2
  import { LucideIcon } from '../../../lib/lucide-types';
3
3
  import { HeaderBreadcrumbItem, HeaderCommandGroup, HeaderMessagesConfig, HeaderNotificationsConfig, HeaderThemeOption } from '../Header';
4
- import { SidebarContext, SidebarMenuItem } from '../MenuSidebar';
4
+ import { SidebarContext, SidebarMenuItem, SidebarLinkRenderer } from '../MenuSidebar';
5
5
  /**
6
6
  * Identidade do usuário logado — exibida no avatar do rail (com DropdownMenu)
7
7
  * e no cabeçalho do user menu.
@@ -55,7 +55,27 @@ export type AppShellProps = {
55
55
  defaultActiveItemHref?: string;
56
56
  /** Item ativo (controlled). */
57
57
  activeItemHref?: string;
58
- onItemClick?: (item: SidebarMenuItem) => void;
58
+ /**
59
+ * Clique num item do menu. O 2º argumento é o evento — use pra `preventDefault()`
60
+ * quando você roteia na mão. Parâmetro opcional novo em 2026-08-08 (retrocompatível).
61
+ */
62
+ onItemClick?: (item: SidebarMenuItem, event?: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
63
+ /**
64
+ * ⭐ **Integração com router.** Substitui o `<a>` interno do menu pelo link do seu
65
+ * router — é o que faz a navegação ser client-side em vez de recarregar a página.
66
+ *
67
+ * ```tsx
68
+ * import { Link } from "react-router-dom";
69
+ * <AppShell renderLink={(p) => <Link {...p} to={p.href} />} … />
70
+ * ```
71
+ *
72
+ * Sem isto, o menu cancela a navegação nativa quando você passa `onItemClick` —
73
+ * funciona, mas o `<Link>` do router é o caminho canônico. Ver MenuSidebar/USAGE.md.
74
+ */
75
+ renderLink?: SidebarLinkRenderer;
76
+ /** Destino do brand no topo do rail. Default `"/"`; `""` torna não-navegável. */
77
+ brandHref?: string;
78
+ onBrandClick?: (e: MouseEvent<HTMLAnchorElement>) => void;
59
79
  /** Breadcrumb do header (último item = página atual). Obrigatório. */
60
80
  breadcrumb: HeaderBreadcrumbItem[];
61
81
  /** Search/Command palette. Quando omitido, search é escondido. */
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/AppShell/app-shell.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-shell.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/AppShell/app-shell.types.ts"],"names":[],"mappings":"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"}
@@ -12,5 +12,7 @@ export type { SidebarSectionProps } from './sidebar-section';
12
12
  export { SidebarBrandIcon } from './sidebar-brand';
13
13
  export { useControllable } from './use-sidebar-state';
14
14
  export { useMediaQuery } from './use-media-query';
15
- export type { SidebarProps, SidebarContext, SidebarMenuItem, SidebarSection as SidebarSectionData, SidebarBookmarkItem, SidebarChatItem, SidebarBadgeKind, } from './sidebar.types';
15
+ export { shouldPreventNavigation, isExternalHref, isHashHref, isModifiedClick, } from './nav-link';
16
+ export type { PreventNavigationInput } from './nav-link';
17
+ export type { SidebarProps, SidebarContext, SidebarMenuItem, SidebarSection as SidebarSectionData, SidebarBookmarkItem, SidebarChatItem, SidebarBadgeKind, SidebarLinkRenderer, SidebarLinkRenderProps, } from './sidebar.types';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKlD,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGzD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
@@ -21,5 +21,5 @@ import { SidebarProps } from './sidebar.types';
21
21
  * - Estado: mobileOpen / defaultMobileOpen / onMobileOpenChange.
22
22
  * - Trigger externo: qualquer botão que altere `mobileOpen` (hamburger no header da app).
23
23
  */
24
- export declare function MenuSidebar({ contexts, brand, user, showRailAdd, onRailAddClick, activeContextId, defaultActiveContextId, onContextChange, activeItemHref, defaultActiveItemHref, onItemClick, panelCollapsed, defaultPanelCollapsed, onPanelCollapseChange, expandOnHover, onPanelTitleClick, mobileOpen, defaultMobileOpen, onMobileOpenChange, mobileBreakpoint, className, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function MenuSidebar({ contexts, brand, user, showRailAdd, onRailAddClick, activeContextId, defaultActiveContextId, onContextChange, activeItemHref, defaultActiveItemHref, onItemClick, panelCollapsed, defaultPanelCollapsed, onPanelCollapseChange, expandOnHover, onPanelTitleClick, mobileOpen, defaultMobileOpen, onMobileOpenChange, mobileBreakpoint, renderLink, brandHref, onBrandClick, className, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
25
25
  //# sourceMappingURL=menu-sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-sidebar.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/menu-sidebar.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,aAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAuC,EACvC,SAAS,GACV,EAAE,YAAY,2CA2Jd"}
1
+ {"version":3,"file":"menu-sidebar.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/menu-sidebar.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,aAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAuC,EACvC,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,GACV,EAAE,YAAY,2CA0Kd"}
@@ -0,0 +1,29 @@
1
+ import { MouseEvent } from 'react';
2
+ /** `https://x`, `mailto:a@b`, `tel:+55`, `//cdn` → true. `/app`, `#/app`, `app` → false. */
3
+ export declare function isExternalHref(href: string | undefined): boolean;
4
+ /** `#`, `#/rota` → true. Hash muda fragmento, não documento. */
5
+ export declare function isHashHref(href: string | undefined): boolean;
6
+ /** ctrl/cmd/shift/alt ou botão que não é o principal → o usuário quer outra aba/janela. */
7
+ export declare function isModifiedClick(e: {
8
+ button?: number;
9
+ metaKey?: boolean;
10
+ ctrlKey?: boolean;
11
+ shiftKey?: boolean;
12
+ altKey?: boolean;
13
+ }): boolean;
14
+ export type PreventNavigationInput = {
15
+ /** O `href` do item. Ausente → é `<button>`, não há navegação a cancelar. */
16
+ href?: string;
17
+ /** Há handler do consumidor pro clique? Sem isso, o `<a>` é a única navegação. */
18
+ hasHandler: boolean;
19
+ /** `target` do item (`"_blank"` desliga o cancelamento). */
20
+ target?: string;
21
+ /** O evento — só as teclas/botão são lidos. */
22
+ event: Pick<MouseEvent<HTMLAnchorElement>, "button" | "metaKey" | "ctrlKey" | "shiftKey" | "altKey" | "defaultPrevented">;
23
+ };
24
+ /**
25
+ * @returns `true` quando o clique deve ter `preventDefault()` — ou seja, quando cancelar
26
+ * a navegação nativa é o que o consumidor claramente quer.
27
+ */
28
+ export declare function shouldPreventNavigation({ href, hasHandler, target, event, }: PreventNavigationInput): boolean;
29
+ //# sourceMappingURL=nav-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-link.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/nav-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKxC,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKhE;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE5D;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,CAAC,EAAE;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAQV;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,IAAI,CACT,UAAU,CAAC,iBAAiB,CAAC,EAC7B,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,kBAAkB,CAC9E,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,UAAU,EACV,MAAM,EACN,KAAK,GACN,EAAE,sBAAsB,GAAG,OAAO,CASlC"}
@@ -1,5 +1,5 @@
1
1
  import { MouseEvent, ReactNode } from 'react';
2
- import { SidebarMenuItem, SidebarBadgeKind } from './sidebar.types';
2
+ import { SidebarMenuItem, SidebarBadgeKind, SidebarLinkRenderer } from './sidebar.types';
3
3
  export type SidebarItemProps = {
4
4
  item: SidebarMenuItem;
5
5
  active?: boolean;
@@ -7,6 +7,21 @@ export type SidebarItemProps = {
7
7
  /** Quando true, o ícone usa cor de brand (usado em groups com filho ativo) */
8
8
  iconBrand?: boolean;
9
9
  onClick?: (e: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
10
+ /** Substitui o `<a>` pelo link do router do consumidor. Ver `SidebarLinkRenderer`. */
11
+ renderLink?: SidebarLinkRenderer;
12
+ /**
13
+ * O consumidor trata a navegação? Decide se o clique cancela o `<a>` nativo.
14
+ *
15
+ * ⚠️ Existe porque **inferir pelo `onClick` não funciona no caminho composto**: o
16
+ * `SidebarPanel` SEMPRE passa um `onClick` (é como o `MenuSidebar` mantém o item ativo
17
+ * em modo uncontrolled), então "tem onClick" seria sempre verdadeiro e o sidebar
18
+ * cancelaria a navegação até de quem não passou handler nenhum — trocando o bug do
19
+ * reload por "o link não faz nada". Foi o que um teste pegou nesta implementação.
20
+ *
21
+ * - `undefined` (uso standalone do `SidebarItem`) → infere de `item.onClick`/`onClick`.
22
+ * - `boolean` (uso composto) → o `MenuSidebar` decide, olhando o `onItemClick` DELE.
23
+ */
24
+ interceptNavigation?: boolean;
10
25
  className?: string;
11
26
  };
12
27
  export declare const SidebarItem: import('react').ForwardRefExoticComponent<SidebarItemProps & import('react').RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-item.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-item.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQnD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW,oIAsDvB,CAAC;AAIF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GACV,EAAE;IACD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAMA"}
1
+ {"version":3,"file":"sidebar-item.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-item.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASnD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzE,sFAAsF;IACtF,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW,oIAqFvB,CAAC;AAIF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GACV,EAAE;IACD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAMA"}
@@ -1,5 +1,5 @@
1
- import { ReactNode } from 'react';
2
- import { SidebarContext, SidebarMenuItem } from './sidebar.types';
1
+ import { ReactNode, MouseEvent } from 'react';
2
+ import { SidebarContext, SidebarMenuItem, SidebarLinkRenderer } from './sidebar.types';
3
3
  export type SidebarPanelProps = {
4
4
  context: SidebarContext;
5
5
  collapsed?: boolean;
@@ -8,7 +8,9 @@ export type SidebarPanelProps = {
8
8
  /** Quando true (mobile): panel preenche o drawer full-screen (flex-1). */
9
9
  mobile?: boolean;
10
10
  activeItemHref?: string;
11
- onItemClick?: (item: SidebarMenuItem) => void;
11
+ onItemClick?: (item: SidebarMenuItem, event?: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
12
+ renderLink?: SidebarLinkRenderer;
13
+ interceptNavigation?: boolean;
12
14
  /** Quando passados, o título vira um dropdown switcher de contextos */
13
15
  contexts?: SidebarContext[];
14
16
  onContextChange?: (id: string) => void;
@@ -18,5 +20,5 @@ export type SidebarPanelProps = {
18
20
  children?: ReactNode;
19
21
  className?: string;
20
22
  };
21
- export declare function SidebarPanel({ context, collapsed, floating, mobile, activeItemHref, onItemClick, contexts, onContextChange, onTitleClick, children, className, }: SidebarPanelProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function SidebarPanel({ context, collapsed, floating, mobile, activeItemHref, onItemClick, renderLink, interceptNavigation, contexts, onContextChange, onTitleClick, children, className, }: SidebarPanelProps): import("react/jsx-runtime").JSX.Element;
22
24
  //# sourceMappingURL=sidebar-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-panel.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAmBvC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,uEAAuE;IACvE,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,MAAM,EACN,cAAc,EACd,WAAW,EACX,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,GACV,EAAE,iBAAiB,2CAwFnB"}
1
+ {"version":3,"file":"sidebar-panel.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAmBnD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,eAAe,EACrB,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,KACtD,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,MAAM,EACN,cAAc,EACd,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,GACV,EAAE,iBAAiB,2CAgGnB"}
@@ -1,5 +1,5 @@
1
- import { ReactNode } from 'react';
2
- import { SidebarContext } from './sidebar.types';
1
+ import { ReactNode, MouseEvent } from 'react';
2
+ import { SidebarContext, SidebarLinkRenderer } from './sidebar.types';
3
3
  export type SidebarRailProps = {
4
4
  contexts: SidebarContext[];
5
5
  activeContextId: string;
@@ -8,7 +8,11 @@ export type SidebarRailProps = {
8
8
  user?: ReactNode;
9
9
  showAdd?: boolean;
10
10
  onAddClick?: () => void;
11
+ /** Destino do brand. Default `"/"`; string vazia torna o brand não-navegável. */
12
+ brandHref?: string;
13
+ onBrandClick?: (e: MouseEvent<HTMLAnchorElement>) => void;
14
+ renderLink?: SidebarLinkRenderer;
11
15
  className?: string;
12
16
  };
13
- export declare function SidebarRail({ contexts, activeContextId, onContextChange, brand, user, showAdd, onAddClick, className, }: SidebarRailProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function SidebarRail({ contexts, activeContextId, onContextChange, brand, user, showAdd, onAddClick, brandHref, onBrandClick, renderLink, className, }: SidebarRailProps): import("react/jsx-runtime").JSX.Element;
14
18
  //# sourceMappingURL=sidebar-rail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-rail.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-rail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,eAAe,EACf,eAAe,EACf,KAAK,EACL,IAAI,EACJ,OAAe,EACf,UAAU,EACV,SAAS,GACV,EAAE,gBAAgB,2CA8ClB"}
1
+ {"version":3,"file":"sidebar-rail.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-rail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAgBnD,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,eAAe,EACf,eAAe,EACf,KAAK,EACL,IAAI,EACJ,OAAe,EACf,UAAU,EACV,SAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,GACV,EAAE,gBAAgB,2CAkDlB"}
@@ -1,10 +1,12 @@
1
- import { SidebarSection as SidebarSectionData } from './sidebar.types';
1
+ import { SidebarSection as SidebarSectionData, SidebarLinkRenderer } from './sidebar.types';
2
2
  export type SidebarSectionProps = {
3
3
  section: SidebarSectionData;
4
4
  /** Estado controlado — se omitido, gerencia internamente */
5
5
  open?: boolean;
6
6
  onOpenChange?: (open: boolean) => void;
7
+ /** Substitui o `<a>` pelo link do router do consumidor. */
8
+ renderLink?: SidebarLinkRenderer;
7
9
  className?: string;
8
10
  };
9
- export declare function SidebarSection({ section, open, onOpenChange, className, }: SidebarSectionProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function SidebarSection({ section, open, onOpenChange, renderLink, className, }: SidebarSectionProps): import("react/jsx-runtime").JSX.Element;
10
12
  //# sourceMappingURL=sidebar-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-section.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-section.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,2CAyGrB"}
1
+ {"version":3,"file":"sidebar-section.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-section.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,SAAS,GACV,EAAE,mBAAmB,2CA2GrB"}
@@ -1,13 +1,16 @@
1
- import { SidebarMenuItem } from './sidebar.types';
1
+ import { MouseEvent } from 'react';
2
+ import { SidebarMenuItem, SidebarLinkRenderer } from './sidebar.types';
2
3
  export type SidebarSubgroupProps = {
3
4
  item: SidebarMenuItem;
4
5
  activeItemHref?: string;
5
- onItemClick?: (item: SidebarMenuItem) => void;
6
+ onItemClick?: (item: SidebarMenuItem, event?: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
7
+ renderLink?: SidebarLinkRenderer;
8
+ interceptNavigation?: boolean;
6
9
  /** Estado controlado de collapse — se omitido, gerencia internamente */
7
10
  open?: boolean;
8
11
  defaultOpen?: boolean;
9
12
  onOpenChange?: (open: boolean) => void;
10
13
  className?: string;
11
14
  };
12
- export declare function SidebarSubgroup({ item, activeItemHref, onItemClick, open, defaultOpen, onOpenChange, className, }: SidebarSubgroupProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function SidebarSubgroup({ item, activeItemHref, onItemClick, renderLink, interceptNavigation, open, defaultOpen, onOpenChange, className, }: SidebarSubgroupProps): import("react/jsx-runtime").JSX.Element;
13
16
  //# sourceMappingURL=sidebar-subgroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-subgroup.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-subgroup.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,cAAc,EACd,WAAW,EACX,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,oBAAoB,2CAuDtB"}
1
+ {"version":3,"file":"sidebar-subgroup.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar-subgroup.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,eAAe,EACrB,KAAK,CAAC,EAAE,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,KACtD,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,cAAc,EACd,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,oBAAoB,2CAyDtB"}
@@ -1,4 +1,4 @@
1
- import { ReactNode, MouseEvent } from 'react';
1
+ import { ReactNode, MouseEvent, Ref } from 'react';
2
2
  import { LucideIcon } from '../../../lib/lucide-types';
3
3
  export type SidebarBadgeKind = "default" | "counter" | "success";
4
4
  export type SidebarMenuItem = {
@@ -6,6 +6,8 @@ export type SidebarMenuItem = {
6
6
  icon?: LucideIcon;
7
7
  /** Quando presente vira `<a>` — quando ausente vira `<button>` (action) */
8
8
  href?: string;
9
+ /** `target` do anchor. `"_blank"` desliga o cancelamento de navegação (ver `renderLink`). */
10
+ target?: string;
9
11
  badge?: string;
10
12
  badgeKind?: SidebarBadgeKind;
11
13
  /** Quando presente vira grupo colapsável com submenus (1 nível) */
@@ -14,6 +16,38 @@ export type SidebarMenuItem = {
14
16
  defaultOpen?: boolean;
15
17
  onClick?: (e: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
16
18
  };
19
+ /**
20
+ * Props que o sidebar entrega pro seu renderizador de link. São exatamente as de um
21
+ * `<a>` — repasse todas pro componente do seu router.
22
+ */
23
+ export type SidebarLinkRenderProps = {
24
+ href: string;
25
+ className: string;
26
+ children: ReactNode;
27
+ onClick: (e: MouseEvent<HTMLAnchorElement>) => void;
28
+ target?: string;
29
+ title?: string;
30
+ "aria-current"?: "page";
31
+ "aria-label"?: string;
32
+ ref?: Ref<HTMLAnchorElement>;
33
+ };
34
+ /**
35
+ * Render-prop que substitui o `<a>` interno pelo link do SEU router.
36
+ *
37
+ * ```tsx
38
+ * import { Link } from "react-router-dom";
39
+ * <AppShell renderLink={(p) => <Link {...p} to={p.href} />} />
40
+ * ```
41
+ *
42
+ * ⚠️ **É render-prop, não `linkComponent`, de propósito.** Um prop que recebe *tipo de
43
+ * componente* e é escrito inline (`linkComponent={(p) => <Link .../>}`) cria um tipo
44
+ * NOVO a cada render, e o React desmonta/remonta a subárvore inteira — perde foco,
45
+ * reinicia animação, e o bug parece "aleatório". Render-prop é chamada durante o
46
+ * render, então inline é seguro.
47
+ *
48
+ * Quando presente, o sidebar **não** mexe em `preventDefault`: quem decide é o `<Link>`.
49
+ */
50
+ export type SidebarLinkRenderer = (props: SidebarLinkRenderProps) => ReactNode;
17
51
  export type SidebarBookmarkItem = {
18
52
  name: string;
19
53
  /** Cor do dot indicador / caixa de ícone (qualquer cor CSS válida) */
@@ -77,7 +111,27 @@ export type SidebarProps = {
77
111
  activeItemHref?: string;
78
112
  /** Active item — uncontrolled initial */
79
113
  defaultActiveItemHref?: string;
80
- onItemClick?: (item: SidebarMenuItem) => void;
114
+ /**
115
+ * Clique num item. O 2º argumento é o evento — use pra `preventDefault()` quando
116
+ * você faz o roteamento na mão. Era `(item) => void` até 2026-08-08: sem o evento,
117
+ * o consumidor não tinha como cancelar a navegação do `<a>` nem sabendo do problema.
118
+ * Adicionar parâmetro opcional é retrocompatível.
119
+ */
120
+ onItemClick?: (item: SidebarMenuItem, event?: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
121
+ /**
122
+ * Substitui o `<a>` interno pelo link do seu router (react-router, Next, TanStack…).
123
+ * **É o caminho recomendado** — ver `SidebarLinkRenderer`.
124
+ */
125
+ renderLink?: SidebarLinkRenderer;
126
+ /**
127
+ * Destino do brand mark no topo do rail. Default `"/"`.
128
+ * Era `href="/"` **fixo no JSX** até 2026-08-08 — recarregava pra raiz em qualquer
129
+ * app, sem forma de configurar. Passe `""` (ou `undefined` + `onBrandClick`) pra
130
+ * torná-lo não-navegável.
131
+ */
132
+ brandHref?: string;
133
+ /** Clique no brand mark. Recebe o evento — útil com `brandHref` vazio. */
134
+ onBrandClick?: (e: MouseEvent<HTMLAnchorElement>) => void;
81
135
  /** Panel colapsado (rail-only) — controlled */
82
136
  panelCollapsed?: boolean;
83
137
  /** Panel colapsado — uncontrolled initial */
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MenuSidebar/sidebar.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snksergio/design-system",
3
- "version": "0.37.2",
3
+ "version": "0.38.0",
4
4
  "//distribuicao": "Canal PRIMARIO = registry shadcn (copy-in) + CLI @snksergio/create-design-system; sobe sozinho no merge (Vercel). Canal SECUNDARIO = este pacote npm (@snksergio/design-system), publicado por passo MANUAL do mantenedor, entao costuma ficar atras do registry. SECUNDARIO descreve a ORDEM DE PUBLICACAO, nao o nivel de suporte: NAO e depreciado, e desde a 0.37.0 entrega 41 dos 42 componentes ui/ no barrel raiz + os 41 primitivos shadcn no subpath ./shadcn (so TabelaTeste, demo interno, fica de fora). Publish so pelo Passo 7 do .claude/skills/ds-dev/release.md (valida com `npm run lib:verify`, pede o token, publica, revoga). Ver DISTRIBUICAO.md.",
5
5
  "description": "iGreen Design System — internal library for SaaS CRM, admin panels and dashboards. React 19 + Tailwind v4 + Shadcn + Radix.",
6
6
  "license": "UNLICENSED",
@@ -115,6 +115,7 @@
115
115
  "examples:drift": "node scripts/examples-drift-check.mjs",
116
116
  "ds:link": "node scripts/ds-link.mjs"
117
117
  },
118
+ "//deps-de-tipo": "Os 3 `@types/*` abaixo estao em dependencies (nao devDependencies) DE PROPOSITO: os `.d.ts` publicados os referenciam no tipo PUBLICO. `dist-lib/src/components/ui/ChoroplethMap/choropleth-map.types.d.ts` faz `import { Feature } from 'geojson'` e `import { Topology } from 'topojson-specification'`, e `GeoProjection` vem de `@types/d3-geo` (o `d3-geo` nao embute tipos). Em devDependencies o consumidor npm instala o pacote, recebe os `.d.ts`, e o `tsc` DELE quebra com 'Cannot find module geojson' — o DS compila porque tem os @types localmente. Criterio: se um pacote aparece num `from '...'` de `.d.ts` sob `dist-lib/`, ele e dependency. Gate: `scripts/lib/deps-declared.mjs`. `@types/topojson-client` fica em devDeps porque o topojson-client so e importado como VALOR, e o tipo nao vaza pra superficie publica.",
118
119
  "dependencies": {
119
120
  "@dnd-kit/core": "^6.3.1",
120
121
  "@dnd-kit/modifiers": "^9.0.0",
@@ -148,6 +149,9 @@
148
149
  "@radix-ui/react-toggle-group": "^1.1.13",
149
150
  "@radix-ui/react-tooltip": "^1.2.10",
150
151
  "@tanstack/react-virtual": "^3.13.24",
152
+ "@types/d3-geo": "^3.1.0",
153
+ "@types/geojson": "^7946.0.14",
154
+ "@types/topojson-specification": "^1.0.5",
151
155
  "class-variance-authority": "^0.7.1",
152
156
  "clsx": "^2.1.1",
153
157
  "cmdk": "^1.1.1",
@@ -171,15 +175,14 @@
171
175
  "@testing-library/dom": "^10.4.1",
172
176
  "@testing-library/jest-dom": "^6.9.1",
173
177
  "@testing-library/react": "^16.3.2",
174
- "@types/d3-geo": "^3.1.0",
175
- "@types/geojson": "^7946.0.14",
178
+ "@testing-library/user-event": "^14.6.3",
176
179
  "@types/react": "^19.0.0",
177
180
  "@types/react-dom": "^19.0.0",
178
181
  "@types/topojson-client": "^3.1.5",
179
- "@types/topojson-specification": "^1.0.5",
180
182
  "@vitejs/plugin-react": "^4.3.0",
181
183
  "@vitest/ui": "^4.1.6",
182
184
  "jsdom": "^29.1.1",
185
+ "react-router-dom": "^7.18.2",
183
186
  "tailwindcss": "^4.0.0",
184
187
  "tsx": "^4.19.0",
185
188
  "typescript": "^5.6.0",