tw-react-components 0.0.147 → 0.0.148

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.cjs.js CHANGED
@@ -1275,7 +1275,7 @@ const SelectInput = react.forwardRef((_a, ref) => {
1275
1275
  const [open, setOpen] = react.useState(false);
1276
1276
  const [searchValue, setSearchValue] = react.useState('');
1277
1277
  const pureItems = react.useMemo(() => items.flatMap((item) => (item.group ? item.items : [item])), [items]);
1278
- const selectedItems = react.useMemo(() => value
1278
+ const selectedItems = react.useMemo(() => isNotNullOrUndefined(value)
1279
1279
  ? !multiple
1280
1280
  ? pureItems.find((item) => selectPredicate(item.value, value))
1281
1281
  ? [pureItems.find((item) => selectPredicate(item.value, value))]
@@ -1315,7 +1315,7 @@ const SelectInput = react.forwardRef((_a, ref) => {
1315
1315
  }
1316
1316
  }
1317
1317
  else if (multiple) {
1318
- if (selectedMap[id]) {
1318
+ if (isNotNullOrUndefined(selectedMap[id])) {
1319
1319
  onChange === null || onChange === void 0 ? void 0 : onChange(selectedItems.filter((item) => item.id !== id).map((item) => item.value));
1320
1320
  }
1321
1321
  else {
@@ -1341,15 +1341,18 @@ const SelectInput = react.forwardRef((_a, ref) => {
1341
1341
  const ItemComponent = multiple ? DropdownMenu.CheckboxItem : DropdownMenu.RadioItem;
1342
1342
  const RenderOption = react.useCallback((option) => {
1343
1343
  return (jsxRuntime.jsx(ItemComponent, { className: cn('w-full cursor-pointer hover:bg-slate-200 dark:hover:bg-slate-700', {
1344
- 'bg-slate-200 dark:bg-slate-700': selectedMap[option.id],
1345
- }), value: String(option.id), checked: !!selectedMap[option.id], onSelect: (event) => {
1344
+ 'bg-slate-200 dark:bg-slate-700': isNotNullOrUndefined(selectedMap[option.id]),
1345
+ }), value: String(option.id), checked: isNotNullOrUndefined(selectedMap[option.id]), onSelect: (event) => {
1346
1346
  multiple && event.preventDefault();
1347
1347
  handleOnSelect(option.id);
1348
- }, children: jsxRuntime.jsx("span", { children: renderItem(option, !!selectedMap[option.id]) }) }));
1348
+ }, children: jsxRuntime.jsx("span", { children: renderItem(option, isNotNullOrUndefined(selectedMap[option.id])) }) }));
1349
1349
  }, [ItemComponent, handleOnSelect, multiple, renderItem, selectedMap]);
1350
1350
  return (jsxRuntime.jsxs(DropdownMenu, { open: open, onOpenChange: setOpen, children: [jsxRuntime.jsx(DropdownMenu.Trigger, { className: cn('w-full', className), children: jsxRuntime.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: lucideReact.ChevronDownIcon, onSuffixIconClick: () => setOpen((open) => !open), ref: ref, readOnly: true })) }), jsxRuntime.jsxs(DropdownMenu.Content, { className: "flex max-h-80 w-[calc(var(--radix-popper-anchor-width))] flex-col overflow-hidden", children: [search && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TextInput, { value: searchValue, placeholder: "Search...", size: props.size, onChange: handleOnSearchValueChange, clearable: !!searchValue.length, onClear: clearSearchValue }), jsxRuntime.jsx(DropdownMenu.Separator, { className: "w-full" })] })), filteredItems.length === 0 &&
1351
1351
  (allowAddition && searchValue ? (jsxRuntime.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, "'"] })) : (jsxRuntime.jsx("div", { className: "py-1.5 text-center text-slate-500", children: "No items." }))), jsxRuntime.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 ? (jsxRuntime.jsxs(Flex, { className: "gap-1", direction: "column", fullWidth: true, children: [jsxRuntime.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) => (jsxRuntime.jsx(RenderOption, Object.assign({}, subItem), subItem.id))), index < filteredItems.length - 1 && (jsxRuntime.jsx("div", { className: "mb-1 h-px w-full bg-slate-200 dark:bg-slate-700" }))] }, item.id)) : (jsxRuntime.jsx(RenderOption, Object.assign({}, item), item.id))) })] })] }));
