tw-react-components 0.0.158 → 0.0.159
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/index.esm.js +15 -9
- package/package.json +1 -1
- package/src/components/Sidebar/index.d.ts +2 -2
package/index.esm.js
CHANGED
|
@@ -1241,8 +1241,11 @@ const DropdownMenu = Object.assign(DropdownMenuPrimitive.Root, {
|
|
|
1241
1241
|
RadioGroup: DropdownMenuRadioGroup,
|
|
1242
1242
|
});
|
|
1243
1243
|
|
|
1244
|
+
const defaultRenderItem = (item, selected) => item.label;
|
|
1245
|
+
const defaultSearchPredicate = (item, searchValue) => item.label.toLowerCase().includes(searchValue.toLowerCase());
|
|
1246
|
+
const defaultSelectPredicate = (a, b) => a === b;
|
|
1244
1247
|
const SelectInput = forwardRef((_a, ref) => {
|
|
1245
|
-
var { className, items, renderItem =
|
|
1248
|
+
var { className, items, renderItem = defaultRenderItem, value, multiple, clearable, allowAddition, onNewItemAdded, search, searchPredicate = defaultSearchPredicate, selectPredicate = defaultSelectPredicate, onChange, readOnly, parentRef } = _a, props = __rest(_a, ["className", "items", "renderItem", "value", "multiple", "clearable", "allowAddition", "onNewItemAdded", "search", "searchPredicate", "selectPredicate", "onChange", "readOnly", "parentRef"]);
|
|
1246
1249
|
const [open, setOpen] = useState(false);
|
|
1247
1250
|
const [searchValue, setSearchValue] = useState('');
|
|
1248
1251
|
const pureItems = useMemo(() => items.flatMap((item) => (item.group ? item.items : [item])), [items]);
|
|
@@ -1260,14 +1263,14 @@ const SelectInput = forwardRef((_a, ref) => {
|
|
|
1260
1263
|
const filteredItems = useMemo(() => !search || !searchValue
|
|
1261
1264
|
? items
|
|
1262
1265
|
: items.flatMap((item) => item.group
|
|
1263
|
-
? item.items.some((subItem) => subItem
|
|
1266
|
+
? item.items.some((subItem) => searchPredicate(subItem, searchValue))
|
|
1264
1267
|
? [
|
|
1265
|
-
Object.assign(Object.assign({}, item), { items: item.items.filter((subItem) => subItem
|
|
1268
|
+
Object.assign(Object.assign({}, item), { items: item.items.filter((subItem) => searchPredicate(subItem, searchValue)) }),
|
|
1266
1269
|
]
|
|
1267
1270
|
: []
|
|
1268
|
-
: item
|
|
1271
|
+
: searchPredicate(item, searchValue)
|
|
1269
1272
|
? [item]
|
|
1270
|
-
: []), [items, search, searchValue]);
|
|
1273
|
+
: []), [items, search, searchPredicate, searchValue]);
|
|
1271
1274
|
const text = useMemo(() => selectedItems.length
|
|
1272
1275
|
? !multiple
|
|
1273
1276
|
? selectedItems[0].label
|
|
@@ -1297,7 +1300,10 @@ const SelectInput = forwardRef((_a, ref) => {
|
|
|
1297
1300
|
}
|
|
1298
1301
|
}
|
|
1299
1302
|
}, [clearable, multiple, onChange, pureItems, selectedItems, selectedMap]);
|
|
1300
|
-
const handleOnSearchValueChange = (event) =>
|
|
1303
|
+
const handleOnSearchValueChange = (event) => {
|
|
1304
|
+
event.stopPropagation();
|
|
1305
|
+
setSearchValue(event.target.value);
|
|
1306
|
+
};
|
|
1301
1307
|
const clearSearchValue = () => setSearchValue('');
|
|
1302
1308
|
const handleOnClear = () => {
|
|
1303
1309
|
if (readOnly)
|
|
@@ -1318,7 +1324,7 @@ const SelectInput = forwardRef((_a, ref) => {
|
|
|
1318
1324
|
handleOnSelect(option.id);
|
|
1319
1325
|
}, children: jsx("span", { children: renderItem(option, isNotNullOrUndefined(selectedMap[option.id])) }) }));
|
|
1320
1326
|
}, [ItemComponent, handleOnSelect, multiple, renderItem, selectedMap]);
|
|
1321
|
-
return (jsxs(DropdownMenu, { open: open, onOpenChange: setOpen, children: [jsx(DropdownMenu.Trigger, { className: cn('w-full', className), children: jsx(TextInput, Object.assign({ className: "[&>div>*]:cursor-pointer", inputClassName: "text-left" }, props, { value: text !== null && text !== void 0 ? text : '', clearable: clearable && !!selectedItems.length, onClear: handleOnClear, suffixIcon: ChevronDownIcon, onSuffixIconClick: () => setOpen((open) => !open), ref: ref, readOnly: true })) }), jsxs(DropdownMenu.Content, { className: "flex max-h-80 w-[calc(var(--radix-popper-anchor-width))] flex-col overflow-hidden", children: [search && (jsxs(Fragment, { children: [jsx(TextInput, { value: searchValue, placeholder: "Search...", size: props.size, onChange: handleOnSearchValueChange, clearable: !!searchValue.length, onClear: clearSearchValue }), jsx(DropdownMenu.Separator, { className: "w-full" })] })), filteredItems.length === 0 &&
|
|
1327
|
+
return (jsxs(DropdownMenu, { open: open, onOpenChange: setOpen, children: [jsx(DropdownMenu.Trigger, { className: cn('w-full', className), children: jsx(TextInput, Object.assign({ className: "[&>div>*]:cursor-pointer", inputClassName: "text-left" }, props, { value: text !== null && text !== void 0 ? text : '', clearable: clearable && !!selectedItems.length, onClear: handleOnClear, suffixIcon: ChevronDownIcon, onSuffixIconClick: () => setOpen((open) => !open), ref: ref, readOnly: true })) }), jsxs(DropdownMenu.Content, { className: "flex max-h-80 w-[calc(var(--radix-popper-anchor-width))] flex-col overflow-hidden", children: [search && (jsxs(Fragment, { children: [jsx(TextInput, { value: searchValue, placeholder: "Search...", size: props.size, onChange: handleOnSearchValueChange, onKeyUp: (event) => event.stopPropagation(), onKeyDown: (event) => event.stopPropagation(), clearable: !!searchValue.length, onClear: clearSearchValue }), jsx(DropdownMenu.Separator, { className: "w-full" })] })), filteredItems.length === 0 &&
|
|
1322
1328
|
(allowAddition && searchValue ? (jsxs("button", { className: "rounded bg-slate-100 py-1.5 text-center hover:bg-slate-200 dark:bg-slate-900/30 dark:hover:bg-slate-700/30", onClick: handleOnAddItemClicked, children: ["Add '", searchValue, "'"] })) : (jsx("div", { className: "py-1.5 text-center text-slate-500", children: "No items." }))), jsx(GroupComponent, { className: "flex flex-col gap-1 overflow-auto", value: !multiple && selectedItems.length ? String(selectedItems[0].id) : undefined, children: filteredItems.map((item, index) => item.group ? (jsxs(Flex, { className: "gap-1", direction: "column", fullWidth: true, children: [jsx(DropdownMenu.Label, { className: "sticky top-0 z-[51] w-full rounded-md border bg-white py-1 dark:bg-slate-900", children: item.label }), item.items.map((subItem) => (jsx(RenderOption, Object.assign({}, subItem), subItem.id))), index < filteredItems.length - 1 && (jsx("div", { className: "mb-1 h-px w-full bg-slate-200 dark:bg-slate-700" }))] }, item.id)) : (jsx(RenderOption, Object.assign({}, item), item.id))) })] })] }));
|
|
1323
1329
|
});
|
|
1324
1330
|
function isNotNullOrUndefined(value) {
|
|
@@ -2007,8 +2013,8 @@ const SidebarMenuSubItem = forwardRef((_a, ref) => {
|
|
|
2007
2013
|
SidebarMenuSubItem.displayName = 'SidebarMenuSubItem';
|
|
2008
2014
|
const SidebarMenuSubButton = forwardRef((_a, ref) => {
|
|
2009
2015
|
var { asChild = false, size = 'md', isActive, className } = _a, props = __rest(_a, ["asChild", "size", "isActive", "className"]);
|
|
2010
|
-
const Comp = asChild ? Slot : '
|
|
2011
|
-
return (jsx(Comp, Object.assign({ ref: ref, "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn('text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground', size === 'sm' && 'text-xs', size === 'md' && 'text-sm', 'group-data-[collapsible=icon]:hidden', className) }, props)));
|
|
2016
|
+
const Comp = asChild ? Slot : 'button';
|
|
2017
|
+
return (jsx(Comp, Object.assign({ ref: ref, "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn('text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 w-full min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground', size === 'sm' && 'text-xs', size === 'md' && 'text-sm', 'group-data-[collapsible=icon]:hidden', className) }, props)));
|
|
2012
2018
|
});
|
|
2013
2019
|
SidebarMenuSubButton.displayName = 'SidebarMenuSubButton';
|
|
2014
2020
|
const Sidebar = Object.assign($Sidebar, {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tw-react-components",
|
|
3
3
|
"description": "A set of React components build with TailwindCSS to make a nice dashboard.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.159",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://bacali95.github.io/tw-react-components",
|
|
7
7
|
"type": "module",
|
|
@@ -72,11 +72,11 @@ export declare const Sidebar: import("react").ForwardRefExoticComponent<Omit<imp
|
|
|
72
72
|
showIcon?: boolean;
|
|
73
73
|
}, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
74
74
|
MenuSub: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
|
|
75
|
-
MenuSubButton: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<
|
|
75
|
+
MenuSubButton: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
76
76
|
asChild?: boolean;
|
|
77
77
|
size?: "sm" | "md";
|
|
78
78
|
isActive?: boolean;
|
|
79
|
-
}, "ref"> & import("react").RefAttributes<
|
|
79
|
+
}, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
80
80
|
MenuSubItem: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
|
|
81
81
|
Rail: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
82
82
|
Separator: import("react").ForwardRefExoticComponent<Omit<Omit<import("@radix-ui/react-separator").SeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|