@snksergio/design-system 0.48.0 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +1 -1
  2. package/dist-lib/chunks/{panel-57Pt_bL9.cjs → panel-Bly-rNP9.cjs} +2 -2
  3. package/dist-lib/chunks/{panel-57Pt_bL9.cjs.map → panel-Bly-rNP9.cjs.map} +1 -1
  4. package/dist-lib/chunks/{panel-DlZeQw7G.mjs → panel-DA6K3a3n.mjs} +2 -2
  5. package/dist-lib/chunks/{panel-DlZeQw7G.mjs.map → panel-DA6K3a3n.mjs.map} +1 -1
  6. package/dist-lib/chunks/{sheet-7v5vamnP.mjs → sheet-DIpYkRYS.mjs} +32 -32
  7. package/dist-lib/chunks/{sheet-7v5vamnP.mjs.map → sheet-DIpYkRYS.mjs.map} +1 -1
  8. package/dist-lib/chunks/{sheet-BZlQ0gKA.cjs → sheet-rg6uupt1.cjs} +33 -33
  9. package/dist-lib/chunks/{sheet-BZlQ0gKA.cjs.map → sheet-rg6uupt1.cjs.map} +1 -1
  10. package/dist-lib/chunks/{toggle-group-DYGba7RP.cjs → toggle-group-C9rrkkmh.cjs} +159 -52
  11. package/dist-lib/chunks/toggle-group-C9rrkkmh.cjs.map +1 -0
  12. package/dist-lib/chunks/{toggle-group-CnAN6ZnT.mjs → toggle-group-mXbG8_Jm.mjs} +237 -130
  13. package/dist-lib/chunks/toggle-group-mXbG8_Jm.mjs.map +1 -0
  14. package/dist-lib/index.cjs +303 -45
  15. package/dist-lib/index.cjs.map +1 -1
  16. package/dist-lib/index.mjs +308 -50
  17. package/dist-lib/index.mjs.map +1 -1
  18. package/dist-lib/preview/clientes.cjs +2 -2
  19. package/dist-lib/preview/clientes.mjs +2 -2
  20. package/dist-lib/shadcn.cjs +3 -2
  21. package/dist-lib/shadcn.cjs.map +1 -1
  22. package/dist-lib/shadcn.mjs +82 -81
  23. package/dist-lib/src/components/index.d.ts +1 -0
  24. package/dist-lib/src/components/index.d.ts.map +1 -1
  25. package/dist-lib/src/components/shadcn/carousel.d.ts +28 -1
  26. package/dist-lib/src/components/shadcn/carousel.d.ts.map +1 -1
  27. package/dist-lib/src/components/ui/CardCheckbox/card-checkbox.d.ts +30 -31
  28. package/dist-lib/src/components/ui/CardCheckbox/card-checkbox.d.ts.map +1 -1
  29. package/dist-lib/src/components/ui/CardCheckbox/card-checkbox.styles.d.ts +5 -0
  30. package/dist-lib/src/components/ui/CardCheckbox/card-checkbox.styles.d.ts.map +1 -1
  31. package/dist-lib/src/components/ui/CardOption/card-option.d.ts +27 -0
  32. package/dist-lib/src/components/ui/CardOption/card-option.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/CardOption/card-option.styles.d.ts +381 -0
  34. package/dist-lib/src/components/ui/CardOption/card-option.styles.d.ts.map +1 -0
  35. package/dist-lib/src/components/ui/CardOption/card-option.types.d.ts +76 -0
  36. package/dist-lib/src/components/ui/CardOption/card-option.types.d.ts.map +1 -0
  37. package/dist-lib/src/components/ui/CardOption/index.d.ts +4 -0
  38. package/dist-lib/src/components/ui/CardOption/index.d.ts.map +1 -0
  39. package/dist-lib/src/components/ui/ColorPicker/color-picker.styles.d.ts +18 -0
  40. package/dist-lib/src/components/ui/ColorPicker/color-picker.styles.d.ts.map +1 -1
  41. package/dist-lib/src/components/ui/ColorPicker/color-picker.types.d.ts +4 -1
  42. package/dist-lib/src/components/ui/ColorPicker/color-picker.types.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/dist-lib/chunks/toggle-group-CnAN6ZnT.mjs.map +0 -1
  45. package/dist-lib/chunks/toggle-group-DYGba7RP.cjs.map +0 -1