1352
1352
  });
1353
+ function isNotNullOrUndefined(value) {
1354
+ return value !== null && value !== undefined;
1355
+ }
1353
1356
 
1354
1357
  const FileInput = react.forwardRef((_a, ref) => {
1355
1358
  var { className, value, onChange, onFileChange, accept } = _a, props = __rest(_a, ["className", "value", "onChange", "onFileChange", "accept"]);
package/index.esm.js CHANGED
@@ -1247,7 +1247,7 @@ const SelectInput = forwardRef((_a, ref) => {
1247
1247
  const [open, setOpen] = useState(false);
1248
1248
  const [searchValue, setSearchValue] = useState('');
1249
1249
  const pureItems = useMemo(() => items.flatMap((item) => (item.group ? item.items : [item])), [items]);
1250
- const selectedItems = useMemo(() => value
1250
+ const selectedItems = useMemo(() => isNotNullOrUndefined(value)
1251
1251
  ? !multiple
1252
1252
  ? pureItems.find((item) => selectPredicate(item.value, value))
1253
1253
  ? [pureItems.find((item) => selectPredicate(item.value, value))]
@@ -1287,7 +1287,7 @@ const SelectInput = forwardRef((_a, ref) => {
1287
1287
  }
1288
1288
  }
1289
1289
  else if (multiple) {
1290
- if (selectedMap[id]) {
1290
+ if (isNotNullOrUndefined(selectedMap[id])) {
1291
1291
  onChange === null || onChange === void 0 ? void 0 : onChange(selectedItems.filter((item) => item.id !== id).map((item) => item.value));
1292
1292
  }
1293
1293
  else {
@@ -1313,15 +1313,18 @@ const SelectInput = forwardRef((_a, ref) => {
1313
1313
  const ItemComponent = multiple ? DropdownMenu.CheckboxItem : DropdownMenu.RadioItem;
1314
1314
  const RenderOption = useCallback((option) => {
1315
1315
  return (jsx(ItemComponent, { className: cn('w-full cursor-pointer hover:bg-slate-200 dark:hover:bg-slate-700', {
1316
- 'bg-slate-200 dark:bg-slate-700': selectedMap[option.id],
1317
- }), value: String(option.id), checked: !!selectedMap[option.id], onSelect: (event) => {
1316
+ 'bg-slate-200 dark:bg-slate-700': isNotNullOrUndefined(selectedMap[option.id]),
1317
+ }), value: String(option.id), checked: isNotNullOrUndefined(selectedMap[option.id]), onSelect: (event) => {
1318
1318
  multiple && event.preventDefault();
1319
1319
  handleOnSelect(option.id);
1320
- }, children: jsx("span", { children: renderItem(option, !!selectedMap[option.id]) }) }));
1320
+ }, children: jsx("span", { children: renderItem(option, isNotNullOrUndefined(selectedMap[option.id])) }) }));
1321
1321
  }, [ItemComponent, handleOnSelect, multiple, renderItem, selectedMap]);
1322
1322
  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 &&
1323
1323
  (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))) })] })] }));
1324
1324
  });
1325
+ function isNotNullOrUndefined(value) {
1326
+ return value !== null && value !== undefined;
1327
+ }
1325
1328
 
1326
1329
  const FileInput = forwardRef((_a, ref) => {
1327
1330
  var { className, value, onChange, onFileChange, accept } = _a, props = __rest(_a, ["className", "value", "onChange", "onFileChange", "accept"]);
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.147",
4
+ "version": "0.0.148",
5
5
  "license": "MIT",
6
6
  "homepage": "https://bacali95.github.io/tw-react-components",
7
7
  "author": {