@snksergio/design-system 0.42.1 → 0.43.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 (34) hide show
  1. package/dist-lib/chunks/{kpi-delta-DaDwKOaP.mjs → kpi-delta-B_1xjDu_.mjs} +2 -2
  2. package/dist-lib/chunks/{kpi-delta-DaDwKOaP.mjs.map → kpi-delta-B_1xjDu_.mjs.map} +1 -1
  3. package/dist-lib/chunks/{kpi-delta-DAfakvFp.cjs → kpi-delta-CXGg2nBx.cjs} +2 -2
  4. package/dist-lib/chunks/{kpi-delta-DAfakvFp.cjs.map → kpi-delta-CXGg2nBx.cjs.map} +1 -1
  5. package/dist-lib/chunks/{panel-BSyHW2J5.cjs → panel-C3fekbdr.cjs} +34 -13
  6. package/dist-lib/chunks/panel-C3fekbdr.cjs.map +1 -0
  7. package/dist-lib/chunks/{panel-CMRliQb2.mjs → panel-UwUWfDLf.mjs} +34 -13
  8. package/dist-lib/chunks/panel-UwUWfDLf.mjs.map +1 -0
  9. package/dist-lib/chunks/{useTheme-3iZAognE.cjs → useTheme-C9Y6vxTf.cjs} +103 -52
  10. package/dist-lib/chunks/useTheme-C9Y6vxTf.cjs.map +1 -0
  11. package/dist-lib/chunks/{useTheme-B3ZakPqk.mjs → useTheme-DCmzLBUR.mjs} +103 -52
  12. package/dist-lib/chunks/{useTheme-3iZAognE.cjs.map → useTheme-DCmzLBUR.mjs.map} +1 -1
  13. package/dist-lib/index.cjs +3 -3
  14. package/dist-lib/index.mjs +5 -5
  15. package/dist-lib/preview/chat.cjs +1 -1
  16. package/dist-lib/preview/chat.mjs +1 -1
  17. package/dist-lib/preview/clientes.cjs +7 -13
  18. package/dist-lib/preview/clientes.cjs.map +1 -1
  19. package/dist-lib/preview/clientes.mjs +7 -13
  20. package/dist-lib/preview/clientes.mjs.map +1 -1
  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/DataTable/column-types/definitions/date-column-type.d.ts.map +1 -1
  24. package/dist-lib/src/components/ui/DataTable/column-types/definitions/datetime-column-type.d.ts.map +1 -1
  25. package/dist-lib/src/components/ui/DataTable/utils/calculate-column-widths.d.ts.map +1 -1
  26. package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.d.ts.map +1 -1
  27. package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.styles.d.ts +82 -3
  28. package/dist-lib/src/components/ui/SingleMenuSidebar/single-menu-sidebar.styles.d.ts.map +1 -1
  29. package/dist-lib/src/preview/pages/ChatV2/components/FiltersColumn/filters-column.styles.d.ts +3 -3
  30. package/dist-lib/src/preview/pages/ClientesShowcase/ClientesShowcase.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/dist-lib/chunks/panel-BSyHW2J5.cjs.map +0 -1
  33. package/dist-lib/chunks/panel-CMRliQb2.mjs.map +0 -1
  34. package/dist-lib/chunks/useTheme-B3ZakPqk.mjs.map +0 -1
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { createContext, useContext } from "react";
3
3
  import { t as tv, c as cn } from "./avatar-DFWEwBKu.mjs";
4
4
  import { TrendingUp } from "lucide-react";