@@ -1,18 +1,18 @@
1
- import { g as getContrastTextColor, a as FormField, e as Avatar, i as isFilterEntryActive, f as FilterPopover, T as ToolbarToolButton, h as ButtonGroup, j as ToolbarSimpleFilterDrawer, k as TableToolbar, l as ToolbarActions, m as ToolbarFilterButton, n as ToolbarSearch, o as ToolbarApplied, q as ToolbarTabs, r as columnTypeRegistry, L as ListItem, s as List } from "./chunks/panel-DlZeQw7G.mjs";
2
- import { t, A, B, u, C, v, w, x, D, y, z, E, G, H, I, J, K, M, d, N, O, Q, R, S, F, b, U, c, V, W, P, X, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, p, ai, aj, ak, al, am } from "./chunks/panel-DlZeQw7G.mjs";
1
+ import { g as getContrastTextColor, a as FormField, e as Avatar, i as isFilterEntryActive, f as FilterPopover, T as ToolbarToolButton, h as ButtonGroup, j as ToolbarSimpleFilterDrawer, k as TableToolbar, l as ToolbarActions, m as ToolbarFilterButton, n as ToolbarSearch, o as ToolbarApplied, q as ToolbarTabs, r as columnTypeRegistry, L as ListItem, s as List } from "./chunks/panel-DA6K3a3n.mjs";
2
+ import { t, A, B, u, C, v, w, x, D, y, z, E, G, H, I, J, K, M, d, N, O, Q, R, S, F, b, U, c, V, W, P, X, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, p, ai, aj, ak, al, am } from "./chunks/panel-DA6K3a3n.mjs";
3
3
  import { C as Chip } from "./chunks/useTheme-Bk8AYqLr.mjs";
4
4
  import { A as A2, a, b as b2, H as H2, c as c2, d as d2, e, f, g, M as M2, S as S2, h, i, j, k, l, m, n, U as U2, o, p as p2, q, r, s, t as t2, v as v2, w as w2, u as u2 } from "./chunks/useTheme-Bk8AYqLr.mjs";
5
- import { a8 as tv, V as Popover, Z as PopoverTrigger, Y as PopoverContent, a7 as Button, D as Dialog, w as DialogTrigger, c as cn, p as DialogContent, v as DialogTitle, W as PopoverAnchor, o as DialogClose, q as DialogDescription, x as DropdownMenu, O as DropdownMenuTrigger, z as DropdownMenuContent, J as DropdownMenuSeparator, E as DropdownMenuItem } from "./chunks/avatar-FPbG1TRy.mjs";
5
+ import { a8 as tv, c as cn, V as Popover, Z as PopoverTrigger, Y as PopoverContent, a7 as Button, D as Dialog, w as DialogTrigger, p as DialogContent, v as DialogTitle, W as PopoverAnchor, o as DialogClose, q as DialogDescription, x as DropdownMenu, O as DropdownMenuTrigger, z as DropdownMenuContent, J as DropdownMenuSeparator, E as DropdownMenuItem } from "./chunks/avatar-FPbG1TRy.mjs";
6
6
  import { P as P2, Q as Q2, R as R2, S as S3, T, U as U3, y as y2, F as F2, H as H3, I as I2, a9 as a92, a6 as a62 } from "./chunks/avatar-FPbG1TRy.mjs";
7
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
7
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
8
8
  import * as React from "react";
