@frontify/fondue 12.0.0-beta.188 → 12.0.0-beta.189
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/Tree/TreeItem/TreeItem.es.js +1 -1
- package/dist/components/Tree/TreeItem/TreeItem.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -156,7 +156,7 @@ const Vt = ({ isSorting: a, wasDragging: C }) => !(a || C), Yt = ({
|
|
|
156
156
|
className: It,
|
|
157
157
|
animate: m ? Tt : void 0
|
|
158
158
|
},
|
|
159
|
-
St ? /* @__PURE__ */ w.createElement(Ft, { ref: ht, active: g, ...pt, ...mt }) : /* @__PURE__ */ w.createElement("div", { className: "tw-w-
|
|
159
|
+
St ? /* @__PURE__ */ w.createElement(Ft, { ref: ht, active: g, ...pt, ...mt }) : /* @__PURE__ */ w.createElement("div", { className: "tw-w-5 tw-ml-2 tw-min-w-[20px]" }),
|
|
160
160
|
/* @__PURE__ */ w.createElement(
|
|
161
161
|
Ht,
|
|
162
162
|
{
|
|
@@ -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, useCallback, useLayoutEffect, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport { AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport { useDndContext, useDndMonitor } from '@dnd-kit/core';\nimport { noop } from 'lodash-es';\n\nimport { merge } from '@utilities/merge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\n\nimport type { CollisionPosition, TreeDragEndEvent, TreeDragStartEvent, TreeItemProps } from '@components/Tree/types';\nimport { useTreeContext } from '@components/Tree/TreeContext';\n\nimport { DragHandle } from './DragHandle';\nimport { removeFragmentsAndEnrichChildren } from '../utils';\nimport { ExpandButton } from './ExpandButton';\nimport { INDENTATION_WIDTH, ROOT_ID } from '../Tree';\nimport { getItemPositionInParent } from '../helpers';\n\nconst animateLayoutChanges: AnimateLayoutChanges = ({ isSorting, wasDragging }) =>\n isSorting || wasDragging ? false : true;\n\nexport const TreeItem = ({\n id,\n type,\n label,\n onDrop,\n accepts,\n children,\n parentId,\n level = 0,\n contentComponent,\n draggable: itemDraggable = true,\n 'data-test-id': dataTestId = 'fondue-tree-item',\n}: TreeItemProps) => {\n const {\n onExpand,\n onSelect,\n treeState,\n registerOverlay,\n registerNodeChildren,\n unregisterNodeChildren,\n draggable: treeDraggable,\n } = useTreeContext();\n\n const { active, over } = useDndContext();\n\n const draggable = treeDraggable && itemDraggable;\n\n const isActive = active?.id === id;\n\n const activeIndex = treeState.nodes.findIndex(({ props }) => props.id === active?.id);\n const overIndex = treeState.nodes.findIndex(({ props }) => props.id === over?.id);\n\n const movingDown = activeIndex < overIndex;\n const movingUp = !movingDown;\n\n const projection = useMemo(() => {\n return isActive ? treeState.projection : null;\n }, [isActive, treeState.projection]);\n\n const projectionNode = useMemo(() => {\n return treeState.nodes.find(({ props }) => props.id === projection?.parentId);\n }, [projection?.parentId, treeState.nodes]);\n\n const isWithin = useMemo(() => {\n return projection !== null && over !== null && projection.depth > over.data.current?.level;\n }, [projection, over]);\n\n const canDrop =\n isActive &&\n !isWithin &&\n active.data.current &&\n over?.data.current?.accepts !== undefined &&\n over.data.current.accepts.includes(active.data.current.type);\n\n // Moving down the tree\n let canDropWithinMovingDown =\n movingDown &&\n isActive &&\n isWithin &&\n active.data.current &&\n over?.data.current?.accepts !== undefined &&\n projection?.depth !== projection?.minDepth &&\n over.data.current.accepts.includes(`${active.data.current.type}-within`);\n\n // Moving up the tree\n let canDropWithinMovingUp =\n movingUp &&\n isActive &&\n isWithin &&\n active.data.current &&\n projection &&\n projectionNode?.props.accepts &&\n projectionNode.props.accepts.includes(`${active.data.current.type}-within`);\n\n const handleItemDragEnd = (event: TreeDragEndEvent) => {\n const { over, active } = event;\n\n if (active.id === over?.id && projection?.depth === projection?.minDepth) {\n return;\n }\n\n if (movingUp) {\n canDropWithinMovingDown = false;\n }\n\n if (movingDown) {\n canDropWithinMovingUp = false;\n }\n\n if (isActive && over && (canDrop || canDropWithinMovingDown || canDropWithinMovingUp)) {\n const sortOver = getItemPositionInParent(\n { id: over.id, parentId: over.data?.current?.parentId },\n treeState.nodes,\n );\n\n const sortActive = getItemPositionInParent(\n { id: active.id, parentId: active.data?.current?.parentId },\n treeState.nodes,\n );\n\n let position: CollisionPosition = null;\n if (canDrop) {\n position = 'after';\n } else if (canDropWithinMovingDown || canDropWithinMovingUp) {\n position = 'within';\n }\n\n onDrop?.(\n {\n id: canDropWithinMovingUp ? projection?.parentId?.toString() ?? 'ID not found' : over.id.toString(),\n type: canDropWithinMovingUp ? projectionNode?.props.type : over?.data?.current?.type,\n sort: sortOver + 1,\n },\n { id: active.id.toString(), type: active.data?.current?.type, sort: sortActive + 1 },\n position,\n movingUp ? 'up' : 'down',\n );\n }\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 useDndMonitor({\n onDragEnd: handleItemDragEnd,\n onDragStart: handleItemDragStart,\n });\n\n const isSelected = treeState.selectedIds.has(id);\n const isExpanded = treeState.expandedIds.has(id);\n\n const isParentRoot = parentId === ROOT_ID;\n const isParentActive = parentId && active?.id === parentId;\n const isParentExpanded = isParentRoot || (parentId && treeState.expandedIds.has(parentId));\n const isAncestorMounted = isParentRoot || (parentId && treeState.nodes.some((node) => node.props.id === parentId));\n\n const hasChildren = Children.count(children) > 0;\n\n const enrichedChildren = useMemo(\n () => removeFragmentsAndEnrichChildren(children, { parentId: id, level: level + 1 }),\n [children, id, level],\n );\n\n const childrenIds = useMemo(() => enrichedChildren.map((child) => child.props.id), [enrichedChildren]);\n\n const { attributes, listeners, transform, setDraggableNodeRef, setDroppableNodeRef, setActivatorNodeRef } =\n useSortable({\n id,\n disabled: !draggable,\n data: { type, accepts, parentId, level },\n animateLayoutChanges,\n transition: null,\n });\n\n useLayoutEffect(() => {\n if (Children.count(enrichedChildren) === 0) {\n return;\n }\n\n if (!isAncestorMounted || !isParentExpanded || isActive || isParentActive) {\n unregisterNodeChildren(enrichedChildren);\n return;\n }\n\n if (isExpanded) {\n registerNodeChildren({ id: enrichedChildren[0].props.parentId, children: enrichedChildren });\n } else {\n unregisterNodeChildren(enrichedChildren);\n }\n }, [\n isActive,\n isExpanded,\n isParentActive,\n isParentExpanded,\n isAncestorMounted,\n enrichedChildren,\n registerNodeChildren,\n unregisterNodeChildren,\n ]);\n\n const handleSelect = useCallback(\n (event: MouseEvent<HTMLElement, globalThis.MouseEvent>) => {\n event.stopPropagation();\n\n onSelect(id);\n },\n [id, onSelect],\n );\n\n const handleExpand = (event: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n event.stopPropagation();\n\n onExpand(id);\n };\n\n const liClassName = useMemo(\n () =>\n merge([\n FOCUS_VISIBLE_STYLE,\n !isActive && !isSelected && 'focus-within:tw-bg-box-neutral',\n 'tw-outline-none tw-ring-inset tw-group tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n isSelected\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 ]),\n [isActive, isSelected],\n );\n\n const containerClassName = merge([\n 'tw-flex tw-items-center tw-h-10 tw-leading-5 tw-width-full',\n isActive && 'tw-border-box-selected-strong tw-border-dashed tw-border-2 tw-bg-box-selected-hover',\n isActive &&\n ((isWithin && !((movingDown && canDropWithinMovingDown) || (movingUp && canDropWithinMovingUp))) ||\n (!isWithin && !canDrop)) &&\n 'tw-bg-box-negative-hover tw-border-box-negative-strong-hover tw-border-dashed tw-border-2',\n ]);\n\n const depthPadding = projection?.depth ? projection.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 = hasChildren && !isActive;\n\n const animate = {\n x: transform?.x,\n y: transform?.y,\n };\n\n return (\n <li\n key={id}\n tabIndex={0}\n role=\"treeitem\"\n style={liStyle}\n id={id.toString()}\n aria-label={label}\n aria-level={level}\n onClick={handleSelect}\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 onKeyDown={noop}\n >\n <motion.div\n transition={{\n bounce: 0,\n delay: 0,\n duration: 0,\n }}\n ref={setDraggableNodeRef}\n className={containerClassName}\n animate={transform ? animate : undefined}\n >\n {showDragHandle ? (\n <DragHandle ref={setActivatorNodeRef} active={isSelected} {...listeners} {...attributes} />\n ) : (\n <div className=\"tw-w-6 tw-min-w-[24px]\" />\n )}\n\n <ExpandButton\n onClick={handleExpand}\n expanded={showChildren}\n disabled={!showExpandButton}\n active={isSelected}\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 ) : null}\n\n {showContent && contentComponent}\n </motion.div>\n </li>\n );\n};\n\nTreeItem.displayName = 'FondueTreeItem';\n"],"names":["animateLayoutChanges","isSorting","wasDragging","TreeItem","id","type","label","onDrop","accepts","children","parentId","level","contentComponent","itemDraggable","dataTestId","onExpand","onSelect","treeState","registerOverlay","registerNodeChildren","unregisterNodeChildren","treeDraggable","useTreeContext","active","over","useDndContext","draggable","isActive","activeIndex","props","overIndex","movingDown","movingUp","projection","useMemo","projectionNode","isWithin","_a","canDrop","canDropWithinMovingDown","_b","canDropWithinMovingUp","handleItemDragEnd","event","sortOver","getItemPositionInParent","sortActive","position","_e","handleItemDragStart","useCallback","useDndMonitor","isSelected","isExpanded","isParentRoot","ROOT_ID","isParentActive","isParentExpanded","isAncestorMounted","node","hasChildren","Children","enrichedChildren","removeFragmentsAndEnrichChildren","childrenIds","child","attributes","listeners","transform","setDraggableNodeRef","setDroppableNodeRef","setActivatorNodeRef","useSortable","useLayoutEffect","handleSelect","handleExpand","liClassName","merge","FOCUS_VISIBLE_STYLE","containerClassName","depthPadding","INDENTATION_WIDTH","levelPadding","liStyle","showContent","showChildren","showDragHandle","showLabel","showExpandButton","animate","React","noop","motion","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, useCallback, useLayoutEffect, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport { AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport { useDndContext, useDndMonitor } from '@dnd-kit/core';\nimport { noop } from 'lodash-es';\n\nimport { merge } from '@utilities/merge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\n\nimport type { CollisionPosition, TreeDragEndEvent, TreeDragStartEvent, TreeItemProps } from '@components/Tree/types';\nimport { useTreeContext } from '@components/Tree/TreeContext';\n\nimport { DragHandle } from './DragHandle';\nimport { removeFragmentsAndEnrichChildren } from '../utils';\nimport { ExpandButton } from './ExpandButton';\nimport { INDENTATION_WIDTH, ROOT_ID } from '../Tree';\nimport { getItemPositionInParent } from '../helpers';\n\nconst animateLayoutChanges: AnimateLayoutChanges = ({ isSorting, wasDragging }) =>\n isSorting || wasDragging ? false : true;\n\nexport const TreeItem = ({\n id,\n type,\n label,\n onDrop,\n accepts,\n children,\n parentId,\n level = 0,\n contentComponent,\n draggable: itemDraggable = true,\n 'data-test-id': dataTestId = 'fondue-tree-item',\n}: TreeItemProps) => {\n const {\n onExpand,\n onSelect,\n treeState,\n registerOverlay,\n registerNodeChildren,\n unregisterNodeChildren,\n draggable: treeDraggable,\n } = useTreeContext();\n\n const { active, over } = useDndContext();\n\n const draggable = treeDraggable && itemDraggable;\n\n const isActive = active?.id === id;\n\n const activeIndex = treeState.nodes.findIndex(({ props }) => props.id === active?.id);\n const overIndex = treeState.nodes.findIndex(({ props }) => props.id === over?.id);\n\n const movingDown = activeIndex < overIndex;\n const movingUp = !movingDown;\n\n const projection = useMemo(() => {\n return isActive ? treeState.projection : null;\n }, [isActive, treeState.projection]);\n\n const projectionNode = useMemo(() => {\n return treeState.nodes.find(({ props }) => props.id === projection?.parentId);\n }, [projection?.parentId, treeState.nodes]);\n\n const isWithin = useMemo(() => {\n return projection !== null && over !== null && projection.depth > over.data.current?.level;\n }, [projection, over]);\n\n const canDrop =\n isActive &&\n !isWithin &&\n active.data.current &&\n over?.data.current?.accepts !== undefined &&\n over.data.current.accepts.includes(active.data.current.type);\n\n // Moving down the tree\n let canDropWithinMovingDown =\n movingDown &&\n isActive &&\n isWithin &&\n active.data.current &&\n over?.data.current?.accepts !== undefined &&\n projection?.depth !== projection?.minDepth &&\n over.data.current.accepts.includes(`${active.data.current.type}-within`);\n\n // Moving up the tree\n let canDropWithinMovingUp =\n movingUp &&\n isActive &&\n isWithin &&\n active.data.current &&\n projection &&\n projectionNode?.props.accepts &&\n projectionNode.props.accepts.includes(`${active.data.current.type}-within`);\n\n const handleItemDragEnd = (event: TreeDragEndEvent) => {\n const { over, active } = event;\n\n if (active.id === over?.id && projection?.depth === projection?.minDepth) {\n return;\n }\n\n if (movingUp) {\n canDropWithinMovingDown = false;\n }\n\n if (movingDown) {\n canDropWithinMovingUp = false;\n }\n\n if (isActive && over && (canDrop || canDropWithinMovingDown || canDropWithinMovingUp)) {\n const sortOver = getItemPositionInParent(\n { id: over.id, parentId: over.data?.current?.parentId },\n treeState.nodes,\n );\n\n const sortActive = getItemPositionInParent(\n { id: active.id, parentId: active.data?.current?.parentId },\n treeState.nodes,\n );\n\n let position: CollisionPosition = null;\n if (canDrop) {\n position = 'after';\n } else if (canDropWithinMovingDown || canDropWithinMovingUp) {\n position = 'within';\n }\n\n onDrop?.(\n {\n id: canDropWithinMovingUp ? projection?.parentId?.toString() ?? 'ID not found' : over.id.toString(),\n type: canDropWithinMovingUp ? projectionNode?.props.type : over?.data?.current?.type,\n sort: sortOver + 1,\n },\n { id: active.id.toString(), type: active.data?.current?.type, sort: sortActive + 1 },\n position,\n movingUp ? 'up' : 'down',\n );\n }\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 useDndMonitor({\n onDragEnd: handleItemDragEnd,\n onDragStart: handleItemDragStart,\n });\n\n const isSelected = treeState.selectedIds.has(id);\n const isExpanded = treeState.expandedIds.has(id);\n\n const isParentRoot = parentId === ROOT_ID;\n const isParentActive = parentId && active?.id === parentId;\n const isParentExpanded = isParentRoot || (parentId && treeState.expandedIds.has(parentId));\n const isAncestorMounted = isParentRoot || (parentId && treeState.nodes.some((node) => node.props.id === parentId));\n\n const hasChildren = Children.count(children) > 0;\n\n const enrichedChildren = useMemo(\n () => removeFragmentsAndEnrichChildren(children, { parentId: id, level: level + 1 }),\n [children, id, level],\n );\n\n const childrenIds = useMemo(() => enrichedChildren.map((child) => child.props.id), [enrichedChildren]);\n\n const { attributes, listeners, transform, setDraggableNodeRef, setDroppableNodeRef, setActivatorNodeRef } =\n useSortable({\n id,\n disabled: !draggable,\n data: { type, accepts, parentId, level },\n animateLayoutChanges,\n transition: null,\n });\n\n useLayoutEffect(() => {\n if (Children.count(enrichedChildren) === 0) {\n return;\n }\n\n if (!isAncestorMounted || !isParentExpanded || isActive || isParentActive) {\n unregisterNodeChildren(enrichedChildren);\n return;\n }\n\n if (isExpanded) {\n registerNodeChildren({ id: enrichedChildren[0].props.parentId, children: enrichedChildren });\n } else {\n unregisterNodeChildren(enrichedChildren);\n }\n }, [\n isActive,\n isExpanded,\n isParentActive,\n isParentExpanded,\n isAncestorMounted,\n enrichedChildren,\n registerNodeChildren,\n unregisterNodeChildren,\n ]);\n\n const handleSelect = useCallback(\n (event: MouseEvent<HTMLElement, globalThis.MouseEvent>) => {\n event.stopPropagation();\n\n onSelect(id);\n },\n [id, onSelect],\n );\n\n const handleExpand = (event: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>) => {\n event.stopPropagation();\n\n onExpand(id);\n };\n\n const liClassName = useMemo(\n () =>\n merge([\n FOCUS_VISIBLE_STYLE,\n !isActive && !isSelected && 'focus-within:tw-bg-box-neutral',\n 'tw-outline-none tw-ring-inset tw-group tw-px-2.5 tw-no-underline tw-leading-5 tw-h-10',\n isSelected\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 ]),\n [isActive, isSelected],\n );\n\n const containerClassName = merge([\n 'tw-flex tw-items-center tw-h-10 tw-leading-5 tw-width-full',\n isActive && 'tw-border-box-selected-strong tw-border-dashed tw-border-2 tw-bg-box-selected-hover',\n isActive &&\n ((isWithin && !((movingDown && canDropWithinMovingDown) || (movingUp && canDropWithinMovingUp))) ||\n (!isWithin && !canDrop)) &&\n 'tw-bg-box-negative-hover tw-border-box-negative-strong-hover tw-border-dashed tw-border-2',\n ]);\n\n const depthPadding = projection?.depth ? projection.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 = hasChildren && !isActive;\n\n const animate = {\n x: transform?.x,\n y: transform?.y,\n };\n\n return (\n <li\n key={id}\n tabIndex={0}\n role=\"treeitem\"\n style={liStyle}\n id={id.toString()}\n aria-label={label}\n aria-level={level}\n onClick={handleSelect}\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 onKeyDown={noop}\n >\n <motion.div\n transition={{\n bounce: 0,\n delay: 0,\n duration: 0,\n }}\n ref={setDraggableNodeRef}\n className={containerClassName}\n animate={transform ? animate : undefined}\n >\n {showDragHandle ? (\n <DragHandle ref={setActivatorNodeRef} active={isSelected} {...listeners} {...attributes} />\n ) : (\n <div className=\"tw-w-5 tw-ml-2 tw-min-w-[20px]\" />\n )}\n\n <ExpandButton\n onClick={handleExpand}\n expanded={showChildren}\n disabled={!showExpandButton}\n active={isSelected}\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 ) : null}\n\n {showContent && contentComponent}\n </motion.div>\n </li>\n );\n};\n\nTreeItem.displayName = 'FondueTreeItem';\n"],"names":["animateLayoutChanges","isSorting","wasDragging","TreeItem","id","type","label","onDrop","accepts","children","parentId","level","contentComponent","itemDraggable","dataTestId","onExpand","onSelect","treeState","registerOverlay","registerNodeChildren","unregisterNodeChildren","treeDraggable","useTreeContext","active","over","useDndContext","draggable","isActive","activeIndex","props","overIndex","movingDown","movingUp","projection","useMemo","projectionNode","isWithin","_a","canDrop","canDropWithinMovingDown","_b","canDropWithinMovingUp","handleItemDragEnd","event","sortOver","getItemPositionInParent","sortActive","position","_e","handleItemDragStart","useCallback","useDndMonitor","isSelected","isExpanded","isParentRoot","ROOT_ID","isParentActive","isParentExpanded","isAncestorMounted","node","hasChildren","Children","enrichedChildren","removeFragmentsAndEnrichChildren","childrenIds","child","attributes","listeners","transform","setDraggableNodeRef","setDroppableNodeRef","setActivatorNodeRef","useSortable","useLayoutEffect","handleSelect","handleExpand","liClassName","merge","FOCUS_VISIBLE_STYLE","containerClassName","depthPadding","INDENTATION_WIDTH","levelPadding","liStyle","showContent","showChildren","showDragHandle","showLabel","showExpandButton","animate","React","noop","motion","DragHandle","ExpandButton"],"mappings":"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"}
|