sellmate-design-system-react 9.0.0-beta.5 → 9.0.0-beta.6

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.js CHANGED
@@ -4595,18 +4595,19 @@ function collectSelectableIds(node) {
4595
4595
  function toSelectedSet(value) {
4596
4596
  return new Set(value ?? []);
4597
4597
  }
4598
- function getSelectionState(node, selectedSet) {
4599
- if (selectedSet.has(node.id)) {
4600
- return { selected: true, indeterminate: false };
4598
+ var TREE_ALL_NODE = { id: "__all__", label: "\uC804\uCCB4" };
4599
+ function getSelectionState(node, selectedSet, cascadeSelection) {
4600
+ if (!cascadeSelection) {
4601
+ return { selected: selectedSet.has(node.id), indeterminate: false };
4601
4602
  }
4602
4603
  const selectableChildren = (node.children ?? []).filter(
4603
4604
  (child) => collectSelectableIds(child).length > 0
4604
4605
  );
4605
4606
  if (selectableChildren.length === 0) {
4606
- return { selected: false, indeterminate: false };
4607
+ return { selected: selectedSet.has(node.id), indeterminate: false };
4607
4608
  }
4608
4609
  const childStates = selectableChildren.map(
4609
- (child) => getSelectionState(child, selectedSet)
4610
+ (child) => getSelectionState(child, selectedSet, cascadeSelection)
4610
4611
  );
4611
4612
  const selectedCount = childStates.filter((state2) => state2.selected).length;
4612
4613
  return {
@@ -4651,6 +4652,40 @@ function TreeConnector({
4651
4652
  ] })
4652
4653
  ] });
4653
4654
  }