9
- import { forwardRef, useId, useState, Fragment as Fragment$1, isValidElement, useCallback, useMemo, createElement, useRef, useEffect, useLayoutEffect } from "react";
10
- import { l as Checkbox, C as Calendar, T as Textarea } from "./chunks/sheet-7v5vamnP.mjs";
11
- import { G as G2, H as H4, F as F3, O as O2 } from "./chunks/sheet-7v5vamnP.mjs";
9
+ import { createContext, forwardRef, useContext, useId, useState, Fragment as Fragment$1, isValidElement, useCallback, useMemo, createElement, useRef, useEffect, useLayoutEffect } from "react";
10
+ import { Q as Switch, l as Checkbox, C as Calendar, T as Textarea } from "./chunks/sheet-DIpYkRYS.mjs";
11
+ import { G as G2, H as H4, F as F3, O as O2 } from "./chunks/sheet-DIpYkRYS.mjs";
12
+ import { av as RadioGroup, aw as RadioGroupItem, az as Separator, aA as Skeleton } from "./chunks/toggle-group-mXbG8_Jm.mjs";
13
+ import { B as B2, aJ } from "./chunks/toggle-group-mXbG8_Jm.mjs";
12
14
  import { Check, MoreHorizontal, SlidersHorizontal, Calendar as Calendar$1, AlertCircle, CheckCheck, Clock, MoreVertical, Ban, X as X2, CalendarDays, ChevronDown, ChevronLeft, ChevronRight, RefreshCw, OctagonX, TriangleAlert, CircleCheck, Info, Bell } from "lucide-react";
13
15
  import { Reply } from "lucide-react";
14
- import { ay as Separator, az as Skeleton } from "./chunks/toggle-group-CnAN6ZnT.mjs";
15
- import { B as B2, aI } from "./chunks/toggle-group-CnAN6ZnT.mjs";
16
16
  import { I as Input } from "./chunks/input-tjIT8HNE.mjs";
17
17
  import { i as i2 } from "./chunks/input-tjIT8HNE.mjs";
18
18
  import { a as a10, b as b3, K as K2 } from "./chunks/kpi-delta-BRTgTaO1.mjs";
@@ -24,76 +24,325 @@ import { toast as toast$1 } from "sonner";
24
24
  import "@radix-ui/react-aspect-ratio";
25
25
  import "react-day-picker";
26
26
  import "@radix-ui/react-collapsible";
