@motor-hero/ui-kit 0.50.0 → 0.51.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.
- package/dist/components/combobox.d.ts +9 -0
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/multi-combobox.d.ts +1 -1
- package/dist/components/multi-combobox.d.ts.map +1 -1
- package/dist/index.cjs +40 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +41 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/combobox.tsx +44 -7
- package/src/components/multi-combobox.tsx +21 -4
|
@@ -6,6 +6,10 @@ export interface ComboboxOption {
|
|
|
6
6
|
/** Optional leading decoration rendered before the label (icon, colored
|
|
7
7
|
* dot) — purely visual, doesn't affect filtering/matching. */
|
|
8
8
|
icon?: React.ReactNode;
|
|
9
|
+
/** Linha secundária abaixo do rótulo na lista (ex.: e-mail de uma pessoa,
|
|
10
|
+
* para separar homônimos). No gatilho vira o `title`. Entra na busca do
|
|
11
|
+
* modo cliente. */
|
|
12
|
+
description?: string;
|
|
9
13
|
}
|
|
10
14
|
export interface ComboboxProps {
|
|
11
15
|
options: ComboboxOption[];
|
|
@@ -59,4 +63,9 @@ export interface ComboboxProps {
|
|
|
59
63
|
* estado de erro) e fica com a borda vermelha quando inválido.
|
|
60
64
|
*/
|
|
61
65
|
export declare function Combobox({ options, value, onChange, placeholder, searchPlaceholder, emptyMessage, disabled, id, className, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, onSearchChange, onLoadMore, loading, hasMore, selectedOption, creatable, formatCreateLabel, deselectable, }: ComboboxProps): React.JSX.Element;
|
|
66
|
+
export declare const filterByKeywords: (_value: string, search: string, keywords?: string[]) => number;
|
|
67
|
+
export declare const optionKeywords: (option: ComboboxOption) => string[];
|
|
68
|
+
export declare function OptionText({ option }: {
|
|
69
|
+
option: ComboboxOption;
|
|
70
|
+
}): React.JSX.Element;
|
|
62
71
|
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kEAC8D;IAC9D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kEAC8D;IAC9D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB;;uBAEmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;wDACoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;yDAEqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C;mFAC+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACxB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,YAAY,GACZ,EAAE,aAAa,qBA8Lf;AAKD,eAAO,MAAM,gBAAgB,GAC5B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,WAAU,MAAM,EAAO,WACsB,CAAC;AAE/C,eAAO,MAAM,cAAc,GAAI,QAAQ,cAAc,aACoB,CAAC;AAE1E,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,qBAchE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-combobox.d.ts","sourceRoot":"","sources":["../../src/components/multi-combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"multi-combobox.d.ts","sourceRoot":"","sources":["../../src/components/multi-combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;+DAC2D;IAC3D,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,eAAe,GAChB,EAAE,kBAAkB,qBA6MpB"}
|
package/dist/index.cjs
CHANGED
|
@@ -879,7 +879,14 @@ function Combobox({
|
|
|
879
879
|
className
|
|
880
880
|
),
|
|
881
881
|
children: [
|
|
882
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
882
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
883
|
+
"span",
|
|
884
|
+
{
|
|
885
|
+
title: selected?.description,
|
|
886
|
+
className: cn("truncate", !selected && "text-muted-foreground"),
|
|
887
|
+
children: selected ? selected.label : placeholder
|
|
888
|
+
}
|
|
889
|
+
),
|
|
883
890
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
884
891
|
]
|
|
885
892
|
}
|
|
@@ -888,6 +895,7 @@ function Combobox({
|
|
|
888
895
|
import_cmdk.Command,
|
|
889
896
|
{
|
|
890
897
|
shouldFilter: !isServer,
|
|
898
|
+
filter: filterByKeywords,
|
|
891
899
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
892
900
|
children: [
|
|
893
901
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center border-b px-3", children: [
|
|
@@ -912,6 +920,7 @@ function Combobox({
|
|
|
912
920
|
import_cmdk.Command.Item,
|
|
913
921
|
{
|
|
914
922
|
value: trimmedSearch,
|
|
923
|
+
keywords: [trimmedSearch],
|
|
915
924
|
onSelect: () => handleSelect(trimmedSearch),
|
|
916
925
|
className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground sm:py-1.5",
|
|
917
926
|
children: [
|
|
@@ -925,7 +934,8 @@ function Combobox({
|
|
|
925
934
|
options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
926
935
|
import_cmdk.Command.Item,
|
|
927
936
|
{
|
|
928
|
-
value:
|
|
937
|
+
value: option.value,
|
|
938
|
+
keywords: optionKeywords(option),
|
|
929
939
|
disabled: option.disabled,
|
|
930
940
|
onSelect: () => handleSelect(option.value),
|
|
931
941
|
className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
|
|
@@ -940,7 +950,7 @@ function Combobox({
|
|
|
940
950
|
}
|
|
941
951
|
),
|
|
942
952
|
option.icon,
|
|
943
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
953
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(OptionText, { option })
|
|
944
954
|
]
|
|
945
955
|
},
|
|
946
956
|
option.value
|
|
@@ -981,6 +991,23 @@ function Combobox({
|
|
|
981
991
|
] })
|
|
982
992
|
] });
|
|
983
993
|
}
|
|
994
|
+
var filterByKeywords = (_value, search, keywords = []) => (0, import_cmdk.defaultFilter)(keywords.join(" "), search);
|
|
995
|
+
var optionKeywords = (option) => option.description ? [option.label, option.description] : [option.label];
|
|
996
|
+
function OptionText({ option }) {
|
|
997
|
+
if (!option.description)
|
|
998
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "truncate", children: option.label });
|
|
999
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "flex min-w-0 flex-col", children: [
|
|
1000
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "truncate", children: option.label }),
|
|
1001
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1002
|
+
"span",
|
|
1003
|
+
{
|
|
1004
|
+
title: option.description,
|
|
1005
|
+
className: "truncate text-xs text-muted-foreground",
|
|
1006
|
+
children: option.description
|
|
1007
|
+
}
|
|
1008
|
+
)
|
|
1009
|
+
] });
|
|
1010
|
+
}
|
|
984
1011
|
|
|
985
1012
|
// src/components/confirm-dialog.tsx
|
|
986
1013
|
var AlertDialog = __toESM(require("@radix-ui/react-alert-dialog"), 1);
|
|
@@ -1898,6 +1925,10 @@ function MultiCombobox({
|
|
|
1898
1925
|
for (const [key, option] of byValue) labelCache.current.set(key, option);
|
|
1899
1926
|
});
|
|
1900
1927
|
const selected = value.map((v) => byValue.get(v) ?? labelCache.current.get(v)).filter((option) => option !== void 0);
|
|
1928
|
+
const labelCounts = /* @__PURE__ */ new Map();
|
|
1929
|
+
for (const option of selected)
|
|
1930
|
+
labelCounts.set(option.label, (labelCounts.get(option.label) ?? 0) + 1);
|
|
1931
|
+
const chipLabel = (option) => option.description && (labelCounts.get(option.label) ?? 0) > 1 ? `${option.label} \xB7 ${option.description}` : option.label;
|
|
1901
1932
|
const { listRef, sentinelRef } = useInfiniteScrollSentinel({
|
|
1902
1933
|
enabled: isServer && !!hasMore,
|
|
1903
1934
|
loading,
|
|
@@ -1936,9 +1967,10 @@ function MultiCombobox({
|
|
|
1936
1967
|
selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1937
1968
|
"span",
|
|
1938
1969
|
{
|
|
1970
|
+
title: option.description,
|
|
1939
1971
|
className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
|
|
1940
1972
|
children: [
|
|
1941
|
-
option
|
|
1973
|
+
chipLabel(option),
|
|
1942
1974
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1943
1975
|
"button",
|
|
1944
1976
|
{
|
|
@@ -1966,6 +1998,7 @@ function MultiCombobox({
|
|
|
1966
1998
|
import_cmdk2.Command,
|
|
1967
1999
|
{
|
|
1968
2000
|
shouldFilter: !isServer,
|
|
2001
|
+
filter: filterByKeywords,
|
|
1969
2002
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
1970
2003
|
children: [
|
|
1971
2004
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center border-b px-3", children: [
|
|
@@ -1989,7 +2022,8 @@ function MultiCombobox({
|
|
|
1989
2022
|
options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1990
2023
|
import_cmdk2.Command.Item,
|
|
1991
2024
|
{
|
|
1992
|
-
value:
|
|
2025
|
+
value: option.value,
|
|
2026
|
+
keywords: optionKeywords(option),
|
|
1993
2027
|
disabled: option.disabled,
|
|
1994
2028
|
onSelect: () => toggleValue(option.value),
|
|
1995
2029
|
className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
|
|
@@ -2003,7 +2037,7 @@ function MultiCombobox({
|
|
|
2003
2037
|
)
|
|
2004
2038
|
}
|
|
2005
2039
|
),
|
|
2006
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2040
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(OptionText, { option })
|
|
2007
2041
|
]
|
|
2008
2042
|
},
|
|
2009
2043
|
option.value
|