@snksergio/design-system 0.37.0 → 0.37.2
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-lib/chunks/{avatar-YpqQgJnh.cjs → avatar-DSmxOg-W.cjs} +11 -6
- package/dist-lib/chunks/avatar-DSmxOg-W.cjs.map +1 -0
- package/dist-lib/chunks/{avatar-CIHTveDJ.mjs → avatar-c1_uhYC5.mjs} +11 -6
- package/dist-lib/chunks/avatar-c1_uhYC5.mjs.map +1 -0
- package/dist-lib/chunks/{input-CJnonz-G.cjs → input-6P31vUfa.cjs} +2 -2
- package/dist-lib/chunks/{input-CJnonz-G.cjs.map → input-6P31vUfa.cjs.map} +1 -1
- package/dist-lib/chunks/{input-jLoO8t0I.mjs → input-SiP1JWBU.mjs} +2 -2
- package/dist-lib/chunks/{input-jLoO8t0I.mjs.map → input-SiP1JWBU.mjs.map} +1 -1
- package/dist-lib/chunks/{kpi-delta-D0g2YzDy.mjs → kpi-delta-0eogwK3C.mjs} +3 -3
- package/dist-lib/chunks/{kpi-delta-D0g2YzDy.mjs.map → kpi-delta-0eogwK3C.mjs.map} +1 -1
- package/dist-lib/chunks/{kpi-delta-D6cLnCqW.cjs → kpi-delta-Cz6qAe4c.cjs} +3 -3
- package/dist-lib/chunks/{kpi-delta-D6cLnCqW.cjs.map → kpi-delta-Cz6qAe4c.cjs.map} +1 -1
- package/dist-lib/chunks/{page-header-Deb1excS.mjs → page-header-D3hIqlo2.mjs} +2 -2
- package/dist-lib/chunks/{page-header-Deb1excS.mjs.map → page-header-D3hIqlo2.mjs.map} +1 -1
- package/dist-lib/chunks/{page-header-DSTprenz.cjs → page-header-DEa2Lrl1.cjs} +2 -2
- package/dist-lib/chunks/{page-header-DSTprenz.cjs.map → page-header-DEa2Lrl1.cjs.map} +1 -1
- package/dist-lib/chunks/{panel-DLcD8LhW.cjs → panel-DNobvn1Z.cjs} +5 -5
- package/dist-lib/chunks/{panel-DLcD8LhW.cjs.map → panel-DNobvn1Z.cjs.map} +1 -1
- package/dist-lib/chunks/{panel-Cid3m9zb.mjs → panel-NCZKvmDE.mjs} +5 -5
- package/dist-lib/chunks/{panel-Cid3m9zb.mjs.map → panel-NCZKvmDE.mjs.map} +1 -1
- package/dist-lib/chunks/{textarea-Bxl9Voe8.cjs → textarea-BOEpteRb.cjs} +3 -3
- package/dist-lib/chunks/{textarea-Bxl9Voe8.cjs.map → textarea-BOEpteRb.cjs.map} +1 -1
- package/dist-lib/chunks/{textarea-BDJRaL5h.mjs → textarea-C1QmGVPr.mjs} +3 -3
- package/dist-lib/chunks/{textarea-BDJRaL5h.mjs.map → textarea-C1QmGVPr.mjs.map} +1 -1
- package/dist-lib/chunks/{tooltip-vLUyJ0h5.cjs → tooltip-CAZAtBhO.cjs} +8 -8
- package/dist-lib/chunks/tooltip-CAZAtBhO.cjs.map +1 -0
- package/dist-lib/chunks/{tooltip-DGI3hDFM.mjs → tooltip-CO5noC2-.mjs} +8 -8
- package/dist-lib/chunks/tooltip-CO5noC2-.mjs.map +1 -0
- package/dist-lib/chunks/{useTheme-DQ7FaHdv.cjs → useTheme-BeD_2lZN.cjs} +2 -2
- package/dist-lib/chunks/{useTheme-DQ7FaHdv.cjs.map → useTheme-BeD_2lZN.cjs.map} +1 -1
- package/dist-lib/chunks/{useTheme-UrerJ3i-.mjs → useTheme-CYMBVr3I.mjs} +2 -2
- package/dist-lib/chunks/{useTheme-UrerJ3i-.mjs.map → useTheme-CYMBVr3I.mjs.map} +1 -1
- package/dist-lib/index.cjs +8 -8
- package/dist-lib/index.mjs +14 -14
- package/dist-lib/preview/chat.cjs +3 -3
- package/dist-lib/preview/chat.mjs +3 -3
- package/dist-lib/preview/clientes.cjs +6 -6
- package/dist-lib/preview/clientes.mjs +6 -6
- package/dist-lib/preview/dashboard.cjs +4 -4
- package/dist-lib/preview/dashboard.mjs +4 -4
- package/dist-lib/shadcn.cjs +4 -4
- package/dist-lib/shadcn.mjs +5 -5
- package/dist-lib/src/components/shadcn/command.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist-lib/chunks/avatar-CIHTveDJ.mjs.map +0 -1
- package/dist-lib/chunks/avatar-YpqQgJnh.cjs.map +0 -1
- package/dist-lib/chunks/tooltip-DGI3hDFM.mjs.map +0 -1
- package/dist-lib/chunks/tooltip-vLUyJ0h5.cjs.map +0 -1
|
@@ -541,11 +541,16 @@ const Command = React__namespace.forwardRef(({ className, ...props }, ref) => /*
|
|
|
541
541
|
ref,
|
|
542
542
|
className: cn(
|
|
543
543
|
// `bg-popover`/`text-popover-foreground` são vocabulário SHADCN, não do DS —
|
|
544
|
-
// dependem da bridge do `index.css`, que
|
|
545
|
-
// submódulo a
|
|
546
|
-
//
|
|
547
|
-
//
|
|
548
|
-
|
|
544
|
+
// dependem da bridge do `globals.css`/`index.css`, que NÃO viaja pros canais npm
|
|
545
|
+
// e submódulo. Lá a var não existe e a cor cai em `currentColor` (L-039/L-040).
|
|
546
|
+
//
|
|
547
|
+
// ⚠️ O substituto é `bg-bg-surface`, NÃO `bg-bg-dropdown`. A primeira troca (v0.36.0)
|
|
548
|
+
// usou `dropdown` por ser o token da receita de flutuante — mas ele é TRANSLÚCIDO no
|
|
549
|
+
// dark (`canvas` a 70%, pareado com `before:backdrop-blur-2xl`, que este componente
|
|
550
|
+
// não tem), enquanto a bridge resolvia `popover` pra `surface-elevated`, OPACO.
|
|
551
|
+
// Medido: light idêntico nos dois; dark `oklch(0.225 0 0)` vs `oklab(0.205 0 0 / 0.7)`.
|
|
552
|
+
// `bg-bg-surface` reproduz o valor original nos DOIS modos.
|
|
553
|
+
"flex h-full w-full flex-col overflow-hidden p-pad-xl bg-bg-surface text-fg-default",
|
|
549
554
|
className
|
|
550
555
|
),
|
|
551
556
|
...props
|
|
@@ -1193,4 +1198,4 @@ exports.inputGroupInputVariants = inputGroupInputVariants;
|
|
|
1193
1198
|
exports.inputGroupTextareaVariants = inputGroupTextareaVariants;
|
|
1194
1199
|
exports.inputGroupVariants = inputGroupVariants;
|
|
1195
1200
|
exports.tv = tv;
|
|
1196
|
-
//# sourceMappingURL=avatar-
|
|
1201
|
+
//# sourceMappingURL=avatar-DSmxOg-W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-DSmxOg-W.cjs","sources":["../../src/lib/utils.ts","../../src/utils/tv.ts","../../src/components/ui/Button/button.styles.ts","../../src/components/ui/Button/button.tsx","../../src/components/shadcn/dialog.tsx","../../src/components/shadcn/command.tsx","../../src/components/shadcn/popover.tsx","../../src/components/shadcn/input-group.tsx","../../src/components/shadcn/dropdown-menu.tsx","../../src/components/shadcn/avatar.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\r\nimport { extendTailwindMerge } from \"tailwind-merge\";\r\n\r\n/**\r\n * tw-merge configurado pra reconhecer:\r\n *\r\n * 1) Presets tipográficos do iGreen DS como `font-size` (e não text-color).\r\n * Sem isso, `text-title-md` e `text-fg-default` colidem e um é removido.\r\n *\r\n * 2) Prefixos DS (pad-*, sp-*, gp-*, radius-*, sh-*, form-*) como conflitantes\r\n * com utilitários nativos do Tailwind. Sem isso, `p-pad-4xl` + `p-0` no cn()\r\n * deixava AMBOS no className final (24px + 0 = 24px ganhava).\r\n */\r\n\r\n/** Padding/Margin spacing: pad-* (padding contexts), sp-* (geral) */\r\nconst isDsPad = (v: string) => /^(pad|sp)-/.test(v);\r\n/** Gap: gp-* */\r\nconst isDsGap = (v: string) => /^gp-/.test(v);\r\n/** Border-radius: radius-* */\r\nconst isDsRadius = (v: string) => /^radius-/.test(v);\r\n/** Shadow: sh-* */\r\nconst isDsShadow = (v: string) => /^sh-/.test(v);\r\n/** Form heights: form-* (min-h, h, w, size) */\r\nconst isDsForm = (v: string) => /^form-/.test(v);\r\n\r\nconst twMerge = extendTailwindMerge({\r\n extend: {\r\n classGroups: {\r\n \"font-size\": [\r\n {\r\n // Lista 1:1 com tokens/brands/default/semantic/typography.ts.\r\n // Manter sincronizado com src/utils/tv.ts. Ver L-016.\r\n text: [\r\n // Displays (fluid clamp)\r\n \"display-2xl\", \"display-xl\", \"display-lg\", \"display-md\",\r\n // Headings (xs estático, sm-xl fluid clamp)\r\n \"heading-xl\", \"heading-lg\", \"heading-md\", \"heading-sm\", \"heading-xs\",\r\n // Titles (weight 600 default)\r\n \"title-lg\", \"title-md\", \"title-sm\",\r\n // Body (xs/sm = weight 500 interactive; md-2xl = 400 corrido)\r\n \"body-2xl\", \"body-xl\", \"body-lg\", \"body-md\", \"body-sm\", \"body-xs\",\r\n // Captions (weight 400)\r\n \"caption-md\", \"caption-sm\", \"caption-xs\",\r\n // Code (mono regular)\r\n \"code-md\", \"code-sm\",\r\n ],\r\n },\r\n ],\r\n\r\n /* ── Padding ──────────────────────────────────────────────────────── */\r\n p: [{ p: [isDsPad] }],\r\n px: [{ px: [isDsPad] }],\r\n py: [{ py: [isDsPad] }],\r\n pt: [{ pt: [isDsPad] }],\r\n pr: [{ pr: [isDsPad] }],\r\n pb: [{ pb: [isDsPad] }],\r\n pl: [{ pl: [isDsPad] }],\r\n ps: [{ ps: [isDsPad] }],\r\n pe: [{ pe: [isDsPad] }],\r\n\r\n /* ── Margin (usa mesmo sp-*) ──────────────────────────────────────── */\r\n m: [{ m: [isDsPad] }],\r\n mx: [{ mx: [isDsPad] }],\r\n my: [{ my: [isDsPad] }],\r\n mt: [{ mt: [isDsPad] }],\r\n mr: [{ mr: [isDsPad] }],\r\n mb: [{ mb: [isDsPad] }],\r\n ml: [{ ml: [isDsPad] }],\r\n ms: [{ ms: [isDsPad] }],\r\n me: [{ me: [isDsPad] }],\r\n\r\n /* ── Inset / position (top/right/bottom/left) ─────────────────────── */\r\n inset: [{ inset: [isDsPad] }],\r\n \"inset-x\": [{ \"inset-x\": [isDsPad] }],\r\n \"inset-y\": [{ \"inset-y\": [isDsPad] }],\r\n \"top\": [{ top: [isDsPad] }],\r\n \"right\": [{ right: [isDsPad] }],\r\n \"bottom\": [{ bottom: [isDsPad] }],\r\n \"left\": [{ left: [isDsPad] }],\r\n \"start\": [{ start: [isDsPad] }],\r\n \"end\": [{ end: [isDsPad] }],\r\n\r\n /* ── Gap ──────────────────────────────────────────────────────────── */\r\n gap: [{ gap: [isDsGap] }],\r\n \"gap-x\": [{ \"gap-x\": [isDsGap] }],\r\n \"gap-y\": [{ \"gap-y\": [isDsGap] }],\r\n\r\n /* ── Rounded (todas as cantos) ────────────────────────────────────── */\r\n rounded: [{ rounded: [isDsRadius] }],\r\n \"rounded-s\": [{ \"rounded-s\": [isDsRadius] }],\r\n \"rounded-e\": [{ \"rounded-e\": [isDsRadius] }],\r\n \"rounded-t\": [{ \"rounded-t\": [isDsRadius] }],\r\n \"rounded-r\": [{ \"rounded-r\": [isDsRadius] }],\r\n \"rounded-b\": [{ \"rounded-b\": [isDsRadius] }],\r\n \"rounded-l\": [{ \"rounded-l\": [isDsRadius] }],\r\n \"rounded-ss\": [{ \"rounded-ss\": [isDsRadius] }],\r\n \"rounded-se\": [{ \"rounded-se\": [isDsRadius] }],\r\n \"rounded-ee\": [{ \"rounded-ee\": [isDsRadius] }],\r\n \"rounded-es\": [{ \"rounded-es\": [isDsRadius] }],\r\n \"rounded-tl\": [{ \"rounded-tl\": [isDsRadius] }],\r\n \"rounded-tr\": [{ \"rounded-tr\": [isDsRadius] }],\r\n \"rounded-br\": [{ \"rounded-br\": [isDsRadius] }],\r\n \"rounded-bl\": [{ \"rounded-bl\": [isDsRadius] }],\r\n\r\n /* ── Shadow ───────────────────────────────────────────────────────── */\r\n shadow: [{ shadow: [isDsShadow] }],\r\n\r\n /* ── Form sizes (min-h, h, w, size) ───────────────────────────────── */\r\n \"min-h\": [{ \"min-h\": [isDsForm] }],\r\n h: [{ h: [isDsForm] }],\r\n w: [{ w: [isDsForm] }],\r\n size: [{ size: [isDsForm] }],\r\n },\r\n },\r\n});\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","// src/utils/tv.ts\r\n// tv() customizado que ensina o tailwind-merge a reconhecer\r\n// os presets tipográficos do iGreen como font-size, não text-color.\r\nimport { tv as tvBase, type TVConfig } from \"tailwind-variants\";\r\n\r\n// Objeto de config — NÃO é o resultado de extendTailwindMerge()\r\n// TV3 recebe o config diretamente e aplica o merge internamente\r\nconst twMergeConfig = {\r\n extend: {\r\n classGroups: {\r\n \"font-size\": [\r\n {\r\n text: [\r\n // Displays (fluid clamp)\r\n \"display-2xl\", \"display-xl\", \"display-lg\", \"display-md\",\r\n // Headings (xs estático, sm-xl fluid clamp)\r\n \"heading-xl\", \"heading-lg\", \"heading-md\", \"heading-sm\", \"heading-xs\",\r\n // Titles (weight 600 default)\r\n \"title-lg\", \"title-md\", \"title-sm\",\r\n // Body (xs/sm = weight 500 interactive; md-2xl = 400 corrido)\r\n \"body-2xl\", \"body-xl\", \"body-lg\", \"body-md\", \"body-sm\", \"body-xs\",\r\n // Captions (weight 400)\r\n \"caption-md\", \"caption-sm\", \"caption-xs\",\r\n // Stat (número de métrica/KPI — estático, bold, leading tight)\r\n \"stat-xl\", \"stat-lg\", \"stat-md\", \"stat-sm\",\r\n // Code (mono regular)\r\n \"code-md\", \"code-sm\",\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n};\r\n\r\nexport const tv: typeof tvBase = (options, config) =>\r\n tvBase(options, {\r\n ...config,\r\n twMergeConfig,\r\n } as TVConfig);\r\n\r\nexport type { VariantProps } from \"tailwind-variants\";\r\n","import { tv, type VariantProps } from \"@/utils/tv\";\r\n\r\n/**\r\n * Button styles — V3 tokens (alinhado com /design-and-table-v2)\r\n *\r\n * Specs base:\r\n * - font-size 13px (text-body-md font-medium = 0.8125rem / 600)\r\n * - border-radius 10px (rounded-radius-lg)\r\n * - secondary usa fg-secondary\r\n * - rings cor-pura via ring.{brand|danger|success|warning|secondary}\r\n *\r\n * Variants color: primary/secondary/critical/success/warning\r\n * - primary → bg-brand / fg-brand / border-brand\r\n * - critical → bg-danger / fg-danger / border-danger-muted\r\n * - secondary → neutros (bg-muted, fg-secondary, border-default)\r\n *\r\n * Variants visual: filled/outline/soft/ghost\r\n *\r\n * Sizes mantidas (largura/espaçamento como estavam).\r\n *\r\n * Disabled: opacity-50 (v3 não tem bg-disabled token).\r\n */\r\nexport const buttonVariants = tv({\r\n base: [\r\n \"inline-flex items-center justify-center\",\r\n \"select-none whitespace-nowrap\",\r\n \"focus-visible:outline-none\",\r\n \"border border-transparent\",\r\n \"text-body-sm font-semibold leading-none\", // 13px / 600 — alinhado com sandbox btn\r\n \"[&_svg]:shrink-0\", // SVG não diminui; tamanho controlado por size\r\n \"transition-all duration-200 ease-out\",\r\n \"cursor-pointer\",\r\n \"focus-visible:ring-4\",\r\n ],\r\n\r\n variants: {\r\n color: {\r\n primary: \"focus-visible:ring-ring-brand\",\r\n secondary: \"focus-visible:ring-ring-secondary\",\r\n critical: \"focus-visible:ring-ring-danger\",\r\n success: \"focus-visible:ring-ring-success\",\r\n warning: \"focus-visible:ring-ring-warning\",\r\n },\r\n\r\n variant: {\r\n filled: \"\",\r\n outline: \"\",\r\n soft: \"\",\r\n ghost: \"bg-transparent\",\r\n },\r\n\r\n size: {\r\n // h28 / pad 10 / gap 6 / radius 8 / icon 12\r\n \"2xs\": \"min-h-form-xs px-pad-lg gap-gp-sm rounded-radius-md [&_svg]:size-[12px]\",\r\n // h32 / pad 12 / gap 6 / radius 8 / icon 14\r\n xs: \"min-h-form-sm px-pad-xl gap-gp-sm rounded-radius-md [&_svg]:size-[14px]\",\r\n // h36 / pad 12 / gap 6 / radius 10 / icon 14\r\n sm: \"min-h-form-md px-pad-xl gap-gp-sm rounded-radius-lg [&_svg]:size-[14px]\",\r\n // h40 / pad 16 / gap 6 / radius 10 / icon 14 (alinhado com sandbox Exportar)\r\n md: \"min-h-form-lg px-pad-2xl gap-gp-sm rounded-radius-lg [&_svg]:size-[14px]\",\r\n // h44 / pad 16 / gap 8 / radius 10 / icon 16\r\n lg: \"min-h-form-xl px-pad-2xl gap-gp-md rounded-radius-lg [&_svg]:size-[16px]\",\r\n\r\n // Icon buttons — width = height (square). Regra: SVG +2px vs versão com label\r\n // (precisa preencher mais o quadrado sem o texto carregando peso visual).\r\n \"icon-2xs\": \"size-form-xs rounded-radius-md p-0 [&_svg]:size-[14px]\", // 28×28 / +2 (12→14)\r\n \"icon-xs\": \"size-form-sm rounded-radius-md p-0 [&_svg]:size-[16px]\", // 32×32 / +2 (14→16)\r\n \"icon-sm\": \"size-form-md rounded-radius-lg p-0 [&_svg]:size-[16px]\", // 36×36 / +2 (14→16)\r\n \"icon-md\": \"size-form-lg rounded-radius-lg p-0 [&_svg]:size-[16px]\", // 40×40 / +2 (14→16)\r\n \"icon-lg\": \"size-form-xl rounded-radius-lg p-0 [&_svg]:size-[18px]\", // 44×44 / +2 (16→18)\r\n },\r\n\r\n fullWidth: {\r\n true: \"w-full flex-1\",\r\n },\r\n\r\n /**\r\n * Shape do botão:\r\n * - rounded (default): mantém o radius da `size` (varia por tamanho)\r\n * - pill: força `rounded-full` (override com `!` pra ganhar do size)\r\n */\r\n shape: {\r\n rounded: \"\",\r\n pill: \"!rounded-full\",\r\n },\r\n\r\n disabled: {\r\n true: \"pointer-events-none opacity-50\",\r\n },\r\n },\r\n\r\n compoundVariants: [\r\n // ── Primary (brand) ─────────────────────────────────────────────\r\n {\r\n color: \"primary\", variant: \"filled\",\r\n class: \"bg-bg-brand text-fg-on-brand hover:bg-bg-brand-hover\",\r\n },\r\n {\r\n color: \"primary\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-brand text-fg-brand shadow-sh-sm hover:bg-bg-brand-subtle hover:border-transparent hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"primary\", variant: \"soft\",\r\n class: \"bg-bg-brand-subtle text-fg-brand hover:bg-bg-brand-subtle-hover\",\r\n },\r\n {\r\n color: \"primary\", variant: \"ghost\",\r\n class: \"text-fg-brand hover:bg-bg-brand-subtle\",\r\n },\r\n\r\n // ── Secondary (neutro) ──────────────────────────────────────────\r\n {\r\n color: \"secondary\", variant: \"filled\",\r\n class: \"bg-bg-muted text-fg-muted hover:bg-bg-muted-hover hover:text-fg-default\",\r\n },\r\n {\r\n // Outline alinhado com `.btn.tbl-tool-btn` do design-and-table-v2:\r\n // light = bg-surface + border-subtle + fg-default + shadow-sm (mantém no hover)\r\n // dark = bg-muted + border-input + fg-muted + sem shadow\r\n color: \"secondary\", variant: \"outline\",\r\n class: [\r\n \"bg-bg-surface border-border-subtle text-fg-default shadow-sh-sm\",\r\n \"dark:bg-bg-muted dark:border-border-input dark:text-fg-muted dark:shadow-sh-none\",\r\n \"hover:bg-bg-muted-hover hover:text-fg-default\",\r\n \"dark:hover:bg-bg-muted-hover dark:hover:text-fg-default\",\r\n ].join(\" \"),\r\n },\r\n {\r\n color: \"secondary\", variant: \"soft\",\r\n class: \"bg-bg-muted text-fg-muted hover:bg-bg-muted-hover hover:text-fg-default\",\r\n },\r\n {\r\n color: \"secondary\", variant: \"ghost\",\r\n class: \"text-fg-muted hover:bg-bg-muted hover:text-fg-default\",\r\n },\r\n\r\n // ── Critical (danger) ───────────────────────────────────────────\r\n {\r\n color: \"critical\", variant: \"filled\",\r\n class: \"bg-bg-danger text-fg-on-danger hover:bg-bg-danger-hover\",\r\n },\r\n {\r\n color: \"critical\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-danger-muted text-fg-danger shadow-sh-sm hover:bg-bg-danger-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"critical\", variant: \"soft\",\r\n class: \"bg-bg-danger-muted text-fg-danger hover:bg-bg-danger-muted-hover\",\r\n },\r\n {\r\n color: \"critical\", variant: \"ghost\",\r\n class: \"text-fg-danger hover:bg-bg-danger-muted\",\r\n },\r\n\r\n // ── Success ─────────────────────────────────────────────────────\r\n {\r\n color: \"success\", variant: \"filled\",\r\n class: \"bg-bg-success text-fg-on-success hover:bg-bg-success-hover\",\r\n },\r\n {\r\n color: \"success\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-success-muted text-fg-success shadow-sh-sm hover:bg-bg-success-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"success\", variant: \"soft\",\r\n class: \"bg-bg-success-muted text-fg-success hover:bg-bg-success-muted-hover\",\r\n },\r\n {\r\n color: \"success\", variant: \"ghost\",\r\n class: \"text-fg-success hover:bg-bg-success-muted\",\r\n },\r\n\r\n // ── Warning ─────────────────────────────────────────────────────\r\n {\r\n color: \"warning\", variant: \"filled\",\r\n class: \"bg-bg-warning text-fg-on-warning hover:bg-bg-warning-hover\",\r\n },\r\n {\r\n color: \"warning\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-warning-muted text-fg-warning shadow-sh-sm hover:bg-bg-warning-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"warning\", variant: \"soft\",\r\n class: \"bg-bg-warning-muted text-fg-warning hover:bg-bg-warning-muted-hover\",\r\n },\r\n {\r\n color: \"warning\", variant: \"ghost\",\r\n class: \"text-fg-warning hover:bg-bg-warning-muted\",\r\n },\r\n\r\n // ── Disabled — SEMPRE por último ────────────────────────────────\r\n { disabled: true, class: \"pointer-events-none opacity-50\" },\r\n ],\r\n\r\n defaultVariants: {\r\n color: \"primary\",\r\n variant: \"filled\",\r\n size: \"md\",\r\n shape: \"rounded\",\r\n },\r\n});\r\n\r\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>;\r\n","import { forwardRef } from \"react\";\nimport type { ButtonProps } from \"./button.types\";\nimport { buttonVariants } from \"./button.styles\";\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n color,\n variant,\n size,\n shape,\n fullWidth,\n loading = false,\n disabled = false,\n iconLeft,\n iconRight,\n children,\n className,\n type = \"button\",\n ...rest\n },\n ref,\n ) {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={isDisabled}\n className={buttonVariants({\n color,\n variant,\n size,\n shape,\n fullWidth,\n disabled: isDisabled,\n className,\n })}\n {...rest}\n >\n {loading && <Spinner />}\n {!loading && iconLeft}\n {children}\n {!loading && iconRight}\n </button>\n );\n },\n);\n\nfunction Spinner() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className=\"animate-spin\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"28\"\n strokeDashoffset=\"8\"\n className=\"opacity-70\"\n />\n </svg>\n );\n}\n","import * as React from \"react\"\r\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\r\nimport { X } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Dialog = DialogPrimitive.Root\r\n\r\nconst DialogTrigger = DialogPrimitive.Trigger\r\n\r\nconst DialogPortal = DialogPrimitive.Portal\r\n\r\nconst DialogClose = DialogPrimitive.Close\r\n\r\nconst DialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Overlay\r\n ref={ref}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/30 supports-[backdrop-filter]:backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\r\n\r\nconst DialogContent = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\r\n /** Esconde o botão \"X\" (Close) no canto superior direito. Default: false. */\r\n hideClose?: boolean;\r\n }\r\n>(({ className, children, hideClose, ...props }, ref) => (\r\n <DialogPortal>\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-gp-4xl rounded-radius-base bg-bg-surface p-pad-4xl text-body-md text-fg-default shadow-sh-xl outline-float duration-200 sm:max-w-md 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\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {!hideClose && (\r\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-radius-sm opacity-70 transition-opacity hover:opacity-100 outline-none ring-0 ring-ring-brand focus-visible:ring-4 disabled:pointer-events-none data-[state=open]:bg-bg-muted data-[state=open]:text-fg-muted\">\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n))\r\nDialogContent.displayName = DialogPrimitive.Content.displayName\r\n\r\nconst DialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\"flex flex-col gap-gp-sm\", className)}\r\n {...props}\r\n />\r\n)\r\nDialogHeader.displayName = \"DialogHeader\"\r\n\r\nconst DialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse gap-gp-md sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nDialogFooter.displayName = \"DialogFooter\"\r\n\r\nconst DialogTitle = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\r\n \"text-title-md font-medium text-fg-default leading-none\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogTitle.displayName = DialogPrimitive.Title.displayName\r\n\r\nconst DialogDescription = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-body-md text-fg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDialogDescription.displayName = DialogPrimitive.Description.displayName\r\n\r\nexport {\r\n Dialog,\r\n DialogPortal,\r\n DialogOverlay,\r\n DialogClose,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { type DialogProps } from \"@radix-ui/react-dialog\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { Search } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/shadcn/dialog\"\r\n\r\n/**\r\n * Command — alinhado com o views-popover do design-and-table-v2.\r\n *\r\n * Estrutura:\r\n * - <Command> raiz (flex column)\r\n * - <CommandInput> = input \"real\" boxed (bg-input + border + radius-lg + shadow)\r\n * - <CommandList> com padding 4px\r\n * - <CommandGroup> heading uppercase + items\r\n * - <CommandItem> radius-lg (10px), px 12, py 8, font 13px, ícones 18px\r\n *\r\n * Pattern do input replica `.tbl-views-pop-search` exatamente.\r\n */\r\n\r\nconst Command = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive\r\n ref={ref}\r\n className={cn(\r\n // `bg-popover`/`text-popover-foreground` são vocabulário SHADCN, não do DS —\r\n // dependem da bridge do `globals.css`/`index.css`, que NÃO viaja pros canais npm\r\n // e submódulo. Lá a var não existe e a cor cai em `currentColor` (L-039/L-040).\r\n //\r\n // ⚠️ O substituto é `bg-bg-surface`, NÃO `bg-bg-dropdown`. A primeira troca (v0.36.0)\r\n // usou `dropdown` por ser o token da receita de flutuante — mas ele é TRANSLÚCIDO no\r\n // dark (`canvas` a 70%, pareado com `before:backdrop-blur-2xl`, que este componente\r\n // não tem), enquanto a bridge resolvia `popover` pra `surface-elevated`, OPACO.\r\n // Medido: light idêntico nos dois; dark `oklch(0.225 0 0)` vs `oklab(0.205 0 0 / 0.7)`.\r\n // `bg-bg-surface` reproduz o valor original nos DOIS modos.\r\n \"flex h-full w-full flex-col overflow-hidden p-pad-xl bg-bg-surface text-fg-default\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommand.displayName = CommandPrimitive.displayName\r\n\r\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\r\n return (\r\n <Dialog {...props}>\r\n <DialogContent\r\n hideClose\r\n // A11y: Radix exige título; aqui é sr-only (paleta de comando não tem\r\n // header visível) e opt-out de descrição.\r\n aria-describedby={undefined}\r\n className={cn(\r\n \"overflow-hidden p-0 gap-0 sm:max-w-[384px]\",\r\n \"rounded-[12px] border border-border-default\",\r\n // Outline padrão de elementos flutuantes\r\n \"outline-float\"\r\n )}\r\n >\r\n <DialogTitle className=\"sr-only\">Comando</DialogTitle>\r\n <Command>{children}</Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\n/* ── Input boxed (igual views-popover search) ─────────────────────────────── */\r\nconst CommandInput = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Input>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n cmdk-input-wrapper=\"\"\r\n className={cn(\r\n \"flex items-center gap-gp-md h-form-md px-pad-xl rounded-radius-lg\",\r\n \"bg-bg-input border border-border-subtle shadow-sh-sm\",\r\n \"transition-[border-color,box-shadow,background-color] duration-150\",\r\n \"focus-within:border-border-brand focus-within:shadow-sh-ring\",\r\n \"dark:bg-bg-muted dark:border-border-input dark:shadow-sh-none\"\r\n )}\r\n >\r\n <Search className=\"size-[14px] text-fg-muted shrink-0\" strokeWidth={1.8} />\r\n <CommandPrimitive.Input\r\n ref={ref}\r\n className={cn(\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n))\r\nCommandInput.displayName = CommandPrimitive.Input.displayName\r\n\r\n/* ── List ─────────────────────────────────────────────────────────────────── */\r\nconst CommandList = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.List>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.List\r\n ref={ref}\r\n className={cn(\r\n \"max-h-[300px] overflow-y-auto overflow-x-hidden mt-pad-md scrollbar-thin\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandList.displayName = CommandPrimitive.List.displayName\r\n\r\nconst CommandEmpty = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Empty>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\r\n>((props, ref) => (\r\n <CommandPrimitive.Empty\r\n ref={ref}\r\n className=\"py-pad-5xl text-center text-body-md text-fg-muted\"\r\n {...props}\r\n />\r\n))\r\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\r\n\r\n/* ── Group (heading uppercase 28px, sem padding extra no group) ──────────── */\r\nconst CommandGroup = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Group>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Group\r\n ref={ref}\r\n className={cn(\r\n \"overflow-hidden text-fg-default\",\r\n \"[&_[cmdk-group-heading]]:flex [&_[cmdk-group-heading]]:items-center\",\r\n \"[&_[cmdk-group-heading]]:h-[28px] [&_[cmdk-group-heading]]:px-pad-xl\",\r\n \"[&_[cmdk-group-heading]]:text-caption-xs [&_[cmdk-group-heading]]:font-bold\",\r\n \"[&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider\",\r\n \"[&_[cmdk-group-heading]]:text-fg-subtle\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandGroup.displayName = CommandPrimitive.Group.displayName\r\n\r\nconst CommandSeparator = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"mx-pad-xs my-pad-xs h-px bg-border-default\", className)}\r\n {...props}\r\n />\r\n))\r\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\r\n\r\n/* ── Item: px-12 py-8, radius-lg (10px), font 13px, ícones 18px ───────────── */\r\nconst CommandItem = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center gap-gp-md\",\r\n \"rounded-radius-lg px-pad-xl py-pad-md\",\r\n \"text-body-sm font-medium text-fg-muted\",\r\n \"outline-none transition-colors\",\r\n \"data-[selected='true']:bg-bg-muted data-[selected='true']:text-fg-default data-[selected='true']:[&_svg]:text-fg-default\",\r\n \"data-[disabled='true']:pointer-events-none data-[disabled='true']:opacity-50\",\r\n \"[&_svg]:pointer-events-none [&_svg]:size-[18px] [&_svg]:shrink-0 [&_svg]:text-fg-muted\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandItem.displayName = CommandPrimitive.Item.displayName\r\n\r\nconst CommandShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\r\n \"ml-auto text-caption-sm tracking-wider text-fg-subtle\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\nCommandShortcut.displayName = \"CommandShortcut\"\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","import * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Popover — primitives baixo nível pra menus flutuantes (Cols, Sort, Filter, Views).\r\n *\r\n * Visual unificado com DropdownMenu/Select: bg-bg-dropdown (frosted-glass no\r\n * dark via `before:backdrop-blur-2xl`), border-default, radius 12px, shadow-lg\r\n * + outline-float (halo). Padronizado pra evitar inconsistência visual entre\r\n * menus de ação (DropdownMenu) e menus de configuração (Popover de Filtros,\r\n * Sort, Cols, Views).\r\n *\r\n * Não tem `Item` próprio — o consumer monta o conteúdo do popover livremente.\r\n * Pra menus de ação com items semânticos, prefira `DropdownMenu`.\r\n */\r\n\r\nconst Popover = PopoverPrimitive.Root;\r\nconst PopoverTrigger = PopoverPrimitive.Trigger;\r\nconst PopoverAnchor = PopoverPrimitive.Anchor;\r\nconst PopoverClose = PopoverPrimitive.Close;\r\n\r\n/* ── Mobile sheet (<md) ───────────────────────────────────────────────\r\n * Em telas <md o conteúdo vira sheet bottom-up colado nas bordas: full-width,\r\n * só cantos superiores arredondados, flush, sem outline/shadow, cap 92vh.\r\n * O wrapper do Radix Popper é reposicionado no globals.css via a regra\r\n * `[data-radix-popper-content-wrapper]:has([data-mobile-sheet])` (mesma usada\r\n * pelo DropdownMenu). Animação: neutraliza o zoom e desliza de baixo. */\r\nconst POPOVER_MOBILE_SHEET = [\r\n \"max-md:w-full max-md:min-w-0 max-md:max-w-none\",\r\n \"max-md:!max-h-[92vh]\",\r\n \"max-md:rounded-b-none max-md:rounded-t-[12px]\",\r\n \"max-md:border-x-0 max-md:border-b-0\",\r\n \"max-md:outline-none max-md:shadow-none\",\r\n // Respiro de 20px (pad-3xl) no rodapé pra o conteúdo (footer/última seção)\r\n // não colar na borda inferior do device quando vira sheet.\r\n \"max-md:pb-pad-3xl\",\r\n \"max-md:data-[state=open]:zoom-in-100 max-md:data-[state=closed]:zoom-out-100\",\r\n \"max-md:data-[state=open]:slide-in-from-bottom-12 max-md:data-[state=closed]:slide-out-to-bottom-12\",\r\n].join(\" \");\r\n\r\n/** Backdrop suave — só mobile (md:hidden). Toque fecha via dismiss do Radix. */\r\nconst PopoverSheetBackdrop = () => (\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"fixed inset-0 z-[55] bg-overlay-scrim pointer-events-auto md:hidden animate-in fade-in-0 duration-150\"\r\n />\r\n);\r\n\r\ntype PopoverContentProps = React.ComponentPropsWithoutRef<\r\n typeof PopoverPrimitive.Content\r\n> & {\r\n /**\r\n * Renderiza o conteúdo SEM `<Portal>`. Útil quando o conteúdo interno usa\r\n * libs como dnd-kit que conflitam com o transform do Floating UI do Portal.\r\n * Default `false` (usa portal — comportamento padrão).\r\n */\r\n disablePortal?: boolean;\r\n /**\r\n * Em telas <md, transforma o popover em **sheet bottom-up** colado nas bordas,\r\n * com backdrop suave (toque fora fecha). No desktop não muda nada. Default `true`.\r\n * Passe `false` pra manter o popover ancorado no trigger também em mobile.\r\n * (Mesmo nome da prop do `DropdownMenu` — comportamento consistente.)\r\n */\r\n mobileSheet?: boolean;\r\n};\r\n\r\nconst PopoverContent = React.forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n PopoverContentProps\r\n>(\r\n (\r\n { className, align = \"center\", sideOffset = 6, disablePortal, mobileSheet = true, ...props },\r\n ref,\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n data-mobile-sheet={mobileSheet ? \"\" : undefined}\r\n className={cn(\r\n \"relative z-50\",\r\n // Unificado com DropdownMenu/Select: bg-bg-dropdown (frosted no dark)\r\n // + border-border-default + outline-float. O `before` pseudo-element\r\n // aplica o blur backdrop (necessário pra bg-bg-dropdown semi-transparente\r\n // render correto no dark mode).\r\n \"bg-bg-dropdown\",\r\n \"border border-border-default rounded-[12px] shadow-sh-lg outline-float\",\r\n \"before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150\",\r\n \"text-fg-default\",\r\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\r\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\r\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\r\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n mobileSheet && POPOVER_MOBILE_SHEET,\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n\r\n if (disablePortal) {\r\n // Sem portal: backdrop inline (fixed escapa do flow mesmo assim).\r\n return mobileSheet ? (\r\n <>\r\n <PopoverSheetBackdrop />\r\n {content}\r\n </>\r\n ) : (\r\n content\r\n );\r\n }\r\n\r\n // Com portal: backdrop em Portal próprio (cada Portal Radix aceita 1 filho\r\n // e é montado/desmontado junto com o popover via Presence).\r\n return (\r\n <>\r\n {mobileSheet && (\r\n <PopoverPrimitive.Portal>\r\n <PopoverSheetBackdrop />\r\n </PopoverPrimitive.Portal>\r\n )}\r\n <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>\r\n </>\r\n );\r\n },\r\n);\r\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\r\n\r\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent };\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * InputGroup — composição rica pra inputs com addons (prefixo, sufixo, ícone, botão).\r\n *\r\n * Estrutura:\r\n * <InputGroup>\r\n * <InputGroupAddon align=\"inline-start\"><Icon /></InputGroupAddon>\r\n * <InputGroupInput placeholder=\"...\" />\r\n * <InputGroupAddon align=\"inline-end\">\r\n * <InputGroupButton><X /></InputGroupButton>\r\n * </InputGroupAddon>\r\n * </InputGroup>\r\n *\r\n * Visual alinhado com `.tbl-form-input` (mesmo bg/border/radius do <Input>).\r\n * State (default/error/warning/success) afeta borda + focus ring (shadow-sh-ring-*).\r\n */\r\n\r\nexport type InputGroupState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\n/* ── Wrapper ─────────────────────────────────────────────────────────────── */\r\nconst inputGroupVariants = cva(\r\n [\r\n \"group/input-group relative flex w-full items-center\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50 has-[input:disabled]:hover:bg-bg-input dark:has-[input:disabled]:hover:bg-bg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs px-pad-md gap-gp-xs rounded-radius-md text-body-sm font-normal\",\r\n xs: \"min-h-form-sm px-pad-xl gap-gp-md rounded-radius-md text-body-sm font-normal\",\r\n sm: \"min-h-form-md px-pad-xl gap-gp-md rounded-radius-lg text-body-sm font-normal\",\r\n md: \"min-h-form-lg px-pad-xl gap-gp-md rounded-radius-lg text-body-sm font-normal\",\r\n },\r\n state: {\r\n default: \"focus-within:border-border-brand focus-within:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-within:border-border-danger-muted focus-within:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-within:border-border-warning-muted focus-within:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-within:border-border-success-muted focus-within:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: { size: \"md\", state: \"default\" },\r\n },\r\n);\r\n\r\nexport type InputGroupVariantProps = VariantProps<typeof inputGroupVariants>;\r\n\r\nexport interface InputGroupProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n InputGroupVariantProps {}\r\n\r\nexport const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\r\n ({ className, size, state, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n data-slot=\"input-group\"\r\n className={cn(inputGroupVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\nInputGroup.displayName = \"InputGroup\";\r\n\r\n/* ── Input (sem bg/border — herda do wrapper) ─────────────────────────── */\r\nconst inputGroupInputVariants = cva([\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"disabled:cursor-not-allowed\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n]);\r\n\r\nexport interface InputGroupInputProps\r\n extends React.InputHTMLAttributes<HTMLInputElement> {}\r\n\r\nexport const InputGroupInput = React.forwardRef<\r\n HTMLInputElement,\r\n InputGroupInputProps\r\n>(({ className, type, ...props }, ref) => (\r\n <input\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input-group-input\"\r\n className={cn(inputGroupInputVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupInput.displayName = \"InputGroupInput\";\r\n\r\n/* ── Textarea ──────────────────────────────────────────────────────────── */\r\nconst inputGroupTextareaVariants = cva([\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none resize-y\",\r\n \"py-pad-md\",\r\n \"text-body-sm font-normal leading-[1.5] text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"disabled:cursor-not-allowed\",\r\n]);\r\n\r\nexport interface InputGroupTextareaProps\r\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\r\n\r\nexport const InputGroupTextarea = React.forwardRef<\r\n HTMLTextAreaElement,\r\n InputGroupTextareaProps\r\n>(({ className, ...props }, ref) => (\r\n <textarea\r\n ref={ref}\r\n data-slot=\"input-group-textarea\"\r\n className={cn(inputGroupTextareaVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\r\n\r\n/* ── Addon (prefix/suffix slot) ───────────────────────────────────────── */\r\nconst inputGroupAddonVariants = cva(\r\n \"flex items-center text-fg-muted shrink-0 select-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n align: {\r\n // Inline = horizontal (start/end do eixo do texto)\r\n \"inline-start\": \"\",\r\n \"inline-end\": \"\",\r\n // Block = vertical (top/bottom — multi-linha em textarea)\r\n \"block-start\": \"\",\r\n \"block-end\": \"\",\r\n },\r\n },\r\n defaultVariants: { align: \"inline-start\" },\r\n },\r\n);\r\n\r\nexport type InputGroupAddonAlign =\r\n | \"inline-start\"\r\n | \"inline-end\"\r\n | \"block-start\"\r\n | \"block-end\";\r\n\r\nexport interface InputGroupAddonProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n align?: InputGroupAddonAlign;\r\n}\r\n\r\nexport const InputGroupAddon = React.forwardRef<\r\n HTMLDivElement,\r\n InputGroupAddonProps\r\n>(({ className, align = \"inline-start\", onClick, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n data-slot=\"input-group-addon\"\r\n data-align={align}\r\n className={cn(inputGroupAddonVariants({ align }), className)}\r\n onClick={(e) => {\r\n // Click no addon (ícone, texto, espaço vazio) → foca o input do grupo.\r\n // Botões dentro do addon (`InputGroupButton`) continuam funcionando.\r\n if ((e.target as HTMLElement).closest(\"button\")) {\r\n onClick?.(e);\r\n return;\r\n }\r\n e.currentTarget.parentElement\r\n ?.querySelector<HTMLInputElement | HTMLTextAreaElement>(\r\n \"input, textarea\",\r\n )\r\n ?.focus();\r\n onClick?.(e);\r\n }}\r\n {...props}\r\n />\r\n));\r\nInputGroupAddon.displayName = \"InputGroupAddon\";\r\n\r\n/* ── Text (texto formatado dentro do addon) ───────────────────────────── */\r\nexport interface InputGroupTextProps\r\n extends React.HTMLAttributes<HTMLSpanElement> {}\r\n\r\nexport const InputGroupText = React.forwardRef<\r\n HTMLSpanElement,\r\n InputGroupTextProps\r\n>(({ className, ...props }, ref) => (\r\n <span\r\n ref={ref}\r\n data-slot=\"input-group-text\"\r\n className={cn(\r\n \"text-body-xs text-fg-muted whitespace-nowrap\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n));\r\nInputGroupText.displayName = \"InputGroupText\";\r\n\r\n/* ── Button (botão dentro do addon — ex copy/clear) ───────────────────── */\r\nconst inputGroupButtonVariants = cva(\r\n [\r\n \"inline-flex items-center justify-center shrink-0\",\r\n \"rounded-radius-md transition-colors outline-none cursor-pointer\",\r\n \"focus-visible:ring-4 focus-visible:ring-ring-brand\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50\",\r\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xs: \"h-form-xs px-pad-md gap-gp-xs text-body-xs font-normal\",\r\n \"icon-xs\": \"size-form-xs\",\r\n sm: \"h-form-sm px-pad-lg gap-gp-md text-body-xs font-normal\",\r\n \"icon-sm\": \"size-form-sm\",\r\n },\r\n variant: {\r\n default: \"bg-bg-muted text-fg-default hover:bg-bg-muted-hover\",\r\n destructive: \"bg-bg-danger text-fg-on-danger hover:bg-bg-danger-hover\",\r\n outline: \"border border-border-input bg-transparent text-fg-default hover:bg-bg-muted\",\r\n secondary: \"bg-bg-emphasis text-fg-default hover:bg-bg-muted-hover\",\r\n ghost: \"bg-transparent text-fg-muted hover:bg-bg-muted hover:text-fg-default\",\r\n link: \"bg-transparent text-fg-brand underline-offset-4 hover:underline\",\r\n },\r\n },\r\n defaultVariants: { size: \"xs\", variant: \"ghost\" },\r\n },\r\n);\r\n\r\nexport interface InputGroupButtonProps\r\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\r\n VariantProps<typeof inputGroupButtonVariants> {}\r\n\r\nexport const InputGroupButton = React.forwardRef<\r\n HTMLButtonElement,\r\n InputGroupButtonProps\r\n>(({ className, size, variant, type = \"button\", ...props }, ref) => (\r\n <button\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input-group-button\"\r\n className={cn(inputGroupButtonVariants({ size, variant }), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupButton.displayName = \"InputGroupButton\";\r\n\r\nexport {\r\n inputGroupVariants,\r\n inputGroupInputVariants,\r\n inputGroupTextareaVariants,\r\n inputGroupAddonVariants,\r\n inputGroupButtonVariants,\r\n};\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\n/**\r\n * DropdownMenu — alinhado com `.tbl-row-actions-menu` / `.tbl-more-menu`\r\n * do design-and-table-v2.\r\n *\r\n * Container:\r\n * - bg-bg-dropdown (token frosted-glass — solid no light, 70% transparent + blur no dark)\r\n * - border 1px + radius 12px + padding 6px + shadow-lg\r\n * - min-w 180px, items separados por 1px (gap-px)\r\n *\r\n * Item:\r\n * - h variavel, padding 8/10, radius 6px, gap 10, font 13px medium\r\n * - rest: fg-muted (texto + ícone), hover/focus: bg-muted + fg-default\r\n * - variant=\"destructive\": fg-danger + hover bg-danger-muted\r\n *\r\n * Divider:\r\n * - 1px bg-border-default com margin 4px (não estende além do padding)\r\n */\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\n/* ── Container (Content + SubContent) ─────────────────────────────────────── */\r\nconst CONTAINER_CLASSES = [\r\n \"relative z-50 min-w-[180px] overflow-hidden\",\r\n \"flex flex-col gap-px\",\r\n \"rounded-[12px] bg-bg-dropdown p-pad-sm\",\r\n \"border border-border-default shadow-sh-lg\",\r\n // Outline padrão de elementos flutuantes\r\n \"outline-float\",\r\n \"text-fg-muted\",\r\n // Frosted-glass blur (necessário pra fazer o bg-dropdown semi-transparent render correto no dark)\r\n \"before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150\",\r\n // Animações Radix\r\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\r\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\r\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\r\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n \"origin-[--radix-dropdown-menu-content-transform-origin]\",\r\n].join(\" \")\r\n\r\n/* ── Mobile sheet (só Content, <md) ───────────────────────────────────────\r\n * Em telas <md o Content vira sheet bottom-up colado nas bordas: full-width,\r\n * só cantos superiores arredondados, flush, sem outline/shadow, cap 92vh.\r\n * O reposicionamento do wrapper Radix é feito no globals.css via [data-mobile-sheet].\r\n * Animação: neutraliza o zoom e desliza de baixo (sobrescreve os slides por side).\r\n */\r\nconst MOBILE_SHEET_CLASSES = [\r\n \"max-md:w-full max-md:min-w-0 max-md:max-w-none\",\r\n \"max-md:!max-h-[92vh]\",\r\n \"max-md:rounded-b-none max-md:rounded-t-[12px]\",\r\n \"max-md:border-x-0 max-md:border-b-0\",\r\n \"max-md:outline-none max-md:shadow-none\",\r\n \"max-md:data-[state=open]:zoom-in-100 max-md:data-[state=closed]:zoom-out-100\",\r\n \"max-md:data-[state=open]:slide-in-from-bottom-12 max-md:data-[state=closed]:slide-out-to-bottom-12\",\r\n].join(\" \")\r\n\r\n/* ── Item base ────────────────────────────────────────────────────────────── */\r\nconst ITEM_BASE = [\r\n \"relative flex cursor-default select-none items-center\",\r\n \"gap-pad-lg px-pad-lg py-pad-md rounded-radius-sm\",\r\n \"text-body-sm font-medium\",\r\n \"outline-none transition-colors\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n \"[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n].join(\" \")\r\n\r\nconst ITEM_VARIANT_DEFAULT = [\r\n \"text-fg-muted [&_svg]:text-fg-muted\",\r\n \"focus:bg-bg-muted focus:text-fg-default focus:[&_svg]:text-fg-default\",\r\n].join(\" \")\r\n\r\nconst ITEM_VARIANT_DESTRUCTIVE = [\r\n \"text-fg-danger [&_svg]:text-fg-danger\",\r\n \"focus:bg-bg-danger-muted focus:text-fg-danger focus:[&_svg]:text-fg-danger\",\r\n].join(\" \")\r\n\r\n/* ── SubTrigger ───────────────────────────────────────────────────────────── */\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"data-[state=open]:bg-bg-muted data-[state=open]:text-fg-default\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\n/* ── SubContent ───────────────────────────────────────────────────────────── */\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(CONTAINER_CLASSES, className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\n/* ── Content ──────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & {\r\n /**\r\n * Em telas <md, transforma o menu em sheet bottom-up colado nas bordas,\r\n * com backdrop suave (toque fora fecha via dismiss do Radix). Default true.\r\n * Passe `false` pra manter o popover ancorado no trigger também em mobile.\r\n */\r\n mobileSheet?: boolean\r\n }\r\n>(({ className, sideOffset = 8, mobileSheet = true, ...props }, ref) => (\r\n <>\r\n {/* Backdrop suave — só mobile (md:hidden), em Portal próprio (cada Portal\r\n Radix aceita 1 filho e é montado/desmontado junto com o menu via Presence).\r\n\r\n ⚠️ pointer-events-NONE (não auto). O DropdownMenu do Radix abre no\r\n `pointerdown`; o backdrop monta via React no meio do gesto e, com\r\n pointer-events-auto, captura o `pointerup`/`click` seguinte → o menu\r\n abre e fecha no mesmo toque (bug do avatar/UserMenu dentro do drawer\r\n mobile). Com pointer-events-none o gesto de abertura passa direto e o\r\n dismiss por toque-fora continua funcionando (Radix escuta pointerdown\r\n a nível de document, independente do backdrop capturar). z-[55] fica\r\n acima do drawer mobile (z-50) só pra escurecer; o Content vai a z-60. */}\r\n {mobileSheet && (\r\n <DropdownMenuPrimitive.Portal>\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"fixed inset-0 z-[55] bg-overlay-scrim pointer-events-none md:hidden animate-in fade-in-0 duration-150\"\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n )}\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n data-mobile-sheet={mobileSheet ? \"\" : undefined}\r\n className={cn(\r\n CONTAINER_CLASSES,\r\n \"max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto overflow-x-hidden\",\r\n mobileSheet && MOBILE_SHEET_CLASSES,\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n </>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\n/* ── Item ─────────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n /** Variante semântica — \"destructive\" pinta fg-danger e usa bg-danger-muted no hover */\r\n variant?: \"default\" | \"destructive\"\r\n }\r\n>(({ className, inset, variant = \"default\", ...props }, ref) => (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n variant === \"destructive\" ? ITEM_VARIANT_DESTRUCTIVE : ITEM_VARIANT_DEFAULT,\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\n/* ── CheckboxItem ─────────────────────────────────────────────────────────── */\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"pl-8 pr-pad-lg\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-pad-md flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\n/* ── RadioItem ────────────────────────────────────────────────────────────── */\r\n/**\r\n * RadioItem — item selecionado ganha tom brand:\r\n * - rest: fg-muted (igual default item)\r\n * - hover: bg-muted + fg-default (igual default item)\r\n * - checked: bg-bg-brand-subtle + fg-fg-brand (estado ativo destacado)\r\n *\r\n * Indicator: `<Check />` consistente com `<DropdownMenuCheckboxItem>` (antes era `<Circle />`).\r\n */\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"pl-8 pr-pad-lg\",\r\n // Selected state — brand tint (mantém no focus pra não voltar pra muted)\r\n \"data-[state=checked]:bg-bg-brand-subtle data-[state=checked]:text-fg-brand\",\r\n \"data-[state=checked]:[&_svg]:text-fg-brand\",\r\n \"data-[state=checked]:focus:bg-bg-brand-subtle data-[state=checked]:focus:text-fg-brand\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-pad-md flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\n/* ── Label ────────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-pad-lg py-pad-sm text-caption-sm font-semibold uppercase tracking-wider text-fg-subtle\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\n/* ── Separator (divider) ──────────────────────────────────────────────────── */\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"mx-pad-xs my-pad-xs h-px bg-border-default\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\n/* ── Shortcut (texto à direita do item) ───────────────────────────────────── */\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-caption-sm tracking-wider text-fg-subtle\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n","import * as React from \"react\"\r\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Avatar = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAvatar.displayName = AvatarPrimitive.Root.displayName\r\n\r\nconst AvatarImage = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Image>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Image\r\n ref={ref}\r\n className={cn(\"aspect-square h-full w-full\", className)}\r\n {...props}\r\n />\r\n))\r\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\r\n\r\n/**\r\n * AvatarFallback — `text-body-sm font-normal` (13px) como default mais compacto.\r\n *\r\n * Antes usava `text-body-md font-medium` (14px) que ficava grande demais em avatares\r\n * pequenos (≤24px), forçando consumer a sobrescrever via className. Caption\r\n * é mais seguro como default — consumer ainda pode override (ex: `text-caption-xs`\r\n * pra container muito pequeno, ou `text-body-lg font-medium` pra avatar grande).\r\n */\r\nconst AvatarFallback = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Fallback\r\n ref={ref}\r\n className={cn(\r\n \"flex h-full w-full items-center justify-center rounded-full bg-bg-muted text-fg-muted text-body-sm font-normal\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\r\n\r\nexport { Avatar, AvatarImage, AvatarFallback }\r\n"],"names":["extendTailwindMerge","clsx","tvBase","forwardRef","Button","jsxs","jsx","DialogPrimitive","React","X","CommandPrimitive","Search","PopoverPrimitive","Fragment","cva","DropdownMenuPrimitive","ChevronRight","Check","AvatarPrimitive"],"mappings":"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"}
|
|
@@ -520,11 +520,16 @@ const Command = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
520
520
|
ref,
|
|
521
521
|
className: cn(
|
|
522
522
|
// `bg-popover`/`text-popover-foreground` são vocabulário SHADCN, não do DS —
|
|
523
|
-
// dependem da bridge do `index.css`, que
|
|
524
|
-
// submódulo a
|
|
525
|
-
//
|
|
526
|
-
//
|
|
527
|
-
|
|
523
|
+
// dependem da bridge do `globals.css`/`index.css`, que NÃO viaja pros canais npm
|
|
524
|
+
// e submódulo. Lá a var não existe e a cor cai em `currentColor` (L-039/L-040).
|
|
525
|
+
//
|
|
526
|
+
// ⚠️ O substituto é `bg-bg-surface`, NÃO `bg-bg-dropdown`. A primeira troca (v0.36.0)
|
|
527
|
+
// usou `dropdown` por ser o token da receita de flutuante — mas ele é TRANSLÚCIDO no
|
|
528
|
+
// dark (`canvas` a 70%, pareado com `before:backdrop-blur-2xl`, que este componente
|
|
529
|
+
// não tem), enquanto a bridge resolvia `popover` pra `surface-elevated`, OPACO.
|
|
530
|
+
// Medido: light idêntico nos dois; dark `oklch(0.225 0 0)` vs `oklab(0.205 0 0 / 0.7)`.
|
|
531
|
+
// `bg-bg-surface` reproduz o valor original nos DOIS modos.
|
|
532
|
+
"flex h-full w-full flex-col overflow-hidden p-pad-xl bg-bg-surface text-fg-default",
|
|
528
533
|
className
|
|
529
534
|
),
|
|
530
535
|
...props
|
|
@@ -1174,4 +1179,4 @@ export {
|
|
|
1174
1179
|
DropdownMenuGroup as y,
|
|
1175
1180
|
DropdownMenuItem as z
|
|
1176
1181
|
};
|
|
1177
|
-
//# sourceMappingURL=avatar-
|
|
1182
|
+
//# sourceMappingURL=avatar-c1_uhYC5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-c1_uhYC5.mjs","sources":["../../src/lib/utils.ts","../../src/utils/tv.ts","../../src/components/ui/Button/button.styles.ts","../../src/components/ui/Button/button.tsx","../../src/components/shadcn/dialog.tsx","../../src/components/shadcn/command.tsx","../../src/components/shadcn/popover.tsx","../../src/components/shadcn/input-group.tsx","../../src/components/shadcn/dropdown-menu.tsx","../../src/components/shadcn/avatar.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\r\nimport { extendTailwindMerge } from \"tailwind-merge\";\r\n\r\n/**\r\n * tw-merge configurado pra reconhecer:\r\n *\r\n * 1) Presets tipográficos do iGreen DS como `font-size` (e não text-color).\r\n * Sem isso, `text-title-md` e `text-fg-default` colidem e um é removido.\r\n *\r\n * 2) Prefixos DS (pad-*, sp-*, gp-*, radius-*, sh-*, form-*) como conflitantes\r\n * com utilitários nativos do Tailwind. Sem isso, `p-pad-4xl` + `p-0` no cn()\r\n * deixava AMBOS no className final (24px + 0 = 24px ganhava).\r\n */\r\n\r\n/** Padding/Margin spacing: pad-* (padding contexts), sp-* (geral) */\r\nconst isDsPad = (v: string) => /^(pad|sp)-/.test(v);\r\n/** Gap: gp-* */\r\nconst isDsGap = (v: string) => /^gp-/.test(v);\r\n/** Border-radius: radius-* */\r\nconst isDsRadius = (v: string) => /^radius-/.test(v);\r\n/** Shadow: sh-* */\r\nconst isDsShadow = (v: string) => /^sh-/.test(v);\r\n/** Form heights: form-* (min-h, h, w, size) */\r\nconst isDsForm = (v: string) => /^form-/.test(v);\r\n\r\nconst twMerge = extendTailwindMerge({\r\n extend: {\r\n classGroups: {\r\n \"font-size\": [\r\n {\r\n // Lista 1:1 com tokens/brands/default/semantic/typography.ts.\r\n // Manter sincronizado com src/utils/tv.ts. Ver L-016.\r\n text: [\r\n // Displays (fluid clamp)\r\n \"display-2xl\", \"display-xl\", \"display-lg\", \"display-md\",\r\n // Headings (xs estático, sm-xl fluid clamp)\r\n \"heading-xl\", \"heading-lg\", \"heading-md\", \"heading-sm\", \"heading-xs\",\r\n // Titles (weight 600 default)\r\n \"title-lg\", \"title-md\", \"title-sm\",\r\n // Body (xs/sm = weight 500 interactive; md-2xl = 400 corrido)\r\n \"body-2xl\", \"body-xl\", \"body-lg\", \"body-md\", \"body-sm\", \"body-xs\",\r\n // Captions (weight 400)\r\n \"caption-md\", \"caption-sm\", \"caption-xs\",\r\n // Code (mono regular)\r\n \"code-md\", \"code-sm\",\r\n ],\r\n },\r\n ],\r\n\r\n /* ── Padding ──────────────────────────────────────────────────────── */\r\n p: [{ p: [isDsPad] }],\r\n px: [{ px: [isDsPad] }],\r\n py: [{ py: [isDsPad] }],\r\n pt: [{ pt: [isDsPad] }],\r\n pr: [{ pr: [isDsPad] }],\r\n pb: [{ pb: [isDsPad] }],\r\n pl: [{ pl: [isDsPad] }],\r\n ps: [{ ps: [isDsPad] }],\r\n pe: [{ pe: [isDsPad] }],\r\n\r\n /* ── Margin (usa mesmo sp-*) ──────────────────────────────────────── */\r\n m: [{ m: [isDsPad] }],\r\n mx: [{ mx: [isDsPad] }],\r\n my: [{ my: [isDsPad] }],\r\n mt: [{ mt: [isDsPad] }],\r\n mr: [{ mr: [isDsPad] }],\r\n mb: [{ mb: [isDsPad] }],\r\n ml: [{ ml: [isDsPad] }],\r\n ms: [{ ms: [isDsPad] }],\r\n me: [{ me: [isDsPad] }],\r\n\r\n /* ── Inset / position (top/right/bottom/left) ─────────────────────── */\r\n inset: [{ inset: [isDsPad] }],\r\n \"inset-x\": [{ \"inset-x\": [isDsPad] }],\r\n \"inset-y\": [{ \"inset-y\": [isDsPad] }],\r\n \"top\": [{ top: [isDsPad] }],\r\n \"right\": [{ right: [isDsPad] }],\r\n \"bottom\": [{ bottom: [isDsPad] }],\r\n \"left\": [{ left: [isDsPad] }],\r\n \"start\": [{ start: [isDsPad] }],\r\n \"end\": [{ end: [isDsPad] }],\r\n\r\n /* ── Gap ──────────────────────────────────────────────────────────── */\r\n gap: [{ gap: [isDsGap] }],\r\n \"gap-x\": [{ \"gap-x\": [isDsGap] }],\r\n \"gap-y\": [{ \"gap-y\": [isDsGap] }],\r\n\r\n /* ── Rounded (todas as cantos) ────────────────────────────────────── */\r\n rounded: [{ rounded: [isDsRadius] }],\r\n \"rounded-s\": [{ \"rounded-s\": [isDsRadius] }],\r\n \"rounded-e\": [{ \"rounded-e\": [isDsRadius] }],\r\n \"rounded-t\": [{ \"rounded-t\": [isDsRadius] }],\r\n \"rounded-r\": [{ \"rounded-r\": [isDsRadius] }],\r\n \"rounded-b\": [{ \"rounded-b\": [isDsRadius] }],\r\n \"rounded-l\": [{ \"rounded-l\": [isDsRadius] }],\r\n \"rounded-ss\": [{ \"rounded-ss\": [isDsRadius] }],\r\n \"rounded-se\": [{ \"rounded-se\": [isDsRadius] }],\r\n \"rounded-ee\": [{ \"rounded-ee\": [isDsRadius] }],\r\n \"rounded-es\": [{ \"rounded-es\": [isDsRadius] }],\r\n \"rounded-tl\": [{ \"rounded-tl\": [isDsRadius] }],\r\n \"rounded-tr\": [{ \"rounded-tr\": [isDsRadius] }],\r\n \"rounded-br\": [{ \"rounded-br\": [isDsRadius] }],\r\n \"rounded-bl\": [{ \"rounded-bl\": [isDsRadius] }],\r\n\r\n /* ── Shadow ───────────────────────────────────────────────────────── */\r\n shadow: [{ shadow: [isDsShadow] }],\r\n\r\n /* ── Form sizes (min-h, h, w, size) ───────────────────────────────── */\r\n \"min-h\": [{ \"min-h\": [isDsForm] }],\r\n h: [{ h: [isDsForm] }],\r\n w: [{ w: [isDsForm] }],\r\n size: [{ size: [isDsForm] }],\r\n },\r\n },\r\n});\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","// src/utils/tv.ts\r\n// tv() customizado que ensina o tailwind-merge a reconhecer\r\n// os presets tipográficos do iGreen como font-size, não text-color.\r\nimport { tv as tvBase, type TVConfig } from \"tailwind-variants\";\r\n\r\n// Objeto de config — NÃO é o resultado de extendTailwindMerge()\r\n// TV3 recebe o config diretamente e aplica o merge internamente\r\nconst twMergeConfig = {\r\n extend: {\r\n classGroups: {\r\n \"font-size\": [\r\n {\r\n text: [\r\n // Displays (fluid clamp)\r\n \"display-2xl\", \"display-xl\", \"display-lg\", \"display-md\",\r\n // Headings (xs estático, sm-xl fluid clamp)\r\n \"heading-xl\", \"heading-lg\", \"heading-md\", \"heading-sm\", \"heading-xs\",\r\n // Titles (weight 600 default)\r\n \"title-lg\", \"title-md\", \"title-sm\",\r\n // Body (xs/sm = weight 500 interactive; md-2xl = 400 corrido)\r\n \"body-2xl\", \"body-xl\", \"body-lg\", \"body-md\", \"body-sm\", \"body-xs\",\r\n // Captions (weight 400)\r\n \"caption-md\", \"caption-sm\", \"caption-xs\",\r\n // Stat (número de métrica/KPI — estático, bold, leading tight)\r\n \"stat-xl\", \"stat-lg\", \"stat-md\", \"stat-sm\",\r\n // Code (mono regular)\r\n \"code-md\", \"code-sm\",\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n};\r\n\r\nexport const tv: typeof tvBase = (options, config) =>\r\n tvBase(options, {\r\n ...config,\r\n twMergeConfig,\r\n } as TVConfig);\r\n\r\nexport type { VariantProps } from \"tailwind-variants\";\r\n","import { tv, type VariantProps } from \"@/utils/tv\";\r\n\r\n/**\r\n * Button styles — V3 tokens (alinhado com /design-and-table-v2)\r\n *\r\n * Specs base:\r\n * - font-size 13px (text-body-md font-medium = 0.8125rem / 600)\r\n * - border-radius 10px (rounded-radius-lg)\r\n * - secondary usa fg-secondary\r\n * - rings cor-pura via ring.{brand|danger|success|warning|secondary}\r\n *\r\n * Variants color: primary/secondary/critical/success/warning\r\n * - primary → bg-brand / fg-brand / border-brand\r\n * - critical → bg-danger / fg-danger / border-danger-muted\r\n * - secondary → neutros (bg-muted, fg-secondary, border-default)\r\n *\r\n * Variants visual: filled/outline/soft/ghost\r\n *\r\n * Sizes mantidas (largura/espaçamento como estavam).\r\n *\r\n * Disabled: opacity-50 (v3 não tem bg-disabled token).\r\n */\r\nexport const buttonVariants = tv({\r\n base: [\r\n \"inline-flex items-center justify-center\",\r\n \"select-none whitespace-nowrap\",\r\n \"focus-visible:outline-none\",\r\n \"border border-transparent\",\r\n \"text-body-sm font-semibold leading-none\", // 13px / 600 — alinhado com sandbox btn\r\n \"[&_svg]:shrink-0\", // SVG não diminui; tamanho controlado por size\r\n \"transition-all duration-200 ease-out\",\r\n \"cursor-pointer\",\r\n \"focus-visible:ring-4\",\r\n ],\r\n\r\n variants: {\r\n color: {\r\n primary: \"focus-visible:ring-ring-brand\",\r\n secondary: \"focus-visible:ring-ring-secondary\",\r\n critical: \"focus-visible:ring-ring-danger\",\r\n success: \"focus-visible:ring-ring-success\",\r\n warning: \"focus-visible:ring-ring-warning\",\r\n },\r\n\r\n variant: {\r\n filled: \"\",\r\n outline: \"\",\r\n soft: \"\",\r\n ghost: \"bg-transparent\",\r\n },\r\n\r\n size: {\r\n // h28 / pad 10 / gap 6 / radius 8 / icon 12\r\n \"2xs\": \"min-h-form-xs px-pad-lg gap-gp-sm rounded-radius-md [&_svg]:size-[12px]\",\r\n // h32 / pad 12 / gap 6 / radius 8 / icon 14\r\n xs: \"min-h-form-sm px-pad-xl gap-gp-sm rounded-radius-md [&_svg]:size-[14px]\",\r\n // h36 / pad 12 / gap 6 / radius 10 / icon 14\r\n sm: \"min-h-form-md px-pad-xl gap-gp-sm rounded-radius-lg [&_svg]:size-[14px]\",\r\n // h40 / pad 16 / gap 6 / radius 10 / icon 14 (alinhado com sandbox Exportar)\r\n md: \"min-h-form-lg px-pad-2xl gap-gp-sm rounded-radius-lg [&_svg]:size-[14px]\",\r\n // h44 / pad 16 / gap 8 / radius 10 / icon 16\r\n lg: \"min-h-form-xl px-pad-2xl gap-gp-md rounded-radius-lg [&_svg]:size-[16px]\",\r\n\r\n // Icon buttons — width = height (square). Regra: SVG +2px vs versão com label\r\n // (precisa preencher mais o quadrado sem o texto carregando peso visual).\r\n \"icon-2xs\": \"size-form-xs rounded-radius-md p-0 [&_svg]:size-[14px]\", // 28×28 / +2 (12→14)\r\n \"icon-xs\": \"size-form-sm rounded-radius-md p-0 [&_svg]:size-[16px]\", // 32×32 / +2 (14→16)\r\n \"icon-sm\": \"size-form-md rounded-radius-lg p-0 [&_svg]:size-[16px]\", // 36×36 / +2 (14→16)\r\n \"icon-md\": \"size-form-lg rounded-radius-lg p-0 [&_svg]:size-[16px]\", // 40×40 / +2 (14→16)\r\n \"icon-lg\": \"size-form-xl rounded-radius-lg p-0 [&_svg]:size-[18px]\", // 44×44 / +2 (16→18)\r\n },\r\n\r\n fullWidth: {\r\n true: \"w-full flex-1\",\r\n },\r\n\r\n /**\r\n * Shape do botão:\r\n * - rounded (default): mantém o radius da `size` (varia por tamanho)\r\n * - pill: força `rounded-full` (override com `!` pra ganhar do size)\r\n */\r\n shape: {\r\n rounded: \"\",\r\n pill: \"!rounded-full\",\r\n },\r\n\r\n disabled: {\r\n true: \"pointer-events-none opacity-50\",\r\n },\r\n },\r\n\r\n compoundVariants: [\r\n // ── Primary (brand) ─────────────────────────────────────────────\r\n {\r\n color: \"primary\", variant: \"filled\",\r\n class: \"bg-bg-brand text-fg-on-brand hover:bg-bg-brand-hover\",\r\n },\r\n {\r\n color: \"primary\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-brand text-fg-brand shadow-sh-sm hover:bg-bg-brand-subtle hover:border-transparent hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"primary\", variant: \"soft\",\r\n class: \"bg-bg-brand-subtle text-fg-brand hover:bg-bg-brand-subtle-hover\",\r\n },\r\n {\r\n color: \"primary\", variant: \"ghost\",\r\n class: \"text-fg-brand hover:bg-bg-brand-subtle\",\r\n },\r\n\r\n // ── Secondary (neutro) ──────────────────────────────────────────\r\n {\r\n color: \"secondary\", variant: \"filled\",\r\n class: \"bg-bg-muted text-fg-muted hover:bg-bg-muted-hover hover:text-fg-default\",\r\n },\r\n {\r\n // Outline alinhado com `.btn.tbl-tool-btn` do design-and-table-v2:\r\n // light = bg-surface + border-subtle + fg-default + shadow-sm (mantém no hover)\r\n // dark = bg-muted + border-input + fg-muted + sem shadow\r\n color: \"secondary\", variant: \"outline\",\r\n class: [\r\n \"bg-bg-surface border-border-subtle text-fg-default shadow-sh-sm\",\r\n \"dark:bg-bg-muted dark:border-border-input dark:text-fg-muted dark:shadow-sh-none\",\r\n \"hover:bg-bg-muted-hover hover:text-fg-default\",\r\n \"dark:hover:bg-bg-muted-hover dark:hover:text-fg-default\",\r\n ].join(\" \"),\r\n },\r\n {\r\n color: \"secondary\", variant: \"soft\",\r\n class: \"bg-bg-muted text-fg-muted hover:bg-bg-muted-hover hover:text-fg-default\",\r\n },\r\n {\r\n color: \"secondary\", variant: \"ghost\",\r\n class: \"text-fg-muted hover:bg-bg-muted hover:text-fg-default\",\r\n },\r\n\r\n // ── Critical (danger) ───────────────────────────────────────────\r\n {\r\n color: \"critical\", variant: \"filled\",\r\n class: \"bg-bg-danger text-fg-on-danger hover:bg-bg-danger-hover\",\r\n },\r\n {\r\n color: \"critical\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-danger-muted text-fg-danger shadow-sh-sm hover:bg-bg-danger-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"critical\", variant: \"soft\",\r\n class: \"bg-bg-danger-muted text-fg-danger hover:bg-bg-danger-muted-hover\",\r\n },\r\n {\r\n color: \"critical\", variant: \"ghost\",\r\n class: \"text-fg-danger hover:bg-bg-danger-muted\",\r\n },\r\n\r\n // ── Success ─────────────────────────────────────────────────────\r\n {\r\n color: \"success\", variant: \"filled\",\r\n class: \"bg-bg-success text-fg-on-success hover:bg-bg-success-hover\",\r\n },\r\n {\r\n color: \"success\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-success-muted text-fg-success shadow-sh-sm hover:bg-bg-success-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"success\", variant: \"soft\",\r\n class: \"bg-bg-success-muted text-fg-success hover:bg-bg-success-muted-hover\",\r\n },\r\n {\r\n color: \"success\", variant: \"ghost\",\r\n class: \"text-fg-success hover:bg-bg-success-muted\",\r\n },\r\n\r\n // ── Warning ─────────────────────────────────────────────────────\r\n {\r\n color: \"warning\", variant: \"filled\",\r\n class: \"bg-bg-warning text-fg-on-warning hover:bg-bg-warning-hover\",\r\n },\r\n {\r\n color: \"warning\", variant: \"outline\",\r\n class: \"bg-bg-surface border-border-warning-muted text-fg-warning shadow-sh-sm hover:bg-bg-warning-muted hover:shadow-sh-none\",\r\n },\r\n {\r\n color: \"warning\", variant: \"soft\",\r\n class: \"bg-bg-warning-muted text-fg-warning hover:bg-bg-warning-muted-hover\",\r\n },\r\n {\r\n color: \"warning\", variant: \"ghost\",\r\n class: \"text-fg-warning hover:bg-bg-warning-muted\",\r\n },\r\n\r\n // ── Disabled — SEMPRE por último ────────────────────────────────\r\n { disabled: true, class: \"pointer-events-none opacity-50\" },\r\n ],\r\n\r\n defaultVariants: {\r\n color: \"primary\",\r\n variant: \"filled\",\r\n size: \"md\",\r\n shape: \"rounded\",\r\n },\r\n});\r\n\r\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>;\r\n","import { forwardRef } from \"react\";\nimport type { ButtonProps } from \"./button.types\";\nimport { buttonVariants } from \"./button.styles\";\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n color,\n variant,\n size,\n shape,\n fullWidth,\n loading = false,\n disabled = false,\n iconLeft,\n iconRight,\n children,\n className,\n type = \"button\",\n ...rest\n },\n ref,\n ) {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={isDisabled}\n className={buttonVariants({\n color,\n variant,\n size,\n shape,\n fullWidth,\n disabled: isDisabled,\n className,\n })}\n {...rest}\n >\n {loading && <Spinner />}\n {!loading && iconLeft}\n {children}\n {!loading && iconRight}\n </button>\n );\n },\n);\n\nfunction Spinner() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className=\"animate-spin\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"28\"\n strokeDashoffset=\"8\"\n className=\"opacity-70\"\n />\n </svg>\n );\n}\n","import * as React from \"react\"\r\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\r\nimport { X } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Dialog = DialogPrimitive.Root\r\n\r\nconst DialogTrigger = DialogPrimitive.Trigger\r\n\r\nconst DialogPortal = DialogPrimitive.Portal\r\n\r\nconst DialogClose = DialogPrimitive.Close\r\n\r\nconst DialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Overlay\r\n ref={ref}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/30 supports-[backdrop-filter]:backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\r\n\r\nconst DialogContent = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\r\n /** Esconde o botão \"X\" (Close) no canto superior direito. Default: false. */\r\n hideClose?: boolean;\r\n }\r\n>(({ className, children, hideClose, ...props }, ref) => (\r\n <DialogPortal>\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-gp-4xl rounded-radius-base bg-bg-surface p-pad-4xl text-body-md text-fg-default shadow-sh-xl outline-float duration-200 sm:max-w-md 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\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {!hideClose && (\r\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-radius-sm opacity-70 transition-opacity hover:opacity-100 outline-none ring-0 ring-ring-brand focus-visible:ring-4 disabled:pointer-events-none data-[state=open]:bg-bg-muted data-[state=open]:text-fg-muted\">\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n))\r\nDialogContent.displayName = DialogPrimitive.Content.displayName\r\n\r\nconst DialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\"flex flex-col gap-gp-sm\", className)}\r\n {...props}\r\n />\r\n)\r\nDialogHeader.displayName = \"DialogHeader\"\r\n\r\nconst DialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse gap-gp-md sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nDialogFooter.displayName = \"DialogFooter\"\r\n\r\nconst DialogTitle = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\r\n \"text-title-md font-medium text-fg-default leading-none\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogTitle.displayName = DialogPrimitive.Title.displayName\r\n\r\nconst DialogDescription = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-body-md text-fg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDialogDescription.displayName = DialogPrimitive.Description.displayName\r\n\r\nexport {\r\n Dialog,\r\n DialogPortal,\r\n DialogOverlay,\r\n DialogClose,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { type DialogProps } from \"@radix-ui/react-dialog\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { Search } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/shadcn/dialog\"\r\n\r\n/**\r\n * Command — alinhado com o views-popover do design-and-table-v2.\r\n *\r\n * Estrutura:\r\n * - <Command> raiz (flex column)\r\n * - <CommandInput> = input \"real\" boxed (bg-input + border + radius-lg + shadow)\r\n * - <CommandList> com padding 4px\r\n * - <CommandGroup> heading uppercase + items\r\n * - <CommandItem> radius-lg (10px), px 12, py 8, font 13px, ícones 18px\r\n *\r\n * Pattern do input replica `.tbl-views-pop-search` exatamente.\r\n */\r\n\r\nconst Command = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive\r\n ref={ref}\r\n className={cn(\r\n // `bg-popover`/`text-popover-foreground` são vocabulário SHADCN, não do DS —\r\n // dependem da bridge do `globals.css`/`index.css`, que NÃO viaja pros canais npm\r\n // e submódulo. Lá a var não existe e a cor cai em `currentColor` (L-039/L-040).\r\n //\r\n // ⚠️ O substituto é `bg-bg-surface`, NÃO `bg-bg-dropdown`. A primeira troca (v0.36.0)\r\n // usou `dropdown` por ser o token da receita de flutuante — mas ele é TRANSLÚCIDO no\r\n // dark (`canvas` a 70%, pareado com `before:backdrop-blur-2xl`, que este componente\r\n // não tem), enquanto a bridge resolvia `popover` pra `surface-elevated`, OPACO.\r\n // Medido: light idêntico nos dois; dark `oklch(0.225 0 0)` vs `oklab(0.205 0 0 / 0.7)`.\r\n // `bg-bg-surface` reproduz o valor original nos DOIS modos.\r\n \"flex h-full w-full flex-col overflow-hidden p-pad-xl bg-bg-surface text-fg-default\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommand.displayName = CommandPrimitive.displayName\r\n\r\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\r\n return (\r\n <Dialog {...props}>\r\n <DialogContent\r\n hideClose\r\n // A11y: Radix exige título; aqui é sr-only (paleta de comando não tem\r\n // header visível) e opt-out de descrição.\r\n aria-describedby={undefined}\r\n className={cn(\r\n \"overflow-hidden p-0 gap-0 sm:max-w-[384px]\",\r\n \"rounded-[12px] border border-border-default\",\r\n // Outline padrão de elementos flutuantes\r\n \"outline-float\"\r\n )}\r\n >\r\n <DialogTitle className=\"sr-only\">Comando</DialogTitle>\r\n <Command>{children}</Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\n/* ── Input boxed (igual views-popover search) ─────────────────────────────── */\r\nconst CommandInput = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Input>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n cmdk-input-wrapper=\"\"\r\n className={cn(\r\n \"flex items-center gap-gp-md h-form-md px-pad-xl rounded-radius-lg\",\r\n \"bg-bg-input border border-border-subtle shadow-sh-sm\",\r\n \"transition-[border-color,box-shadow,background-color] duration-150\",\r\n \"focus-within:border-border-brand focus-within:shadow-sh-ring\",\r\n \"dark:bg-bg-muted dark:border-border-input dark:shadow-sh-none\"\r\n )}\r\n >\r\n <Search className=\"size-[14px] text-fg-muted shrink-0\" strokeWidth={1.8} />\r\n <CommandPrimitive.Input\r\n ref={ref}\r\n className={cn(\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n))\r\nCommandInput.displayName = CommandPrimitive.Input.displayName\r\n\r\n/* ── List ─────────────────────────────────────────────────────────────────── */\r\nconst CommandList = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.List>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.List\r\n ref={ref}\r\n className={cn(\r\n \"max-h-[300px] overflow-y-auto overflow-x-hidden mt-pad-md scrollbar-thin\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandList.displayName = CommandPrimitive.List.displayName\r\n\r\nconst CommandEmpty = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Empty>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\r\n>((props, ref) => (\r\n <CommandPrimitive.Empty\r\n ref={ref}\r\n className=\"py-pad-5xl text-center text-body-md text-fg-muted\"\r\n {...props}\r\n />\r\n))\r\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\r\n\r\n/* ── Group (heading uppercase 28px, sem padding extra no group) ──────────── */\r\nconst CommandGroup = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Group>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Group\r\n ref={ref}\r\n className={cn(\r\n \"overflow-hidden text-fg-default\",\r\n \"[&_[cmdk-group-heading]]:flex [&_[cmdk-group-heading]]:items-center\",\r\n \"[&_[cmdk-group-heading]]:h-[28px] [&_[cmdk-group-heading]]:px-pad-xl\",\r\n \"[&_[cmdk-group-heading]]:text-caption-xs [&_[cmdk-group-heading]]:font-bold\",\r\n \"[&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider\",\r\n \"[&_[cmdk-group-heading]]:text-fg-subtle\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandGroup.displayName = CommandPrimitive.Group.displayName\r\n\r\nconst CommandSeparator = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"mx-pad-xs my-pad-xs h-px bg-border-default\", className)}\r\n {...props}\r\n />\r\n))\r\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\r\n\r\n/* ── Item: px-12 py-8, radius-lg (10px), font 13px, ícones 18px ───────────── */\r\nconst CommandItem = React.forwardRef<\r\n React.ElementRef<typeof CommandPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center gap-gp-md\",\r\n \"rounded-radius-lg px-pad-xl py-pad-md\",\r\n \"text-body-sm font-medium text-fg-muted\",\r\n \"outline-none transition-colors\",\r\n \"data-[selected='true']:bg-bg-muted data-[selected='true']:text-fg-default data-[selected='true']:[&_svg]:text-fg-default\",\r\n \"data-[disabled='true']:pointer-events-none data-[disabled='true']:opacity-50\",\r\n \"[&_svg]:pointer-events-none [&_svg]:size-[18px] [&_svg]:shrink-0 [&_svg]:text-fg-muted\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandItem.displayName = CommandPrimitive.Item.displayName\r\n\r\nconst CommandShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\r\n \"ml-auto text-caption-sm tracking-wider text-fg-subtle\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\nCommandShortcut.displayName = \"CommandShortcut\"\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","import * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Popover — primitives baixo nível pra menus flutuantes (Cols, Sort, Filter, Views).\r\n *\r\n * Visual unificado com DropdownMenu/Select: bg-bg-dropdown (frosted-glass no\r\n * dark via `before:backdrop-blur-2xl`), border-default, radius 12px, shadow-lg\r\n * + outline-float (halo). Padronizado pra evitar inconsistência visual entre\r\n * menus de ação (DropdownMenu) e menus de configuração (Popover de Filtros,\r\n * Sort, Cols, Views).\r\n *\r\n * Não tem `Item` próprio — o consumer monta o conteúdo do popover livremente.\r\n * Pra menus de ação com items semânticos, prefira `DropdownMenu`.\r\n */\r\n\r\nconst Popover = PopoverPrimitive.Root;\r\nconst PopoverTrigger = PopoverPrimitive.Trigger;\r\nconst PopoverAnchor = PopoverPrimitive.Anchor;\r\nconst PopoverClose = PopoverPrimitive.Close;\r\n\r\n/* ── Mobile sheet (<md) ───────────────────────────────────────────────\r\n * Em telas <md o conteúdo vira sheet bottom-up colado nas bordas: full-width,\r\n * só cantos superiores arredondados, flush, sem outline/shadow, cap 92vh.\r\n * O wrapper do Radix Popper é reposicionado no globals.css via a regra\r\n * `[data-radix-popper-content-wrapper]:has([data-mobile-sheet])` (mesma usada\r\n * pelo DropdownMenu). Animação: neutraliza o zoom e desliza de baixo. */\r\nconst POPOVER_MOBILE_SHEET = [\r\n \"max-md:w-full max-md:min-w-0 max-md:max-w-none\",\r\n \"max-md:!max-h-[92vh]\",\r\n \"max-md:rounded-b-none max-md:rounded-t-[12px]\",\r\n \"max-md:border-x-0 max-md:border-b-0\",\r\n \"max-md:outline-none max-md:shadow-none\",\r\n // Respiro de 20px (pad-3xl) no rodapé pra o conteúdo (footer/última seção)\r\n // não colar na borda inferior do device quando vira sheet.\r\n \"max-md:pb-pad-3xl\",\r\n \"max-md:data-[state=open]:zoom-in-100 max-md:data-[state=closed]:zoom-out-100\",\r\n \"max-md:data-[state=open]:slide-in-from-bottom-12 max-md:data-[state=closed]:slide-out-to-bottom-12\",\r\n].join(\" \");\r\n\r\n/** Backdrop suave — só mobile (md:hidden). Toque fecha via dismiss do Radix. */\r\nconst PopoverSheetBackdrop = () => (\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"fixed inset-0 z-[55] bg-overlay-scrim pointer-events-auto md:hidden animate-in fade-in-0 duration-150\"\r\n />\r\n);\r\n\r\ntype PopoverContentProps = React.ComponentPropsWithoutRef<\r\n typeof PopoverPrimitive.Content\r\n> & {\r\n /**\r\n * Renderiza o conteúdo SEM `<Portal>`. Útil quando o conteúdo interno usa\r\n * libs como dnd-kit que conflitam com o transform do Floating UI do Portal.\r\n * Default `false` (usa portal — comportamento padrão).\r\n */\r\n disablePortal?: boolean;\r\n /**\r\n * Em telas <md, transforma o popover em **sheet bottom-up** colado nas bordas,\r\n * com backdrop suave (toque fora fecha). No desktop não muda nada. Default `true`.\r\n * Passe `false` pra manter o popover ancorado no trigger também em mobile.\r\n * (Mesmo nome da prop do `DropdownMenu` — comportamento consistente.)\r\n */\r\n mobileSheet?: boolean;\r\n};\r\n\r\nconst PopoverContent = React.forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n PopoverContentProps\r\n>(\r\n (\r\n { className, align = \"center\", sideOffset = 6, disablePortal, mobileSheet = true, ...props },\r\n ref,\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n data-mobile-sheet={mobileSheet ? \"\" : undefined}\r\n className={cn(\r\n \"relative z-50\",\r\n // Unificado com DropdownMenu/Select: bg-bg-dropdown (frosted no dark)\r\n // + border-border-default + outline-float. O `before` pseudo-element\r\n // aplica o blur backdrop (necessário pra bg-bg-dropdown semi-transparente\r\n // render correto no dark mode).\r\n \"bg-bg-dropdown\",\r\n \"border border-border-default rounded-[12px] shadow-sh-lg outline-float\",\r\n \"before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150\",\r\n \"text-fg-default\",\r\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\r\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\r\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\r\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n mobileSheet && POPOVER_MOBILE_SHEET,\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n\r\n if (disablePortal) {\r\n // Sem portal: backdrop inline (fixed escapa do flow mesmo assim).\r\n return mobileSheet ? (\r\n <>\r\n <PopoverSheetBackdrop />\r\n {content}\r\n </>\r\n ) : (\r\n content\r\n );\r\n }\r\n\r\n // Com portal: backdrop em Portal próprio (cada Portal Radix aceita 1 filho\r\n // e é montado/desmontado junto com o popover via Presence).\r\n return (\r\n <>\r\n {mobileSheet && (\r\n <PopoverPrimitive.Portal>\r\n <PopoverSheetBackdrop />\r\n </PopoverPrimitive.Portal>\r\n )}\r\n <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>\r\n </>\r\n );\r\n },\r\n);\r\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\r\n\r\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent };\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * InputGroup — composição rica pra inputs com addons (prefixo, sufixo, ícone, botão).\r\n *\r\n * Estrutura:\r\n * <InputGroup>\r\n * <InputGroupAddon align=\"inline-start\"><Icon /></InputGroupAddon>\r\n * <InputGroupInput placeholder=\"...\" />\r\n * <InputGroupAddon align=\"inline-end\">\r\n * <InputGroupButton><X /></InputGroupButton>\r\n * </InputGroupAddon>\r\n * </InputGroup>\r\n *\r\n * Visual alinhado com `.tbl-form-input` (mesmo bg/border/radius do <Input>).\r\n * State (default/error/warning/success) afeta borda + focus ring (shadow-sh-ring-*).\r\n */\r\n\r\nexport type InputGroupState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\n/* ── Wrapper ─────────────────────────────────────────────────────────────── */\r\nconst inputGroupVariants = cva(\r\n [\r\n \"group/input-group relative flex w-full items-center\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50 has-[input:disabled]:hover:bg-bg-input dark:has-[input:disabled]:hover:bg-bg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs px-pad-md gap-gp-xs rounded-radius-md text-body-sm font-normal\",\r\n xs: \"min-h-form-sm px-pad-xl gap-gp-md rounded-radius-md text-body-sm font-normal\",\r\n sm: \"min-h-form-md px-pad-xl gap-gp-md rounded-radius-lg text-body-sm font-normal\",\r\n md: \"min-h-form-lg px-pad-xl gap-gp-md rounded-radius-lg text-body-sm font-normal\",\r\n },\r\n state: {\r\n default: \"focus-within:border-border-brand focus-within:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-within:border-border-danger-muted focus-within:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-within:border-border-warning-muted focus-within:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-within:border-border-success-muted focus-within:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: { size: \"md\", state: \"default\" },\r\n },\r\n);\r\n\r\nexport type InputGroupVariantProps = VariantProps<typeof inputGroupVariants>;\r\n\r\nexport interface InputGroupProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n InputGroupVariantProps {}\r\n\r\nexport const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\r\n ({ className, size, state, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n data-slot=\"input-group\"\r\n className={cn(inputGroupVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\nInputGroup.displayName = \"InputGroup\";\r\n\r\n/* ── Input (sem bg/border — herda do wrapper) ─────────────────────────── */\r\nconst inputGroupInputVariants = cva([\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"disabled:cursor-not-allowed\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n]);\r\n\r\nexport interface InputGroupInputProps\r\n extends React.InputHTMLAttributes<HTMLInputElement> {}\r\n\r\nexport const InputGroupInput = React.forwardRef<\r\n HTMLInputElement,\r\n InputGroupInputProps\r\n>(({ className, type, ...props }, ref) => (\r\n <input\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input-group-input\"\r\n className={cn(inputGroupInputVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupInput.displayName = \"InputGroupInput\";\r\n\r\n/* ── Textarea ──────────────────────────────────────────────────────────── */\r\nconst inputGroupTextareaVariants = cva([\r\n \"flex-1 min-w-0 bg-transparent border-0 outline-none resize-y\",\r\n \"py-pad-md\",\r\n \"text-body-sm font-normal leading-[1.5] text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"disabled:cursor-not-allowed\",\r\n]);\r\n\r\nexport interface InputGroupTextareaProps\r\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\r\n\r\nexport const InputGroupTextarea = React.forwardRef<\r\n HTMLTextAreaElement,\r\n InputGroupTextareaProps\r\n>(({ className, ...props }, ref) => (\r\n <textarea\r\n ref={ref}\r\n data-slot=\"input-group-textarea\"\r\n className={cn(inputGroupTextareaVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\r\n\r\n/* ── Addon (prefix/suffix slot) ───────────────────────────────────────── */\r\nconst inputGroupAddonVariants = cva(\r\n \"flex items-center text-fg-muted shrink-0 select-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n align: {\r\n // Inline = horizontal (start/end do eixo do texto)\r\n \"inline-start\": \"\",\r\n \"inline-end\": \"\",\r\n // Block = vertical (top/bottom — multi-linha em textarea)\r\n \"block-start\": \"\",\r\n \"block-end\": \"\",\r\n },\r\n },\r\n defaultVariants: { align: \"inline-start\" },\r\n },\r\n);\r\n\r\nexport type InputGroupAddonAlign =\r\n | \"inline-start\"\r\n | \"inline-end\"\r\n | \"block-start\"\r\n | \"block-end\";\r\n\r\nexport interface InputGroupAddonProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n align?: InputGroupAddonAlign;\r\n}\r\n\r\nexport const InputGroupAddon = React.forwardRef<\r\n HTMLDivElement,\r\n InputGroupAddonProps\r\n>(({ className, align = \"inline-start\", onClick, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n data-slot=\"input-group-addon\"\r\n data-align={align}\r\n className={cn(inputGroupAddonVariants({ align }), className)}\r\n onClick={(e) => {\r\n // Click no addon (ícone, texto, espaço vazio) → foca o input do grupo.\r\n // Botões dentro do addon (`InputGroupButton`) continuam funcionando.\r\n if ((e.target as HTMLElement).closest(\"button\")) {\r\n onClick?.(e);\r\n return;\r\n }\r\n e.currentTarget.parentElement\r\n ?.querySelector<HTMLInputElement | HTMLTextAreaElement>(\r\n \"input, textarea\",\r\n )\r\n ?.focus();\r\n onClick?.(e);\r\n }}\r\n {...props}\r\n />\r\n));\r\nInputGroupAddon.displayName = \"InputGroupAddon\";\r\n\r\n/* ── Text (texto formatado dentro do addon) ───────────────────────────── */\r\nexport interface InputGroupTextProps\r\n extends React.HTMLAttributes<HTMLSpanElement> {}\r\n\r\nexport const InputGroupText = React.forwardRef<\r\n HTMLSpanElement,\r\n InputGroupTextProps\r\n>(({ className, ...props }, ref) => (\r\n <span\r\n ref={ref}\r\n data-slot=\"input-group-text\"\r\n className={cn(\r\n \"text-body-xs text-fg-muted whitespace-nowrap\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n));\r\nInputGroupText.displayName = \"InputGroupText\";\r\n\r\n/* ── Button (botão dentro do addon — ex copy/clear) ───────────────────── */\r\nconst inputGroupButtonVariants = cva(\r\n [\r\n \"inline-flex items-center justify-center shrink-0\",\r\n \"rounded-radius-md transition-colors outline-none cursor-pointer\",\r\n \"focus-visible:ring-4 focus-visible:ring-ring-brand\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50\",\r\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xs: \"h-form-xs px-pad-md gap-gp-xs text-body-xs font-normal\",\r\n \"icon-xs\": \"size-form-xs\",\r\n sm: \"h-form-sm px-pad-lg gap-gp-md text-body-xs font-normal\",\r\n \"icon-sm\": \"size-form-sm\",\r\n },\r\n variant: {\r\n default: \"bg-bg-muted text-fg-default hover:bg-bg-muted-hover\",\r\n destructive: \"bg-bg-danger text-fg-on-danger hover:bg-bg-danger-hover\",\r\n outline: \"border border-border-input bg-transparent text-fg-default hover:bg-bg-muted\",\r\n secondary: \"bg-bg-emphasis text-fg-default hover:bg-bg-muted-hover\",\r\n ghost: \"bg-transparent text-fg-muted hover:bg-bg-muted hover:text-fg-default\",\r\n link: \"bg-transparent text-fg-brand underline-offset-4 hover:underline\",\r\n },\r\n },\r\n defaultVariants: { size: \"xs\", variant: \"ghost\" },\r\n },\r\n);\r\n\r\nexport interface InputGroupButtonProps\r\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\r\n VariantProps<typeof inputGroupButtonVariants> {}\r\n\r\nexport const InputGroupButton = React.forwardRef<\r\n HTMLButtonElement,\r\n InputGroupButtonProps\r\n>(({ className, size, variant, type = \"button\", ...props }, ref) => (\r\n <button\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input-group-button\"\r\n className={cn(inputGroupButtonVariants({ size, variant }), className)}\r\n {...props}\r\n />\r\n));\r\nInputGroupButton.displayName = \"InputGroupButton\";\r\n\r\nexport {\r\n inputGroupVariants,\r\n inputGroupInputVariants,\r\n inputGroupTextareaVariants,\r\n inputGroupAddonVariants,\r\n inputGroupButtonVariants,\r\n};\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\n/**\r\n * DropdownMenu — alinhado com `.tbl-row-actions-menu` / `.tbl-more-menu`\r\n * do design-and-table-v2.\r\n *\r\n * Container:\r\n * - bg-bg-dropdown (token frosted-glass — solid no light, 70% transparent + blur no dark)\r\n * - border 1px + radius 12px + padding 6px + shadow-lg\r\n * - min-w 180px, items separados por 1px (gap-px)\r\n *\r\n * Item:\r\n * - h variavel, padding 8/10, radius 6px, gap 10, font 13px medium\r\n * - rest: fg-muted (texto + ícone), hover/focus: bg-muted + fg-default\r\n * - variant=\"destructive\": fg-danger + hover bg-danger-muted\r\n *\r\n * Divider:\r\n * - 1px bg-border-default com margin 4px (não estende além do padding)\r\n */\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\n/* ── Container (Content + SubContent) ─────────────────────────────────────── */\r\nconst CONTAINER_CLASSES = [\r\n \"relative z-50 min-w-[180px] overflow-hidden\",\r\n \"flex flex-col gap-px\",\r\n \"rounded-[12px] bg-bg-dropdown p-pad-sm\",\r\n \"border border-border-default shadow-sh-lg\",\r\n // Outline padrão de elementos flutuantes\r\n \"outline-float\",\r\n \"text-fg-muted\",\r\n // Frosted-glass blur (necessário pra fazer o bg-dropdown semi-transparent render correto no dark)\r\n \"before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150\",\r\n // Animações Radix\r\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\r\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\r\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\r\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n \"origin-[--radix-dropdown-menu-content-transform-origin]\",\r\n].join(\" \")\r\n\r\n/* ── Mobile sheet (só Content, <md) ───────────────────────────────────────\r\n * Em telas <md o Content vira sheet bottom-up colado nas bordas: full-width,\r\n * só cantos superiores arredondados, flush, sem outline/shadow, cap 92vh.\r\n * O reposicionamento do wrapper Radix é feito no globals.css via [data-mobile-sheet].\r\n * Animação: neutraliza o zoom e desliza de baixo (sobrescreve os slides por side).\r\n */\r\nconst MOBILE_SHEET_CLASSES = [\r\n \"max-md:w-full max-md:min-w-0 max-md:max-w-none\",\r\n \"max-md:!max-h-[92vh]\",\r\n \"max-md:rounded-b-none max-md:rounded-t-[12px]\",\r\n \"max-md:border-x-0 max-md:border-b-0\",\r\n \"max-md:outline-none max-md:shadow-none\",\r\n \"max-md:data-[state=open]:zoom-in-100 max-md:data-[state=closed]:zoom-out-100\",\r\n \"max-md:data-[state=open]:slide-in-from-bottom-12 max-md:data-[state=closed]:slide-out-to-bottom-12\",\r\n].join(\" \")\r\n\r\n/* ── Item base ────────────────────────────────────────────────────────────── */\r\nconst ITEM_BASE = [\r\n \"relative flex cursor-default select-none items-center\",\r\n \"gap-pad-lg px-pad-lg py-pad-md rounded-radius-sm\",\r\n \"text-body-sm font-medium\",\r\n \"outline-none transition-colors\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n \"[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n].join(\" \")\r\n\r\nconst ITEM_VARIANT_DEFAULT = [\r\n \"text-fg-muted [&_svg]:text-fg-muted\",\r\n \"focus:bg-bg-muted focus:text-fg-default focus:[&_svg]:text-fg-default\",\r\n].join(\" \")\r\n\r\nconst ITEM_VARIANT_DESTRUCTIVE = [\r\n \"text-fg-danger [&_svg]:text-fg-danger\",\r\n \"focus:bg-bg-danger-muted focus:text-fg-danger focus:[&_svg]:text-fg-danger\",\r\n].join(\" \")\r\n\r\n/* ── SubTrigger ───────────────────────────────────────────────────────────── */\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"data-[state=open]:bg-bg-muted data-[state=open]:text-fg-default\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\n/* ── SubContent ───────────────────────────────────────────────────────────── */\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(CONTAINER_CLASSES, className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\n/* ── Content ──────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & {\r\n /**\r\n * Em telas <md, transforma o menu em sheet bottom-up colado nas bordas,\r\n * com backdrop suave (toque fora fecha via dismiss do Radix). Default true.\r\n * Passe `false` pra manter o popover ancorado no trigger também em mobile.\r\n */\r\n mobileSheet?: boolean\r\n }\r\n>(({ className, sideOffset = 8, mobileSheet = true, ...props }, ref) => (\r\n <>\r\n {/* Backdrop suave — só mobile (md:hidden), em Portal próprio (cada Portal\r\n Radix aceita 1 filho e é montado/desmontado junto com o menu via Presence).\r\n\r\n ⚠️ pointer-events-NONE (não auto). O DropdownMenu do Radix abre no\r\n `pointerdown`; o backdrop monta via React no meio do gesto e, com\r\n pointer-events-auto, captura o `pointerup`/`click` seguinte → o menu\r\n abre e fecha no mesmo toque (bug do avatar/UserMenu dentro do drawer\r\n mobile). Com pointer-events-none o gesto de abertura passa direto e o\r\n dismiss por toque-fora continua funcionando (Radix escuta pointerdown\r\n a nível de document, independente do backdrop capturar). z-[55] fica\r\n acima do drawer mobile (z-50) só pra escurecer; o Content vai a z-60. */}\r\n {mobileSheet && (\r\n <DropdownMenuPrimitive.Portal>\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"fixed inset-0 z-[55] bg-overlay-scrim pointer-events-none md:hidden animate-in fade-in-0 duration-150\"\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n )}\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n data-mobile-sheet={mobileSheet ? \"\" : undefined}\r\n className={cn(\r\n CONTAINER_CLASSES,\r\n \"max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto overflow-x-hidden\",\r\n mobileSheet && MOBILE_SHEET_CLASSES,\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n </>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\n/* ── Item ─────────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n /** Variante semântica — \"destructive\" pinta fg-danger e usa bg-danger-muted no hover */\r\n variant?: \"default\" | \"destructive\"\r\n }\r\n>(({ className, inset, variant = \"default\", ...props }, ref) => (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n variant === \"destructive\" ? ITEM_VARIANT_DESTRUCTIVE : ITEM_VARIANT_DEFAULT,\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\n/* ── CheckboxItem ─────────────────────────────────────────────────────────── */\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"pl-8 pr-pad-lg\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-pad-md flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\n/* ── RadioItem ────────────────────────────────────────────────────────────── */\r\n/**\r\n * RadioItem — item selecionado ganha tom brand:\r\n * - rest: fg-muted (igual default item)\r\n * - hover: bg-muted + fg-default (igual default item)\r\n * - checked: bg-bg-brand-subtle + fg-fg-brand (estado ativo destacado)\r\n *\r\n * Indicator: `<Check />` consistente com `<DropdownMenuCheckboxItem>` (antes era `<Circle />`).\r\n */\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n ITEM_BASE,\r\n ITEM_VARIANT_DEFAULT,\r\n \"pl-8 pr-pad-lg\",\r\n // Selected state — brand tint (mantém no focus pra não voltar pra muted)\r\n \"data-[state=checked]:bg-bg-brand-subtle data-[state=checked]:text-fg-brand\",\r\n \"data-[state=checked]:[&_svg]:text-fg-brand\",\r\n \"data-[state=checked]:focus:bg-bg-brand-subtle data-[state=checked]:focus:text-fg-brand\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-pad-md flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\n/* ── Label ────────────────────────────────────────────────────────────────── */\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-pad-lg py-pad-sm text-caption-sm font-semibold uppercase tracking-wider text-fg-subtle\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\n/* ── Separator (divider) ──────────────────────────────────────────────────── */\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"mx-pad-xs my-pad-xs h-px bg-border-default\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\n/* ── Shortcut (texto à direita do item) ───────────────────────────────────── */\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-caption-sm tracking-wider text-fg-subtle\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n","import * as React from \"react\"\r\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Avatar = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAvatar.displayName = AvatarPrimitive.Root.displayName\r\n\r\nconst AvatarImage = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Image>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Image\r\n ref={ref}\r\n className={cn(\"aspect-square h-full w-full\", className)}\r\n {...props}\r\n />\r\n))\r\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\r\n\r\n/**\r\n * AvatarFallback — `text-body-sm font-normal` (13px) como default mais compacto.\r\n *\r\n * Antes usava `text-body-md font-medium` (14px) que ficava grande demais em avatares\r\n * pequenos (≤24px), forçando consumer a sobrescrever via className. Caption\r\n * é mais seguro como default — consumer ainda pode override (ex: `text-caption-xs`\r\n * pra container muito pequeno, ou `text-body-lg font-medium` pra avatar grande).\r\n */\r\nconst AvatarFallback = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Fallback\r\n ref={ref}\r\n className={cn(\r\n \"flex h-full w-full items-center justify-center rounded-full bg-bg-muted text-fg-muted text-body-sm font-normal\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\r\n\r\nexport { Avatar, AvatarImage, AvatarFallback }\r\n"],"names":["tvBase","Button","DialogPrimitive","CommandPrimitive"],"mappings":";;;;;;;;;;;;;AAeA,MAAM,UAAU,CAAC,MAAc,aAAa,KAAK,CAAC;AAElD,MAAM,UAAU,CAAC,MAAc,OAAO,KAAK,CAAC;AAE5C,MAAM,aAAa,CAAC,MAAc,WAAW,KAAK,CAAC;AAEnD,MAAM,aAAa,CAAC,MAAc,OAAO,KAAK,CAAC;AAE/C,MAAM,WAAW,CAAC,MAAc,SAAS,KAAK,CAAC;AAE/C,MAAM,UAAU,oBAAoB;AAAA,EAClC,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,aAAa;AAAA,QACX;AAAA;AAAA;AAAA,UAGE,MAAM;AAAA;AAAA,YAEJ;AAAA,YAAe;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAE3C;AAAA,YAAc;AAAA,YAAc;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAExD;AAAA,YAAY;AAAA,YAAY;AAAA;AAAA,YAExB;AAAA,YAAY;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA;AAAA,YAExD;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAE5B;AAAA,YAAW;AAAA,UAAA;AAAA,QACb;AAAA,MACF;AAAA;AAAA,MAIF,GAAI,CAAC,EAAE,GAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA;AAAA,MAGtB,GAAI,CAAC,EAAE,GAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA,MACtB,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG;AAAA;AAAA,MAGtB,OAAgB,CAAC,EAAE,OAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,WAAgB,CAAC,EAAE,WAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,WAAgB,CAAC,EAAE,WAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,OAAgB,CAAC,EAAE,KAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,SAAgB,CAAC,EAAE,OAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,UAAgB,CAAC,EAAE,QAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,QAAgB,CAAC,EAAE,MAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,SAAgB,CAAC,EAAE,OAAgB,CAAC,OAAO,GAAG;AAAA,MAC9C,OAAgB,CAAC,EAAE,KAAgB,CAAC,OAAO,GAAG;AAAA;AAAA,MAG9C,KAAS,CAAC,EAAE,KAAS,CAAC,OAAO,GAAG;AAAA,MAChC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG;AAAA,MAChC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG;AAAA;AAAA,MAGhC,SAAe,CAAC,EAAE,SAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,aAAe,CAAC,EAAE,aAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA,MAC/C,cAAe,CAAC,EAAE,cAAe,CAAC,UAAU,GAAG;AAAA;AAAA,MAG/C,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,GAAG;AAAA;AAAA,MAGjC,SAAS,CAAC,EAAE,SAAS,CAAC,QAAQ,GAAG;AAAA,MACjC,GAAS,CAAC,EAAE,GAAS,CAAC,QAAQ,GAAG;AAAA,MACjC,GAAS,CAAC,EAAE,GAAS,CAAC,QAAQ,GAAG;AAAA,MACjC,MAAS,CAAC,EAAE,MAAS,CAAC,QAAQ,GAAG;AAAA,IAAA;AAAA,EACnC;AAEJ,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AC/GA,MAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA;AAAA,YAEJ;AAAA,YAAe;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAE3C;AAAA,YAAc;AAAA,YAAc;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAExD;AAAA,YAAY;AAAA,YAAY;AAAA;AAAA,YAExB;AAAA,YAAY;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA;AAAA,YAExD;AAAA,YAAc;AAAA,YAAc;AAAA;AAAA,YAE5B;AAAA,YAAW;AAAA,YAAW;AAAA,YAAW;AAAA;AAAA,YAEjC;AAAA,YAAW;AAAA,UAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEJ;AAEO,MAAM,KAAoB,CAAC,SAAS,WACzCA,KAAO,SAAS;AAAA,EACd,GAAG;AAAA,EACH;AACF,CAAa;AChBR,MAAM,iBAAiB,GAAG;AAAA,EAC/B,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAGF,UAAU;AAAA,IACR,OAAO;AAAA,MACL,SAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAW;AAAA,MACX,SAAW;AAAA,MACX,SAAW;AAAA,IAAA;AAAA,IAGb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,IAGT,MAAM;AAAA;AAAA,MAEJ,OAAO;AAAA;AAAA,MAEP,IAAO;AAAA;AAAA,MAEP,IAAO;AAAA;AAAA,MAEP,IAAO;AAAA;AAAA,MAEP,IAAO;AAAA;AAAA;AAAA,MAIP,YAAY;AAAA;AAAA,MACZ,WAAY;AAAA;AAAA,MACZ,WAAY;AAAA;AAAA,MACZ,WAAY;AAAA;AAAA,MACZ,WAAY;AAAA;AAAA,IAAA;AAAA,IAGd,WAAW;AAAA,MACT,MAAM;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQR,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAS;AAAA,IAAA;AAAA,IAGX,UAAU;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,kBAAkB;AAAA;AAAA,IAEhB;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA;AAAA,IAIT;AAAA,MACE,OAAO;AAAA,MAAa,SAAS;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA;AAAA;AAAA;AAAA,MAIE,OAAO;AAAA,MAAa,SAAS;AAAA,MAC7B,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,KAAK,GAAG;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,OAAO;AAAA,MAAa,SAAS;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAa,SAAS;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA;AAAA,IAIT;AAAA,MACE,OAAO;AAAA,MAAY,SAAS;AAAA,MAC5B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAY,SAAS;AAAA,MAC5B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAY,SAAS;AAAA,MAC5B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAY,SAAS;AAAA,MAC5B,OAAO;AAAA,IAAA;AAAA;AAAA,IAIT;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA;AAAA,IAIT;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MAAW,SAAS;AAAA,MAC3B,OAAO;AAAA,IAAA;AAAA;AAAA,IAIT,EAAE,UAAU,MAAM,OAAO,iCAAA;AAAA,EAAiC;AAAA,EAG5D,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,CAAC;ACpMM,MAAM,SAAS;AAAA,EACpB,SAASC,QACP;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,GAAG;AAAA,EAAA,GAEL,KACA;AACA,UAAM,aAAa,YAAY;AAE/B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,WAAW,eAAe;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QAAA,CACD;AAAA,QACA,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,+BAAY,SAAA,EAAQ;AAAA,UACpB,CAAC,WAAW;AAAA,UACZ;AAAA,UACA,CAAC,WAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGnB;AACF;AAEA,SAAS,UAAU;AACjB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAU;AAAA,MAEV,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,IAAG;AAAA,UACH,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,iBAAgB;AAAA,UAChB,kBAAiB;AAAA,UACjB,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ;AAAA,EAAA;AAGN;AClEA,MAAM,SAASC,eAAgB;AAE/B,MAAM,gBAAgBA,eAAgB;AAEtC,MAAM,eAAeA,eAAgB;AAErC,MAAM,cAAcA,eAAgB;AAEpC,MAAM,gBAAgB,MAAM,WAG1B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,eAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,cAAc,cAAcA,eAAgB,QAAQ;AAEpD,MAAM,gBAAgB,MAAM,WAM1B,CAAC,EAAE,WAAW,UAAU,WAAW,GAAG,MAAA,GAAS,6BAC9C,cAAA,EACC,UAAA;AAAA,EAAA,oBAAC,eAAA,EAAc;AAAA,EACf;AAAA,IAACA,eAAgB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA;AAAA,QACA,CAAC,aACA,qBAACA,eAAgB,OAAhB,EAAsB,WAAU,gPAC/B,UAAA;AAAA,UAAA,oBAAC,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,UACvB,oBAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAEJ,GACF,CACD;AACD,cAAc,cAAcA,eAAgB,QAAQ;AAEpD,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW,GAAG,2BAA2B,SAAS;AAAA,IACjD,GAAG;AAAA,EAAA;AACN;AAEF,aAAa,cAAc;AAE3B,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN;AAEF,aAAa,cAAc;AAE3B,MAAM,cAAc,MAAM,WAGxB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,eAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,YAAY,cAAcA,eAAgB,MAAM;AAEhD,MAAM,oBAAoB,MAAM,WAG9B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,eAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,8BAA8B,SAAS;AAAA,IACpD,GAAG;AAAA,EAAA;AACN,CACD;AACD,kBAAkB,cAAcA,eAAgB,YAAY;ACrF5D,MAAM,UAAU,MAAM,WAGpB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,QAAQ,cAAcA,UAAiB;AAEvC,MAAM,gBAAgB,CAAC,EAAE,UAAU,GAAG,YAAyB;AAC7D,SACE,oBAAC,QAAA,EAAQ,GAAG,OACV,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MAGT,oBAAkB;AAAA,MAClB,WAAW;AAAA,QACT;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,aAAA,EAAY,WAAU,WAAU,UAAA,WAAO;AAAA,QACxC,oBAAC,WAAS,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEvB;AAEJ;AAGA,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,sBAAmB;AAAA,IACnB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAO,WAAU,sCAAqC,aAAa,KAAK;AAAA,MACzE;AAAA,QAACA,UAAiB;AAAA,QAAjB;AAAA,UACC;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AACF,CACD;AACD,aAAa,cAAcA,UAAiB,MAAM;AAGlD,MAAM,cAAc,MAAM,WAGxB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,UAAiB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,YAAY,cAAcA,UAAiB,KAAK;AAEhD,MAAM,eAAe,MAAM,WAGzB,CAAC,OAAO,QACR;AAAA,EAACA,UAAiB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA,WAAU;AAAA,IACT,GAAG;AAAA,EAAA;AACN,CACD;AACD,aAAa,cAAcA,UAAiB,MAAM;AAGlD,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,UAAiB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,aAAa,cAAcA,UAAiB,MAAM;AAElD,MAAM,mBAAmB,MAAM,WAG7B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,UAAiB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,8CAA8C,SAAS;AAAA,IACpE,GAAG;AAAA,EAAA;AACN,CACD;AACD,iBAAiB,cAAcA,UAAiB,UAAU;AAG1D,MAAM,cAAc,MAAM,WAGxB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAACA,UAAiB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,YAAY,cAAcA,UAAiB,KAAK;AAEhD,MAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA,GAAG;AACL,MAA6C;AAC3C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AACA,gBAAgB,cAAc;ACnL9B,MAAM,UAAU,iBAAiB;AACjC,MAAM,iBAAiB,iBAAiB;AACxC,MAAM,gBAAgB,iBAAiB;AACvC,MAAM,eAAe,iBAAiB;AAQtC,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAGV,MAAM,uBAAuB,MAC3B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAU;AAAA,EAAA;AACZ;AAqBF,MAAM,iBAAiB,MAAM;AAAA,EAI3B,CACE,EAAE,WAAW,QAAQ,UAAU,aAAa,GAAG,eAAe,cAAc,MAAM,GAAG,MAAA,GACrF,QACG;AACH,UAAM,UACJ;AAAA,MAAC,iBAAiB;AAAA,MAAjB;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,qBAAmB,cAAc,KAAK;AAAA,QACtC,WAAW;AAAA,UACT;AAAA;AAAA;AAAA;AAAA;AAAA,UAKA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAe;AAAA,UACf;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,MAAA;AAAA,IAAA;AAIR,QAAI,eAAe;AAEjB,aAAO,cACL,qBAAA,UAAA,EACE,UAAA;AAAA,QAAA,oBAAC,sBAAA,EAAqB;AAAA,QACrB;AAAA,MAAA,EAAA,CACH,IAEA;AAAA,IAEJ;AAIA,WACE,qBAAA,UAAA,EACG,UAAA;AAAA,MAAA,mCACE,iBAAiB,QAAjB,EACC,UAAA,oBAAC,wBAAqB,GACxB;AAAA,MAEF,oBAAC,iBAAiB,QAAjB,EAAyB,UAAA,QAAA,CAAQ;AAAA,IAAA,GACpC;AAAA,EAEJ;AACF;AACA,eAAe,cAAc,iBAAiB,QAAQ;AC3GtD,MAAM,qBAAqB;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,MAAA;AAAA,MAEP,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB,EAAE,MAAM,MAAM,OAAO,UAAA;AAAA,EAAU;AAEpD;AAQO,MAAM,aAAa,MAAM;AAAA,EAC9B,CAAC,EAAE,WAAW,MAAM,OAAO,GAAG,MAAA,GAAS,QACrC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW,GAAG,mBAAmB,EAAE,MAAM,MAAA,CAAO,GAAG,SAAS;AAAA,MAC3D,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AACA,WAAW,cAAc;AAGzB,MAAM,0BAA0B,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,MAAM,kBAAkB,MAAM,WAGnC,CAAC,EAAE,WAAW,MAAM,GAAG,SAAS,QAChC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,wBAAA,GAA2B,SAAS;AAAA,IACjD,GAAG;AAAA,EAAA;AACN,CACD;AACD,gBAAgB,cAAc;AAG9B,MAAM,6BAA6B,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,MAAM,qBAAqB,MAAM,WAGtC,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,2BAAA,GAA8B,SAAS;AAAA,IACpD,GAAG;AAAA,EAAA;AACN,CACD;AACD,mBAAmB,cAAc;AAGjC,MAAM,0BAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA;AAAA,QAEL,gBAAgB;AAAA,QAChB,cAAgB;AAAA;AAAA,QAEhB,eAAgB;AAAA,QAChB,aAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,IAEF,iBAAiB,EAAE,OAAO,eAAA;AAAA,EAAe;AAE7C;AAaO,MAAM,kBAAkB,MAAM,WAGnC,CAAC,EAAE,WAAW,QAAQ,gBAAgB,SAAS,GAAG,MAAA,GAAS,QAC3D;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,MAAK;AAAA,IACL,aAAU;AAAA,IACV,cAAY;AAAA,IACZ,WAAW,GAAG,wBAAwB,EAAE,MAAA,CAAO,GAAG,SAAS;AAAA,IAC3D,SAAS,CAAC,MAAM;AAGd,UAAK,EAAE,OAAuB,QAAQ,QAAQ,GAAG;AAC/C,kBAAU,CAAC;AACX;AAAA,MACF;AACA,QAAE,cAAc,eACZ;AAAA,QACA;AAAA,MAAA,GAEA,MAAA;AACJ,gBAAU,CAAC;AAAA,IACb;AAAA,IACC,GAAG;AAAA,EAAA;AACN,CACD;AACD,gBAAgB,cAAc;AAMvB,MAAM,iBAAiB,MAAM,WAGlC,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,eAAe,cAAc;AAG7B,MAAM,2BAA2B;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAW;AAAA,QACX,WAAW;AAAA,QACX,IAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb,SAAS;AAAA,QACP,SAAa;AAAA,QACb,aAAa;AAAA,QACb,SAAa;AAAA,QACb,WAAa;AAAA,QACb,OAAa;AAAA,QACb,MAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,iBAAiB,EAAE,MAAM,MAAM,SAAS,QAAA;AAAA,EAAQ;AAEpD;AAMO,MAAM,mBAAmB,MAAM,WAGpC,CAAC,EAAE,WAAW,MAAM,SAAS,OAAO,UAAU,GAAG,MAAA,GAAS,QAC1D;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,yBAAyB,EAAE,MAAM,QAAA,CAAS,GAAG,SAAS;AAAA,IACnE,GAAG;AAAA,EAAA;AACN,CACD;AACD,iBAAiB,cAAc;ACzN/B,MAAM,eAAe,sBAAsB;AAE3C,MAAM,sBAAsB,sBAAsB;AAElD,MAAM,oBAAoB,sBAAsB;AAEhD,MAAM,qBAAqB,sBAAsB;AAEjD,MAAM,kBAAkB,sBAAsB;AAE9C,MAAM,yBAAyB,sBAAsB;AAGrD,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAQV,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAGV,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,MAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAGV,MAAM,yBAAyB,MAAM,WAKnC,CAAC,EAAE,WAAW,OAAO,UAAU,GAAG,SAAS,QAC3C;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,IAEH,UAAA;AAAA,MAAA;AAAA,MACD,oBAAC,cAAA,EAAa,WAAU,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AACpC,CACD;AACD,uBAAuB,cACrB,sBAAsB,WAAW;AAGnC,MAAM,yBAAyB,MAAM,WAGnC,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,mBAAmB,SAAS;AAAA,IACzC,GAAG;AAAA,EAAA;AACN,CACD;AACD,uBAAuB,cACrB,sBAAsB,WAAW;AAGnC,MAAM,sBAAsB,MAAM,WAUhC,CAAC,EAAE,WAAW,aAAa,GAAG,cAAc,MAAM,GAAG,MAAA,GAAS,QAC9D,qBAAA,UAAA,EAYG,UAAA;AAAA,EAAA,eACC,oBAAC,sBAAsB,QAAtB,EACC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,IAAA;AAAA,EAAA,GAEd;AAAA,EAEF,oBAAC,sBAAsB,QAAtB,EACC,UAAA;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC;AAAA,MACA;AAAA,MACA,qBAAmB,cAAc,KAAK;AAAA,MACtC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA,EACN,CACF;AAAA,GACF,CACD;AACD,oBAAoB,cAAc,sBAAsB,QAAQ;AAGhE,MAAM,mBAAmB,MAAM,WAO7B,CAAC,EAAE,WAAW,OAAO,UAAU,WAAW,GAAG,MAAA,GAAS,QACtD;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,YAAY,gBAAgB,2BAA2B;AAAA,MACvD,SAAS;AAAA,MACT;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,iBAAiB,cAAc,sBAAsB,KAAK;AAG1D,MAAM,2BAA2B,MAAM,WAGrC,CAAC,EAAE,WAAW,UAAU,SAAS,GAAG,SAAS,QAC7C;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,IACC,GAAG;AAAA,IAEJ,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,qEACd,UAAA,oBAAC,sBAAsB,eAAtB,EACC,UAAA,oBAAC,OAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B,GACF;AAAA,MACC;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACD,yBAAyB,cACvB,sBAAsB,aAAa;AAWrC,MAAM,wBAAwB,MAAM,WAGlC,CAAC,EAAE,WAAW,UAAU,GAAG,SAAS,QACpC;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,IAEJ,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,qEACd,UAAA,oBAAC,sBAAsB,eAAtB,EACC,UAAA,oBAAC,OAAA,EAAM,WAAU,SAAA,CAAS,EAAA,CAC5B,GACF;AAAA,MACC;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACD,sBAAsB,cAAc,sBAAsB,UAAU;AAGpE,MAAM,oBAAoB,MAAM,WAK9B,CAAC,EAAE,WAAW,OAAO,GAAG,SAAS,QACjC;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,kBAAkB,cAAc,sBAAsB,MAAM;AAG5D,MAAM,wBAAwB,MAAM,WAGlC,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,8CAA8C,SAAS;AAAA,IACpE,GAAG;AAAA,EAAA;AACN,CACD;AACD,sBAAsB,cAAc,sBAAsB,UAAU;AAGpE,MAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,MAA6C;AAC3C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,yDAAyD,SAAS;AAAA,MAC/E,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AACA,qBAAqB,cAAc;ACpTnC,MAAM,SAAS,MAAM,WAGnB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,OAAO,cAAc,gBAAgB,KAAK;AAE1C,MAAM,cAAc,MAAM,WAGxB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACrD,GAAG;AAAA,EAAA;AACN,CACD;AACD,YAAY,cAAc,gBAAgB,MAAM;AAUhD,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,eAAe,cAAc,gBAAgB,SAAS;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const classVarianceAuthority = require("class-variance-authority");
|
|
5
|
-
const avatar = require("./avatar-
|
|
5
|
+
const avatar = require("./avatar-DSmxOg-W.cjs");
|
|
6
6
|
function _interopNamespaceDefault(e) {
|
|
7
7
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
8
8
|
if (e) {
|
|
@@ -89,4 +89,4 @@ const Input = React__namespace.forwardRef(
|
|
|
89
89
|
Input.displayName = "Input";
|
|
90
90
|
exports.Input = Input;
|
|
91
91
|
exports.inputVariants = inputVariants;
|
|
92
|
-
//# sourceMappingURL=input-
|
|
92
|
+
//# sourceMappingURL=input-6P31vUfa.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-
|
|
1
|
+
{"version":3,"file":"input-6P31vUfa.cjs","sources":["../../src/components/shadcn/input.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Input — alinhado com `.tbl-form-input` do design-and-table-v2.\r\n *\r\n * Specs base (md, default):\r\n * - h: 40px (form-lg), px: 12px (pad-xl), radius: 10px (radius-lg)\r\n * - bg-input (light) / dark:bg-bg-muted\r\n * - border: 1px solid border-input\r\n * - font: 13px, color fg-default, placeholder fg-muted\r\n * - focus: border + shadow-sh-ring por state\r\n *\r\n * Pra inputs com prefixo/sufixo/ícone/botão dentro → use `<InputGroup>`.\r\n * Este componente é puro (só o <input>) — sem wrapper, sem adornments inline.\r\n */\r\n\r\nexport type InputState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\nconst inputVariants = cva(\r\n [\r\n \"flex w-full\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"px-pad-xl\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n // type=file — escopado no atributo de propósito, pra não mexer em nenhum\r\n // outro input (este é primitivo compartilhado).\r\n //\r\n // · `block` + `align-content:center`: o conteúdo do file input (botão +\r\n // nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —\r\n // medido: com `items-center` o computed vira `center` e o pixel não sai\r\n // do lugar. O que centra é `align-content` num container de BLOCO\r\n // (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:\r\n // `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +\r\n // `place-content`, e `::file-selector-button { margin-block: auto }`.\r\n // Preferido a `line-height` = altura da caixa, que centraria também mas\r\n // exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de\r\n // `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso\r\n // degrada pro alinhamento antigo, sem quebrar nada.\r\n // · `text-fg-muted`: o \"Nenhum arquivo escolhido\" vinha em fg-default\r\n // (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.\r\n // O CSS não distingue vazio de preenchido num file input, então o nome do\r\n // arquivo escolhido também fica muted — trade-off registrado no gotcha de\r\n // `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.\r\n \"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs rounded-radius-md\",\r\n xs: \"min-h-form-sm rounded-radius-md\",\r\n sm: \"min-h-form-md\",\r\n md: \"min-h-form-lg\",\r\n },\r\n state: {\r\n default: \"focus-visible:border-border-brand focus-visible:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-visible:border-border-danger-muted focus-visible:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-visible:border-border-warning-muted focus-visible:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-visible:border-border-success-muted focus-visible:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n state: \"default\",\r\n },\r\n },\r\n);\r\n\r\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\r\n InputVariantProps {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, size, state, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n ref={ref}\r\n className={cn(inputVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input, inputVariants };\r\n"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,gBAAgBA,uBAAAA;AAAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,MAAA;AAAA,MAEP,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAQA,MAAM,QAAQC,iBAAM;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,MAAM,OAAO,GAAG,MAAA,GAAS,QAAQ;AACnD,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAWC,OAAAA,GAAG,cAAc,EAAE,MAAM,MAAA,CAAO,GAAG,SAAS;AAAA,QACtD,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,MAAM,cAAc;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
|
-
import { c as cn } from "./avatar-
|
|
4
|
+
import { c as cn } from "./avatar-c1_uhYC5.mjs";
|
|
5
5
|
const inputVariants = cva(
|
|
6
6
|
[
|
|
7
7
|
"flex w-full",
|
|
@@ -73,4 +73,4 @@ export {
|
|
|
73
73
|
Input as I,
|
|
74
74
|
inputVariants as i
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=input-
|
|
76
|
+
//# sourceMappingURL=input-SiP1JWBU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-
|
|
1
|
+
{"version":3,"file":"input-SiP1JWBU.mjs","sources":["../../src/components/shadcn/input.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\n/**\r\n * Input — alinhado com `.tbl-form-input` do design-and-table-v2.\r\n *\r\n * Specs base (md, default):\r\n * - h: 40px (form-lg), px: 12px (pad-xl), radius: 10px (radius-lg)\r\n * - bg-input (light) / dark:bg-bg-muted\r\n * - border: 1px solid border-input\r\n * - font: 13px, color fg-default, placeholder fg-muted\r\n * - focus: border + shadow-sh-ring por state\r\n *\r\n * Pra inputs com prefixo/sufixo/ícone/botão dentro → use `<InputGroup>`.\r\n * Este componente é puro (só o <input>) — sem wrapper, sem adornments inline.\r\n */\r\n\r\nexport type InputState = \"default\" | \"error\" | \"warning\" | \"success\";\r\n\r\nconst inputVariants = cva(\r\n [\r\n \"flex w-full\",\r\n \"bg-bg-input dark:bg-bg-muted\",\r\n \"hover:bg-bg-input-hover dark:hover:bg-bg-muted-hover\",\r\n \"border border-border-input rounded-radius-lg\",\r\n \"px-pad-xl\",\r\n \"text-body-sm font-normal text-fg-default placeholder:text-fg-muted placeholder:opacity-70\",\r\n \"transition-[border-color,box-shadow,background-color] outline-none\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-bg-input dark:disabled:hover:bg-bg-muted\",\r\n \"file:inline-flex file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-fg-default\",\r\n // type=file — escopado no atributo de propósito, pra não mexer em nenhum\r\n // outro input (este é primitivo compartilhado).\r\n //\r\n // · `block` + `align-content:center`: o conteúdo do file input (botão +\r\n // nome do arquivo) vive no SHADOW DOM, então `align-items` NÃO o move —\r\n // medido: com `items-center` o computed vira `center` e o pixel não sai\r\n // do lugar. O que centra é `align-content` num container de BLOCO\r\n // (CSS Align L3), que aplica ao conteúdo em fluxo. Testados e reprovados:\r\n // `items-center`, `align-content` sobre flex (com e sem wrap), `grid` +\r\n // `place-content`, e `::file-selector-button { margin-block: auto }`.\r\n // Preferido a `line-height` = altura da caixa, que centraria também mas\r\n // exigiria um px mágico por size (28/32/36/40) desacoplado dos tokens de\r\n // `form-*`. Piso: Chrome 123+ / Safari 17.6+ / Firefox 125+; abaixo disso\r\n // degrada pro alinhamento antigo, sem quebrar nada.\r\n // · `text-fg-muted`: o \"Nenhum arquivo escolhido\" vinha em fg-default\r\n // (0.98), destoando de `placeholder:text-fg-muted` de todo input do DS.\r\n // O CSS não distingue vazio de preenchido num file input, então o nome do\r\n // arquivo escolhido também fica muted — trade-off registrado no gotcha de\r\n // `shadcn/USAGE.md`; pra UX de upload de verdade use `FileUploadField`.\r\n \"[&[type=file]]:block [&[type=file]]:[align-content:center] [&[type=file]]:text-fg-muted\",\r\n ],\r\n {\r\n variants: {\r\n size: {\r\n xxs: \"min-h-form-xs rounded-radius-md\",\r\n xs: \"min-h-form-sm rounded-radius-md\",\r\n sm: \"min-h-form-md\",\r\n md: \"min-h-form-lg\",\r\n },\r\n state: {\r\n default: \"focus-visible:border-border-brand focus-visible:shadow-sh-ring\",\r\n error: \"border-border-danger-muted focus-visible:border-border-danger-muted focus-visible:shadow-sh-ring-danger\",\r\n warning: \"border-border-warning-muted focus-visible:border-border-warning-muted focus-visible:shadow-sh-ring-warning\",\r\n success: \"border-border-success-muted focus-visible:border-border-success-muted focus-visible:shadow-sh-ring-success\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n state: \"default\",\r\n },\r\n },\r\n);\r\n\r\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\r\n InputVariantProps {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, size, state, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n ref={ref}\r\n className={cn(inputVariants({ size, state }), className)}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input, inputVariants };\r\n"],"names":[],"mappings":";;;;AAoBA,MAAM,gBAAgB;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,MAAA;AAAA,MAEP,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAQA,MAAM,QAAQ,MAAM;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,MAAM,OAAO,GAAG,MAAA,GAAS,QAAQ;AACnD,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAW,GAAG,cAAc,EAAE,MAAM,MAAA,CAAO,GAAG,SAAS;AAAA,QACtD,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,MAAM,cAAc;"}
|