27
- const cardCheckbox = tv({
27
+ const cardOption = tv({
28
28
  slots: {
29
29
  root: [
30
- "flex items-center gap-gp-lg w-full",
31
- "p-pad-xl rounded-radius-lg border text-left cursor-pointer",
30
+ "flex w-full items-center",
31
+ "border text-left cursor-pointer",
32
32
  "transition-[border-color,background-color,box-shadow] duration-150",
33
- "focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring-brand"
33
+ // O anel é do CARD, disparado pelo foco do controle dentro dele.
34
+ "has-[:focus-visible]:ring-4 has-[:focus-visible]:ring-ring-brand"
34
35
  ],
35
- body: "flex flex-col flex-1 min-w-0 gap-gp-2xs",
36
- label: "text-body-sm font-semibold text-fg-default leading-tight truncate",
37
- description: "text-caption-md text-fg-muted"
36
+ control: "shrink-0",
37
+ // Piso de 20px nos dois eixos: ícone menor que isso não se lê ao lado de um texto de
38
+ // 13px, e o `place-items-center` mantém centrado quando o conteúdo é menor que a caixa.
39
+ iconWrap: "grid shrink-0 place-items-center min-h-comp-2xs min-w-comp-2xs",
40
+ body: "flex min-w-0 flex-1 flex-col gap-gp-2xs",
41
+ label: "truncate font-semibold leading-tight text-fg-default",
42
+ description: "text-fg-muted"
38
43
  },
39
44
  variants: {
40
- selected: {
41
- true: { root: "border-border-brand bg-bg-success-muted shadow-sh-sm" },
45
+ size: {
46
+ sm: {
47
+ root: "p-pad-md gap-gp-md rounded-radius-md",
48
+ label: "text-body-sm",
49
+ description: "text-caption-sm"
50
+ },
51
+ md: {
52
+ root: "p-pad-xl gap-gp-lg rounded-radius-lg",
53
+ label: "text-body-sm",
54
+ description: "text-caption-md"
55
+ },
56
+ lg: {
57
+ root: "p-pad-2xl gap-gp-xl rounded-radius-xl",
58
+ label: "text-body-md",
59
+ description: "text-caption-md"
60
+ }
61
+ },
62
+ /**
63
+ * Onde o CONTROLE fica — e só ele.
64
+ *
65
+ * ⚠️ Era `flex-row-reverse` no root, que invertia TODOS os filhos e levava o ícone pra
66
+ * direita junto. O ícone tem de ficar sempre à esquerda: ele identifica a opção (junto do
67
+ * texto), enquanto o controle é a ação. `order-last` move apenas o controle, mantendo
68
+ * ícone → texto na ordem de leitura em qualquer orientação.
69
+ */
70
+ orientation: {
71
+ left: {},
72
+ right: { control: "order-last" }
73
+ },
74
+ /**
75
+ * O destaque de selecionado vem do **data attribute do controle**, não de prop.
76
+ *
77
+ * ⚠️ A 1ª versão derivava de `checked === true` em JS e o card de **radio nunca
78
+ * destacava** — a seleção do radio mora no `value` do grupo, não numa prop do item, então
79
+ * a condição era falsa por construção. Pego no browser: o item com
80
+ * `data-state="checked"` seguia branco.
81
+ *
82
+ * `has-[[data-state=checked]]` resolve os três tipos de uma vez e funciona também em uso
83
+ * NÃO-CONTROLADO (`defaultValue`/`defaultChecked`), onde nenhuma prop diz o estado. É a
84
+ * L-012: Radix marca estado por data attribute, não por atributo HTML.
85
+ *
86
+ * ⚠️ Quem decide se esta variante entra é o `card-option.tsx`, e o default DEPENDE DO
87
+ * CONTEXTO: em card solto vem do `type`; **em lista vem desligado**, porque a única borda
88
+ * do item ali é a de baixo — a divisória — e pintá-la colore a linha que separa o
89
+ * selecionado do vizinho, não o contorno dele.
90
+ */
91
+ highlight: {
92
+ true: {
93
+ root: [
94
+ "border-border-default bg-bg-surface hover:border-border-input hover:bg-bg-muted",
95
+ "has-[[data-state=checked]]:border-border-brand",
96
+ "has-[[data-state=checked]]:bg-bg-success-muted",
97
+ "has-[[data-state=checked]]:shadow-sh-sm"
98
+ ]
99
+ },
42
100
  false: {
43
101
  root: "border-border-default bg-bg-surface hover:border-border-input hover:bg-bg-muted"
44
102
  }
45
103
  },
104
+ /**
105
+ * Dentro de um grupo `layout="list"`: sem cantos e sem borda em volta — quem desenha o
106
+ * contorno é o grupo. O que sobra é a **linha divisória**, feita pela borda de baixo de
107
+ * cada item, com o último suprimido.
108
+ *
109
+ * ⚠️ A 1ª versão era `border-0` no item + `divide-y` no grupo, e **não desenhava divisória
110
+ * nenhuma**: o `divide-y` funciona pondo `border-top` nos filhos a partir do 2º, e o
111
+ * `border-0` do item zerava justamente essa borda. Medido no browser — `border-top: 0px`
112
+ * nos três itens. Desenhar a borda no próprio item não depende dessa ordem de cascata.
113
+ */
114
+ inList: {
115
+ true: {
116
+ root: "rounded-radius-none border-x-0 border-t-0 border-b last:border-b-0"
117
+ }
118
+ },
46
119
  disabled: {
120
+ // Não existe token bg/border de disabled no DS — o padrão é opacidade.
47
121
  true: { root: "opacity-50 cursor-not-allowed pointer-events-none" }
48
122
  }
49
123
  },
124
+ compoundVariants: [
125
+ /**
126
+ * Em LISTA com destaque ligado, a sombra sai.
127
+ *
128
+ * `shadow-sh-sm` num card solto o levanta da página; numa linha de lista ele vaza por
129
+ * cima da linha vizinha e some atrás do `overflow-hidden` do grupo — sombra dentro de
130
+ * caixa cortada é ruído, não elevação. Fundo e cor de borda continuam (é justamente o que
131
+ * o `highlightSelected` promete); só a elevação não faz sentido aqui.
132
+ */
133
+ {
134
+ inList: true,
135
+ highlight: true,
136
+ class: { root: "has-[[data-state=checked]]:shadow-sh-none" }
137
+ },
138
+ // disabled SEMPRE por último (L-006), senão as classes de selected/hover o sobrescrevem
139
+ {
140
+ disabled: true,
141
+ class: { root: "border-border-default bg-bg-surface hover:bg-bg-surface" }
142
+ }
143
+ ],
50
144
  defaultVariants: {
51
- selected: false
145
+ size: "md",
146
+ orientation: "left",
147
+ highlight: true
52
148
  }
53
149
  });
54
- const CardCheckbox = forwardRef(
55
- ({
150
+ const cardOptionGroup = tv({
151
+ base: "flex w-full flex-col",
152
+ variants: {
153
+ layout: {
154
+ spaced: "gap-gp-lg",
155
+ /**
156
+ * O grupo desenha só o contorno; a divisória entre linhas é a borda de baixo de cada
157
+ * item (ver `inList`). Não usa `divide-y`: ele põe `border-top` nos filhos e brigava
158
+ * com o reset de borda do item.
159
+ *
160
+ * Vale pros TRÊS tipos, não só switch — radio em lista é um seletor de linha única, e
161
+ * checkbox em lista é uma lista de permissões.
162
+ *
163
+ * ⚠️ O `gap-0` é obrigatório e não é redundante: com `type="radio"` o grupo É o
164
+ * `RadioGroup` do DS, que traz `grid w-full gap-gp-xl` no base. Sem declarar gap aqui,
165
+ * o `gap-gp-xl` (12px) sobrevivia e a lista de radio saía com 12px entre as linhas —
166
+ * medido. (A 1ª tentativa foi um `grid-none` que eu inventei; classe inexistente é
167
+ * inerte e não zera nada.)
168
+ */
169
+ list: "gap-0 overflow-hidden border border-border-default"
170
+ },
171
+ size: {
172
+ // O radius do grupo acompanha o do item, senão o canto da lista destoa do card solto.
173
+ sm: "",
174
+ md: "",
175
+ lg: ""
176
+ },
177
+ disabled: {
178
+ true: "opacity-50 pointer-events-none"
179
+ }
180
+ },
181
+ compoundVariants: [
182
+ { layout: "list", size: "sm", class: "rounded-radius-md" },
183
+ { layout: "list", size: "md", class: "rounded-radius-lg" },
184
+ { layout: "list", size: "lg", class: "rounded-radius-xl" }
185
+ ],
186
+ defaultVariants: {
187
+ layout: "spaced",
188
+ size: "md"
189
+ }
190
+ });
191
+ const PADRAO_POR_TIPO = {
192
+ checkbox: { orientation: "left", highlightSelected: true },
193
+ radio: { orientation: "left", highlightSelected: true },
194
+ switch: { orientation: "right", highlightSelected: false }
195
+ };
196
+ const CardOptionCtx = createContext(null);
197
+ const CardOptionGroup = forwardRef(
198
+ function CardOptionGroup2({
199
+ type = "checkbox",
200
+ size = "md",
201
+ orientation,
202
+ layout = "spaced",
203
+ highlightSelected,
204
+ value,
205
+ defaultValue,
206
+ onValueChange,
207
+ name,
208
+ disabled,
209
+ children,
210
+ className,
211
+ ...rest
212
+ }, ref) {
213
+ const classes = cardOptionGroup({ layout, size, disabled: disabled ? true : void 0 });
214
+ const ctx = { type, size, orientation, layout, highlightSelected, disabled };
215
+ if (type === "radio") {
216
+ return /* @__PURE__ */ jsx(CardOptionCtx.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
217
+ RadioGroup,
218
+ {
219
+ ref,
220
+ value,
221
+ defaultValue,
222
+ onValueChange,
223
+ name,
224
+ disabled,
225
+ className: cn(classes, className),
226
+ ...rest,
227
+ children
228
+ }
229
+ ) });
230
+ }
231
+ return /* @__PURE__ */ jsx(CardOptionCtx.Provider, { value: ctx, children: /* @__PURE__ */ jsx("div", { ref, className: cn(classes, className), ...rest, children }) });
232
+ }
233
+ );
234
+ const CardOption = forwardRef(
235
+ function CardOption2({
236
+ type: typeProp,
237
+ value,
238
+ size: sizeProp,
239
+ orientation: orientationProp,
240
+ highlightSelected: highlightProp,
56
241
  label,
57
242
  description: description2,
58
243
  icon,
59
244
  checked,
60
- disabled,
245
+ defaultChecked,
246
+ onCheckedChange,
247
+ disabled: disabledProp,
248
+ id: idProp,
61
249
  className,
62
- ...checkboxProps
63
- }, ref) => {
250
+ ...rest
251
+ }, ref) {
252
+ const ctx = useContext(CardOptionCtx);
64
253
  const autoId = useId();
65
- const isSelected = checked === true;
66
- const styles2 = cardCheckbox({
67
- selected: isSelected,
254
+ const id = idProp ?? autoId;
255
+ const type = typeProp ?? ctx?.type ?? "checkbox";
256
+ const size = sizeProp ?? ctx?.size ?? "md";
257
+ const disabled = disabledProp ?? ctx?.disabled;
258
+ const padroes = PADRAO_POR_TIPO[type];
259
+ const orientation = orientationProp ?? ctx?.orientation ?? padroes.orientation;
260
+ const emLista = ctx?.layout === "list";
261
+ const highlight = highlightProp ?? ctx?.highlightSelected ?? (emLista ? false : padroes.highlightSelected);
262
+ const styles2 = cardOption({
263
+ size,
264
+ orientation,
265
+ highlight,
266
+ inList: emLista ? true : void 0,
68
267
  disabled: disabled ? true : void 0
69
268
  });
70
- return /* @__PURE__ */ jsxs(
71
- "label",
269
+ const controle = type === "radio" ? /* @__PURE__ */ jsx(
270
+ RadioGroupItem,
72
271
  {
73
- htmlFor: autoId,
74
- className: [styles2.root(), className].filter(Boolean).join(" "),
75
- children: [
76
- /* @__PURE__ */ jsx(
77
- Checkbox,
78
- {
79
- ref,
80
- id: autoId,
81
- checked,
82
- disabled,
83
- ...checkboxProps
84
- }
85
- ),
86
- icon && /* @__PURE__ */ jsx("span", { className: "grid place-items-center shrink-0", "aria-hidden": "true", children: icon }),
87
- /* @__PURE__ */ jsxs("div", { className: styles2.body(), children: [
88
- /* @__PURE__ */ jsx("span", { className: styles2.label(), children: label }),
89
- description2 && /* @__PURE__ */ jsx("span", { className: styles2.description(), children: description2 })
90
- ] })
91
- ]
272
+ ref,
273
+ id,
274
+ value: value ?? "",
275
+ disabled,
276
+ className: styles2.control(),
277
+ ...rest
278
+ }
279
+ ) : type === "switch" ? /* @__PURE__ */ jsx(
280
+ Switch,
281
+ {
282
+ ref,
283
+ id,
284
+ checked,
285
+ defaultChecked,
286
+ onCheckedChange,
287
+ disabled,
288
+ className: styles2.control(),
289
+ ...rest
290
+ }
291
+ ) : /* @__PURE__ */ jsx(
292
+ Checkbox,
293
+ {
294
+ ref,
295
+ id,
296
+ checked,
297
+ defaultChecked,
298
+ onCheckedChange,
299
+ disabled,
300
+ className: styles2.control(),
301
+ ...rest
92
302
  }
93
303
  );
304
+ return /* @__PURE__ */ jsxs("label", { htmlFor: id, className: cn(styles2.root(), className), children: [
305
+ controle,
306
+ icon && /* @__PURE__ */ jsx("span", { className: styles2.iconWrap(), "aria-hidden": "true", children: icon }),
307
+ /* @__PURE__ */ jsxs("div", { className: styles2.body(), children: [
308
+ /* @__PURE__ */ jsx("span", { className: styles2.label(), children: label }),
309
+ description2 && /* @__PURE__ */ jsx("span", { className: styles2.description(), children: description2 })
310
+ ] })
311
+ ] });
94
312
  }
95
313
  );
96
- CardCheckbox.displayName = "CardCheckbox";
314
+ const CardCheckbox = forwardRef(
315
+ function CardCheckbox2(props, ref) {
316
+ return /* @__PURE__ */ jsx(CardOption, { ref, type: "checkbox", ...props });
317
+ }
318
+ );
319
+ const cardCheckbox = tv({
320
+ slots: {
321
+ root: [
322
+ "flex items-center gap-gp-lg w-full",
323
+ "p-pad-xl rounded-radius-lg border text-left cursor-pointer",
324
+ "transition-[border-color,background-color,box-shadow] duration-150",
325
+ "focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring-brand"
326
+ ],
327
+ body: "flex flex-col flex-1 min-w-0 gap-gp-2xs",
328
+ label: "text-body-sm font-semibold text-fg-default leading-tight truncate",
329
+ description: "text-caption-md text-fg-muted"
330
+ },
331
+ variants: {
332
+ selected: {
333
+ true: { root: "border-border-brand bg-bg-success-muted shadow-sh-sm" },
334
+ false: {
335
+ root: "border-border-default bg-bg-surface hover:border-border-input hover:bg-bg-muted"
336
+ }
337
+ },
338
+ disabled: {
339
+ true: { root: "opacity-50 cursor-not-allowed pointer-events-none" }
340
+ }
341
+ },
342
+ defaultVariants: {
343
+ selected: false
344
+ }
345
+ });
97
346
  const colorPickerStyles = tv({
98
347
  slots: {
99
348
  root: "inline-flex w-full items-center gap-gp-md",
@@ -119,7 +368,12 @@ const colorPickerStyles = tv({
119
368
  customRow: "flex flex-col gap-gp-md"
120
369
  },
121
370
  variants: {
371
+ /* Espelha a escala do Input (`shadcn/input.tsx`) degrau por degrau. O `size` é
372
+ repassado pro Input interno, então uma escala menor aqui deixava combinação válida
373
+ no Input inalcançável pelo ColorPicker — era o caso de `xxs` e `xs`. */
122
374
  size: {
375
+ xxs: { swatch: "size-form-xs" },
376
+ xs: { swatch: "size-form-sm" },
123
377
  sm: { swatch: "size-form-md" },
124
378
  md: { swatch: "size-form-lg" }
125
379
  },
@@ -8048,6 +8302,8 @@ export {
8048
8302
  Button,
8049
8303
  ButtonGroup,
8050
8304
  CardCheckbox,
8305
+ CardOption,
8306
+ CardOptionGroup,
8051
8307
  ChartContainer,
8052
8308
  ChartLegend,
8053
8309
  ChartLegendContent,
@@ -8179,9 +8435,11 @@ export {
8179
8435
  ae as ViewsPopover,
8180
8436
  actionColumn,
8181
8437
  af as avatarVariants,
8182
- aI as badgeVariants,
8438
+ aJ as badgeVariants,
8183
8439
  a92 as buttonVariants,
8184
8440
  cardCheckbox,
8441
+ cardOption,
8442
+ cardOptionGroup,
8185
8443
  o as chipCount,
8186
8444
  p2 as chipVariants,
8187
8445
  colorPickerStyles,