5
- import { C as Chip } from "./useTheme-B3ZakPqk.mjs";
5
+ import { C as Chip } from "./useTheme-DCmzLBUR.mjs";
6
6
  const kpi = tv({
7
7
  slots: {
8
8
  root: "flex flex-col gap-gp-lg",
@@ -147,4 +147,4 @@ export {
147
147
  Kpi as a,
148
148
  KpiDelta as b
149
149
  };
150
- //# sourceMappingURL=kpi-delta-DaDwKOaP.mjs.map
150
+ //# sourceMappingURL=kpi-delta-B_1xjDu_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-delta-DaDwKOaP.mjs","sources":["../../src/components/ui/Kpi/kpi.styles.ts","../../src/components/ui/Kpi/kpi-group.tsx","../../src/components/ui/Kpi/kpi.tsx","../../src/components/ui/Kpi/kpi-delta.tsx"],"sourcesContent":["import { tv } from \"@/utils/tv\";\r\n\r\n/* ══════════════════════════════════════════════════════════════════════════\r\n Kpi — estilos (tv). 100% sobre tokens do DS, theme-aware.\r\n ══════════════════════════════════════════════════════════════════════════ */\r\n\r\nexport const kpi = tv({\r\n slots: {\r\n root: \"flex flex-col gap-gp-lg\",\r\n header: \"flex items-start justify-between gap-gp-md\",\r\n label: \"m-0 text-body-md font-semibold text-fg-default\",\r\n iconBox:\r\n \"grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md\",\r\n main: \"flex flex-col gap-gp-xs\",\r\n valueRow: \"flex flex-wrap items-center gap-gp-md\",\r\n value:\r\n \"leading-none text-fg-default [font-variant-numeric:tabular-nums]\",\r\n hint: \"text-caption-sm text-fg-subtle\",\r\n chart: \"mt-gp-xs\",\r\n footnote:\r\n \"mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted\",\r\n },\r\n variants: {\r\n // Tamanho do valor de destaque — presets `stat-*` (número de métrica).\r\n // Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight\r\n // vêm do preset + slot; pareado com tabular-nums.\r\n size: {\r\n sm: { value: \"text-stat-sm\" },\r\n md: { value: \"text-stat-md\" },\r\n lg: { value: \"text-stat-lg\" },\r\n xl: { value: \"text-stat-xl\" },\r\n },\r\n surface: {\r\n card: {\r\n root: \"rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm\",\r\n },\r\n plain: { root: \"p-pad-3xl\" },\r\n },\r\n tone: {\r\n brand: { iconBox: \"bg-bg-brand-subtle text-fg-brand\" },\r\n success: { iconBox: \"bg-bg-success-muted text-fg-success\" },\r\n warning: { iconBox: \"bg-bg-warning-muted text-fg-warning\" },\r\n info: { iconBox: \"bg-bg-info-muted text-fg-info\" },\r\n danger: { iconBox: \"bg-bg-danger-muted text-fg-danger\" },\r\n neutral: { iconBox: \"bg-bg-muted text-fg-muted\" },\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n surface: \"card\",\r\n tone: \"neutral\",\r\n },\r\n});\r\n\r\nexport const kpiGroup = tv({\r\n base: \"grid w-full\",\r\n variants: {\r\n columns: {\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\r\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\r\n 6: \"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6\",\r\n },\r\n divided: {\r\n // 1 card único com divisórias (linha no mobile, coluna no sm+)\r\n true: \"overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x\",\r\n false: \"gap-gp-2xl\",\r\n },\r\n },\r\n defaultVariants: {\r\n columns: 4,\r\n divided: false,\r\n },\r\n});\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpiGroup } from \"./kpi.styles\";\r\nimport type { KpiGroupProps } from \"./kpi.types\";\r\n\r\n/** Superfície herdada pelos `Kpi` filhos (card normal vs plain dentro de divided). */\r\nexport const KpiSurfaceContext = createContext<\"card\" | \"plain\">(\"card\");\r\n\r\n/**\r\n * KpiGroup — layout de composição pros `Kpi`. `columns` (responsivo) e\r\n * `divided` (vira 1 card único com divisórias entre os KPIs).\r\n */\r\nexport function KpiGroup({\r\n columns = 4,\r\n divided = false,\r\n children,\r\n className,\r\n}: KpiGroupProps) {\r\n return (\r\n <KpiSurfaceContext.Provider value={divided ? \"plain\" : \"card\"}>\r\n <div className={cn(kpiGroup({ columns, divided }), className)}>\r\n {children}\r\n </div>\r\n </KpiSurfaceContext.Provider>\r\n );\r\n}\r\n\r\nKpiGroup.displayName = \"KpiGroup\";\r\n","\"use client\";\r\n\r\nimport { useContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpi } from \"./kpi.styles\";\r\nimport { KpiSurfaceContext } from \"./kpi-group\";\r\nimport type { KpiProps } from \"./kpi.types\";\r\n\r\n/**\r\n * Kpi — card de KPI composável: header (label + ícone por tone), valor +\r\n * delta, hint, slot livre (sparkline/chart) e footnote. Use dentro de\r\n * `KpiGroup` pra rows/grids; dentro de `KpiGroup divided` ele vira \"plain\".\r\n */\r\nexport function Kpi({\r\n label,\r\n value,\r\n delta,\r\n hint,\r\n icon,\r\n tone = \"neutral\",\r\n size = \"md\",\r\n footnote,\r\n children,\r\n surface,\r\n className,\r\n}: KpiProps) {\r\n const inherited = useContext(KpiSurfaceContext);\r\n const s = kpi({ size, surface: surface ?? inherited, tone });\r\n\r\n return (\r\n <article className={cn(s.root(), className)}>\r\n <header className={s.header()}>\r\n <h3 className={s.label()}>{label}</h3>\r\n {icon && (\r\n <span className={s.iconBox()} aria-hidden>\r\n {icon}\r\n </span>\r\n )}\r\n </header>\r\n <div className={s.main()}>\r\n <div className={s.valueRow()}>\r\n <span className={s.value()}>{value}</span>\r\n {delta}\r\n </div>\r\n {hint && <span className={s.hint()}>{hint}</span>}\r\n </div>\r\n {children && <div className={s.chart()}>{children}</div>}\r\n {footnote && <div className={s.footnote()}>{footnote}</div>}\r\n </article>\r\n );\r\n}\r\n\r\nKpi.displayName = \"Kpi\";\r\n","\"use client\";\r\n\r\nimport { TrendingUp } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Chip } from \"@/components/ui/Chip\";\r\nimport type { KpiDeltaProps } from \"./kpi.types\";\r\n\r\n/**\r\n * KpiDelta — pílula de variação (sobre o Chip). Tom semântico explícito\r\n * (success/danger/neutral) + seta opcional. O tom é decisão do consumidor —\r\n * \"subir\" nem sempre é positivo (ex.: tempo de espera).\r\n *\r\n * `signed` deriva tom+seta do sinal do `value` (\"-\" → danger/down; senão\r\n * success/up). `tone`/`direction` explícitos sempre vencem.\r\n */\r\nexport function KpiDelta({\r\n value,\r\n tone,\r\n direction,\r\n signed = false,\r\n className,\r\n}: KpiDeltaProps) {\r\n const isNegative =\r\n signed && typeof value === \"string\" && value.trim().startsWith(\"-\");\r\n const resolvedTone = tone ?? (signed ? (isNegative ? \"danger\" : \"success\") : \"success\");\r\n const resolvedDirection = direction ?? (signed ? (isNegative ? \"down\" : \"up\") : undefined);\r\n\r\n return (\r\n <Chip\r\n color={resolvedTone}\r\n variant=\"soft\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n className={className}\r\n >\r\n {resolvedDirection && (\r\n <TrendingUp\r\n className={cn(\"size-[12px]\", resolvedDirection === \"down\" && \"rotate-180\")}\r\n aria-hidden\r\n />\r\n )}\r\n {value}\r\n </Chip>\r\n );\r\n}\r\n\r\nKpiDelta.displayName = \"KpiDelta\";\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kpi-delta-B_1xjDu_.mjs","sources":["../../src/components/ui/Kpi/kpi.styles.ts","../../src/components/ui/Kpi/kpi-group.tsx","../../src/components/ui/Kpi/kpi.tsx","../../src/components/ui/Kpi/kpi-delta.tsx"],"sourcesContent":["import { tv } from \"@/utils/tv\";\r\n\r\n/* ══════════════════════════════════════════════════════════════════════════\r\n Kpi — estilos (tv). 100% sobre tokens do DS, theme-aware.\r\n ══════════════════════════════════════════════════════════════════════════ */\r\n\r\nexport const kpi = tv({\r\n slots: {\r\n root: \"flex flex-col gap-gp-lg\",\r\n header: \"flex items-start justify-between gap-gp-md\",\r\n label: \"m-0 text-body-md font-semibold text-fg-default\",\r\n iconBox:\r\n \"grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md\",\r\n main: \"flex flex-col gap-gp-xs\",\r\n valueRow: \"flex flex-wrap items-center gap-gp-md\",\r\n value:\r\n \"leading-none text-fg-default [font-variant-numeric:tabular-nums]\",\r\n hint: \"text-caption-sm text-fg-subtle\",\r\n chart: \"mt-gp-xs\",\r\n footnote:\r\n \"mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted\",\r\n },\r\n variants: {\r\n // Tamanho do valor de destaque — presets `stat-*` (número de métrica).\r\n // Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight\r\n // vêm do preset + slot; pareado com tabular-nums.\r\n size: {\r\n sm: { value: \"text-stat-sm\" },\r\n md: { value: \"text-stat-md\" },\r\n lg: { value: \"text-stat-lg\" },\r\n xl: { value: \"text-stat-xl\" },\r\n },\r\n surface: {\r\n card: {\r\n root: \"rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm\",\r\n },\r\n plain: { root: \"p-pad-3xl\" },\r\n },\r\n tone: {\r\n brand: { iconBox: \"bg-bg-brand-subtle text-fg-brand\" },\r\n success: { iconBox: \"bg-bg-success-muted text-fg-success\" },\r\n warning: { iconBox: \"bg-bg-warning-muted text-fg-warning\" },\r\n info: { iconBox: \"bg-bg-info-muted text-fg-info\" },\r\n danger: { iconBox: \"bg-bg-danger-muted text-fg-danger\" },\r\n neutral: { iconBox: \"bg-bg-muted text-fg-muted\" },\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n surface: \"card\",\r\n tone: \"neutral\",\r\n },\r\n});\r\n\r\nexport const kpiGroup = tv({\r\n base: \"grid w-full\",\r\n variants: {\r\n columns: {\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\r\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\r\n 6: \"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6\",\r\n },\r\n divided: {\r\n // 1 card único com divisórias (linha no mobile, coluna no sm+)\r\n true: \"overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x\",\r\n false: \"gap-gp-2xl\",\r\n },\r\n },\r\n defaultVariants: {\r\n columns: 4,\r\n divided: false,\r\n },\r\n});\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpiGroup } from \"./kpi.styles\";\r\nimport type { KpiGroupProps } from \"./kpi.types\";\r\n\r\n/** Superfície herdada pelos `Kpi` filhos (card normal vs plain dentro de divided). */\r\nexport const KpiSurfaceContext = createContext<\"card\" | \"plain\">(\"card\");\r\n\r\n/**\r\n * KpiGroup — layout de composição pros `Kpi`. `columns` (responsivo) e\r\n * `divided` (vira 1 card único com divisórias entre os KPIs).\r\n */\r\nexport function KpiGroup({\r\n columns = 4,\r\n divided = false,\r\n children,\r\n className,\r\n}: KpiGroupProps) {\r\n return (\r\n <KpiSurfaceContext.Provider value={divided ? \"plain\" : \"card\"}>\r\n <div className={cn(kpiGroup({ columns, divided }), className)}>\r\n {children}\r\n </div>\r\n </KpiSurfaceContext.Provider>\r\n );\r\n}\r\n\r\nKpiGroup.displayName = \"KpiGroup\";\r\n","\"use client\";\r\n\r\nimport { useContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpi } from \"./kpi.styles\";\r\nimport { KpiSurfaceContext } from \"./kpi-group\";\r\nimport type { KpiProps } from \"./kpi.types\";\r\n\r\n/**\r\n * Kpi — card de KPI composável: header (label + ícone por tone), valor +\r\n * delta, hint, slot livre (sparkline/chart) e footnote. Use dentro de\r\n * `KpiGroup` pra rows/grids; dentro de `KpiGroup divided` ele vira \"plain\".\r\n */\r\nexport function Kpi({\r\n label,\r\n value,\r\n delta,\r\n hint,\r\n icon,\r\n tone = \"neutral\",\r\n size = \"md\",\r\n footnote,\r\n children,\r\n surface,\r\n className,\r\n}: KpiProps) {\r\n const inherited = useContext(KpiSurfaceContext);\r\n const s = kpi({ size, surface: surface ?? inherited, tone });\r\n\r\n return (\r\n <article className={cn(s.root(), className)}>\r\n <header className={s.header()}>\r\n <h3 className={s.label()}>{label}</h3>\r\n {icon && (\r\n <span className={s.iconBox()} aria-hidden>\r\n {icon}\r\n </span>\r\n )}\r\n </header>\r\n <div className={s.main()}>\r\n <div className={s.valueRow()}>\r\n <span className={s.value()}>{value}</span>\r\n {delta}\r\n </div>\r\n {hint && <span className={s.hint()}>{hint}</span>}\r\n </div>\r\n {children && <div className={s.chart()}>{children}</div>}\r\n {footnote && <div className={s.footnote()}>{footnote}</div>}\r\n </article>\r\n );\r\n}\r\n\r\nKpi.displayName = \"Kpi\";\r\n","\"use client\";\r\n\r\nimport { TrendingUp } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Chip } from \"@/components/ui/Chip\";\r\nimport type { KpiDeltaProps } from \"./kpi.types\";\r\n\r\n/**\r\n * KpiDelta — pílula de variação (sobre o Chip). Tom semântico explícito\r\n * (success/danger/neutral) + seta opcional. O tom é decisão do consumidor —\r\n * \"subir\" nem sempre é positivo (ex.: tempo de espera).\r\n *\r\n * `signed` deriva tom+seta do sinal do `value` (\"-\" → danger/down; senão\r\n * success/up). `tone`/`direction` explícitos sempre vencem.\r\n */\r\nexport function KpiDelta({\r\n value,\r\n tone,\r\n direction,\r\n signed = false,\r\n className,\r\n}: KpiDeltaProps) {\r\n const isNegative =\r\n signed && typeof value === \"string\" && value.trim().startsWith(\"-\");\r\n const resolvedTone = tone ?? (signed ? (isNegative ? \"danger\" : \"success\") : \"success\");\r\n const resolvedDirection = direction ?? (signed ? (isNegative ? \"down\" : \"up\") : undefined);\r\n\r\n return (\r\n <Chip\r\n color={resolvedTone}\r\n variant=\"soft\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n className={className}\r\n >\r\n {resolvedDirection && (\r\n <TrendingUp\r\n className={cn(\"size-[12px]\", resolvedDirection === \"down\" && \"rotate-180\")}\r\n aria-hidden\r\n />\r\n )}\r\n {value}\r\n </Chip>\r\n );\r\n}\r\n\r\nKpiDelta.displayName = \"KpiDelta\";\r\n"],"names":[],"mappings":";;;;;AAMO,MAAM,MAAM,GAAG;AAAA,EACpB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OACE;AAAA,IACF,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UACE;AAAA,EAAA;AAAA,EAEJ,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM;AAAA,MACJ,IAAI,EAAE,OAAO,eAAA;AAAA,MACb,IAAI,EAAE,OAAO,eAAA;AAAA,MACb,IAAI,EAAE,OAAO,eAAA;AAAA,MACb,IAAI,EAAE,OAAO,eAAA;AAAA,IAAe;AAAA,IAE9B,SAAS;AAAA,MACP,MAAM;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,MAER,OAAO,EAAE,MAAM,YAAA;AAAA,IAAY;AAAA,IAE7B,MAAM;AAAA,MACJ,OAAO,EAAE,SAAS,mCAAA;AAAA,MAClB,SAAS,EAAE,SAAS,sCAAA;AAAA,MACpB,SAAS,EAAE,SAAS,sCAAA;AAAA,MACpB,MAAM,EAAE,SAAS,gCAAA;AAAA,MACjB,QAAQ,EAAE,SAAS,oCAAA;AAAA,MACnB,SAAS,EAAE,SAAS,4BAAA;AAAA,IAA4B;AAAA,EAClD;AAAA,EAEF,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAEV,CAAC;AAEM,MAAM,WAAW,GAAG;AAAA,EACzB,MAAM;AAAA,EACN,UAAU;AAAA,IACR,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,IAEL,SAAS;AAAA;AAAA,MAEP,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,CAAC;AClEM,MAAM,oBAAoB,cAAgC,MAAM;AAMhE,SAAS,SAAS;AAAA,EACvB,UAAU;AAAA,EACV,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAkB;AAChB,SACE,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,UAAU,UAAU,QACrD,UAAA,oBAAC,OAAA,EAAI,WAAW,GAAG,SAAS,EAAE,SAAS,SAAS,GAAG,SAAS,GACzD,SAAA,CACH,GACF;AAEJ;AAEA,SAAS,cAAc;AChBhB,SAAS,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAa;AACX,QAAM,YAAY,WAAW,iBAAiB;AAC9C,QAAM,IAAI,IAAI,EAAE,MAAM,SAAS,WAAW,WAAW,MAAM;AAE3D,SACE,qBAAC,aAAQ,WAAW,GAAG,EAAE,KAAA,GAAQ,SAAS,GACxC,UAAA;AAAA,IAAA,qBAAC,UAAA,EAAO,WAAW,EAAE,OAAA,GACnB,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAG,WAAW,EAAE,SAAU,UAAA,OAAM;AAAA,MAChC,4BACE,QAAA,EAAK,WAAW,EAAE,QAAA,GAAW,eAAW,MACtC,UAAA,KAAA,CACH;AAAA,IAAA,GAEJ;AAAA,IACA,qBAAC,OAAA,EAAI,WAAW,EAAE,QAChB,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAW,EAAE,SAAA,GAChB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAW,EAAE,SAAU,UAAA,OAAM;AAAA,QAClC;AAAA,MAAA,GACH;AAAA,MACC,QAAQ,oBAAC,QAAA,EAAK,WAAW,EAAE,KAAA,GAAS,UAAA,KAAA,CAAK;AAAA,IAAA,GAC5C;AAAA,IACC,YAAY,oBAAC,OAAA,EAAI,WAAW,EAAE,MAAA,GAAU,UAAS;AAAA,IACjD,YAAY,oBAAC,OAAA,EAAI,WAAW,EAAE,SAAA,GAAa,UAAA,SAAA,CAAS;AAAA,EAAA,GACvD;AAEJ;AAEA,IAAI,cAAc;ACrCX,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAAkB;AAChB,QAAM,aACJ,UAAU,OAAO,UAAU,YAAY,MAAM,KAAA,EAAO,WAAW,GAAG;AACpE,QAAM,eAAe,SAAS,SAAU,aAAa,WAAW,YAAa;AAC7E,QAAM,oBAAoB,cAAc,SAAU,aAAa,SAAS,OAAQ;AAEhF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN;AAAA,MAEC,UAAA;AAAA,QAAA,qBACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAG,eAAe,sBAAsB,UAAU,YAAY;AAAA,YACzE,eAAW;AAAA,UAAA;AAAA,QAAA;AAAA,QAGd;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,cAAc;"}
@@ -3,7 +3,7 @@ const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
4
  const avatar = require("./avatar-eM5txRFZ.cjs");
5
5
  const lucideReact = require("lucide-react");
6
- const useTheme = require("./useTheme-3iZAognE.cjs");
6
+ const useTheme = require("./useTheme-C9Y6vxTf.cjs");
7
7
  const kpi = avatar.tv({
8
8
  slots: {
9
9
  root: "flex flex-col gap-gp-lg",
@@ -146,4 +146,4 @@ KpiDelta.displayName = "KpiDelta";
146
146
  exports.Kpi = Kpi;
147
147
  exports.KpiDelta = KpiDelta;
148
148
  exports.KpiGroup = KpiGroup;
149
- //# sourceMappingURL=kpi-delta-DAfakvFp.cjs.map
149
+ //# sourceMappingURL=kpi-delta-CXGg2nBx.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-delta-DAfakvFp.cjs","sources":["../../src/components/ui/Kpi/kpi.styles.ts","../../src/components/ui/Kpi/kpi-group.tsx","../../src/components/ui/Kpi/kpi.tsx","../../src/components/ui/Kpi/kpi-delta.tsx"],"sourcesContent":["import { tv } from \"@/utils/tv\";\r\n\r\n/* ══════════════════════════════════════════════════════════════════════════\r\n Kpi — estilos (tv). 100% sobre tokens do DS, theme-aware.\r\n ══════════════════════════════════════════════════════════════════════════ */\r\n\r\nexport const kpi = tv({\r\n slots: {\r\n root: \"flex flex-col gap-gp-lg\",\r\n header: \"flex items-start justify-between gap-gp-md\",\r\n label: \"m-0 text-body-md font-semibold text-fg-default\",\r\n iconBox:\r\n \"grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md\",\r\n main: \"flex flex-col gap-gp-xs\",\r\n valueRow: \"flex flex-wrap items-center gap-gp-md\",\r\n value:\r\n \"leading-none text-fg-default [font-variant-numeric:tabular-nums]\",\r\n hint: \"text-caption-sm text-fg-subtle\",\r\n chart: \"mt-gp-xs\",\r\n footnote:\r\n \"mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted\",\r\n },\r\n variants: {\r\n // Tamanho do valor de destaque — presets `stat-*` (número de métrica).\r\n // Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight\r\n // vêm do preset + slot; pareado com tabular-nums.\r\n size: {\r\n sm: { value: \"text-stat-sm\" },\r\n md: { value: \"text-stat-md\" },\r\n lg: { value: \"text-stat-lg\" },\r\n xl: { value: \"text-stat-xl\" },\r\n },\r\n surface: {\r\n card: {\r\n root: \"rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm\",\r\n },\r\n plain: { root: \"p-pad-3xl\" },\r\n },\r\n tone: {\r\n brand: { iconBox: \"bg-bg-brand-subtle text-fg-brand\" },\r\n success: { iconBox: \"bg-bg-success-muted text-fg-success\" },\r\n warning: { iconBox: \"bg-bg-warning-muted text-fg-warning\" },\r\n info: { iconBox: \"bg-bg-info-muted text-fg-info\" },\r\n danger: { iconBox: \"bg-bg-danger-muted text-fg-danger\" },\r\n neutral: { iconBox: \"bg-bg-muted text-fg-muted\" },\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n surface: \"card\",\r\n tone: \"neutral\",\r\n },\r\n});\r\n\r\nexport const kpiGroup = tv({\r\n base: \"grid w-full\",\r\n variants: {\r\n columns: {\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\r\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\r\n 6: \"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6\",\r\n },\r\n divided: {\r\n // 1 card único com divisórias (linha no mobile, coluna no sm+)\r\n true: \"overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x\",\r\n false: \"gap-gp-2xl\",\r\n },\r\n },\r\n defaultVariants: {\r\n columns: 4,\r\n divided: false,\r\n },\r\n});\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpiGroup } from \"./kpi.styles\";\r\nimport type { KpiGroupProps } from \"./kpi.types\";\r\n\r\n/** Superfície herdada pelos `Kpi` filhos (card normal vs plain dentro de divided). */\r\nexport const KpiSurfaceContext = createContext<\"card\" | \"plain\">(\"card\");\r\n\r\n/**\r\n * KpiGroup — layout de composição pros `Kpi`. `columns` (responsivo) e\r\n * `divided` (vira 1 card único com divisórias entre os KPIs).\r\n */\r\nexport function KpiGroup({\r\n columns = 4,\r\n divided = false,\r\n children,\r\n className,\r\n}: KpiGroupProps) {\r\n return (\r\n <KpiSurfaceContext.Provider value={divided ? \"plain\" : \"card\"}>\r\n <div className={cn(kpiGroup({ columns, divided }), className)}>\r\n {children}\r\n </div>\r\n </KpiSurfaceContext.Provider>\r\n );\r\n}\r\n\r\nKpiGroup.displayName = \"KpiGroup\";\r\n","\"use client\";\r\n\r\nimport { useContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpi } from \"./kpi.styles\";\r\nimport { KpiSurfaceContext } from \"./kpi-group\";\r\nimport type { KpiProps } from \"./kpi.types\";\r\n\r\n/**\r\n * Kpi — card de KPI composável: header (label + ícone por tone), valor +\r\n * delta, hint, slot livre (sparkline/chart) e footnote. Use dentro de\r\n * `KpiGroup` pra rows/grids; dentro de `KpiGroup divided` ele vira \"plain\".\r\n */\r\nexport function Kpi({\r\n label,\r\n value,\r\n delta,\r\n hint,\r\n icon,\r\n tone = \"neutral\",\r\n size = \"md\",\r\n footnote,\r\n children,\r\n surface,\r\n className,\r\n}: KpiProps) {\r\n const inherited = useContext(KpiSurfaceContext);\r\n const s = kpi({ size, surface: surface ?? inherited, tone });\r\n\r\n return (\r\n <article className={cn(s.root(), className)}>\r\n <header className={s.header()}>\r\n <h3 className={s.label()}>{label}</h3>\r\n {icon && (\r\n <span className={s.iconBox()} aria-hidden>\r\n {icon}\r\n </span>\r\n )}\r\n </header>\r\n <div className={s.main()}>\r\n <div className={s.valueRow()}>\r\n <span className={s.value()}>{value}</span>\r\n {delta}\r\n </div>\r\n {hint && <span className={s.hint()}>{hint}</span>}\r\n </div>\r\n {children && <div className={s.chart()}>{children}</div>}\r\n {footnote && <div className={s.footnote()}>{footnote}</div>}\r\n </article>\r\n );\r\n}\r\n\r\nKpi.displayName = \"Kpi\";\r\n","\"use client\";\r\n\r\nimport { TrendingUp } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Chip } from \"@/components/ui/Chip\";\r\nimport type { KpiDeltaProps } from \"./kpi.types\";\r\n\r\n/**\r\n * KpiDelta — pílula de variação (sobre o Chip). Tom semântico explícito\r\n * (success/danger/neutral) + seta opcional. O tom é decisão do consumidor —\r\n * \"subir\" nem sempre é positivo (ex.: tempo de espera).\r\n *\r\n * `signed` deriva tom+seta do sinal do `value` (\"-\" → danger/down; senão\r\n * success/up). `tone`/`direction` explícitos sempre vencem.\r\n */\r\nexport function KpiDelta({\r\n value,\r\n tone,\r\n direction,\r\n signed = false,\r\n className,\r\n}: KpiDeltaProps) {\r\n const isNegative =\r\n signed && typeof value === \"string\" && value.trim().startsWith(\"-\");\r\n const resolvedTone = tone ?? (signed ? (isNegative ? \"danger\" : \"success\") : \"success\");\r\n const resolvedDirection = direction ?? (signed ? (isNegative ? \"down\" : \"up\") : undefined);\r\n\r\n return (\r\n <Chip\r\n color={resolvedTone}\r\n variant=\"soft\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n className={className}\r\n >\r\n {resolvedDirection && (\r\n <TrendingUp\r\n className={cn(\"size-[12px]\", resolvedDirection === \"down\" && \"rotate-180\")}\r\n aria-hidden\r\n />\r\n )}\r\n {value}\r\n </Chip>\r\n );\r\n}\r\n\r\nKpiDelta.displayName = \"KpiDelta\";\r\n"],"names":["tv","createContext","jsx","cn","useContext","jsxs","Chip","TrendingUp"],"mappings":"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"}
1
+ {"version":3,"file":"kpi-delta-CXGg2nBx.cjs","sources":["../../src/components/ui/Kpi/kpi.styles.ts","../../src/components/ui/Kpi/kpi-group.tsx","../../src/components/ui/Kpi/kpi.tsx","../../src/components/ui/Kpi/kpi-delta.tsx"],"sourcesContent":["import { tv } from \"@/utils/tv\";\r\n\r\n/* ══════════════════════════════════════════════════════════════════════════\r\n Kpi — estilos (tv). 100% sobre tokens do DS, theme-aware.\r\n ══════════════════════════════════════════════════════════════════════════ */\r\n\r\nexport const kpi = tv({\r\n slots: {\r\n root: \"flex flex-col gap-gp-lg\",\r\n header: \"flex items-start justify-between gap-gp-md\",\r\n label: \"m-0 text-body-md font-semibold text-fg-default\",\r\n iconBox:\r\n \"grid size-form-lg shrink-0 place-items-center rounded-radius-lg [&>svg]:size-icon-md\",\r\n main: \"flex flex-col gap-gp-xs\",\r\n valueRow: \"flex flex-wrap items-center gap-gp-md\",\r\n value:\r\n \"leading-none text-fg-default [font-variant-numeric:tabular-nums]\",\r\n hint: \"text-caption-sm text-fg-subtle\",\r\n chart: \"mt-gp-xs\",\r\n footnote:\r\n \"mt-pad-md border-t border-border-subtle pt-pad-lg text-caption-md text-fg-muted\",\r\n },\r\n variants: {\r\n // Tamanho do valor de destaque — presets `stat-*` (número de métrica).\r\n // Default `md` (24px) = idêntico ao antigo `body-2xl`. Weight/leading tight\r\n // vêm do preset + slot; pareado com tabular-nums.\r\n size: {\r\n sm: { value: \"text-stat-sm\" },\r\n md: { value: \"text-stat-md\" },\r\n lg: { value: \"text-stat-lg\" },\r\n xl: { value: \"text-stat-xl\" },\r\n },\r\n surface: {\r\n card: {\r\n root: \"rounded-radius-xl border border-border-subtle bg-bg-surface p-pad-3xl shadow-sh-sm\",\r\n },\r\n plain: { root: \"p-pad-3xl\" },\r\n },\r\n tone: {\r\n brand: { iconBox: \"bg-bg-brand-subtle text-fg-brand\" },\r\n success: { iconBox: \"bg-bg-success-muted text-fg-success\" },\r\n warning: { iconBox: \"bg-bg-warning-muted text-fg-warning\" },\r\n info: { iconBox: \"bg-bg-info-muted text-fg-info\" },\r\n danger: { iconBox: \"bg-bg-danger-muted text-fg-danger\" },\r\n neutral: { iconBox: \"bg-bg-muted text-fg-muted\" },\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n surface: \"card\",\r\n tone: \"neutral\",\r\n },\r\n});\r\n\r\nexport const kpiGroup = tv({\r\n base: \"grid w-full\",\r\n variants: {\r\n columns: {\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\r\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\r\n 6: \"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6\",\r\n },\r\n divided: {\r\n // 1 card único com divisórias (linha no mobile, coluna no sm+)\r\n true: \"overflow-hidden rounded-radius-xl border border-border-subtle bg-bg-surface shadow-sh-sm divide-y divide-border-subtle sm:divide-y-0 sm:divide-x\",\r\n false: \"gap-gp-2xl\",\r\n },\r\n },\r\n defaultVariants: {\r\n columns: 4,\r\n divided: false,\r\n },\r\n});\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpiGroup } from \"./kpi.styles\";\r\nimport type { KpiGroupProps } from \"./kpi.types\";\r\n\r\n/** Superfície herdada pelos `Kpi` filhos (card normal vs plain dentro de divided). */\r\nexport const KpiSurfaceContext = createContext<\"card\" | \"plain\">(\"card\");\r\n\r\n/**\r\n * KpiGroup — layout de composição pros `Kpi`. `columns` (responsivo) e\r\n * `divided` (vira 1 card único com divisórias entre os KPIs).\r\n */\r\nexport function KpiGroup({\r\n columns = 4,\r\n divided = false,\r\n children,\r\n className,\r\n}: KpiGroupProps) {\r\n return (\r\n <KpiSurfaceContext.Provider value={divided ? \"plain\" : \"card\"}>\r\n <div className={cn(kpiGroup({ columns, divided }), className)}>\r\n {children}\r\n </div>\r\n </KpiSurfaceContext.Provider>\r\n );\r\n}\r\n\r\nKpiGroup.displayName = \"KpiGroup\";\r\n","\"use client\";\r\n\r\nimport { useContext } from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { kpi } from \"./kpi.styles\";\r\nimport { KpiSurfaceContext } from \"./kpi-group\";\r\nimport type { KpiProps } from \"./kpi.types\";\r\n\r\n/**\r\n * Kpi — card de KPI composável: header (label + ícone por tone), valor +\r\n * delta, hint, slot livre (sparkline/chart) e footnote. Use dentro de\r\n * `KpiGroup` pra rows/grids; dentro de `KpiGroup divided` ele vira \"plain\".\r\n */\r\nexport function Kpi({\r\n label,\r\n value,\r\n delta,\r\n hint,\r\n icon,\r\n tone = \"neutral\",\r\n size = \"md\",\r\n footnote,\r\n children,\r\n surface,\r\n className,\r\n}: KpiProps) {\r\n const inherited = useContext(KpiSurfaceContext);\r\n const s = kpi({ size, surface: surface ?? inherited, tone });\r\n\r\n return (\r\n <article className={cn(s.root(), className)}>\r\n <header className={s.header()}>\r\n <h3 className={s.label()}>{label}</h3>\r\n {icon && (\r\n <span className={s.iconBox()} aria-hidden>\r\n {icon}\r\n </span>\r\n )}\r\n </header>\r\n <div className={s.main()}>\r\n <div className={s.valueRow()}>\r\n <span className={s.value()}>{value}</span>\r\n {delta}\r\n </div>\r\n {hint && <span className={s.hint()}>{hint}</span>}\r\n </div>\r\n {children && <div className={s.chart()}>{children}</div>}\r\n {footnote && <div className={s.footnote()}>{footnote}</div>}\r\n </article>\r\n );\r\n}\r\n\r\nKpi.displayName = \"Kpi\";\r\n","\"use client\";\r\n\r\nimport { TrendingUp } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Chip } from \"@/components/ui/Chip\";\r\nimport type { KpiDeltaProps } from \"./kpi.types\";\r\n\r\n/**\r\n * KpiDelta — pílula de variação (sobre o Chip). Tom semântico explícito\r\n * (success/danger/neutral) + seta opcional. O tom é decisão do consumidor —\r\n * \"subir\" nem sempre é positivo (ex.: tempo de espera).\r\n *\r\n * `signed` deriva tom+seta do sinal do `value` (\"-\" → danger/down; senão\r\n * success/up). `tone`/`direction` explícitos sempre vencem.\r\n */\r\nexport function KpiDelta({\r\n value,\r\n tone,\r\n direction,\r\n signed = false,\r\n className,\r\n}: KpiDeltaProps) {\r\n const isNegative =\r\n signed && typeof value === \"string\" && value.trim().startsWith(\"-\");\r\n const resolvedTone = tone ?? (signed ? (isNegative ? \"danger\" : \"success\") : \"success\");\r\n const resolvedDirection = direction ?? (signed ? (isNegative ? \"down\" : \"up\") : undefined);\r\n\r\n return (\r\n <Chip\r\n color={resolvedTone}\r\n variant=\"soft\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n className={className}\r\n >\r\n {resolvedDirection && (\r\n <TrendingUp\r\n className={cn(\"size-[12px]\", resolvedDirection === \"down\" && \"rotate-180\")}\r\n aria-hidden\r\n />\r\n )}\r\n {value}\r\n </Chip>\r\n );\r\n}\r\n\r\nKpiDelta.displayName = \"KpiDelta\";\r\n"],"names":["tv","createContext","jsx","cn","useContext","jsxs","Chip","TrendingUp"],"mappings":"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"}
@@ -10,7 +10,7 @@ const sortable = require("@dnd-kit/sortable");
10
10
  const reactVirtual = require("@tanstack/react-virtual");
11
11
  const avatar = require("./avatar-eM5txRFZ.cjs");
12
12
  const lucideReact = require("lucide-react");
13
- const useTheme = require("./useTheme-3iZAognE.cjs");
13
+ const useTheme = require("./useTheme-C9Y6vxTf.cjs");
14
14
  const input = require("./input-az2SuVXQ.cjs");
15
15
  const reactDom = require("react-dom");
16
16
  const dnd = require("@hello-pangea/dnd");
@@ -4712,14 +4712,24 @@ const NumberColumnType = {
4712
4712
  defaultSortable: true,
4713
4713
  defaultIcon: lucideReact.Hash
4714
4714
  };
4715
- const ptBrShort$1 = new Intl.DateTimeFormat("pt-BR", {
4715
+ const ptBrData = new Intl.DateTimeFormat("pt-BR", {
4716
+ day: "2-digit",
4717
+ month: "2-digit",
4718
+ year: "numeric"
4719
+ });
4720
+ const ptBrCompacto = new Intl.DateTimeFormat("pt-BR", {
4716
4721
  day: "2-digit",
4717
4722
  month: "short"
4718
4723
  });
4724
+ function formatData(v) {
4725
+ const d = toDate(v);
4726
+ if (!d) return "";
4727
+ return ptBrData.format(d);
4728
+ }
4719
4729
  function formatShort$1(v) {
4720
4730
  const d = toDate(v);
4721
4731
  if (!d) return "";
4722
- return ptBrShort$1.format(d).replace(".", "");
4732
+ return ptBrCompacto.format(d).replace(".", "");
4723
4733
  }
4724
4734
  const DateColumnType = {
4725
4735
  type: "date",
@@ -4845,8 +4855,16 @@ const DateColumnType = {
4845
4855
  return null;
4846
4856
  },
4847
4857
  /* G.2 slots */
4848
- renderCell: ({ value }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-muted tabular-nums", children: formatShort$1(value) }),
4849
- formatValue: (v) => formatShort$1(v),
4858
+ // `column.valueFormatter` vence o formato do tipo é o escape hatch pra quem quer
4859
+ // outro formato (mês escrito, ISO, relativo) sem escrever `render` inteiro.
4860
+ //
4861
+ // Isso é o que o próprio `CellRenderProps` já prometia: o campo `column` existe ali
4862
+ // com o comentário "campos auxiliares como valueFormatter", e o JSDoc de `formatValue`
4863
+ // diz "aplicado quando consumer não passa `column.valueFormatter`". Nenhum column-type
4864
+ // lia esse campo, então na prática `valueFormatter` num `type: "date"` mudava export,
4865
+ // totalizador e clipboard e **não mudava a célula** — a doc afirmava o contrário.
4866
+ renderCell: ({ value, column: column2 }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-muted tabular-nums", children: column2?.valueFormatter ? column2.valueFormatter(value) : formatData(value) }),
4867
+ formatValue: (v) => formatData(v),
4850
4868
  defaultAlign: "left",
4851
4869
  defaultWidth: 130,
4852
4870
  defaultSortable: true,
@@ -5742,9 +5760,10 @@ const ptBrShort = new Intl.DateTimeFormat("pt-BR", {
5742
5760
  day: "2-digit",
5743
5761
  month: "short"
5744
5762
  });
5745
- const ptBrShortTime = new Intl.DateTimeFormat("pt-BR", {
5763
+ const ptBrDataHora = new Intl.DateTimeFormat("pt-BR", {
5746
5764
  day: "2-digit",
5747
- month: "short",
5765
+ month: "2-digit",
5766
+ year: "numeric",
5748
5767
  hour: "2-digit",
5749
5768
  minute: "2-digit"
5750
5769
  });
@@ -5753,10 +5772,10 @@ function formatShort(v) {
5753
5772
  if (!d) return "";
5754
5773
  return ptBrShort.format(d).replace(".", "");
5755
5774
  }
5756
- function formatShortTime(v) {
5775
+ function formatDataHora(v) {
5757
5776
  const d = toDate(v);
5758
5777
  if (!d) return "";
5759
- return ptBrShortTime.format(d).replace(".", "");
5778
+ return ptBrDataHora.format(d).replace(",", "");
5760
5779
  }
5761
5780
  const DatetimeColumnType = {
5762
5781
  type: "datetime",
@@ -5869,8 +5888,9 @@ const DatetimeColumnType = {
5869
5888
  if (operator === "lte") return cellDay <= filterDay;
5870
5889
  return null;
5871
5890
  },
5872
- renderCell: ({ value }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-muted tabular-nums", children: formatShortTime(value) }),
5873
- formatValue: (v) => formatShortTime(v),
5891
+ // `column.valueFormatter` vence o formato do tipo mesmo escape hatch do `date`.
5892
+ renderCell: ({ value, column: column2 }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-muted tabular-nums", children: column2?.valueFormatter ? column2.valueFormatter(value) : formatDataHora(value) }),
5893
+ formatValue: (v) => formatDataHora(v),
5874
5894
  defaultAlign: "left",
5875
5895
  defaultWidth: 160,
5876
5896
  defaultSortable: true,
@@ -8170,6 +8190,7 @@ function calculateColumnWidths(columns, rows, options) {
8170
8190
  growable = stillGrowable;
8171
8191
  if (consumedThisPass < 0.5) break;
8172
8192
  }
8193
+ const larguraFixa = columns.filter(isFixed).reduce((soma, col) => soma + (widths[String(col.field)] ?? 0), 0);
8173
8194
  let lastFlexField;
8174
8195
  let roundedTotal = 0;
8175
8196
  for (const col of targets) {
@@ -8180,7 +8201,7 @@ function calculateColumnWidths(columns, rows, options) {
8180
8201
  if (!maxed) lastFlexField = f;
8181
8202
  }
8182
8203
  if (lastFlexField !== void 0) {
8183
- const residue = Math.round(containerWidth) - roundedTotal;
8204
+ const residue = Math.round(containerWidth) - larguraFixa - roundedTotal;
8184
8205
  if (residue !== 0) {
8185
8206
  widths[lastFlexField] = Math.max(0, widths[lastFlexField] + residue);
8186
8207
  }
@@ -13016,4 +13037,4 @@ exports.useColumnResize = useColumnResize;
13016
13037
  exports.useColumnWidths = useColumnWidths;
13017
13038
  exports.useDataTableContext = useDataTableContext;
13018
13039
  exports.useFloatingPanelResize = useFloatingPanelResize;
13019
- //# sourceMappingURL=panel-BSyHW2J5.cjs.map
13040
+ //# sourceMappingURL=panel-C3fekbdr.cjs.map