@underverse-ui/underverse 1.0.78 → 1.0.79

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/index.d.cts CHANGED
@@ -1691,6 +1691,8 @@ interface CategoryTreeSelectBaseProps {
1691
1691
  className?: string;
1692
1692
  /** Enable OverlayScrollbars for dropdown tree viewport. Default: false */
1693
1693
  useOverlayScrollbar?: boolean;
1694
+ /** When true, only leaf nodes can be selected; parent nodes only expand/collapse */
1695
+ leafOnlySelect?: boolean;
1694
1696
  }
1695
1697
  interface CategoryTreeSelectMultiProps extends CategoryTreeSelectBaseProps {
1696
1698
  singleSelect?: false;
package/dist/index.d.ts CHANGED
@@ -1691,6 +1691,8 @@ interface CategoryTreeSelectBaseProps {
1691
1691
  className?: string;
1692
1692
  /** Enable OverlayScrollbars for dropdown tree viewport. Default: false */
1693
1693
  useOverlayScrollbar?: boolean;
1694
+ /** When true, only leaf nodes can be selected; parent nodes only expand/collapse */
1695
+ leafOnlySelect?: boolean;
1694
1696
  }
1695
1697
  interface CategoryTreeSelectMultiProps extends CategoryTreeSelectBaseProps {
1696
1698
  singleSelect?: false;
package/dist/index.js CHANGED
@@ -16190,6 +16190,7 @@ function CategoryTreeSelect(props) {
16190
16190
  onNodeClick,
16191
16191
  className,
16192
16192
  useOverlayScrollbar = false,
16193
+ leafOnlySelect = false,
16193
16194
  singleSelect = false
16194
16195
  } = props;
16195
16196
  const [isOpen, setIsOpen] = useState30(false);
@@ -16285,7 +16286,12 @@ function CategoryTreeSelect(props) {
16285
16286
  };
16286
16287
  const handleSelect = (categoryId, category) => {
16287
16288
  if (viewOnly) return;
16289
+ const hasChildren = (childrenMap.get(categoryId) ?? []).length > 0;
16288
16290
  onNodeClick?.(category);
16291
+ if (leafOnlySelect && hasChildren) {
16292
+ toggleExpand(categoryId);
16293
+ return;
16294
+ }
16289
16295
  if (!props.onChange) return;
16290
16296
  if (singleSelect) {
16291
16297
  const onChange = props.onChange;
@@ -16319,6 +16325,7 @@ function CategoryTreeSelect(props) {
16319
16325
  const hasChildren = children.length > 0;
16320
16326
  const isExpanded = hasChildren && (isSearchMode || expandedNodes.has(category.id));
16321
16327
  const isSelected = selectedIds.has(category.id);
16328
+ const isSelectable = !viewOnly && (!leafOnlySelect || !hasChildren);
16322
16329
  return /* @__PURE__ */ jsxs39(
16323
16330
  "div",
16324
16331
  {
@@ -16331,9 +16338,8 @@ function CategoryTreeSelect(props) {
16331
16338
  onClick: () => !viewOnly && handleSelect(category.id, category),
16332
16339
  className: cn(
16333
16340
  "relative flex min-w-0 items-center gap-2.5 px-3 py-2.5 min-h-11 transition-all duration-200 rounded-3xl",
16334
- // Không phân biệt parent/child - đồng bộ màu
16335
- !viewOnly && "cursor-pointer",
16336
- !viewOnly && !isSelected && "hover:bg-accent/50",
16341
+ !viewOnly && (isSelectable ? "cursor-pointer" : "cursor-default"),
16342
+ isSelectable && !isSelected && "hover:bg-accent/50",
16337
16343
  // Selected state - đồng bộ cho tất cả
16338
16344
  !viewOnly && isSelected && "bg-accent/40"
16339
16345
  ),
@@ -16373,7 +16379,8 @@ function CategoryTreeSelect(props) {
16373
16379
  {
16374
16380
  className: cn(
16375
16381
  "min-w-0 flex-1 text-sm leading-snug break-words [overflow-wrap:anywhere] transition-all duration-200",
16376
- isSelected ? "font-semibold text-primary" : "text-foreground/80"
16382
+ isSelected ? "font-semibold text-primary" : "text-foreground/80",
16383
+ !isSelectable && "text-foreground"
16377
16384
  ),
16378
16385
  children: category.name
16379
16386
  }