@frontify/fondue 12.0.0-beta.13 → 12.0.0-beta.16
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/components/DatePicker/DatePickerTrigger.es.js +17 -16
- package/dist/components/DatePicker/DatePickerTrigger.es.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.es.js +41 -40
- package/dist/components/Dropdown/Dropdown.es.js.map +1 -1
- package/dist/components/LoadingBar/LoadingBar.d.ts +24 -0
- package/dist/components/LoadingBar/LoadingBar.es.js +50 -0
- package/dist/components/LoadingBar/LoadingBar.es.js.map +1 -0
- package/dist/components/LoadingBar/index.d.ts +1 -0
- package/dist/components/OverflowMenu/OverflowMenu.d.ts +6 -0
- package/dist/components/OverflowMenu/OverflowMenu.es.js +1721 -0
- package/dist/components/OverflowMenu/OverflowMenu.es.js.map +1 -0
- package/dist/components/OverflowMenu/OverflowMenuItem.d.ts +11 -0
- package/dist/components/OverflowMenu/OverflowMenuItem.es.js +1763 -0
- package/dist/components/OverflowMenu/OverflowMenuItem.es.js.map +1 -0
- package/dist/components/OverflowMenu/index.d.ts +1 -0
- package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.d.ts +1 -0
- package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.es.js +29 -0
- package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.es.js.map +1 -0
- package/dist/components/RichTextEditor/Plugins/GeneratePlugins.d.ts +3 -3
- package/dist/components/RichTextEditor/Plugins/GeneratePlugins.es.js +12 -16
- package/dist/components/RichTextEditor/Plugins/GeneratePlugins.es.js.map +1 -1
- package/dist/components/RichTextEditor/Plugins/LinkPlugin/LinkMarkupElement/LinkMarkupElementNode.es.js.map +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.es.js +19 -19
- package/dist/components/RichTextEditor/RichTextEditor.es.js.map +1 -1
- package/dist/components/RichTextEditor/Toolbar/index.d.ts +1 -1
- package/dist/components/RichTextEditor/Toolbar/index.es.js +19 -18
- package/dist/components/RichTextEditor/Toolbar/index.es.js.map +1 -1
- package/dist/components/RichTextEditor/Toolbar/types.d.ts +0 -2
- package/dist/components/RichTextEditor/context/RichTextEditorContext.d.ts +1 -1
- package/dist/components/RichTextEditor/context/RichTextEditorContext.es.js +16 -17
- package/dist/components/RichTextEditor/context/RichTextEditorContext.es.js.map +1 -1
- package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.d.ts +1 -2
- package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js.map +1 -1
- package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.d.ts +1 -2
- package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js +23 -19
- package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +2 -1
- package/dist/components/Tooltip/Tooltip.es.js +97 -92
- package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
- package/dist/components/Tree/Node.d.ts +4 -2
- package/dist/components/Tree/Node.es.js +105 -99
- package/dist/components/Tree/Node.es.js.map +1 -1
- package/dist/components/Tree/Tree.d.ts +2 -0
- package/dist/components/Tree/Tree.es.js +39 -35
- package/dist/components/Tree/Tree.es.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/index.cjs.js +4 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +3608 -3600
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +4 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/dnd/DndWrapper.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import t, { useState as
|
|
2
|
-
import { merge as
|
|
3
|
-
import { useDrag as
|
|
4
|
-
import { DropZone as
|
|
1
|
+
import t, { useState as h, useRef as J, useLayoutEffect as K } from "react";
|
|
2
|
+
import { merge as d } from "../../utilities/merge.es.js";
|
|
3
|
+
import { useDrag as Q } from "react-dnd";
|
|
4
|
+
import { DropZone as A } from "../DropZone/DropZone.es.js";
|
|
5
5
|
import "../../utilities/dnd/DndWrapper.es.js";
|
|
6
|
-
import { DropZonePosition as
|
|
7
|
-
import { EditableText as
|
|
6
|
+
import { DropZonePosition as B } from "../../utilities/dnd/types.es.js";
|
|
7
|
+
import { EditableText as U } from "../EditableText/EditableText.es.js";
|
|
8
8
|
import "../../foundation/Icon/Generated/IconAdobeCreativeCloud.es.js";
|
|
9
9
|
import "../../foundation/Icon/Generated/IconAdobeCreativeCloud12.es.js";
|
|
10
10
|
import "../../foundation/Icon/Generated/IconAdobeCreativeCloud16.es.js";
|
|
@@ -1666,191 +1666,197 @@ import "../../foundation/Icon/Generated/IconWorkflowShapes20.es.js";
|
|
|
1666
1666
|
import "../../foundation/Icon/Generated/IconWorkflowShapes24.es.js";
|
|
1667
1667
|
import "../../foundation/Icon/Generated/IconWorkflowShapes32.es.js";
|
|
1668
1668
|
import "../../foundation/Icon/IconsMap.es.js";
|
|
1669
|
-
import { Tooltip as
|
|
1670
|
-
const
|
|
1669
|
+
import { Tooltip as X, TooltipPosition as Y } from "../Tooltip/Tooltip.es.js";
|
|
1670
|
+
const _ = ({
|
|
1671
1671
|
nodes: r,
|
|
1672
|
-
activeIds:
|
|
1672
|
+
activeIds: f,
|
|
1673
1673
|
treeId: o,
|
|
1674
1674
|
onClick: m,
|
|
1675
1675
|
onDrop: i,
|
|
1676
|
-
onEditableSave:
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1676
|
+
onEditableSave: l,
|
|
1677
|
+
onNodeExpand: s,
|
|
1678
|
+
forceCaret: u,
|
|
1679
|
+
parentIds: a
|
|
1680
|
+
}) => r.map((p, e) => /* @__PURE__ */ t.createElement(I, {
|
|
1681
|
+
key: p.id,
|
|
1682
|
+
node: p,
|
|
1683
|
+
nodeIndex: e,
|
|
1684
|
+
activeIds: f,
|
|
1683
1685
|
onClick: m,
|
|
1684
|
-
isFirst:
|
|
1686
|
+
isFirst: e === 0,
|
|
1685
1687
|
onDrop: i,
|
|
1686
|
-
onEditableSave:
|
|
1687
|
-
|
|
1688
|
+
onEditableSave: l,
|
|
1689
|
+
onNodeExpand: s,
|
|
1690
|
+
forceCaret: u,
|
|
1691
|
+
parentIds: a,
|
|
1688
1692
|
treeId: o
|
|
1689
|
-
})),
|
|
1693
|
+
})), $ = (r, f) => {
|
|
1690
1694
|
const o = (m, i) => {
|
|
1691
1695
|
if (m.nodes && i) {
|
|
1692
|
-
for (const
|
|
1693
|
-
if (i.includes(
|
|
1696
|
+
for (const l of m.nodes)
|
|
1697
|
+
if (i.includes(l.id) || o(l, i))
|
|
1694
1698
|
return !0;
|
|
1695
1699
|
}
|
|
1696
1700
|
return !1;
|
|
1697
1701
|
};
|
|
1698
|
-
return o(r,
|
|
1699
|
-
},
|
|
1702
|
+
return o(r, f);
|
|
1703
|
+
}, I = ({
|
|
1700
1704
|
node: r,
|
|
1701
|
-
strong:
|
|
1705
|
+
strong: f = !1,
|
|
1702
1706
|
activeIds: o,
|
|
1703
1707
|
onClick: m,
|
|
1704
1708
|
parentIds: i = [],
|
|
1705
|
-
isFirst:
|
|
1706
|
-
onDrop:
|
|
1707
|
-
onEditableSave:
|
|
1709
|
+
isFirst: l,
|
|
1710
|
+
onDrop: s,
|
|
1711
|
+
onEditableSave: u,
|
|
1712
|
+
onNodeExpand: a,
|
|
1708
1713
|
treeId: p
|
|
1709
1714
|
}) => {
|
|
1710
|
-
const { id:
|
|
1711
|
-
item: { id:
|
|
1715
|
+
const { id: e, value: E, name: x, label: C, icon: N, nodes: b, actions: y, editable: H, badge: w, tooltipContent: O, forceCaret: P } = r, [{ opacity: R }, V] = Q({
|
|
1716
|
+
item: { id: e, value: E, name: x, label: C, icon: N, nodes: b, actions: y, editable: H, badge: w },
|
|
1712
1717
|
collect: (n) => ({
|
|
1713
1718
|
opacity: n.isDragging() ? 0.4 : 1
|
|
1714
1719
|
}),
|
|
1715
1720
|
type: p,
|
|
1716
|
-
canDrag:
|
|
1717
|
-
}), [
|
|
1718
|
-
if (!
|
|
1719
|
-
|
|
1721
|
+
canDrag: s !== void 0
|
|
1722
|
+
}), [v, T] = h($(r, o)), [z, j] = h(!1), c = o && o.length > 0 && o.includes(e), F = () => j(!0), S = () => j(!1), W = () => {
|
|
1723
|
+
if (!E) {
|
|
1724
|
+
T(!v);
|
|
1720
1725
|
return;
|
|
1721
1726
|
}
|
|
1722
|
-
m && m(
|
|
1723
|
-
},
|
|
1724
|
-
n.stopPropagation(),
|
|
1725
|
-
},
|
|
1726
|
-
disabled: !
|
|
1727
|
-
content:
|
|
1728
|
-
position:
|
|
1727
|
+
m && m(e);
|
|
1728
|
+
}, [D, M] = h(!1), Z = (n) => {
|
|
1729
|
+
D || a == null || a(e), M(!0), n.stopPropagation(), T(!v);
|
|
1730
|
+
}, q = () => /* @__PURE__ */ t.createElement(X, {
|
|
1731
|
+
disabled: !O,
|
|
1732
|
+
content: O,
|
|
1733
|
+
position: Y.Right,
|
|
1729
1734
|
withArrow: !0,
|
|
1730
1735
|
triggerElement: /* @__PURE__ */ t.createElement("div", {
|
|
1731
1736
|
"data-test-id": "node-badge",
|
|
1732
|
-
className:
|
|
1737
|
+
className: d([
|
|
1733
1738
|
"tw-flex tw-justify-center tw-items-center tw-ml-2 tw-text-text-weak",
|
|
1734
|
-
(
|
|
1739
|
+
(w == null ? void 0 : w.props.size) && "tw-w-8 tw-h-5 tw-bg-box-neutral tw-rounded-full"
|
|
1735
1740
|
])
|
|
1736
|
-
},
|
|
1737
|
-
}),
|
|
1738
|
-
|
|
1739
|
-
window.removeEventListener("resize",
|
|
1741
|
+
}, w)
|
|
1742
|
+
}), g = J(null), [L, G] = h(!1);
|
|
1743
|
+
K(() => (k(), window.addEventListener("resize", k), () => {
|
|
1744
|
+
window.removeEventListener("resize", k);
|
|
1740
1745
|
}), []);
|
|
1741
|
-
const
|
|
1742
|
-
if (
|
|
1743
|
-
const n =
|
|
1744
|
-
|
|
1746
|
+
const k = () => {
|
|
1747
|
+
if (g.current) {
|
|
1748
|
+
const n = g.current.scrollWidth > g.current.clientWidth;
|
|
1749
|
+
G(n);
|
|
1745
1750
|
}
|
|
1746
1751
|
};
|
|
1747
1752
|
return /* @__PURE__ */ t.createElement("li", {
|
|
1748
1753
|
"data-test-id": "node",
|
|
1749
|
-
ref:
|
|
1750
|
-
style: { opacity:
|
|
1751
|
-
},
|
|
1754
|
+
ref: V,
|
|
1755
|
+
style: { opacity: R }
|
|
1756
|
+
}, l && /* @__PURE__ */ t.createElement(A, {
|
|
1752
1757
|
data: {
|
|
1753
1758
|
targetItem: r,
|
|
1754
|
-
position:
|
|
1759
|
+
position: B.Before
|
|
1755
1760
|
},
|
|
1756
|
-
onDrop:
|
|
1761
|
+
onDrop: s,
|
|
1757
1762
|
treeId: p
|
|
1758
|
-
}), /* @__PURE__ */ t.createElement(
|
|
1763
|
+
}), /* @__PURE__ */ t.createElement(A, {
|
|
1759
1764
|
data: {
|
|
1760
1765
|
targetItem: r,
|
|
1761
|
-
position:
|
|
1766
|
+
position: B.Within
|
|
1762
1767
|
},
|
|
1763
|
-
onDrop:
|
|
1768
|
+
onDrop: s,
|
|
1764
1769
|
treeId: p
|
|
1765
1770
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
1766
|
-
className:
|
|
1771
|
+
className: d([
|
|
1767
1772
|
"tw-flex tw-py-2 tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10",
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1773
|
+
f && "tw-font-bold",
|
|
1774
|
+
E && !c && "tw-text-text hover:tw-bg-box-neutral-hover hover:tw-text-box-neutral-inverse-hover",
|
|
1775
|
+
c && "tw-font-medium tw-bg-box-selected-strong tw-text-box-selected-strong-inverse hover:tw-bg-box-selected-strong-hover hover:tw-text-box-selected-strong-inverse-hover"
|
|
1771
1776
|
]),
|
|
1772
|
-
onMouseEnter:
|
|
1773
|
-
onMouseLeave:
|
|
1777
|
+
onMouseEnter: F,
|
|
1778
|
+
onMouseLeave: S
|
|
1774
1779
|
}, /* @__PURE__ */ t.createElement("a", {
|
|
1775
1780
|
"data-test-id": "node-link",
|
|
1776
|
-
className:
|
|
1781
|
+
className: d([
|
|
1777
1782
|
"tw-flex tw-items-center tw-flex-grow tw-justify-between tw-cursor-pointer tw-h-6",
|
|
1778
1783
|
i.length === 1 && "tw-pl-4",
|
|
1779
1784
|
i.length > 1 && "tw-pl-8"
|
|
1780
1785
|
]),
|
|
1781
|
-
"aria-selected":
|
|
1782
|
-
onClick:
|
|
1786
|
+
"aria-selected": c,
|
|
1787
|
+
onClick: W
|
|
1783
1788
|
}, /* @__PURE__ */ t.createElement("div", {
|
|
1784
1789
|
className: "tw-flex tw-flex-1 tw-space-x-1 tw-items-center tw-h-full"
|
|
1785
1790
|
}, /* @__PURE__ */ t.createElement("span", {
|
|
1786
1791
|
"data-test-id": "toggle",
|
|
1787
1792
|
className: "tw-w-2 tw-h-3 tw-flex tw-items-center tw-justify-center",
|
|
1788
|
-
onClick:
|
|
1789
|
-
},
|
|
1790
|
-
className:
|
|
1793
|
+
onClick: Z
|
|
1794
|
+
}, (b || P) && /* @__PURE__ */ t.createElement("div", {
|
|
1795
|
+
className: d([
|
|
1791
1796
|
"tw-transition-transform tw-w-0 tw-h-0 tw-text-black-100 tw-text-opacity-40 tw-font-normal tw-border-t-4 tw-border-t-transparent tw-border-b-4 tw-border-b-transparent tw-border-l-4 tw-border-l-x-strong",
|
|
1792
|
-
|
|
1793
|
-
|
|
1797
|
+
v ? "tw-rotate-90" : "",
|
|
1798
|
+
c && "tw-text-box-selected-strong-inverse"
|
|
1794
1799
|
])
|
|
1795
|
-
})),
|
|
1800
|
+
})), N && /* @__PURE__ */ t.createElement("span", {
|
|
1796
1801
|
className: "tw-flex tw-justify-center tw-items-center tw-w-5"
|
|
1797
|
-
},
|
|
1798
|
-
ref:
|
|
1802
|
+
}, N), H && u ? /* @__PURE__ */ t.createElement("div", {
|
|
1803
|
+
ref: g,
|
|
1799
1804
|
className: "tw-relative tw-top-[0.2rem] tw-w-full tw-flex-1 tw-h-full"
|
|
1800
|
-
}, /* @__PURE__ */ t.createElement(
|
|
1805
|
+
}, /* @__PURE__ */ t.createElement(U, {
|
|
1801
1806
|
options: {
|
|
1802
1807
|
additionalValues: r.id,
|
|
1803
1808
|
enableDoubleClick: !0,
|
|
1804
1809
|
isSlimInputField: !0,
|
|
1805
1810
|
removeBoxPadding: !0
|
|
1806
1811
|
},
|
|
1807
|
-
onAdditionalValueSave:
|
|
1812
|
+
onAdditionalValueSave: u,
|
|
1808
1813
|
isOverflowing: !0
|
|
1809
1814
|
}, /* @__PURE__ */ t.createElement("span", {
|
|
1810
|
-
title: L ?
|
|
1815
|
+
title: L ? x : "",
|
|
1811
1816
|
className: "tw-max-w-full tw-absolute tw-top-[-0.08rem] tw-truncate"
|
|
1812
|
-
},
|
|
1817
|
+
}, x))) : /* @__PURE__ */ t.createElement("span", {
|
|
1813
1818
|
className: "tw-flex tw-items-center tw-flex-1 tw-relative tw-h-10",
|
|
1814
|
-
title: L ?
|
|
1819
|
+
title: L ? x : "",
|
|
1815
1820
|
"data-test-id": "node-link-name"
|
|
1816
1821
|
}, /* @__PURE__ */ t.createElement("span", {
|
|
1817
|
-
ref:
|
|
1822
|
+
ref: g,
|
|
1818
1823
|
className: "tw-truncate tw-max-w-full tw-absolute"
|
|
1819
|
-
},
|
|
1824
|
+
}, x)), /* @__PURE__ */ t.createElement("span", null, w && q())), /* @__PURE__ */ t.createElement("div", {
|
|
1820
1825
|
className: "tw-px-1.5"
|
|
1821
1826
|
}, /* @__PURE__ */ t.createElement("span", {
|
|
1822
1827
|
"data-test-id": "node-label",
|
|
1823
|
-
className:
|
|
1828
|
+
className: d([
|
|
1824
1829
|
"tw-text-black-100 tw-text-opacity-40 tw-text-xs tw-font-normal",
|
|
1825
|
-
|
|
1830
|
+
c && "tw-text-box-selected-strong-inverse"
|
|
1826
1831
|
])
|
|
1827
|
-
},
|
|
1828
|
-
className:
|
|
1832
|
+
}, C))), y && /* @__PURE__ */ t.createElement("div", {
|
|
1833
|
+
className: d([
|
|
1829
1834
|
"tw-flex tw-items-center",
|
|
1830
|
-
|
|
1835
|
+
z || c ? "tw-visible tw-space-x-1.5" : "tw-invisible tw-w-0"
|
|
1831
1836
|
])
|
|
1832
|
-
},
|
|
1837
|
+
}, y.map((n) => n)))), b && v && /* @__PURE__ */ t.createElement("ul", {
|
|
1833
1838
|
className: "tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left",
|
|
1834
1839
|
"data-test-id": "sub-tree"
|
|
1835
|
-
},
|
|
1836
|
-
nodes:
|
|
1840
|
+
}, _({
|
|
1841
|
+
nodes: b,
|
|
1837
1842
|
treeId: p,
|
|
1838
1843
|
activeIds: o,
|
|
1839
1844
|
onClick: m,
|
|
1840
|
-
onDrop:
|
|
1841
|
-
onEditableSave:
|
|
1842
|
-
|
|
1843
|
-
|
|
1845
|
+
onDrop: s,
|
|
1846
|
+
onEditableSave: u,
|
|
1847
|
+
onNodeExpand: a,
|
|
1848
|
+
parentIds: [...i, e]
|
|
1849
|
+
})), /* @__PURE__ */ t.createElement(A, {
|
|
1844
1850
|
data: {
|
|
1845
1851
|
targetItem: r,
|
|
1846
|
-
position:
|
|
1852
|
+
position: B.After
|
|
1847
1853
|
},
|
|
1848
|
-
onDrop:
|
|
1854
|
+
onDrop: s,
|
|
1849
1855
|
treeId: p
|
|
1850
1856
|
}));
|
|
1851
1857
|
};
|
|
1852
1858
|
export {
|
|
1853
|
-
|
|
1854
|
-
|
|
1859
|
+
I as Node,
|
|
1860
|
+
_ as renderNodeArray
|
|
1855
1861
|
};
|
|
1856
1862
|
//# sourceMappingURL=Node.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.es.js","sources":["../../../src/components/Tree/Node.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { ReactElement, useLayoutEffect, useRef, useState } from 'react';\nimport { merge } from '@utilities/merge';\nimport { useDrag } from 'react-dnd';\nimport { DropZone, OnDropCallback } from '@components/DropZone';\nimport { TreeFlatListItem } from '@components/Tree';\nimport { DraggableItem, DropZonePosition } from '@utilities/dnd';\nimport { EditableText } from '../EditableText';\nimport { Tooltip, TooltipPosition } from '../Tooltip';\n\nexport type RenderNodeArrayData = Omit<NodeProps, 'isFirst' | 'strong' | 'node'> & {\n nodes: DraggableItem<TreeNodeItem>[];\n};\n\nexport const renderNodeArray = ({\n nodes,\n activeIds,\n treeId,\n onClick,\n onDrop,\n onEditableSave,\n parentIds,\n}: RenderNodeArrayData) =>\n nodes.map((node, i) => (\n <Node\n key={node.id}\n node={node}\n nodeIndex={i}\n activeIds={activeIds}\n onClick={onClick}\n isFirst={i === 0}\n onDrop={onDrop}\n onEditableSave={onEditableSave}\n parentIds={parentIds}\n treeId={treeId}\n />\n ));\n\nexport interface TreeNodeItem extends TreeFlatListItem {\n nodes?: DraggableItem<TreeNodeItem>[];\n}\n\ntype NodeProps = {\n node: DraggableItem<TreeNodeItem>;\n strong?: boolean;\n nodeIndex?: number;\n activeIds?: NullableString[];\n parentIds?: string[];\n onClick: (id: NullableString) => void;\n isFirst: boolean;\n treeId: string;\n onDrop?: OnDropCallback<TreeNodeItem>;\n onEditableSave?: (targetItemId: string, value: string) => void;\n};\n\nconst getInitialShowNodesValue = (\n currentNode: DraggableItem<TreeNodeItem>,\n activeNodeIds?: NullableString[],\n): boolean => {\n const hasActiveChildNodes = (node: DraggableItem<TreeNodeItem>, activeIds?: NullableString[]): boolean => {\n if (node.nodes && activeIds) {\n for (const childNode of node.nodes) {\n if (activeIds.includes(childNode.id) || hasActiveChildNodes(childNode, activeIds)) {\n return true;\n }\n }\n }\n return false;\n };\n\n return hasActiveChildNodes(currentNode, activeNodeIds);\n};\n\nexport const Node = ({\n node,\n strong = false,\n activeIds,\n onClick,\n parentIds = [],\n isFirst,\n onDrop,\n onEditableSave,\n treeId,\n}: NodeProps): ReactElement<NodeProps> => {\n const { id, value, name, label, icon, nodes, actions, editable, badge, tooltipContent } = node;\n const [{ opacity }, drag] = useDrag({\n item: { id, value, name, label, icon, nodes, actions, editable, badge },\n collect: (monitor) => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n }),\n type: treeId,\n canDrag: onDrop !== undefined,\n });\n const [showNodes, setShowNodes] = useState(getInitialShowNodesValue(node, activeIds));\n const [isHovered, setIsHovered] = useState(false);\n const selected = activeIds && activeIds.length > 0 && activeIds.includes(id);\n\n const setHoveredTrue = () => setIsHovered(true);\n const setHoveredFalse = () => setIsHovered(false);\n const onNodeClick = () => {\n if (!value) {\n setShowNodes(!showNodes);\n return;\n }\n\n if (onClick) {\n onClick(id);\n }\n };\n const toggleNodesVisibility = (event: React.MouseEvent) => {\n event.stopPropagation();\n setShowNodes(!showNodes);\n };\n\n const insertBadge = () => {\n return (\n <Tooltip\n disabled={!tooltipContent}\n content={tooltipContent}\n position={TooltipPosition.Right}\n withArrow\n triggerElement={\n <div\n data-test-id=\"node-badge\"\n className={merge([\n 'tw-flex tw-justify-center tw-items-center tw-ml-2 tw-text-text-weak',\n badge?.props.size && 'tw-w-8 tw-h-5 tw-bg-box-neutral tw-rounded-full',\n ])}\n >\n {badge}\n </div>\n }\n />\n );\n };\n\n const nameRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useLayoutEffect(() => {\n checkIfOverflowing();\n\n window.addEventListener('resize', checkIfOverflowing);\n return () => {\n window.removeEventListener('resize', checkIfOverflowing);\n };\n }, []);\n\n const checkIfOverflowing = () => {\n if (nameRef.current) {\n const isTextOverflowing = nameRef.current.scrollWidth > nameRef.current.clientWidth;\n setIsOverflowing(isTextOverflowing);\n }\n };\n\n /* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n return (\n <li data-test-id=\"node\" ref={drag} style={{ opacity }}>\n {isFirst && (\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.Before,\n }}\n onDrop={onDrop}\n treeId={treeId}\n />\n )}\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.Within,\n }}\n onDrop={onDrop}\n treeId={treeId}\n >\n <div\n className={merge([\n 'tw-flex tw-py-2 tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n strong && 'tw-font-bold',\n value &&\n !selected &&\n 'tw-text-text hover:tw-bg-box-neutral-hover hover:tw-text-box-neutral-inverse-hover',\n selected &&\n 'tw-font-medium tw-bg-box-selected-strong tw-text-box-selected-strong-inverse hover:tw-bg-box-selected-strong-hover hover:tw-text-box-selected-strong-inverse-hover',\n ])}\n onMouseEnter={setHoveredTrue}\n onMouseLeave={setHoveredFalse}\n >\n <a\n data-test-id=\"node-link\"\n className={merge([\n 'tw-flex tw-items-center tw-flex-grow tw-justify-between tw-cursor-pointer tw-h-6',\n parentIds.length === 1 && 'tw-pl-4',\n parentIds.length > 1 && 'tw-pl-8',\n ])}\n aria-selected={selected}\n onClick={onNodeClick}\n >\n <div className=\"tw-flex tw-flex-1 tw-space-x-1 tw-items-center tw-h-full\">\n <span\n data-test-id=\"toggle\"\n className=\"tw-w-2 tw-h-3 tw-flex tw-items-center tw-justify-center\"\n onClick={toggleNodesVisibility}\n >\n {nodes && (\n <div\n className={merge([\n 'tw-transition-transform tw-w-0 tw-h-0 tw-text-black-100 tw-text-opacity-40 tw-font-normal tw-border-t-4 tw-border-t-transparent tw-border-b-4 tw-border-b-transparent tw-border-l-4 tw-border-l-x-strong',\n showNodes ? 'tw-rotate-90' : '',\n selected && 'tw-text-box-selected-strong-inverse',\n ])}\n ></div>\n )}\n </span>\n {icon && <span className=\"tw-flex tw-justify-center tw-items-center tw-w-5\">{icon}</span>}\n {editable && onEditableSave ? (\n <div\n ref={nameRef}\n className=\"tw-relative tw-top-[0.2rem] tw-w-full tw-flex-1 tw-h-full\"\n >\n <EditableText\n options={{\n additionalValues: node.id,\n enableDoubleClick: true,\n isSlimInputField: true,\n removeBoxPadding: true,\n }}\n onAdditionalValueSave={onEditableSave}\n isOverflowing={true}\n >\n <span\n title={isOverflowing ? name : ''}\n className=\"tw-max-w-full tw-absolute tw-top-[-0.08rem] tw-truncate\"\n >\n {name}\n </span>\n </EditableText>\n </div>\n ) : (\n <span\n className=\"tw-flex tw-items-center tw-flex-1 tw-relative tw-h-10\"\n title={isOverflowing ? name : ''}\n data-test-id=\"node-link-name\"\n >\n <span ref={nameRef} className=\"tw-truncate tw-max-w-full tw-absolute\">\n {name}\n </span>\n </span>\n )}\n <span>{badge && insertBadge()}</span>\n </div>\n <div className=\"tw-px-1.5\">\n <span\n data-test-id=\"node-label\"\n className={merge([\n 'tw-text-black-100 tw-text-opacity-40 tw-text-xs tw-font-normal',\n selected && 'tw-text-box-selected-strong-inverse',\n ])}\n >\n {label}\n </span>\n </div>\n </a>\n\n {actions && (\n <div\n className={merge([\n 'tw-flex tw-items-center',\n isHovered || selected ? 'tw-visible tw-space-x-1.5' : 'tw-invisible tw-w-0',\n ])}\n >\n {actions.map((action) => action)}\n </div>\n )}\n </div>\n </DropZone>\n\n {nodes && showNodes && (\n <ul\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left\"\n data-test-id=\"sub-tree\"\n >\n {renderNodeArray({\n nodes,\n treeId,\n activeIds,\n onClick,\n onDrop,\n onEditableSave,\n parentIds: [...parentIds, id],\n })}\n </ul>\n )}\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.After,\n }}\n onDrop={onDrop}\n treeId={treeId}\n />\n </li>\n );\n /* eslint-enable jsx-a11y/anchor-is-valid,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"Node.es.js","sources":["../../../src/components/Tree/Node.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { ReactElement, useLayoutEffect, useRef, useState } from 'react';\nimport { merge } from '@utilities/merge';\nimport { useDrag } from 'react-dnd';\nimport { DropZone, OnDropCallback } from '@components/DropZone';\nimport { TreeFlatListItem } from '@components/Tree';\nimport { DraggableItem, DropZonePosition } from '@utilities/dnd';\nimport { EditableText } from '../EditableText';\nimport { Tooltip, TooltipPosition } from '../Tooltip';\n\nexport type RenderNodeArrayData = Omit<NodeProps, 'isFirst' | 'strong' | 'node'> & {\n nodes: DraggableItem<TreeNodeItem>[];\n};\n\nexport const renderNodeArray = ({\n nodes,\n activeIds,\n treeId,\n onClick,\n onDrop,\n onEditableSave,\n onNodeExpand,\n forceCaret,\n parentIds,\n}: RenderNodeArrayData) =>\n nodes.map((node, i) => (\n <Node\n key={node.id}\n node={node}\n nodeIndex={i}\n activeIds={activeIds}\n onClick={onClick}\n isFirst={i === 0}\n onDrop={onDrop}\n onEditableSave={onEditableSave}\n onNodeExpand={onNodeExpand}\n forceCaret={forceCaret}\n parentIds={parentIds}\n treeId={treeId}\n />\n ));\n\nexport interface TreeNodeItem extends TreeFlatListItem {\n nodes?: DraggableItem<TreeNodeItem>[];\n}\n\ntype NodeProps = {\n node: DraggableItem<TreeNodeItem>;\n strong?: boolean;\n nodeIndex?: number;\n activeIds?: NullableString[];\n parentIds?: string[];\n onClick: (id: NullableString) => void;\n isFirst: boolean;\n treeId: string;\n onDrop?: OnDropCallback<TreeNodeItem>;\n onEditableSave?: (targetItemId: string, value: string) => void;\n forceCaret?: boolean;\n onNodeExpand?: (itemId: string) => void;\n};\n\nconst getInitialShowNodesValue = (\n currentNode: DraggableItem<TreeNodeItem>,\n activeNodeIds?: NullableString[],\n): boolean => {\n const hasActiveChildNodes = (node: DraggableItem<TreeNodeItem>, activeIds?: NullableString[]): boolean => {\n if (node.nodes && activeIds) {\n for (const childNode of node.nodes) {\n if (activeIds.includes(childNode.id) || hasActiveChildNodes(childNode, activeIds)) {\n return true;\n }\n }\n }\n return false;\n };\n\n return hasActiveChildNodes(currentNode, activeNodeIds);\n};\n\nexport const Node = ({\n node,\n strong = false,\n activeIds,\n onClick,\n parentIds = [],\n isFirst,\n onDrop,\n onEditableSave,\n onNodeExpand,\n treeId,\n}: NodeProps): ReactElement<NodeProps> => {\n const { id, value, name, label, icon, nodes, actions, editable, badge, tooltipContent, forceCaret } = node;\n const [{ opacity }, drag] = useDrag({\n item: { id, value, name, label, icon, nodes, actions, editable, badge },\n collect: (monitor) => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n }),\n type: treeId,\n canDrag: onDrop !== undefined,\n });\n const [showNodes, setShowNodes] = useState(getInitialShowNodesValue(node, activeIds));\n const [isHovered, setIsHovered] = useState(false);\n const selected = activeIds && activeIds.length > 0 && activeIds.includes(id);\n\n const setHoveredTrue = () => setIsHovered(true);\n const setHoveredFalse = () => setIsHovered(false);\n const onNodeClick = () => {\n if (!value) {\n setShowNodes(!showNodes);\n return;\n }\n\n if (onClick) {\n onClick(id);\n }\n };\n\n const [hasBeenExpanded, setHasBeenExpanded] = useState<boolean>(false);\n const toggleNodesVisibility = (event: React.MouseEvent) => {\n if (!hasBeenExpanded) {\n onNodeExpand?.(id);\n }\n setHasBeenExpanded(true);\n\n event.stopPropagation();\n setShowNodes(!showNodes);\n };\n\n const insertBadge = () => {\n return (\n <Tooltip\n disabled={!tooltipContent}\n content={tooltipContent}\n position={TooltipPosition.Right}\n withArrow\n triggerElement={\n <div\n data-test-id=\"node-badge\"\n className={merge([\n 'tw-flex tw-justify-center tw-items-center tw-ml-2 tw-text-text-weak',\n badge?.props.size && 'tw-w-8 tw-h-5 tw-bg-box-neutral tw-rounded-full',\n ])}\n >\n {badge}\n </div>\n }\n />\n );\n };\n\n const nameRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useLayoutEffect(() => {\n checkIfOverflowing();\n\n window.addEventListener('resize', checkIfOverflowing);\n return () => {\n window.removeEventListener('resize', checkIfOverflowing);\n };\n }, []);\n\n const checkIfOverflowing = () => {\n if (nameRef.current) {\n const isTextOverflowing = nameRef.current.scrollWidth > nameRef.current.clientWidth;\n setIsOverflowing(isTextOverflowing);\n }\n };\n\n /* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n return (\n <li data-test-id=\"node\" ref={drag} style={{ opacity }}>\n {isFirst && (\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.Before,\n }}\n onDrop={onDrop}\n treeId={treeId}\n />\n )}\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.Within,\n }}\n onDrop={onDrop}\n treeId={treeId}\n >\n <div\n className={merge([\n 'tw-flex tw-py-2 tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n strong && 'tw-font-bold',\n value &&\n !selected &&\n 'tw-text-text hover:tw-bg-box-neutral-hover hover:tw-text-box-neutral-inverse-hover',\n selected &&\n 'tw-font-medium tw-bg-box-selected-strong tw-text-box-selected-strong-inverse hover:tw-bg-box-selected-strong-hover hover:tw-text-box-selected-strong-inverse-hover',\n ])}\n onMouseEnter={setHoveredTrue}\n onMouseLeave={setHoveredFalse}\n >\n <a\n data-test-id=\"node-link\"\n className={merge([\n 'tw-flex tw-items-center tw-flex-grow tw-justify-between tw-cursor-pointer tw-h-6',\n parentIds.length === 1 && 'tw-pl-4',\n parentIds.length > 1 && 'tw-pl-8',\n ])}\n aria-selected={selected}\n onClick={onNodeClick}\n >\n <div className=\"tw-flex tw-flex-1 tw-space-x-1 tw-items-center tw-h-full\">\n <span\n data-test-id=\"toggle\"\n className=\"tw-w-2 tw-h-3 tw-flex tw-items-center tw-justify-center\"\n onClick={toggleNodesVisibility}\n >\n {(nodes || forceCaret) && (\n <div\n className={merge([\n 'tw-transition-transform tw-w-0 tw-h-0 tw-text-black-100 tw-text-opacity-40 tw-font-normal tw-border-t-4 tw-border-t-transparent tw-border-b-4 tw-border-b-transparent tw-border-l-4 tw-border-l-x-strong',\n showNodes ? 'tw-rotate-90' : '',\n selected && 'tw-text-box-selected-strong-inverse',\n ])}\n />\n )}\n </span>\n {icon && <span className=\"tw-flex tw-justify-center tw-items-center tw-w-5\">{icon}</span>}\n {editable && onEditableSave ? (\n <div\n ref={nameRef}\n className=\"tw-relative tw-top-[0.2rem] tw-w-full tw-flex-1 tw-h-full\"\n >\n <EditableText\n options={{\n additionalValues: node.id,\n enableDoubleClick: true,\n isSlimInputField: true,\n removeBoxPadding: true,\n }}\n onAdditionalValueSave={onEditableSave}\n isOverflowing={true}\n >\n <span\n title={isOverflowing ? name : ''}\n className=\"tw-max-w-full tw-absolute tw-top-[-0.08rem] tw-truncate\"\n >\n {name}\n </span>\n </EditableText>\n </div>\n ) : (\n <span\n className=\"tw-flex tw-items-center tw-flex-1 tw-relative tw-h-10\"\n title={isOverflowing ? name : ''}\n data-test-id=\"node-link-name\"\n >\n <span ref={nameRef} className=\"tw-truncate tw-max-w-full tw-absolute\">\n {name}\n </span>\n </span>\n )}\n <span>{badge && insertBadge()}</span>\n </div>\n <div className=\"tw-px-1.5\">\n <span\n data-test-id=\"node-label\"\n className={merge([\n 'tw-text-black-100 tw-text-opacity-40 tw-text-xs tw-font-normal',\n selected && 'tw-text-box-selected-strong-inverse',\n ])}\n >\n {label}\n </span>\n </div>\n </a>\n\n {actions && (\n <div\n className={merge([\n 'tw-flex tw-items-center',\n isHovered || selected ? 'tw-visible tw-space-x-1.5' : 'tw-invisible tw-w-0',\n ])}\n >\n {actions.map((action) => action)}\n </div>\n )}\n </div>\n </DropZone>\n\n {nodes && showNodes && (\n <ul\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left\"\n data-test-id=\"sub-tree\"\n >\n {renderNodeArray({\n nodes,\n treeId,\n activeIds,\n onClick,\n onDrop,\n onEditableSave,\n onNodeExpand,\n parentIds: [...parentIds, id],\n })}\n </ul>\n )}\n <DropZone\n data={{\n targetItem: node,\n position: DropZonePosition.After,\n }}\n onDrop={onDrop}\n treeId={treeId}\n />\n </li>\n );\n /* eslint-enable jsx-a11y/anchor-is-valid,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -12,6 +12,7 @@ export interface TreeFlatListItem {
|
|
|
12
12
|
tooltipContent?: ReactNode;
|
|
13
13
|
parentId: NullableString;
|
|
14
14
|
editable?: boolean;
|
|
15
|
+
forceCaret?: boolean;
|
|
15
16
|
}
|
|
16
17
|
export declare type TreeProps = {
|
|
17
18
|
nodes: DraggableItem<TreeFlatListItem>[];
|
|
@@ -19,5 +20,6 @@ export declare type TreeProps = {
|
|
|
19
20
|
activeNodeIds: NullableString[];
|
|
20
21
|
onDragAndDrop?: (itemId: string, parentId: NullableString, positionBeforeId: NullableString) => void;
|
|
21
22
|
onEditableSave?: (targetItemId: string, value: string) => void;
|
|
23
|
+
onNodeExpand?: (itemId: string) => void;
|
|
22
24
|
};
|
|
23
25
|
export declare const Tree: FC<TreeProps>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { renderNodeArray as
|
|
3
|
-
import { useId as
|
|
4
|
-
import { DndWrapper as
|
|
5
|
-
import { draggableItemCompareFn as
|
|
1
|
+
import E, { useState as l, useEffect as N } from "react";
|
|
2
|
+
import { renderNodeArray as b } from "./Node.es.js";
|
|
3
|
+
import { useId as A } from "@react-aria/utils";
|
|
4
|
+
import { DndWrapper as D } from "../../utilities/dnd/DndWrapper.es.js";
|
|
5
|
+
import { draggableItemCompareFn as H } from "../../utilities/dnd/draggableItemCompareFn.es.js";
|
|
6
6
|
import { DropZonePosition as p } from "../../utilities/dnd/types.es.js";
|
|
7
7
|
import "@react-aria/aria-modal-polyfill";
|
|
8
8
|
import "@react-aria/button";
|
|
@@ -1682,65 +1682,69 @@ import "@react-aria/menu";
|
|
|
1682
1682
|
import "@react-stately/collections";
|
|
1683
1683
|
import "@react-stately/tree";
|
|
1684
1684
|
import "./utils/mocks.es.js";
|
|
1685
|
-
import { listToTree as
|
|
1686
|
-
const
|
|
1685
|
+
import { listToTree as P } from "./utils/listToTree.es.js";
|
|
1686
|
+
const YB = ({
|
|
1687
1687
|
nodes: e,
|
|
1688
1688
|
onSelect: c,
|
|
1689
|
-
activeNodeIds:
|
|
1689
|
+
activeNodeIds: k,
|
|
1690
1690
|
onDragAndDrop: a,
|
|
1691
|
-
onEditableSave: f
|
|
1691
|
+
onEditableSave: f,
|
|
1692
|
+
onNodeExpand: w
|
|
1692
1693
|
}) => {
|
|
1693
|
-
const [
|
|
1694
|
-
|
|
1695
|
-
const t =
|
|
1694
|
+
const [h, n] = l(!1), [r, u] = l(k), [x, T] = l([]), s = A();
|
|
1695
|
+
N(() => {
|
|
1696
|
+
const t = P(e);
|
|
1696
1697
|
T(t);
|
|
1697
1698
|
}, [e]);
|
|
1698
|
-
const
|
|
1699
|
-
if (
|
|
1699
|
+
const L = (t) => {
|
|
1700
|
+
if (h) {
|
|
1700
1701
|
const o = r.includes(t) ? [...r].filter((i) => i !== t) : [...r, t];
|
|
1701
|
-
|
|
1702
|
+
u(o), c(o);
|
|
1702
1703
|
} else
|
|
1703
|
-
|
|
1704
|
-
},
|
|
1705
|
-
const
|
|
1704
|
+
u([t]), c([t]);
|
|
1705
|
+
}, M = a ? (t, o, i) => {
|
|
1706
|
+
const B = () => {
|
|
1706
1707
|
switch (i) {
|
|
1707
1708
|
case p.After:
|
|
1708
1709
|
const m = e.filter((d) => d.parentId === t.parentId);
|
|
1709
|
-
m.sort(
|
|
1710
|
-
const
|
|
1711
|
-
return
|
|
1710
|
+
m.sort(H);
|
|
1711
|
+
const y = m.findIndex((d) => d.id === t.id);
|
|
1712
|
+
return y === m.length - 1 ? null : m[y + 1].id;
|
|
1712
1713
|
case p.Before:
|
|
1713
1714
|
return t.id;
|
|
1714
1715
|
case p.Within:
|
|
1715
1716
|
return null;
|
|
1716
1717
|
}
|
|
1717
|
-
},
|
|
1718
|
-
a(o.id,
|
|
1719
|
-
} : void 0,
|
|
1718
|
+
}, C = i === p.Within ? t.id : t.parentId, W = B();
|
|
1719
|
+
a(o.id, C, W);
|
|
1720
|
+
} : void 0, K = f ? (t, o) => {
|
|
1720
1721
|
f(t, o);
|
|
1721
|
-
} : void 0,
|
|
1722
|
+
} : void 0, S = w ? (t) => {
|
|
1723
|
+
w(t);
|
|
1724
|
+
} : void 0, v = (t) => {
|
|
1722
1725
|
t.key === "Meta" || t.ctrlKey ? n(!0) : n(!1);
|
|
1723
1726
|
}, I = (t) => {
|
|
1724
1727
|
(t.key === "Meta" || t.ctrlKey) && n(!1);
|
|
1725
1728
|
};
|
|
1726
|
-
return
|
|
1727
|
-
window.removeEventListener("keydown",
|
|
1728
|
-
}), []), /* @__PURE__ */
|
|
1729
|
+
return N(() => (window.addEventListener("keydown", v), window.addEventListener("keyup", I), () => {
|
|
1730
|
+
window.removeEventListener("keydown", v), window.removeEventListener("keyup", I);
|
|
1731
|
+
}), []), /* @__PURE__ */ E.createElement("ul", {
|
|
1729
1732
|
id: s,
|
|
1730
1733
|
"data-test-id": "tree",
|
|
1731
1734
|
className: "tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left tw-text-sm tw-select-none"
|
|
1732
|
-
}, /* @__PURE__ */
|
|
1735
|
+
}, /* @__PURE__ */ E.createElement(D, {
|
|
1733
1736
|
id: s
|
|
1734
|
-
},
|
|
1735
|
-
nodes:
|
|
1737
|
+
}, b({
|
|
1738
|
+
nodes: x,
|
|
1736
1739
|
treeId: s,
|
|
1737
1740
|
activeIds: r,
|
|
1738
|
-
onClick:
|
|
1739
|
-
onDrop:
|
|
1740
|
-
onEditableSave:
|
|
1741
|
+
onClick: L,
|
|
1742
|
+
onDrop: M,
|
|
1743
|
+
onEditableSave: K,
|
|
1744
|
+
onNodeExpand: S
|
|
1741
1745
|
})));
|
|
1742
1746
|
};
|
|
1743
1747
|
export {
|
|
1744
|
-
|
|
1748
|
+
YB as Tree
|
|
1745
1749
|
};
|
|
1746
1750
|
//# sourceMappingURL=Tree.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.es.js","sources":["../../../src/components/Tree/Tree.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, ReactElement, ReactNode, useEffect, useState } from 'react';\nimport { renderNodeArray } from './Node';\nimport { useId } from '@react-aria/utils';\nimport { DndWrapper, DraggableItem, DropZonePosition, draggableItemCompareFn } from '@utilities/dnd';\nimport { listToTree } from '@components/Tree/utils';\nimport { IconProps } from '@foundation/Icon';\nimport { BadgeProps } from '..';\n\nexport interface TreeFlatListItem {\n name: string;\n icon?: ReactElement<IconProps>;\n label?: string;\n value?: string;\n actions?: React.ReactNode[];\n badge?: ReactElement<IconProps> | ReactElement<BadgeProps>;\n tooltipContent?: ReactNode;\n parentId: NullableString;\n editable?: boolean;\n}\n\nexport type TreeProps = {\n nodes: DraggableItem<TreeFlatListItem>[];\n onSelect: (ids: NullableString[]) => void;\n activeNodeIds: NullableString[];\n onDragAndDrop?: (itemId: string, parentId: NullableString, positionBeforeId: NullableString) => void;\n onEditableSave?: (targetItemId: string, value: string) => void;\n};\n\nexport const Tree: FC<TreeProps> = ({\n nodes,\n onSelect,\n activeNodeIds: initialActiveNodeIds,\n onDragAndDrop,\n onEditableSave,\n}) => {\n const [multiSelectMode, setMultiSelectMode] = useState<boolean>(false);\n const [activeIds, setActiveIds] = useState<NullableString[]>(initialActiveNodeIds);\n const [treeNodes, setTreeNodes] = useState<DraggableItem<TreeFlatListItem>[]>([]);\n const treeId = useId();\n\n useEffect(() => {\n const listToTreeNodes = listToTree(nodes);\n setTreeNodes(listToTreeNodes);\n }, [nodes]);\n\n const onNodeClick = (id: NullableString) => {\n if (multiSelectMode) {\n const modifiedSelectedIds: NullableString[] = activeIds.includes(id)\n ? [...activeIds].filter((i) => i !== id)\n : [...activeIds, id];\n\n setActiveIds(modifiedSelectedIds);\n onSelect(modifiedSelectedIds);\n } else {\n setActiveIds([id]);\n onSelect([id]);\n }\n };\n\n const handleDrop = onDragAndDrop\n ? (\n targetItem: DraggableItem<TreeFlatListItem>,\n sourceItem: DraggableItem<TreeFlatListItem>,\n position: DropZonePosition,\n ) => {\n const getPositionBeforeId = () => {\n switch (position) {\n case DropZonePosition.After:\n const sameLevelNodes = nodes.filter((node) => node.parentId === targetItem.parentId);\n sameLevelNodes.sort(draggableItemCompareFn);\n const targetItemIndex = sameLevelNodes.findIndex((item) => item.id === targetItem.id);\n if (targetItemIndex === sameLevelNodes.length - 1) {\n return null;\n } else {\n return sameLevelNodes[targetItemIndex + 1].id;\n }\n case DropZonePosition.Before:\n return targetItem.id;\n case DropZonePosition.Within:\n return null;\n }\n };\n\n const parentId = position === DropZonePosition.Within ? targetItem.id : targetItem.parentId;\n const positionBeforeId = getPositionBeforeId();\n onDragAndDrop(sourceItem.id, parentId, positionBeforeId);\n }\n : undefined;\n\n const handleEditableSave = onEditableSave\n ? (targetItemId: string, value: string) => {\n onEditableSave(targetItemId, value);\n }\n : undefined;\n\n const downKeyHandler = (event: KeyboardEvent) => {\n if (event.key === 'Meta' || event.ctrlKey) {\n setMultiSelectMode(true);\n } else {\n setMultiSelectMode(false);\n }\n };\n\n const upKeyHandler = (event: KeyboardEvent) => {\n if (event.key === 'Meta' || event.ctrlKey) {\n setMultiSelectMode(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', downKeyHandler);\n window.addEventListener('keyup', upKeyHandler);\n\n return () => {\n window.removeEventListener('keydown', downKeyHandler);\n window.removeEventListener('keyup', upKeyHandler);\n };\n }, []);\n\n return (\n <ul\n id={treeId}\n data-test-id=\"tree\"\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left tw-text-sm tw-select-none\"\n >\n <DndWrapper id={treeId}>\n {renderNodeArray({\n nodes: treeNodes,\n treeId,\n activeIds,\n onClick: onNodeClick,\n onDrop: handleDrop,\n onEditableSave: handleEditableSave,\n })}\n </DndWrapper>\n </ul>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Tree.es.js","sources":["../../../src/components/Tree/Tree.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, ReactElement, ReactNode, useEffect, useState } from 'react';\nimport { renderNodeArray } from './Node';\nimport { useId } from '@react-aria/utils';\nimport { DndWrapper, DraggableItem, DropZonePosition, draggableItemCompareFn } from '@utilities/dnd';\nimport { listToTree } from '@components/Tree/utils';\nimport { IconProps } from '@foundation/Icon';\nimport { BadgeProps } from '..';\n\nexport interface TreeFlatListItem {\n name: string;\n icon?: ReactElement<IconProps>;\n label?: string;\n value?: string;\n actions?: React.ReactNode[];\n badge?: ReactElement<IconProps> | ReactElement<BadgeProps>;\n tooltipContent?: ReactNode;\n parentId: NullableString;\n editable?: boolean;\n forceCaret?: boolean;\n}\n\nexport type TreeProps = {\n nodes: DraggableItem<TreeFlatListItem>[];\n onSelect: (ids: NullableString[]) => void;\n activeNodeIds: NullableString[];\n onDragAndDrop?: (itemId: string, parentId: NullableString, positionBeforeId: NullableString) => void;\n onEditableSave?: (targetItemId: string, value: string) => void;\n onNodeExpand?: (itemId: string) => void;\n};\n\nexport const Tree: FC<TreeProps> = ({\n nodes,\n onSelect,\n activeNodeIds: initialActiveNodeIds,\n onDragAndDrop,\n onEditableSave,\n onNodeExpand,\n}) => {\n const [multiSelectMode, setMultiSelectMode] = useState<boolean>(false);\n const [activeIds, setActiveIds] = useState<NullableString[]>(initialActiveNodeIds);\n const [treeNodes, setTreeNodes] = useState<DraggableItem<TreeFlatListItem>[]>([]);\n const treeId = useId();\n\n useEffect(() => {\n const listToTreeNodes = listToTree(nodes);\n setTreeNodes(listToTreeNodes);\n }, [nodes]);\n\n const onNodeClick = (id: NullableString) => {\n if (multiSelectMode) {\n const modifiedSelectedIds: NullableString[] = activeIds.includes(id)\n ? [...activeIds].filter((i) => i !== id)\n : [...activeIds, id];\n\n setActiveIds(modifiedSelectedIds);\n onSelect(modifiedSelectedIds);\n } else {\n setActiveIds([id]);\n onSelect([id]);\n }\n };\n\n const handleDrop = onDragAndDrop\n ? (\n targetItem: DraggableItem<TreeFlatListItem>,\n sourceItem: DraggableItem<TreeFlatListItem>,\n position: DropZonePosition,\n ) => {\n const getPositionBeforeId = () => {\n switch (position) {\n case DropZonePosition.After:\n const sameLevelNodes = nodes.filter((node) => node.parentId === targetItem.parentId);\n sameLevelNodes.sort(draggableItemCompareFn);\n const targetItemIndex = sameLevelNodes.findIndex((item) => item.id === targetItem.id);\n if (targetItemIndex === sameLevelNodes.length - 1) {\n return null;\n } else {\n return sameLevelNodes[targetItemIndex + 1].id;\n }\n case DropZonePosition.Before:\n return targetItem.id;\n case DropZonePosition.Within:\n return null;\n }\n };\n\n const parentId = position === DropZonePosition.Within ? targetItem.id : targetItem.parentId;\n const positionBeforeId = getPositionBeforeId();\n onDragAndDrop(sourceItem.id, parentId, positionBeforeId);\n }\n : undefined;\n\n const handleEditableSave = onEditableSave\n ? (targetItemId: string, value: string) => {\n onEditableSave(targetItemId, value);\n }\n : undefined;\n\n const handleNodeExpand = onNodeExpand\n ? (itemId: string) => {\n onNodeExpand(itemId);\n }\n : undefined;\n\n const downKeyHandler = (event: KeyboardEvent) => {\n if (event.key === 'Meta' || event.ctrlKey) {\n setMultiSelectMode(true);\n } else {\n setMultiSelectMode(false);\n }\n };\n\n const upKeyHandler = (event: KeyboardEvent) => {\n if (event.key === 'Meta' || event.ctrlKey) {\n setMultiSelectMode(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', downKeyHandler);\n window.addEventListener('keyup', upKeyHandler);\n\n return () => {\n window.removeEventListener('keydown', downKeyHandler);\n window.removeEventListener('keyup', upKeyHandler);\n };\n }, []);\n\n return (\n <ul\n id={treeId}\n data-test-id=\"tree\"\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left tw-text-sm tw-select-none\"\n >\n <DndWrapper id={treeId}>\n {renderNodeArray({\n nodes: treeNodes,\n treeId,\n activeIds,\n onClick: onNodeClick,\n onDrop: handleDrop,\n onEditableSave: handleEditableSave,\n onNodeExpand: handleNodeExpand,\n })}\n </DndWrapper>\n </ul>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -21,6 +21,7 @@ export * from './FormControl';
|
|
|
21
21
|
export * from './FrontifyPattern';
|
|
22
22
|
export * from './InputLabel';
|
|
23
23
|
export * from './LinkChooser';
|
|
24
|
+
export * from './LoadingBar';
|
|
24
25
|
export * from './LoadingCircle';
|
|
25
26
|
export * from './MenuItem';
|
|
26
27
|
export * from './Modal';
|
|
@@ -42,3 +43,4 @@ export * from './TooltipIcon';
|
|
|
42
43
|
export * from './Tree';
|
|
43
44
|
export * from './Trigger';
|
|
44
45
|
export * from './EditableText';
|
|
46
|
+
export * from './OverflowMenu';
|