4655
+ function STreeAllItem({
4656
+ selected,
4657
+ indeterminate,
4658
+ border,
4659
+ onSelect
4660
+ }) {
4661
+ const checkboxValue = indeterminate ? null : selected;
4662
+ return /* @__PURE__ */ jsx(
4663
+ "div",
4664
+ {
4665
+ role: "treeitem",
4666
+ "aria-level": 1,
4667
+ "aria-selected": selected,
4668
+ onClick: onSelect,
4669
+ className: cn(
4670
+ "group/tree-item box-border flex h-[32px] w-full cursor-pointer items-center overflow-hidden bg-(--cmp-tree-item-bg-default) px-(--cmp-tree-item-paddingX) text-left hover:bg-(--cmp-tree-item-bg-hover)",
4671
+ border && "border-b border-(--cmp-tree-item-border-default)"
4672
+ ),
4673
+ children: /* @__PURE__ */ jsxs("div", { className: "box-border flex h-full min-w-0 flex-1 items-center gap-(--cmp-tree-item-contentGap) py-(--cmp-tree-item-paddingY)", children: [
4674
+ /* @__PURE__ */ jsx("span", { onClick: (event) => event.stopPropagation(), className: "flex shrink-0", children: /* @__PURE__ */ jsx(SCheckbox, { value: checkboxValue, onValueChange: () => onSelect() }) }),
4675
+ /* @__PURE__ */ jsx(
4676
+ "span",
4677
+ {
4678
+ className: cn(
4679
+ "block min-w-0 flex-1 truncate text-[14px] leading-[24px]",
4680
+ selected || indeterminate ? "font-bold text-(--cmp-tree-item-text-selected)" : "font-medium text-(--cmp-tree-item-text-default)"
4681
+ ),
4682
+ children: "\uC804\uCCB4"
4683
+ }
4684
+ )
4685
+ ] })
4686
+ }
4687
+ );
4688
+ }
4654
4689
  var STreeItemImpl = /* @__PURE__ */ forwardRef(function STreeItem({
4655
4690
  node,
4656
4691
  depth = 1,
@@ -4783,6 +4818,7 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
4783
4818
  expandedIds,
4784
4819
  defaultExpandedIds,
4785
4820
  selectable = true,
4821
+ useAll = false,
4786
4822
  cascadeSelection = true,
4787
4823
  guideline = true,
4788
4824
  border = true,
@@ -4801,6 +4837,11 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
4801
4837
  const currentExpandedIds = expandedIds ?? internalExpandedIds;
4802
4838
  const selectedSet = useMemo(() => toSelectedSet(currentValue), [currentValue]);
4803
4839
  const expandedSet = useMemo(() => new Set(currentExpandedIds), [currentExpandedIds]);
4840
+ const selectableIds = useMemo(() => items.flatMap(collectSelectableIds), [items]);
4841
+ const allSelected = selectableIds.length > 0 && selectableIds.every((id) => selectedSet.has(id));
4842
+ const someSelected = selectableIds.some((id) => selectedSet.has(id));
4843
+ const allIndeterminate = someSelected && !allSelected;
4844
+ const showAllItem = selectable && useAll;
4804
4845
  const updateExpanded = (node) => {
4805
4846
  const next = new Set(currentExpandedIds);
4806
4847
  if (next.has(node.id)) next.delete(node.id);
@@ -4812,7 +4853,7 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
4812
4853
  const updateSelected = (node) => {
4813
4854
  if (node.disabled) return;
4814
4855
  const targetIds = cascadeSelection ? collectSelectableIds(node) : [node.id];
4815
- const everySelected = getSelectionState(node, selectedSet).selected;
4856
+ const everySelected = getSelectionState(node, selectedSet, cascadeSelection).selected;
4816
4857
  const next = new Set(selectedSet);
4817
4858
  targetIds.forEach((id) => {
4818
4859
  if (everySelected) next.delete(id);
@@ -4822,10 +4863,22 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
4822
4863
  if (value === void 0) setInternalValue(orderedIds);
4823
4864
  onValueChange?.(orderedIds, node);
4824
4865
  };
4866
+ const updateAllSelected = (event) => {
4867
+ event?.stopPropagation();
4868
+ if (selectableIds.length === 0) return;
4869
+ const next = new Set(selectedSet);
4870
+ selectableIds.forEach((id) => {
4871
+ if (allSelected) next.delete(id);
4872
+ else next.add(id);
4873
+ });
4874
+ const orderedIds = collectIds(items).filter((id) => next.has(id));
4875
+ if (value === void 0) setInternalValue(orderedIds);
4876
+ onValueChange?.(orderedIds, TREE_ALL_NODE);
4877
+ };
4825
4878
  const renderNodes = (nodes, depth = 1, ancestorLast = []) => nodes.map((node, index) => {
4826
4879
  const isLast = index === nodes.length - 1;
4827
4880
  const isExpanded = expandedSet.has(node.id);
4828
- const { selected, indeterminate } = getSelectionState(node, selectedSet);
4881
+ const { selected, indeterminate } = getSelectionState(node, selectedSet, cascadeSelection);
4829
4882
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
4830
4883
  /* @__PURE__ */ jsx(
4831
4884
  STreeItem2,
@@ -4859,14 +4912,25 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
4859
4912
  ) : null
4860
4913
  ] }, node.id);
4861
4914
  });
4862
- return /* @__PURE__ */ jsx(
4915
+ return /* @__PURE__ */ jsxs(
4863
4916
  "div",
4864
4917
  {
4865
4918
  ref,
4866
4919
  role: "tree",
4867
4920
  className: cn("flex w-full flex-col items-start bg-(--cmp-tree-item-bg-default)", className),
4868
4921
  ...rest,
4869
- children: renderNodes(items)
4922
+ children: [
4923
+ showAllItem && /* @__PURE__ */ jsx(
4924
+ STreeAllItem,
4925
+ {
4926
+ selected: allSelected,
4927
+ indeterminate: allIndeterminate,
4928
+ border,
4929
+ onSelect: updateAllSelected
4930
+ }
4931
+ ),
4932
+ renderNodes(items)
4933
+ ]
4870
4934
  }
4871
4935
  );
4872
4936
  });