@strategicos/ui 0.6.0 → 0.6.1

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.
@@ -21,7 +21,7 @@ export type MultiSelectOption = {
21
21
  * Teclado: digite para filtrar, ↑/↓ para andar, Enter para marcar/desmarcar,
22
22
  * Esc para fechar. Dentro de um <Field>, o gatilho recebe o id e os aria-*.
23
23
  */
24
- declare function MultiSelect({ options, value, onValueChange, placeholder, searchPlaceholder, emptyText, maxDisplayed, searchable, size, disabled, className, contentClassName, ...props }: {
24
+ declare function MultiSelect({ options, value, onValueChange, placeholder, searchPlaceholder, emptyText, maxDisplayed, searchable, size, disabled, className, contentClassName, onOpenChange, ...props }: {
25
25
  options: MultiSelectOption[];
26
26
  value: string[];
27
27
  onValueChange: (value: string[]) => void;
@@ -35,6 +35,9 @@ declare function MultiSelect({ options, value, onValueChange, placeholder, searc
35
35
  disabled?: boolean;
36
36
  className?: string;
37
37
  contentClassName?: string;
38
+ /** Avisa quando a lista abre e fecha. Útil para gravar a seleção uma vez só,
39
+ * ao fechar, em vez de a cada clique. */
40
+ onOpenChange?: (open: boolean) => void;
38
41
  id?: string;
39
42
  "aria-label"?: string;
40
43
  "aria-describedby"?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../src/components/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,iBAAS,WAAW,CAAC,EACnB,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAyB,EACzB,iBAA6B,EAC7B,SAA8B,EAC9B,YAAgB,EAChB,UAAiB,EACjB,IAAgB,EAChB,QAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,GAAG,KAAK,EACT,EAAE;IACD,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;CACtD,qBA0IA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../src/components/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,iBAAS,WAAW,CAAC,EACnB,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAyB,EACzB,iBAA6B,EAC7B,SAA8B,EAC9B,YAAgB,EAChB,UAAiB,EACjB,IAAgB,EAChB,QAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,GAAG,KAAK,EACT,EAAE;IACD,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;8CAC0C;IAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;CACtD,qBA0IA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -19,7 +19,7 @@ import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
19
19
  * Teclado: digite para filtrar, ↑/↓ para andar, Enter para marcar/desmarcar,
20
20
  * Esc para fechar. Dentro de um <Field>, o gatilho recebe o id e os aria-*.
21
21
  */
22
- function MultiSelect({ options, value, onValueChange, placeholder = "Selecione", searchPlaceholder = "Buscar…", emptyText = "Nada encontrado.", maxDisplayed = 2, searchable = true, size = "default", disabled = false, className, contentClassName, ...props }) {
22
+ function MultiSelect({ options, value, onValueChange, placeholder = "Selecione", searchPlaceholder = "Buscar…", emptyText = "Nada encontrado.", maxDisplayed = 2, searchable = true, size = "default", disabled = false, className, contentClassName, onOpenChange, ...props }) {
23
23
  const controlProps = useFieldControl(props, { withRequired: false });
24
24
  const [open, setOpen] = React.useState(false);
25
25
  const [query, setQuery] = React.useState("");
@@ -61,7 +61,7 @@ function MultiSelect({ options, value, onValueChange, placeholder = "Selecione",
61
61
  return (_jsxs(Popover, { open: open, onOpenChange: o => { setOpen(o); if (!o) {
62
62
  setQuery("");
63
63
  setActive(0);
64
- } }, children: [_jsx(PopoverTrigger, { asChild: true, disabled: disabled, children: _jsxs("button", { type: "button", role: "combobox", "aria-expanded": open, "aria-controls": listId, "data-slot": "multi-select-trigger", "data-size": size, ...controlProps, className: cn("flex w-full min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent pr-2.5 pl-3 text-left text-sm transition-colors outline-none focus-visible:border-ring disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-60 aria-invalid:border-destructive data-[size=default]:h-9 data-[size=sm]:h-7.5 data-[state=open]:border-ring dark:bg-input/30", className), children: [_jsx("span", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden", children: selectedOptions.length === 0 ? (_jsx("span", { className: "truncate text-muted-foreground", children: placeholder })) : selectedOptions.length <= maxDisplayed ? (selectedOptions.map(o => (_jsx(Badge, { variant: "secondary", className: "max-w-[10rem] normal-case", children: _jsx("span", { className: "truncate", children: o.label }) }, o.value)))) : (_jsxs("span", { className: "truncate", children: [selectedOptions.length, " selecionados"] })) }), _jsx(ChevronDownIcon, { className: "size-4 shrink-0 opacity-70" })] }) }), _jsxs(PopoverContent, { className: cn("w-(--radix-popover-trigger-width) min-w-60 p-0", contentClassName), onKeyDown: onKeyDown, children: [searchable && (_jsxs("div", { className: "flex items-center gap-2 border-b border-border px-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }), _jsx("input", { autoFocus: true, value: query, onChange: e => { setQuery(e.target.value); setActive(0); }, placeholder: searchPlaceholder, "aria-label": searchPlaceholder, "aria-controls": listId, className: "h-9 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground" })] })), _jsx("div", { id: listId, role: "listbox", "aria-multiselectable": true, className: "max-h-64 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? (_jsx("p", { className: "px-2.5 py-6 text-center text-sm text-muted-foreground", children: emptyText })) : (groups.map(g => (_jsxs("div", { role: "group", "aria-label": g.name, children: [g.name && _jsx("p", { className: "px-2.5 pt-2 pb-1 text-xs font-medium text-muted-foreground", children: g.name }), g.items.map(o => {
64
+ } ; onOpenChange?.(o); }, children: [_jsx(PopoverTrigger, { asChild: true, disabled: disabled, children: _jsxs("button", { type: "button", role: "combobox", "aria-expanded": open, "aria-controls": listId, "data-slot": "multi-select-trigger", "data-size": size, ...controlProps, className: cn("flex w-full min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent pr-2.5 pl-3 text-left text-sm transition-colors outline-none focus-visible:border-ring disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-60 aria-invalid:border-destructive data-[size=default]:h-9 data-[size=sm]:h-7.5 data-[state=open]:border-ring dark:bg-input/30", className), children: [_jsx("span", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden", children: selectedOptions.length === 0 ? (_jsx("span", { className: "truncate text-muted-foreground", children: placeholder })) : selectedOptions.length <= maxDisplayed ? (selectedOptions.map(o => (_jsx(Badge, { variant: "secondary", className: "max-w-[10rem] normal-case", children: _jsx("span", { className: "truncate", children: o.label }) }, o.value)))) : (_jsxs("span", { className: "truncate", children: [selectedOptions.length, " selecionado", selectedOptions.length === 1 ? "" : "s"] })) }), _jsx(ChevronDownIcon, { className: "size-4 shrink-0 opacity-70" })] }) }), _jsxs(PopoverContent, { className: cn("w-(--radix-popover-trigger-width) min-w-60 p-0", contentClassName), onKeyDown: onKeyDown, children: [searchable && (_jsxs("div", { className: "flex items-center gap-2 border-b border-border px-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }), _jsx("input", { autoFocus: true, value: query, onChange: e => { setQuery(e.target.value); setActive(0); }, placeholder: searchPlaceholder, "aria-label": searchPlaceholder, "aria-controls": listId, className: "h-9 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground" })] })), _jsx("div", { id: listId, role: "listbox", "aria-multiselectable": true, className: "max-h-64 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? (_jsx("p", { className: "px-2.5 py-6 text-center text-sm text-muted-foreground", children: emptyText })) : (groups.map(g => (_jsxs("div", { role: "group", "aria-label": g.name, children: [g.name && _jsx("p", { className: "px-2.5 pt-2 pb-1 text-xs font-medium text-muted-foreground", children: g.name }), g.items.map(o => {
65
65
  const isSelected = selected.has(o.value);
66
66
  const isActive = selectable[active]?.value === o.value;
67
67
  return (_jsxs("div", { role: "option", "aria-selected": isSelected, "aria-disabled": o.disabled || undefined, "data-active": isActive || undefined, onMouseEnter: () => { const i = selectable.indexOf(o); if (i >= 0)
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select.js","sourceRoot":"","sources":["../../src/components/multi-select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-select.js","sourceRoot":"","sources":["../../src/components/multi-select.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strategicos/ui",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Componentes React da Strategicos (shadcn + Radix + Tailwind v4).",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -44,6 +44,7 @@ function MultiSelect({
44
44
  disabled = false,
45
45
  className,
46
46
  contentClassName,
47
+ onOpenChange,
47
48
  ...props
48
49
  }: {
49
50
  options: MultiSelectOption[]
@@ -59,6 +60,9 @@ function MultiSelect({
59
60
  disabled?: boolean
60
61
  className?: string
61
62
  contentClassName?: string
63
+ /** Avisa quando a lista abre e fecha. Útil para gravar a seleção uma vez só,
64
+ * ao fechar, em vez de a cada clique. */
65
+ onOpenChange?: (open: boolean) => void
62
66
  id?: string
63
67
  "aria-label"?: string
64
68
  "aria-describedby"?: string
@@ -96,7 +100,7 @@ function MultiSelect({
96
100
  const selectedOptions = options.filter(o => selected.has(o.value))
97
101
 
98
102
  return (
99
- <Popover open={open} onOpenChange={o => { setOpen(o); if (!o) { setQuery(""); setActive(0) } }}>
103
+ <Popover open={open} onOpenChange={o => { setOpen(o); if (!o) { setQuery(""); setActive(0) }; onOpenChange?.(o) }}>
100
104
  <PopoverTrigger asChild disabled={disabled}>
101
105
  <button
102
106
  type="button"
@@ -121,7 +125,7 @@ function MultiSelect({
121
125
  </Badge>
122
126
  ))
123
127
  ) : (
124
- <span className="truncate">{selectedOptions.length} selecionados</span>
128
+ <span className="truncate">{selectedOptions.length} selecionado{selectedOptions.length === 1 ? "" : "s"}</span>
125
129
  )}
126
130
  </span>
127
131
  <ChevronDownIcon className="size-4 shrink-0 opacity-70" />