@frontify/fondue 12.0.0-beta.268 → 12.0.0-beta.269

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.
@@ -1,5 +1,5 @@
1
- import b, { memo as At, useCallback as I, Children as Q, useMemo as X } from "react";
2
- import { useSortable as vt } from "@dnd-kit/sortable";
1
+ import b, { memo as vt, useCallback as I, Children as Q, useMemo as X } from "react";
2
+ import { useSortable as At } from "@dnd-kit/sortable";
3
3
  import { useDndContext as Lt, useDndMonitor as Mt } from "@dnd-kit/core";
4
4
  import { CSS as Rt } from "@dnd-kit/utilities";
5
5
  import Wt from "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
@@ -12,24 +12,24 @@ import { useTreeItem as $t } from "./useTreeItem.es.js";
12
12
  import { removeFragmentsAndEnrichChildren as St } from "../utils/removeFragmentsAndEnrichChildren.es.js";
13
13
  import { useDeepCompareEffect as Ct } from "../utils/useDeepCompareEffect.es.js";
14
14
  import { INDENTATION_WIDTH as k } from "../helpers/constants.es.js";
15
- const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
15
+ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = vt(
16
16
  ({
17
17
  id: t,
18
18
  type: y,
19
- label: p,
19
+ label: m,
20
20
  onDrop: E,
21
21
  accepts: O,
22
22
  showCaret: F,
23
- children: m,
23
+ children: w,
24
24
  parentId: T,
25
25
  level: r = 0,
26
- contentComponent: w,
26
+ contentComponent: u,
27
27
  treeDraggable: j = !1,
28
- onSelect: A,
28
+ onSelect: v,
29
29
  onExpand: g,
30
30
  onShrink: h,
31
31
  registerOverlay: x,
32
- registerNodeChildren: v,
32
+ registerNodeChildren: A,
33
33
  unregisterNodeChildren: c,
34
34
  draggable: tt = !0,
35
35
  ignoreItemDoubleClick: H = !1,
@@ -37,27 +37,27 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
37
37
  "data-test-id": at = "fondue-tree-item"
38
38
  }) => {
39
39
  var V, Y, q, z, G, J;
40
- const { active: a, over: i } = Lt(), { isSelected: u, isExpanded: l, projection: L } = $t(t), _ = j && tt, n = (a == null ? void 0 : a.id) === t, e = n && L !== null && L !== void 0 ? L : null, $ = typeof ((Y = (V = i == null ? void 0 : i.data) == null ? void 0 : V.current) == null ? void 0 : Y.accepts) == "string" ? (q = i.data.current.accepts) == null ? void 0 : q.split(", ") : [], st = typeof (e == null ? void 0 : e.accepts) == "string" ? (z = e.accepts) == null ? void 0 : z.split(", ") : [], D = ((G = a == null ? void 0 : a.data.current) == null ? void 0 : G.type) || "", S = (D == null ? void 0 : D.replace(/-\d+$/, "")) || "", C = i !== null && e !== null && e.depth > ((J = i.data.current) == null ? void 0 : J.level), nt = C && (a == null ? void 0 : a.data.current) && $.includes(`${S}-within`) || (e == null ? void 0 : e.isWithinParent) && st.includes(`${S}-within`), f = n && (a == null ? void 0 : a.data.current) && ($.includes(D) && !C || nt), ot = I(
41
- (s) => {
40
+ const { active: s, over: i } = Lt(), { isSelected: l, isExpanded: d, projection: L } = $t(t), _ = j && tt, a = (s == null ? void 0 : s.id) === t, e = a && L !== null && L !== void 0 ? L : null, $ = typeof ((Y = (V = i == null ? void 0 : i.data) == null ? void 0 : V.current) == null ? void 0 : Y.accepts) == "string" ? (q = i.data.current.accepts) == null ? void 0 : q.split(", ") : [], st = typeof (e == null ? void 0 : e.accepts) == "string" ? (z = e.accepts) == null ? void 0 : z.split(", ") : [], D = ((G = s == null ? void 0 : s.data.current) == null ? void 0 : G.type) || "", S = (D == null ? void 0 : D.replace(/-\d+$/, "")) || "", C = i !== null && e !== null && e.depth > ((J = i.data.current) == null ? void 0 : J.level), nt = C && (s == null ? void 0 : s.data.current) && $.includes(`${S}-within`) || (e == null ? void 0 : e.isWithinParent) && st.includes(`${S}-within`), f = a && (s == null ? void 0 : s.data.current) && ($.includes(D) && !C || nt), ot = I(
41
+ (n) => {
42
42
  var P;
43
- const { over: d, active: B } = s;
44
- !n || !e || B.id === (d == null ? void 0 : d.id) && (e == null ? void 0 : e.depth) === ((P = B.data.current) == null ? void 0 : P.level) || n && d && f && E && E({
43
+ const { over: p, active: B } = n;
44
+ !a || !e || B.id === (p == null ? void 0 : p.id) && (e == null ? void 0 : e.depth) === ((P = B.data.current) == null ? void 0 : P.level) || a && p && f && E && E({
45
45
  id: B.id,
46
46
  parentId: e.parentId,
47
47
  sort: e.position,
48
- contentComponent: w,
48
+ contentComponent: u,
49
49
  parentType: e.type
50
50
  });
51
51
  },
52
- [n, e, f, E, w]
52
+ [a, e, f, E, u]
53
53
  ), rt = I(
54
- (s) => {
55
- s.active.id === t && (x == null || x({ contentComponent: w, children: m, id: t, label: p, level: r }));
54
+ (n) => {
55
+ n.active.id === t && (x == null || x({ contentComponent: u, children: w, id: t, label: m, level: r }));
56
56
  },
57
- [m, w, t, p, r, x]
57
+ [w, u, t, m, r, x]
58
58
  ), ct = I(
59
- (s) => {
60
- s.active.id === t && document.body.style.setProperty("cursor", f ? "grabbing" : "no-drop");
59
+ (n) => {
60
+ n.active.id === t && document.body.style.setProperty("cursor", f ? "grabbing" : "no-drop");
61
61
  },
62
62
  [f, t]
63
63
  );
@@ -67,22 +67,22 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
67
67
  onDragMove: ct
68
68
  });
69
69
  const K = I(
70
- (s) => {
71
- s == null || s.stopPropagation(), l ? h == null || h(t) : g == null || g(t);
70
+ (n) => {
71
+ n == null || n.stopPropagation(), d ? h == null || h(t) : g == null || g(t);
72
72
  },
73
- [t, l, g, h]
73
+ [t, d, g, h]
74
74
  ), it = _t(
75
- (s) => {
76
- s.stopPropagation(), !(H && s.detail >= 2) && (et && K(), A == null || A(t));
75
+ (n) => {
76
+ n.stopPropagation(), !(H && n.detail >= 2) && (et && K(), v == null || v(t));
77
77
  },
78
78
  H ? 300 : 0
79
- ), N = T && (a == null ? void 0 : a.id) === T, U = Q.count(m) > 0, { enrichedChildren: M, childrenIds: lt } = X(() => {
80
- const s = St(m, { parentId: t, level: r + 1 });
79
+ ), N = T && (s == null ? void 0 : s.id) === T, U = Q.count(w) > 0, { enrichedChildren: M, childrenIds: lt } = X(() => {
80
+ const n = St(w, { parentId: t, level: r + 1 });
81
81
  return {
82
- enrichedChildren: s,
83
- childrenIds: s.map((d) => d.props.id)
82
+ enrichedChildren: n,
83
+ childrenIds: n.map((p) => p.props.id)
84
84
  };
85
- }, [m, t, r]), {
85
+ }, [w, t, r]), {
86
86
  attributes: dt,
87
87
  listeners: pt,
88
88
  transform: o,
@@ -90,7 +90,7 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
90
90
  setDraggableNodeRef: wt,
91
91
  setDroppableNodeRef: ut,
92
92
  setActivatorNodeRef: ft
93
- } = vt({
93
+ } = At({
94
94
  id: t,
95
95
  disabled: !_,
96
96
  data: { type: y, accepts: O, parentId: T, level: r },
@@ -99,27 +99,29 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
99
99
  });
100
100
  Ct(() => {
101
101
  if (Q.count(M) !== 0) {
102
- if (n || N) {
102
+ if (a || N) {
103
103
  c == null || c(t);
104
104
  return;
105
105
  }
106
- l ? v == null || v({ id: t, children: M }) : c == null || c(t);
106
+ d ? A == null || A({ id: t, children: M }) : c == null || c(t);
107
107
  }
108
- }, [n, l, N, M, t]);
108
+ }, [a, d, N, M, t]);
109
109
  const bt = X(
110
110
  () => Z([
111
111
  Bt,
112
+ !a && !l && "active:tw-bg-box-neutral-pressed",
112
113
  "tw-outline-none tw-ring-inset tw-group tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10",
113
- u && !(o != null && o.y) ? "tw-font-medium tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover" : "hover:tw-bg-box-neutral tw-text-text",
114
+ l && !(o != null && o.y) ? "tw-font-medium tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover" : "hover:tw-bg-box-neutral tw-text-text",
114
115
  o != null && o.y ? "tw-bg-box-neutral-strong-inverse tw-text-text tw-font-normal" : ""
115
116
  ]),
116
- [u, o == null ? void 0 : o.y]
117
+ [a, l, o == null ? void 0 : o.y]
117
118
  ), gt = Z([
118
- "tw-flex tw-items-center tw-h-10 tw-leading-5 tw-width-full",
119
- n && (f ? "tw-border-box-selected-strong tw-border-dashed tw-border-2 tw-bg-box-selected-hover" : "tw-bg-box-negative-hover tw-border-box-negative-strong-hover tw-border-dashed tw-border-2")
120
- ]), ht = e != null && e.depth ? e.depth * k : void 0, xt = n ? 0 : r * k, Dt = {
119
+ "tw-flex tw-items-center tw-leading-5 tw-width-full",
120
+ a ? "tw-border-dashed tw-rounded-sm tw-border-2 tw-pr-0 tw-h-12" : "tw-h-10",
121
+ a && (f ? "tw-border-box-selected-strong tw-bg-box-selected-hover" : "tw-bg-box-negative-hover tw-border-box-negative-strong-hover")
122
+ ]), ht = e != null && e.depth ? e.depth * k : void 0, xt = a ? 0 : r * k, Dt = {
121
123
  paddingLeft: ht ?? xt
122
- }, It = !n, yt = l && !n, R = _ && !n, Et = p !== void 0 && !n, W = F === void 0 ? U && !n : F, Tt = {
124
+ }, It = !a, yt = d && !a, R = _ && !a, Et = m !== void 0 && !a, W = !a && (F === void 0 ? U : F), Tt = {
123
125
  transform: Rt.Transform.toString(o),
124
126
  transition: mt
125
127
  };
@@ -132,14 +134,14 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
132
134
  role: "treeitem",
133
135
  style: Dt,
134
136
  onKeyDown: Wt,
135
- "aria-label": p,
137
+ "aria-label": m,
136
138
  "aria-level": r + 1,
137
139
  onClick: it,
138
140
  className: bt,
139
141
  ref: ut,
140
142
  "data-test-id": at,
141
- "aria-selected": u,
142
- "aria-expanded": l,
143
+ "aria-selected": l,
144
+ "aria-expanded": d,
143
145
  "data-has-children": U,
144
146
  "aria-owns": lt.join(" ")
145
147
  },
@@ -148,7 +150,7 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
148
150
  {
149
151
  ...pt,
150
152
  ...dt,
151
- active: u,
153
+ active: l,
152
154
  ref: ft,
153
155
  disabled: !R,
154
156
  "aria-hidden": !R,
@@ -157,14 +159,14 @@ const Kt = ({ isSorting: t, wasDragging: y }) => !(t || y), Nt = At(
157
159
  ), /* @__PURE__ */ b.createElement(
158
160
  Ht,
159
161
  {
160
- active: o != null && o.y ? !1 : u,
162
+ active: o != null && o.y ? !1 : l,
161
163
  onClick: K,
162
164
  expanded: yt,
163
165
  disabled: !W,
164
166
  "aria-hidden": !W,
165
167
  className: W ? "tw-visible" : "tw-invisible tw-pointer-events-none"
166
168
  }
167
- ), Et && /* @__PURE__ */ b.createElement("span", { className: "first:tw-ml-3.5 tw-w-full tw-h-full tw-flex tw-items-center" }, p), It && w)
169
+ ), Et && /* @__PURE__ */ b.createElement("span", { className: "first:tw-ml-3.5 tw-w-full tw-h-full tw-flex tw-items-center" }, m), It && u)
168
170
  );
169
171
  }
170
172
  );
@@ -1 +1 @@
1
- {"version":3,"file":"TreeItem.es.js","sources":["../../../../src/components/Tree/TreeItem/TreeItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { Children, MouseEvent, memo, useCallback, useMemo } from 'react';\nimport { AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport { useDndContext, useDndMonitor } from '@dnd-kit/core';\nimport { CSS } from '@dnd-kit/utilities';\nimport noop from 'lodash-es/noop';\n\nimport { merge } from '@utilities/merge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\n\nimport type {\n RegisterNodeChildrenPayload,\n TreeDragEndEvent,\n TreeDragMoveEvent,\n TreeDragStartEvent,\n TreeItemProps,\n} from '@components/Tree/types';\n\nimport { INDENTATION_WIDTH, Projection } from '../helpers';\nimport { removeFragmentsAndEnrichChildren, useDeepCompareEffect } from '../utils';\n\nimport { DragHandle } from './DragHandle';\nimport { Overlay } from './TreeItemOverlay';\nimport { ExpandButton } from './ExpandButton';\nimport { useDebounce } from '@hooks/useDebounce';\nimport { useTreeItem } from './useTreeItem';\n\nconst animateLayoutChanges: AnimateLayoutChanges = ({ isSorting, wasDragging }) =>\n isSorting || wasDragging ? false : true;\n\n/** @private */\ntype TreeItemPrivateProps = {\n level?: number;\n parentId?: string;\n isSelected?: boolean;\n isExpanded?: boolean;\n treeDraggable?: boolean;\n onSelect?: (id: string) => void;\n onExpand?: (id: string) => void;\n onShrink?: (id: string) => void;\n projection?: Nullable<Projection>;\n registerOverlay?: (overlay: Overlay) => void;\n unregisterNodeChildren?: (payload: string) => void;\n registerNodeChildren?: (payload: RegisterNodeChildrenPayload) => void;\n};\n\n/** @private */\nexport type InternalTreeItemProps = TreeItemProps & TreeItemPrivateProps;\n\nexport const TreeItem = memo(\n ({\n id,\n type,\n label,\n onDrop,\n accepts,\n showCaret,\n children,\n parentId,\n level = 0,\n contentComponent,\n treeDraggable = false,\n onSelect,\n onExpand,\n onShrink,\n registerOverlay,\n registerNodeChildren,\n unregisterNodeChildren,\n draggable: itemDraggable = true,\n ignoreItemDoubleClick = false,\n expandOnSelect = false,\n 'data-test-id': dataTestId = 'fondue-tree-item',\n }: InternalTreeItemProps) => {\n const { active, over } = useDndContext();\n const { isSelected, isExpanded, projection } = useTreeItem(id);\n\n const draggable = treeDraggable && itemDraggable;\n\n const isActive = active?.id === id;\n const activeProjection = isActive && projection !== null && projection !== undefined ? projection : null;\n\n const overAccepts =\n typeof over?.data?.current?.accepts === 'string' ? over.data.current.accepts?.split(', ') : [];\n\n const parentAccepts =\n typeof activeProjection?.accepts === 'string' ? activeProjection.accepts?.split(', ') : [];\n\n const currentType = active?.data.current?.type || '';\n const cleanCurrentType = currentType?.replace(/-\\d+$/, '') || '';\n\n const isWithin =\n over !== null && activeProjection !== null && activeProjection.depth > over.data.current?.level;\n\n const canDropWithin =\n (isWithin && active?.data.current && overAccepts.includes(`${cleanCurrentType}-within`)) ||\n (activeProjection?.isWithinParent && parentAccepts.includes(`${cleanCurrentType}-within`));\n\n const canDrop =\n isActive && active?.data.current && ((overAccepts.includes(currentType) && !isWithin) || canDropWithin);\n\n const handleItemDragEnd = useCallback(\n (event: TreeDragEndEvent) => {\n const { over, active } = event;\n\n if (\n !isActive ||\n !activeProjection ||\n (active.id === over?.id && activeProjection?.depth === active.data.current?.level)\n ) {\n return;\n }\n\n if (isActive && over && canDrop && onDrop) {\n onDrop({\n id: active.id,\n parentId: activeProjection.parentId,\n sort: activeProjection.position,\n contentComponent,\n parentType: activeProjection.type,\n });\n }\n },\n [isActive, activeProjection, canDrop, onDrop, contentComponent],\n );\n\n const handleItemDragStart = useCallback(\n (event: TreeDragStartEvent) => {\n if (event.active.id !== id) {\n return;\n }\n\n registerOverlay?.({ contentComponent, children, id, label, level });\n },\n [children, contentComponent, id, label, level, registerOverlay],\n );\n\n const handleItemDragMove = useCallback(\n (event: TreeDragMoveEvent) => {\n if (event.active.id === id) {\n document.body.style.setProperty('cursor', canDrop ? 'grabbing' : 'no-drop');\n }\n },\n [canDrop, id],\n );\n\n useDndMonitor({\n onDragEnd: handleItemDragEnd,\n onDragStart: handleItemDragStart,\n onDragMove: handleItemDragMove,\n });\n\n const toggleExpand = useCallback(\n (event?: MouseEvent<HTMLButtonElement>) => {\n event?.stopPropagation();\n isExpanded ? onShrink?.(id) : onExpand?.(id);\n },\n [id, isExpanded, onExpand, onShrink],\n );\n\n const handleItemClick = useDebounce(\n (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n if (ignoreItemDoubleClick && event.detail >= 2) {\n return;\n }\n\n if (expandOnSelect) {\n toggleExpand();\n }\n\n onSelect?.(id);\n },\n ignoreItemDoubleClick ? 300 : 0,\n );\n\n const isParentActive = parentId && active?.id === parentId;\n\n const hasChildren = Children.count(children) > 0;\n\n const { enrichedChildren, childrenIds } = useMemo(() => {\n const enrichedChildren = removeFragmentsAndEnrichChildren(children, { parentId: id, level: level + 1 });\n return {\n enrichedChildren,\n childrenIds: enrichedChildren.map((child) => child.props.id),\n };\n }, [children, id, level]);\n\n const {\n attributes,\n listeners,\n transform,\n transition,\n setDraggableNodeRef,\n setDroppableNodeRef,\n setActivatorNodeRef,\n } = useSortable({\n id,\n disabled: !draggable,\n data: { type, accepts, parentId, level },\n animateLayoutChanges,\n transition: null,\n });\n\n useDeepCompareEffect(() => {\n if (Children.count(enrichedChildren) === 0) {\n return;\n }\n\n if (isActive || isParentActive) {\n unregisterNodeChildren?.(id);\n return;\n }\n\n if (isExpanded) {\n registerNodeChildren?.({ id, children: enrichedChildren });\n } else {\n unregisterNodeChildren?.(id);\n }\n }, [isActive, isExpanded, isParentActive, enrichedChildren, id]);\n\n const liClassName = useMemo(\n () =>\n merge([\n FOCUS_VISIBLE_STYLE,\n 'tw-outline-none tw-ring-inset tw-group tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n isSelected && !transform?.y\n ? 'tw-font-medium tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover'\n : 'hover:tw-bg-box-neutral tw-text-text',\n transform?.y ? 'tw-bg-box-neutral-strong-inverse tw-text-text tw-font-normal' : '',\n ]),\n [isSelected, transform?.y],\n );\n\n const containerClassName = merge([\n 'tw-flex tw-items-center tw-h-10 tw-leading-5 tw-width-full',\n isActive &&\n (canDrop\n ? 'tw-border-box-selected-strong tw-border-dashed tw-border-2 tw-bg-box-selected-hover'\n : 'tw-bg-box-negative-hover tw-border-box-negative-strong-hover tw-border-dashed tw-border-2'),\n ]);\n\n const depthPadding = activeProjection?.depth ? activeProjection.depth * INDENTATION_WIDTH : undefined;\n const levelPadding = isActive ? 0 : level * INDENTATION_WIDTH;\n\n const liStyle = {\n paddingLeft: depthPadding ?? levelPadding,\n };\n\n const showContent = !isActive;\n const showChildren = isExpanded && !isActive;\n const showDragHandle = draggable && !isActive;\n const showLabel = label !== undefined && !isActive;\n const showExpandButton = showCaret === undefined ? hasChildren && !isActive : showCaret;\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <li\n id={id}\n key={id}\n tabIndex={0}\n role=\"treeitem\"\n style={liStyle}\n onKeyDown={noop}\n aria-label={label}\n aria-level={level + 1}\n onClick={handleItemClick}\n className={liClassName}\n ref={setDroppableNodeRef}\n data-test-id={dataTestId}\n aria-selected={isSelected}\n aria-expanded={isExpanded}\n data-has-children={hasChildren}\n aria-owns={childrenIds.join(' ')}\n >\n <div ref={setDraggableNodeRef} className={containerClassName} style={style}>\n <DragHandle\n {...listeners}\n {...attributes}\n active={isSelected}\n ref={setActivatorNodeRef}\n disabled={!showDragHandle}\n aria-hidden={!showDragHandle}\n className={showDragHandle ? 'tw-visible' : 'tw-invisible tw-pointer-events-none'}\n />\n\n <ExpandButton\n active={transform?.y ? false : isSelected}\n onClick={toggleExpand}\n expanded={showChildren}\n disabled={!showExpandButton}\n aria-hidden={!showExpandButton}\n className={showExpandButton ? 'tw-visible' : 'tw-invisible tw-pointer-events-none'}\n />\n\n {showLabel && (\n <span className=\"first:tw-ml-3.5 tw-w-full tw-h-full tw-flex tw-items-center\">{label}</span>\n )}\n\n {showContent && contentComponent}\n </div>\n </li>\n );\n },\n);\n\nTreeItem.displayName = 'FondueTreeItem';\n"],"names":["animateLayoutChanges","isSorting","wasDragging","TreeItem","memo","id","type","label","onDrop","accepts","showCaret","children","parentId","level","contentComponent","treeDraggable","onSelect","onExpand","onShrink","registerOverlay","registerNodeChildren","unregisterNodeChildren","itemDraggable","ignoreItemDoubleClick","expandOnSelect","dataTestId","active","over","useDndContext","isSelected","isExpanded","projection","useTreeItem","draggable","isActive","activeProjection","overAccepts","_b","_a","_c","parentAccepts","_d","currentType","_e","cleanCurrentType","isWithin","_f","canDropWithin","canDrop","handleItemDragEnd","useCallback","event","handleItemDragStart","handleItemDragMove","useDndMonitor","toggleExpand","handleItemClick","useDebounce","isParentActive","hasChildren","Children","enrichedChildren","childrenIds","useMemo","removeFragmentsAndEnrichChildren","child","attributes","listeners","transform","transition","setDraggableNodeRef","setDroppableNodeRef","setActivatorNodeRef","useSortable","useDeepCompareEffect","liClassName","merge","FOCUS_VISIBLE_STYLE","containerClassName","depthPadding","INDENTATION_WIDTH","levelPadding","liStyle","showContent","showChildren","showDragHandle","showLabel","showExpandButton","style","CSS","React","noop","DragHandle","ExpandButton"],"mappings":"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"}
1
+ {"version":3,"file":"TreeItem.es.js","sources":["../../../../src/components/Tree/TreeItem/TreeItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { Children, MouseEvent, memo, useCallback, useMemo } from 'react';\nimport { AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport { useDndContext, useDndMonitor } from '@dnd-kit/core';\nimport { CSS } from '@dnd-kit/utilities';\nimport noop from 'lodash-es/noop';\n\nimport { merge } from '@utilities/merge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\n\nimport type {\n RegisterNodeChildrenPayload,\n TreeDragEndEvent,\n TreeDragMoveEvent,\n TreeDragStartEvent,\n TreeItemProps,\n} from '@components/Tree/types';\n\nimport { INDENTATION_WIDTH, Projection } from '../helpers';\nimport { removeFragmentsAndEnrichChildren, useDeepCompareEffect } from '../utils';\n\nimport { DragHandle } from './DragHandle';\nimport { Overlay } from './TreeItemOverlay';\nimport { ExpandButton } from './ExpandButton';\nimport { useDebounce } from '@hooks/useDebounce';\nimport { useTreeItem } from './useTreeItem';\n\nconst animateLayoutChanges: AnimateLayoutChanges = ({ isSorting, wasDragging }) =>\n isSorting || wasDragging ? false : true;\n\n/** @private */\ntype TreeItemPrivateProps = {\n level?: number;\n parentId?: string;\n isSelected?: boolean;\n isExpanded?: boolean;\n treeDraggable?: boolean;\n onSelect?: (id: string) => void;\n onExpand?: (id: string) => void;\n onShrink?: (id: string) => void;\n projection?: Nullable<Projection>;\n registerOverlay?: (overlay: Overlay) => void;\n unregisterNodeChildren?: (payload: string) => void;\n registerNodeChildren?: (payload: RegisterNodeChildrenPayload) => void;\n};\n\n/** @private */\nexport type InternalTreeItemProps = TreeItemProps & TreeItemPrivateProps;\n\nexport const TreeItem = memo(\n ({\n id,\n type,\n label,\n onDrop,\n accepts,\n showCaret,\n children,\n parentId,\n level = 0,\n contentComponent,\n treeDraggable = false,\n onSelect,\n onExpand,\n onShrink,\n registerOverlay,\n registerNodeChildren,\n unregisterNodeChildren,\n draggable: itemDraggable = true,\n ignoreItemDoubleClick = false,\n expandOnSelect = false,\n 'data-test-id': dataTestId = 'fondue-tree-item',\n }: InternalTreeItemProps) => {\n const { active, over } = useDndContext();\n const { isSelected, isExpanded, projection } = useTreeItem(id);\n\n const draggable = treeDraggable && itemDraggable;\n\n const isActive = active?.id === id;\n const activeProjection = isActive && projection !== null && projection !== undefined ? projection : null;\n\n const overAccepts =\n typeof over?.data?.current?.accepts === 'string' ? over.data.current.accepts?.split(', ') : [];\n\n const parentAccepts =\n typeof activeProjection?.accepts === 'string' ? activeProjection.accepts?.split(', ') : [];\n\n const currentType = active?.data.current?.type || '';\n const cleanCurrentType = currentType?.replace(/-\\d+$/, '') || '';\n\n const isWithin =\n over !== null && activeProjection !== null && activeProjection.depth > over.data.current?.level;\n\n const canDropWithin =\n (isWithin && active?.data.current && overAccepts.includes(`${cleanCurrentType}-within`)) ||\n (activeProjection?.isWithinParent && parentAccepts.includes(`${cleanCurrentType}-within`));\n\n const canDrop =\n isActive && active?.data.current && ((overAccepts.includes(currentType) && !isWithin) || canDropWithin);\n\n const handleItemDragEnd = useCallback(\n (event: TreeDragEndEvent) => {\n const { over, active } = event;\n\n if (\n !isActive ||\n !activeProjection ||\n (active.id === over?.id && activeProjection?.depth === active.data.current?.level)\n ) {\n return;\n }\n\n if (isActive && over && canDrop && onDrop) {\n onDrop({\n id: active.id,\n parentId: activeProjection.parentId,\n sort: activeProjection.position,\n contentComponent,\n parentType: activeProjection.type,\n });\n }\n },\n [isActive, activeProjection, canDrop, onDrop, contentComponent],\n );\n\n const handleItemDragStart = useCallback(\n (event: TreeDragStartEvent) => {\n if (event.active.id !== id) {\n return;\n }\n\n registerOverlay?.({ contentComponent, children, id, label, level });\n },\n [children, contentComponent, id, label, level, registerOverlay],\n );\n\n const handleItemDragMove = useCallback(\n (event: TreeDragMoveEvent) => {\n if (event.active.id === id) {\n document.body.style.setProperty('cursor', canDrop ? 'grabbing' : 'no-drop');\n }\n },\n [canDrop, id],\n );\n\n useDndMonitor({\n onDragEnd: handleItemDragEnd,\n onDragStart: handleItemDragStart,\n onDragMove: handleItemDragMove,\n });\n\n const toggleExpand = useCallback(\n (event?: MouseEvent<HTMLButtonElement>) => {\n event?.stopPropagation();\n isExpanded ? onShrink?.(id) : onExpand?.(id);\n },\n [id, isExpanded, onExpand, onShrink],\n );\n\n const handleItemClick = useDebounce(\n (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n if (ignoreItemDoubleClick && event.detail >= 2) {\n return;\n }\n\n if (expandOnSelect) {\n toggleExpand();\n }\n\n onSelect?.(id);\n },\n ignoreItemDoubleClick ? 300 : 0,\n );\n\n const isParentActive = parentId && active?.id === parentId;\n\n const hasChildren = Children.count(children) > 0;\n\n const { enrichedChildren, childrenIds } = useMemo(() => {\n const enrichedChildren = removeFragmentsAndEnrichChildren(children, { parentId: id, level: level + 1 });\n return {\n enrichedChildren,\n childrenIds: enrichedChildren.map((child) => child.props.id),\n };\n }, [children, id, level]);\n\n const {\n attributes,\n listeners,\n transform,\n transition,\n setDraggableNodeRef,\n setDroppableNodeRef,\n setActivatorNodeRef,\n } = useSortable({\n id,\n disabled: !draggable,\n data: { type, accepts, parentId, level },\n animateLayoutChanges,\n transition: null,\n });\n\n useDeepCompareEffect(() => {\n if (Children.count(enrichedChildren) === 0) {\n return;\n }\n\n if (isActive || isParentActive) {\n unregisterNodeChildren?.(id);\n return;\n }\n\n if (isExpanded) {\n registerNodeChildren?.({ id, children: enrichedChildren });\n } else {\n unregisterNodeChildren?.(id);\n }\n }, [isActive, isExpanded, isParentActive, enrichedChildren, id]);\n\n const liClassName = useMemo(\n () =>\n merge([\n FOCUS_VISIBLE_STYLE,\n !isActive && !isSelected && 'active:tw-bg-box-neutral-pressed',\n 'tw-outline-none tw-ring-inset tw-group tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n isSelected && !transform?.y\n ? 'tw-font-medium tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover'\n : 'hover:tw-bg-box-neutral tw-text-text',\n transform?.y ? 'tw-bg-box-neutral-strong-inverse tw-text-text tw-font-normal' : '',\n ]),\n [isActive, isSelected, transform?.y],\n );\n\n const containerClassName = merge([\n 'tw-flex tw-items-center tw-leading-5 tw-width-full',\n isActive ? 'tw-border-dashed tw-rounded-sm tw-border-2 tw-pr-0 tw-h-12' : 'tw-h-10',\n isActive &&\n (canDrop\n ? 'tw-border-box-selected-strong tw-bg-box-selected-hover'\n : 'tw-bg-box-negative-hover tw-border-box-negative-strong-hover'),\n ]);\n\n const depthPadding = activeProjection?.depth ? activeProjection.depth * INDENTATION_WIDTH : undefined;\n const levelPadding = isActive ? 0 : level * INDENTATION_WIDTH;\n\n const liStyle = {\n paddingLeft: depthPadding ?? levelPadding,\n };\n\n const showContent = !isActive;\n const showChildren = isExpanded && !isActive;\n const showDragHandle = draggable && !isActive;\n const showLabel = label !== undefined && !isActive;\n const showExpandButton = !isActive && (showCaret === undefined ? hasChildren : showCaret);\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <li\n id={id}\n key={id}\n tabIndex={0}\n role=\"treeitem\"\n style={liStyle}\n onKeyDown={noop}\n aria-label={label}\n aria-level={level + 1}\n onClick={handleItemClick}\n className={liClassName}\n ref={setDroppableNodeRef}\n data-test-id={dataTestId}\n aria-selected={isSelected}\n aria-expanded={isExpanded}\n data-has-children={hasChildren}\n aria-owns={childrenIds.join(' ')}\n >\n <div ref={setDraggableNodeRef} className={containerClassName} style={style}>\n <DragHandle\n {...listeners}\n {...attributes}\n active={isSelected}\n ref={setActivatorNodeRef}\n disabled={!showDragHandle}\n aria-hidden={!showDragHandle}\n className={showDragHandle ? 'tw-visible' : 'tw-invisible tw-pointer-events-none'}\n />\n\n <ExpandButton\n active={transform?.y ? false : isSelected}\n onClick={toggleExpand}\n expanded={showChildren}\n disabled={!showExpandButton}\n aria-hidden={!showExpandButton}\n className={showExpandButton ? 'tw-visible' : 'tw-invisible tw-pointer-events-none'}\n />\n\n {showLabel && (\n <span className=\"first:tw-ml-3.5 tw-w-full tw-h-full tw-flex tw-items-center\">{label}</span>\n )}\n\n {showContent && contentComponent}\n </div>\n </li>\n );\n },\n);\n\nTreeItem.displayName = 'FondueTreeItem';\n"],"names":["animateLayoutChanges","isSorting","wasDragging","TreeItem","memo","id","type","label","onDrop","accepts","showCaret","children","parentId","level","contentComponent","treeDraggable","onSelect","onExpand","onShrink","registerOverlay","registerNodeChildren","unregisterNodeChildren","itemDraggable","ignoreItemDoubleClick","expandOnSelect","dataTestId","active","over","useDndContext","isSelected","isExpanded","projection","useTreeItem","draggable","isActive","activeProjection","overAccepts","_b","_a","_c","parentAccepts","_d","currentType","_e","cleanCurrentType","isWithin","_f","canDropWithin","canDrop","handleItemDragEnd","useCallback","event","handleItemDragStart","handleItemDragMove","useDndMonitor","toggleExpand","handleItemClick","useDebounce","isParentActive","hasChildren","Children","enrichedChildren","childrenIds","useMemo","removeFragmentsAndEnrichChildren","child","attributes","listeners","transform","transition","setDraggableNodeRef","setDroppableNodeRef","setActivatorNodeRef","useSortable","useDeepCompareEffect","liClassName","merge","FOCUS_VISIBLE_STYLE","containerClassName","depthPadding","INDENTATION_WIDTH","levelPadding","liStyle","showContent","showChildren","showDragHandle","showLabel","showExpandButton","style","CSS","React","noop","DragHandle","ExpandButton"],"mappings":"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"}