@sanity/hierarchical-document-list
3.0.63.0.7
~
Modified (5 files)
Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -129,11 +129,12 @@
_updatedAt,
}`;
(async function() {
try {
+ let items = await client.fetch(query, params);
dispatch({
type: "setInitialData",
- items: await client.fetch(query, params)
+ items
}), setStatus("success");
} catch {
setStatus("error");
}
@@ -637,9 +638,9 @@
const Root = styled.div.withConfig({
displayName: "Root",
componentId: "sc-nz5z4c-0"
})`&[data-landing='true'] > *,&[data-cancel='true'] > *{opacity:0 !important;}&[data-landing='true']::before,&[data-cancel='true']::before{background-color:${cyan[50].hex};border:2px dashed ${gray[400].hex};border-radius:3px;content:'';position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;}&[data-cancel='true']::before{background-color:${red[50].hex};}`, NodeContentRenderer = (props) => {
- let $ = c(40), { node, path, treeIndex, canDrag: t0, canDrop, connectDragSource, connectDragPreview, toggleChildrenVisibility, draggedNode, didDrop, isDragging } = props, canDrag = t0 === void 0 ? !1 : t0, nodeTitle = node.title, t1;
+ let $ = c(40), { node, path, treeIndex, canDrag: t0, canDrop, connectDragSource, connectDragPreview, toggleChildrenVisibility, draggedNode, didDrop, isDragging } = props, canDrag = t0 !== void 0 && t0, nodeTitle = node.title, t1;
bb0: {
if (!canDrag) {
t1 = null;
break bb0;
@@ -874,9 +875,10 @@
localTree
}, $[3] = localTree, $[4] = props.onChange, $[5] = props.patchPrefix, $[6] = t1) : t1 = $[6];
let operations = useTreeOperationsProvider(t1), [context, setContext] = useState(null), [treeViewHeight, setTreeViewHeight] = useState(""), documentId = props.options.documentId, t2;
$[7] !== documentId || $[8] !== localTree ? (t2 = () => {
- setTreeViewHeight(getTreeHeight(localTree, document.querySelector(`#${documentId} [data-tree-row]`)?.offsetHeight || 51));
+ let rowHeight = document.querySelector(`#${documentId} [data-tree-row]`)?.offsetHeight || 51;
+ setTreeViewHeight(getTreeHeight(localTree, rowHeight));
}, $[7] = documentId, $[8] = localTree, $[9] = t2) : t2 = $[9];
let updateTreeViewHeight = t2, t3, t4;
$[10] === updateTreeViewHeight ? (t3 = $[11], t4 = $[12]) : (t3 = () => {
let timeout = setTimeout(updateTreeViewHeight);
@@ -1094,9 +1096,10 @@
}
const EMPTY_PATH = [], TreeInputComponent = (props) => {
let $ = c(14), documentType = props.type.options.documentType || "hierarchy.tree", { onChange: onFieldChange } = props, t0;
$[0] !== documentType || $[1] !== onFieldChange ? (t0 = (patch) => {
- onFieldChange(new PatchEvent(injectNodeTypeInPatches(patch?.patches, documentType)));
+ let patches = injectNodeTypeInPatches(patch?.patches, documentType);
+ onFieldChange(new PatchEvent(patches));
}, $[0] = documentType, $[1] = onFieldChange, $[2] = t0) : t0 = $[2];
let onChange = t0, t1;
$[3] === props.value ? t1 = $[4] : (t1 = props.value || [], $[3] = props.value, $[4] = t1);
let t2; Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "@sanity/hierarchical-document-list",
- "version": "3.0.6",
+ "version": "3.0.7",
"description": "Sanity Plugin - Hierarchical Document List",
"keywords": [
"sanity",
"sanity-plugin"
@@ -30,24 +30,24 @@
"@nosferatu500/react-sortable-tree": "^5.0.0",
"@sanity/color": "^3.0.6",
"@sanity/icons": "^5.0.0",
"@sanity/mutator": "^6.3.0",
- "@sanity/ui": "^3.3.0",
+ "@sanity/ui": "^3.3.5",
"@sanity/util": "^6.3.0",
"react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1"
},
"devDependencies": {
"@sanity/tsconfig": "^2.2.0",
- "@sanity/tsdown-config": "^0.11.0",
+ "@sanity/tsdown-config": "^0.13.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"babel-plugin-react-compiler": "^1.0.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"sanity": "^6.3.0",
"styled-components": "^6.4.3",
- "tsdown": "^0.22.3"
+ "tsdown": "^0.22.5"
},
"peerDependencies": {
"react": "^19.2",
"react-dom": "^19.2", Index: package/dist/index.d.ts.map
===================================================================
--- package/dist/index.d.ts.map
+++ package/dist/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/injectNodeTypeInPatches.ts","../src/types.ts","../src/createDeskHierarchy.tsx","../src/createHierarchicalSchemas.tsx","../src/schemas/hierarchy.tree.ts","../src/utils/flatDataToTree.ts","../src/index.ts"],"mappings":";;cAsBa,kBAAA;AAAA,cACA,wBAAA;AAAA,UClBH,eAAA;EACR,KAAA;EACA,IAAA;EACA,KAAA;AAAA;ADc2E;AAC7E;;AAD6E,UCR5D,cAAA;EACf,IAAA;EACA,KAAA,SAAc,kBAAA;EACd,KAAA;IACE,KAAA,SAAc,wBAAA;IACd,SAAA,GAAY,eAAA;IACZ,OAAA;EAAA;EAdF;;;EAmBA,MAAA;AAAA;AAAA,UAgCe,gBAAA;EAkBb;;;;EAbF,WAAA;EA2BY;AAUd;;EAhCE,gBAAA;IAgC8D;;;IA5B5D,MAAA;IAuCgB;AAAA;;IAnChB,YAAA,GAAe,MAAM;EAAA;;;;EAMvB,QAAA;EChEA;;;;;AAac;ED2Dd,YAAA;AAAA;AAAA,UAUe,sBAAA,SAA+B,gBAAgB;EErF3D;;;EFyFH,UAAA;EEzF8C;AAAA;;;;EFgG9C,kBAAA;AAAA;AAAA,UCvGe,SAAA,SAAkB,sBAAsB;;;AFezD;;EEVE,KAAA;EFU2E;AAAA;AAC7E;EENE,IAAA;;;AFMsF;EEDtF,OAAA;EDjBQ;;;ECqBR,CAAA;EDpBA;;;ECwBA,cAAA;AAAA;AAAA,iBAesB,mBAAA,CAAoB,KAAgB,EAAT,SAAS;AAAA,KC/BvD,aAAA,GAAgB,IAAI,CAAC,sBAAA;AAAA,iBA2HF,yBAAA,CAA0B,OAAA,EAAS,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBApDzC,EAAA;;;;IAsCZ,MAAA;MACE,EAAA;MACA,IAAA;IAAA;IAEF,OAAA;MAAO,EAAA;MAAA;IAAA;MAAc,EAAA;MAAY,IAAA;IAAA,IAAmB,MAAA;EAAA;AAAA;AAAA;;;;;;UE7HhD,oBAAA,SAA6B,cAAc;EAAA,CAElD,GAAA;EACD,QAAA,GAAW,oBAAA;AAAA;;;;ALiBgE;iBKVrD,cAAA,CAAe,IAAA,EAAM,cAAA,KAAmB,oBAAoB;;;ALUP;AAC7E;;;;AAAwF;;ACpBS;;;;cKqBpF,wBAAA,mBAAwB,MAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/injectNodeTypeInPatches.ts","../src/types.ts","../src/createDeskHierarchy.tsx","../src/createHierarchicalSchemas.tsx","../src/schemas/hierarchy.tree.ts","../src/utils/flatDataToTree.ts","../src/index.ts"],"mappings":";;;cAsBa;cACA;UClBH;EACR;EACA;EACA;;;;;UAMe;EACf;EACA,cAAc;EACd;IACE,cAAc;IACd,YAAY;IACZ;;;;;EAKF;;UAgCe;;;;;EAKf;;;;EAKA;;;;IAIE;;;;IAIA,eAAe;;;;;EAMjB;;;;;;;EAQA;;UAUe,+BAA+B;;;;EAI9C;;;;;;EAOA;;UCvGe,kBAAkB;;;;;EAKjC;;;;EAKA;;;;EAKA;;;;EAIA;;;;EAIA;;iBAesB,oBAAoB,OAAO;KC/B9C,gBAAgB,KAAK;iBA2HF,0BAA0B,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBApDzC;;;;IAsCZ;MACE;MACA;;IAEF,UAAO,IAAA;MAAc;MAAY;QAAmB;;;;;;;;;UE7HhD,6BAA6B;GAEpC;EACD,WAAW;;;;;;iBAOW,eAAe,MAAM,mBAAmB;;;;;;;;;;;;;;cCYnD,2CAAwB"}
\ No newline at end of file Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["Box","Card","Container","Heading","Stack","Text","Fragment","PropsWithChildren","WrapCodeBlocks","t0","$","_c","text","t1","split","map","_temp","t2","DeskWarning","props","Symbol","for","maxWidth","title","subtitle","_temp2","t3","children","t4","part","i","line","unprefixId","_id","replace","isDraft","startsWith","useEffect","useReducer","useState","SanityDocument","useClient","AllItems","TreeInputOptions","isDraft","unprefixId","getDeskFilter","referenceTo","referenceOptions","filter","params","Record","filterParts","push","join","filterParams","docTypes","map","schemaType","Status","ACTIONTYPE","type","item","itemId","items","updateItemInState","state","newState","publishedId","_id","allItemsReducer","action","published","draft","reduce","useAllItems","options","$","_c","t0","Symbol","for","apiVersion","client","status","setStatus","t1","allItems","dispatch","t2","t3","handleListener","event","result","documentId","query","fetchInitialData","fetch","listener","listen","subscribe","unsubscribe","t4","createContext","useContext","useAllItems","useTreeOperationsProvider","ContextValue","ReturnType","allItemsStatus","placeholder","TreeOperationsContext","addItem","duplicateItem","removeItem","handleMovedNode","moveItemDown","moveItemUp","useTreeOperations","EditIcon","PublishIcon","Box","Inline","Text","Tooltip","SanityDocument","TextWithTone","useRelativeTime","DocumentPair","TimeAgo","t0","$","_c","time","timeAgo","t1","toLowerCase","trim","startsWith","t2","PublishedStatus","document","_updatedAt","t3","t4","Symbol","for","t5","t6","DraftStatus","DocumentPreviewStatus","draft","published","HelpCircleIcon","Box","Card","Flex","Stack","Text","Tooltip","ReactNode","useMemo","Preview","SanityDocument","SchemaType","TextWithTone","useSchema","RouterPaneGroup","usePaneRouter","useTreeOperations","LocalTreeItem","DocumentPreviewStatus","DocumentInNode","props","$","_c","value","t0","draftId","publishedId","item","t1","undefined","reference","docType","referenceId","_ref","routerPanesState","ChildLink","allItemsStatus","schema","t2","t3","pane","some","group","id","isActive","get","type","t4","Symbol","for","flex","t5","draftUpdatedAt","publishedUpdatedAt","_id","_type","_updatedAt","t6","action","CopyIcon","EllipsisVerticalIcon","LaunchIcon","RemoveCircleIcon","Button","Menu","MenuButton","MenuDivider","MenuItem","IntentButton","IntentLink","useTreeOperations","NodeProps","NodeActions","t0","$","_c","nodeProps","operations","node","t1","value","reference","docType","referenceId","_ref","isValid","publishedId","t2","Symbol","for","t3","_key","t4","removeItem","t5","t6","duplicateItem","t7","t8","t9","t10","id","type","t11","t12","t13","portal","tone","placement","t14","StoredTreeItem","TreeItemWithChildren","key","children","flatDataToTree","data","childrenByParent","Map","item","parentKey","parent","siblings","get","push","set","buildNode","_key","map","getSchemaTypeName","documentType","type","DEFAULT_DOC_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","INTERNAL_NODE_ARRAY_TYPE","injectNodeTypeInPatches","patchData","Array","isArray","map","child","newObject","Record","key","Object","keys","value","includes","randomKey","DocumentInNode","NodeActions","AllItems","DocumentPair","EnhancedTreeItem","LocalTreeItem","NodeProps","StoredTreeItem","VisibilityMap","flatDataToTree","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","dataToEditorTree","tree","allItems","visibilityMap","itemsWithTitle","filter","item","value","reference","_ref","map","refId","docPair","undefined","draftDoc","draft","publishedDoc","published","enhancedItem","_key","_type","parent","expanded","draftId","_id","publishedId","draftUpdatedAt","_updatedAt","publishedUpdatedAt","Object","assign","title","nodeProps","children","documentPairToNode","doc","_weak","docType","getUnaddedItems","data","values","flatMap","documentPair","node","entries","some","treeItem","normalizeNodeForStorage","useState","AllItems","LocalTreeItem","StoredTreeItem","VisibilityMap","dataToEditorTree","useLocalTree","t0","$","_c","tree","allItems","t1","Symbol","for","visibilityMap","setVisibilityMap","t2","handleVisibilityToggle","data","currentMap","node","_key","expanded","t3","t4","localTree","LocalTreeItem","LocalFlatDataItem","getAdjescentNodes","flatTree","node","treeIndex","leadingNode","followingNode","isOutsideOfNode","item","path","includes","_key","slice","reverse","find","moveItemInArray","array","fromIndex","toIndex","ItemType","newArray","target","splice","undefined","FlatDataItem","TreeItem","getFlatDataFromTree","randomKey","Patch","LocalTreeItem","NodeProps","getAdjescentNodes","moveItemInArray","normalizeNodeForStorage","LocalFlatDataItem","Omit","node","parentNode","HandleMovedNodeData","treeData","nextParentNode","nextPath","nextTreeIndex","HandleMovedNode","moveData","getLocalFlatDataFromTree","getNodeKey","t","getAddItemPatch","item","normalizedNode","insert","getDuplicateItemPatch","nodeProps","newItem","_key","getRemoveItemPatch","Pick","keyPath","children","getChildrenPaths","unset","map","path","getMovedNodePatch","data","Array","isArray","nextFlatTree","leadingNode","followingNode","flatTree","treeIndex","set","keyPaths","child","childKey","push","getMoveItemPatch","localTree","direction","array","fromIndex","toIndex","nodeToInheritParent","PatchEvent","PathSegment","prefixPath","setIfMissing","LocalTreeItem","NodeProps","HandleMovedNode","HandleMovedNodeData","getAddItemPatch","getDuplicateItemPatch","getMoveItemPatch","getMovedNodePatch","getRemoveItemPatch","useTreeOperationsProvider","props","patchPrefix","onChange","patch","localTree","handleMovedNode","addItem","item","duplicateItem","nodeProps","removeItem","moveItemUp","moveItemDown","runPatches","patches","finalPatches","prefix","patchEvent","from","map","data","direction","isDescendant","cyan","gray","red","ChevronDownIcon","ChevronRightIcon","DragHandleIcon","Box","Button","Flex","Spinner","useMemo","styled","Root","div","hex","NodeContentRenderer","props","$","_c","node","path","treeIndex","canDrag","t0","canDrop","connectDragSource","connectDragPreview","toggleChildrenVisibility","draggedNode","didDrop","isDragging","undefined","nodeTitle","title","t1","bb0","children","expanded","t2","Symbol","for","publishedId","t3","cursor","fontSize","t4","t5","marginBottom","t6","button","t7","Handle","isDraggedDescendant","isLandingPadActive","position","length","left","top","transform","opacity","t8","t9","t10","t11","Box","Card","CardTone","Stack","Text","ReactNode","PlaceholderDropzoneProps","title","subtitle","isOver","canDrop","children","PlaceholderDropzone","props","$","_c","isValid","isInvalid","tone","t0","undefined","t1","borderStyle","t2","Symbol","for","textAlign","t3","t4","t5","t6","t7","t8","t9","blue","ReactNode","createGlobalStyle","ScaffoldStyles","hex","TreeNodeRendererScaffold","props","$","_c","lowerSiblingCounts","scaffoldBlockPxWidth","listIndex","swapDepth","swapFrom","swapLength","treeIndex","t0","t1","lowerSiblingCount","i","highlightLineClass","style","width","left","map","scaffold","Symbol","for","t2","Children","ReactElement","cloneElement","TreeNodeRendererScaffold","BASE_LEFT_PADDING","NESTING_PADDING","TreeNodeRenderer","props","$","_c","children","lowerSiblingCounts","connectDropTarget","isOver","draggedNode","canDrop","scaffoldBlockCount","length","t0","style","t1","t2","paddingLeft","t3","t4","child","map","t5","t6","SortableTree","ComponentProps","NodeContentRenderer","PlaceholderDropzone","TreeNodeRenderer","ReactSortableTreeProps","getCommonTreeProps","placeholder","title","subtitle","Partial","theme","nodeContentRenderer","placeholderRenderer","props","treeNodeRenderer","style","height","innerStyle","undefined","scaffoldBlockPxWidth","slideRegionSize","TreeItem","getVisibleNodeCount","getTreeHeight","treeData","rowHeight","visibleNodeCount","TreeEditorErrorBoundary","props","children","SortableTreeWithoutDndContext","SortableTree","TreeItem","AddCircleIcon","Box","Button","Card","Flex","Spinner","Stack","Text","Tooltip","useCallback","useEffect","useMemo","useState","DndProvider","HTML5Backend","PatchEvent","useAllItems","useLocalTree","TreeOperationsContext","useTreeOperationsProvider","Optional","StoredTreeItem","TreeDeskStructureProps","getCommonTreeProps","getTreeHeight","getUnaddedItems","HandleMovedNodeData","DocumentInNode","TreeEditorErrorBoundary","TreeEditorProps","tree","onChange","patch","options","patchPrefix","TreeEditor","props","$","_c","status","allItemsStatus","allItems","unAddedItems","t0","localTree","handleVisibilityToggle","t1","operations","context","setContext","treeViewHeight","setTreeViewHeight","documentId","t2","el","document","querySelector","rowHeight","offsetHeight","updateTreeViewHeight","t3","t4","timeout","setTimeout","clearTimeout","t5","data","handleMovedNode","onMoveNode","t6","Symbol","for","placeholder","title","treeProps","t7","operationContext","T0","T1","t8","rootElement","minHeight","length","maxDepth","doNothingOnChange","canDrop","getNodeKey","height","undefined","map","item","publishedId","draftId","addItem","cursor","t9","t10","nextPath","prevPath","insideItself","every","pathIndex","index","node","arrayToJSONMatchPath","Patch","type","path","position","items","value","GradientPatch","Record","toGradient","patches","map","toGradientPatch","patch","matchPath","insert","unset","Error","JSON","stringify","Box","Flex","Spinner","useCallback","useEffect","PatchEvent","useDocumentOperation","useEditState","DeskWarning","TreeEditor","DocumentOperations","StoredTreeItem","TreeDeskStructureProps","toGradient","injectNodeTypeInPatches","DEFAULT_DOC_TYPE","ComponentProps","options","DEFAULT_FIELD_KEY","TreeDeskStructure","props","$","_c","treeDocType","documentType","treeFieldKey","fieldKeyInDocument","published","draft","liveEdit","documentId","patch","t0","treeValue","t1","patchEvent","execute","patches","handleChange","publishedId","_id","t2","t3","disabled","setIfMissing","t4","Symbol","for","ERROR_MESSAGES","invalidDocumentId","invalidDocumentType","invalidReferenceTo","throwError","message","extraContext","Error","AddIcon","FC","TreeDeskStructure","TreeDeskStructureProps","throwError","TreeProps","title","icon","context","S","creatableTypes","deskTreeValidator","props","documentId","referenceTo","Array","isArray","deskProps","createDeskHierarchy","referenceOptions","Error","schema","safelyCreatableTypes","some","type","indexOf","mainList","length","documentTypeList","schemaType","documentList","filter","params","types","id","menuItems","map","menuItem","intent","get","canHandleIntent","c","Record","intentType","includes","filterParams","listItem","child","Object","assign","serialize","component","options","__preserveInstance","useCallback","FormField","FormNodePresence","PatchEvent","Path","TreeEditor","StoredTreeItem","TreeFieldSchema","injectNodeTypeInPatches","DEFAULT_DOC_TYPE","TreeInputComponentProps","type","value","level","onChange","event","onFocus","path","onBlur","focusPath","readOnly","presence","EMPTY_PATH","TreeInputComponent","props","$","_c","documentType","options","onFieldChange","t0","patch","patches","t1","t2","t3","description","title","FC","ArraySchemaType","DEFAULT_FIELD_KEY","TreeInputComponent","TreeDeskStructureProps","TreeFieldSchema","INTERNAL_NODE_ARRAY_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","getSchemaTypeName","throwError","SchemaOptions","Omit","createHierarchicalNodeValueType","referenceTo","referenceOptions","documentType","name","type","title","fields","weak","to","map","options","createHierarchicalNodeType","createHierarchicalArrayType","of","createHierarchicalField","rest","inputComponent","Array","isArray","createHierarchicalDocType","liveEdit","fieldKeyInDocument","preview","select","id","tree","prepare","Record","subtitle","length","createHierarchicalSchemas","defineType","name","title","type","liveEdit","fields","hidden","definePlugin","default","createDeskHierarchy","TreeProps","createHierarchicalSchemas","hierarchyTree","flatDataToTree","hierarchicalDocumentList","name"],"sources":["../src/components/DeskWarning.tsx","../src/utils/idUtils.ts","../src/hooks/useAllItems.ts","../src/hooks/useTreeOperations.ts","../src/components/DocumentPreviewStatus.tsx","../src/components/DocumentInNode.tsx","../src/components/NodeActions.tsx","../src/utils/flatDataToTree.ts","../src/utils/injectNodeTypeInPatches.ts","../src/utils/treeData.tsx","../src/hooks/useLocalTree.ts","../src/utils/getAdjescentNodes.ts","../src/utils/moveItemInArray.ts","../src/utils/treePatches.ts","../src/hooks/useTreeOperationsProvider.ts","../src/components/NodeContentRenderer.tsx","../src/components/PlaceholderDropzone.tsx","../src/components/TreeNodeRendererScaffold.tsx","../src/components/TreeNodeRenderer.tsx","../src/utils/getCommonTreeProps.tsx","../src/utils/getTreeHeight.ts","../src/components/TreeEditorErrorBoundary.tsx","../src/components/TreeEditor.tsx","../src/utils/gradientPatchAdapter.ts","../src/TreeDeskStructure.tsx","../src/utils/throwError.ts","../src/createDeskHierarchy.tsx","../src/TreeInputComponent.tsx","../src/createHierarchicalSchemas.tsx","../src/schemas/hierarchy.tree.ts","../src/index.ts"],"sourcesContent":["import {Box, Card, Container, Heading, Stack, Text} from '@sanity/ui'\nimport {Fragment, type PropsWithChildren} from 'react'\n\n// React component that wraps text between two delimiters in a <code> tag\n\nconst WrapCodeBlocks = ({text}: {text: string}) => {\n return (\n <>\n {text.split('`').map((part, i) => (\n <Fragment key={i}>{i % 2 === 0 ? part : <code>{part}</code>}</Fragment>\n ))}\n </>\n )\n}\n\nconst DeskWarning = (\n props: PropsWithChildren<{\n title: string\n subtitle?: string\n }>,\n) => {\n return (\n <Container padding={5} style={{maxWidth: '25rem'}} sizing={'content'}>\n <Card padding={4} border radius={2} tone=\"caution\">\n <Stack gap={3}>\n <Heading size={1}>{props.title}</Heading>\n {props.subtitle &&\n props.subtitle.split('\\\\n').map((line: string) => (\n <Text size={1} key={line}>\n <WrapCodeBlocks text={line} />\n </Text>\n ))}\n {props.children && <Box marginTop={2}>{props.children}</Box>}\n </Stack>\n </Card>\n </Container>\n )\n}\n\nexport default DeskWarning\n","export function unprefixId(_id = ''): string {\n return _id.replace('drafts.', '')\n}\n\nexport function isDraft(_id = ''): boolean {\n return _id.startsWith('drafts.')\n}\n","import {useEffect, useReducer, useState} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {AllItems, TreeInputOptions} from '../types'\nimport {isDraft, unprefixId} from '../utils/idUtils'\n\nfunction getDeskFilter({referenceTo, referenceOptions}: TreeInputOptions): {\n filter: string\n params: Record<string, unknown>\n} {\n const filterParts: string[] = ['_type in $docTypes']\n\n if (referenceOptions?.filter) {\n filterParts.push(referenceOptions.filter)\n }\n\n return {\n filter: filterParts.join(' && '),\n params: {\n ...referenceOptions?.filterParams,\n docTypes: referenceTo.map((schemaType) => schemaType),\n },\n }\n}\n\ntype Status = 'loading' | 'success' | 'error'\n\ntype ACTIONTYPE =\n | {type: 'addOrEditItem'; item: SanityDocument}\n | {type: 'removeItem'; itemId: string}\n | {type: 'setInitialData'; items: SanityDocument[]}\n\nfunction updateItemInState(state: AllItems, item: SanityDocument): AllItems {\n const newState = {...state}\n const publishedId = unprefixId(item._id)\n newState[publishedId] = {\n ...newState[publishedId],\n [isDraft(item._id) ? 'draft' : 'published']: item,\n }\n return newState\n}\n\nfunction allItemsReducer(state: AllItems, action: ACTIONTYPE): AllItems {\n if (action.type === 'addOrEditItem' && action.item?._id) {\n return updateItemInState(state, action.item)\n }\n\n if (action.type === 'removeItem') {\n const publishedId = unprefixId(action.itemId)\n return {\n ...state,\n [publishedId]: isDraft(action.itemId)\n ? // If a draft, keep only published\n {\n published: state[publishedId]?.published,\n }\n : {\n draft: state[publishedId]?.draft,\n },\n }\n }\n\n if (action.type === 'setInitialData') {\n return action.items.reduce(updateItemInState, {})\n }\n return state\n}\n\nexport default function useAllItems(options: TreeInputOptions): {\n status: Status\n allItems: AllItems\n} {\n const client = useClient({\n apiVersion: '2021-09-01',\n })\n const [status, setStatus] = useState<Status>('loading')\n const [allItems, dispatch] = useReducer(allItemsReducer, {})\n\n useEffect(() => {\n function handleListener(event: {type?: string; result?: SanityDocument; documentId?: string}) {\n if (event.type !== 'mutation') {\n return\n }\n\n if (event.result) {\n dispatch({type: 'addOrEditItem', item: event.result})\n } else if (event.documentId) {\n dispatch({type: 'removeItem', itemId: event.documentId})\n }\n }\n\n const {filter, params} = getDeskFilter(options)\n const query = `*[${filter}] {\n _id,\n _type,\n _updatedAt,\n }`\n\n async function fetchInitialData() {\n try {\n const items = await client.fetch<SanityDocument[]>(query, params)\n dispatch({type: 'setInitialData', items})\n setStatus('success')\n } catch {\n setStatus('error')\n }\n }\n void fetchInitialData()\n\n const listener = client.listen(query, params).subscribe(handleListener)\n return () => {\n listener.unsubscribe()\n }\n }, [client, options])\n\n return {\n status,\n allItems,\n }\n}\n","import {createContext, useContext} from 'react'\n\nimport type useAllItems from './useAllItems'\nimport type useTreeOperationsProvider from './useTreeOperationsProvider'\n\ntype ContextValue = ReturnType<typeof useTreeOperationsProvider> & {\n allItemsStatus: ReturnType<typeof useAllItems>['status']\n}\n\nfunction placeholder() {\n // no-op\n}\n\nexport const TreeOperationsContext = createContext<ContextValue>({\n addItem: placeholder,\n duplicateItem: placeholder,\n removeItem: placeholder,\n handleMovedNode: placeholder,\n moveItemDown: placeholder,\n moveItemUp: placeholder,\n allItemsStatus: 'loading',\n})\n\nexport default function useTreeOperations(): ContextValue {\n return useContext(TreeOperationsContext)\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {PublishIcon} from '@sanity/icons/Publish'\nimport {Box, Inline, Text, Tooltip} from '@sanity/ui'\nimport {type SanityDocument, TextWithTone, useRelativeTime} from 'sanity'\n\nimport type {DocumentPair} from '../types'\n\nfunction TimeAgo({time}: {time: string | Date}) {\n const timeAgo = useRelativeTime(time)\n\n return (\n <span title={timeAgo}>\n {timeAgo}\n {timeAgo.toLowerCase().trim().startsWith('just now') ? '' : ' ago'}\n </span>\n )\n}\n\nconst PublishedStatus = ({document}: {document?: SanityDocument | null}) => (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Published {document._updatedAt && <TimeAgo time={document._updatedAt} />}</>\n ) : (\n <>Not published</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"positive\" dimmed={!document} muted={!document} size={1}>\n <PublishIcon />\n </TextWithTone>\n </Tooltip>\n)\n\nconst DraftStatus = ({document}: {document?: SanityDocument | null}) => (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Edited {document?._updatedAt && <TimeAgo time={document?._updatedAt} />}</>\n ) : (\n <>No unpublished edits</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"caution\" dimmed={!document} muted={!document} size={1}>\n <EditIcon />\n </TextWithTone>\n </Tooltip>\n)\n\n// Adapted from @sanity\\desk-tool\\src\\components\\paneItem\\helpers.tsx\nconst DocumentPreviewStatus = ({draft, published}: DocumentPair) => {\n return (\n <Inline gap={4}>\n <PublishedStatus document={published} />\n <DraftStatus document={draft} />\n </Inline>\n )\n}\n\nexport default DocumentPreviewStatus\n","import {HelpCircleIcon} from '@sanity/icons/HelpCircle'\nimport {Box, Card, Flex, Stack, Text, Tooltip} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport {Preview, type SanityDocument, type SchemaType, TextWithTone, useSchema} from 'sanity'\nimport {type RouterPaneGroup, usePaneRouter} from 'sanity/structure'\n\nimport useTreeOperations from '../hooks/useTreeOperations'\nimport type {LocalTreeItem} from '../types'\nimport DocumentPreviewStatus from './DocumentPreviewStatus'\n\n/**\n * Renders a preview for each referenced document.\n * Nested inside TreeNode.tsx\n */\nconst DocumentInNode = (props: {item: LocalTreeItem; action?: ReactNode}) => {\n const {value: {reference, docType} = {}, draftId, publishedId} = props.item\n const referenceId = reference?._ref\n const {routerPanesState, ChildLink} = usePaneRouter()\n const {allItemsStatus} = useTreeOperations()\n const schema = useSchema()\n const isActive = useMemo(() => {\n // If some pane is active with the current document `_id`, it's active\n return routerPanesState.some((pane: RouterPaneGroup) =>\n pane.some((group) => group.id === referenceId),\n )\n }, [referenceId, routerPanesState])\n\n const type = useMemo(() => {\n return docType ? schema.get(docType) : undefined\n }, [docType, schema])\n\n if (!reference?._ref) {\n return null\n }\n\n return (\n <Flex gap={2} align=\"center\" style={{flex: 1}}>\n {/* Show loading preview while allItems aren't ready */}\n {publishedId || allItemsStatus !== 'success' ? (\n /* Card loosely copied from @sanity/desk-tool's PaneItem.tsx */\n <Card\n __unstable_focusRing\n as={ChildLink}\n childId={referenceId!}\n childParameters={{type: docType!}}\n tone={isActive ? 'primary' : 'default'}\n padding={1}\n radius={2}\n flex={1}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n >\n <Preview\n layout=\"default\"\n schemaType={type as SchemaType}\n value={{_ref: draftId || reference?._ref}}\n status={\n <DocumentPreviewStatus\n draft={\n draftId\n ? ({\n _id: draftId,\n _type: docType,\n _updatedAt: props.item.draftUpdatedAt,\n } as SanityDocument)\n : undefined\n }\n published={\n {\n _id: reference?._ref,\n _type: docType,\n _updatedAt: props.item.publishedUpdatedAt,\n } as SanityDocument\n }\n />\n }\n />\n </Card>\n ) : (\n <Card padding={3} radius={1} flex={1}>\n <Flex align=\"center\">\n <Text size={2} muted style={{flex: 1}}>\n Invalid document\n </Text>\n <Tooltip\n placement=\"left\"\n portal\n content={\n <Box padding={3}>\n <Flex align=\"flex-start\" gap={3}>\n <TextWithTone tone=\"default\" size={3}>\n <HelpCircleIcon />\n </TextWithTone>\n <Stack gap={3}>\n <Text as=\"h2\" size={1} weight=\"semibold\">\n This document is not valid\n </Text>\n {/* <Text size={1}>\n It was deleted or it doesn't match the filters set by this hierarchy.\n </Text> */}\n <Text size={1}>ID: {reference?._ref}</Text>\n </Stack>\n </Flex>\n </Box>\n }\n >\n <TextWithTone tone=\"default\" size={2}>\n <HelpCircleIcon />\n </TextWithTone>\n </Tooltip>\n </Flex>\n </Card>\n )}\n {props.action}\n </Flex>\n )\n}\n\nexport default DocumentInNode\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {EllipsisVerticalIcon} from '@sanity/icons/EllipsisVertical'\nimport {LaunchIcon} from '@sanity/icons/Launch'\nimport {RemoveCircleIcon} from '@sanity/icons/RemoveCircle'\nimport {Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {IntentButton as IntentLink} from 'sanity'\n\nimport useTreeOperations from '../hooks/useTreeOperations'\nimport type {NodeProps} from '../types'\n\n/**\n * Applicable only to nodes inside the main tree.\n * Unadded items have their actions defined in TreeEditor.\n */\nconst NodeActions = ({nodeProps}: {nodeProps: NodeProps}) => {\n const operations = useTreeOperations()\n const {node} = nodeProps\n const {reference, docType} = node?.value || {}\n const referenceId = reference?._ref\n\n const isValid = !!node.publishedId\n return (\n <MenuButton\n button={<Button padding={2} mode=\"bleed\" icon={EllipsisVerticalIcon} />}\n id={`hiearchical-doc-list--${node._key}-menuButton`}\n menu={\n <Menu>\n <MenuItem\n text=\"Remove from list\"\n tone=\"critical\"\n icon={RemoveCircleIcon}\n onClick={() => operations.removeItem(nodeProps)}\n />\n <MenuItem\n text=\"Duplicate item\"\n icon={CopyIcon}\n disabled={!isValid}\n onClick={() => operations.duplicateItem(nodeProps)}\n />\n {/* <MenuItem\n text=\"Move up\"\n icon={ArrowUpIcon}\n disabled={!isValid}\n onClick={() => operations.moveItemUp(nodeProps)}\n />\n <MenuItem\n text=\"Move down\"\n icon={ArrowDownIcon}\n disabled={!isValid}\n onClick={() => operations.moveItemDown(nodeProps)}\n /> */}\n <MenuDivider />\n <MenuItem\n text=\"Open in new tab\"\n icon={LaunchIcon}\n disabled={!isValid}\n as={IntentLink}\n intent=\"edit\"\n params={{id: referenceId, type: docType}}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-as=\"a\"\n />\n </Menu>\n }\n popover={{portal: true, tone: 'default', placement: 'right'}}\n />\n )\n}\n\nexport default NodeActions\n","import type {StoredTreeItem} from '../types'\n\ninterface TreeItemWithChildren extends StoredTreeItem {\n // Index signature for structural compatibility with react-sortable-tree's TreeItem\n [key: string]: unknown\n children?: TreeItemWithChildren[]\n}\n\n/**\n * Converts the flat array stored in the Sanity document into a nested tree,\n * nesting items under their `parent` _key. Items without a `parent` are roots.\n */\nexport default function flatDataToTree(data: StoredTreeItem[]): TreeItemWithChildren[] {\n const childrenByParent = new Map<string | null, StoredTreeItem[]>()\n for (const item of data) {\n const parentKey = item.parent || null\n const siblings = childrenByParent.get(parentKey)\n if (siblings) {\n siblings.push(item)\n } else {\n childrenByParent.set(parentKey, [item])\n }\n }\n\n const buildNode = (item: StoredTreeItem): TreeItemWithChildren => {\n const children = childrenByParent.get(item._key)\n return children ? {...item, children: children.map(buildNode)} : {...item}\n }\n\n return (childrenByParent.get(null) || []).map(buildNode)\n}\n","export function getSchemaTypeName(\n documentType: string,\n type: 'document' | 'node' | 'nodeValue' | 'array',\n): string {\n switch (type) {\n case 'document':\n return documentType\n case 'array':\n return `${documentType}.array`\n case 'node':\n return `${documentType}.node`\n case 'nodeValue':\n return `${documentType}.nodeValue`\n default:\n return documentType\n }\n}\n\n/**\n * Temporary value of nodes' `_type` before they are normalized and persisted as the user-defined choice.\n */\nexport const DEFAULT_DOC_TYPE = 'hierarchy.tree'\nexport const INTERNAL_NODE_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'node')\nexport const INTERNAL_NODE_VALUE_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'nodeValue')\nexport const INTERNAL_NODE_ARRAY_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'array')\n\n/**\n * Barebones recursive utility to inject the desired nodeObjectType in patches generated in deeply nested components and utilities.\n */\nexport default function injectNodeTypeInPatches(patchData: any, documentType: string): any {\n if (Array.isArray(patchData)) {\n return patchData.map((child) => injectNodeTypeInPatches(child, documentType))\n }\n if (typeof patchData === 'object' && patchData !== null) {\n const newObject: Record<string, unknown> = {}\n for (const key of Object.keys(patchData)) {\n const value = patchData[key as keyof typeof patchData]\n\n if (\n key === '_type' &&\n typeof value === 'string' &&\n [INTERNAL_NODE_TYPE, INTERNAL_NODE_VALUE_TYPE].includes(value)\n ) {\n newObject[key] = getSchemaTypeName(\n documentType,\n value === INTERNAL_NODE_TYPE ? 'node' : 'nodeValue',\n )\n } else {\n newObject[key] = injectNodeTypeInPatches(value, documentType)\n }\n }\n return newObject\n }\n return patchData\n}\n","import {randomKey} from '@sanity/util/content'\n\nimport DocumentInNode from '../components/DocumentInNode'\nimport NodeActions from '../components/NodeActions'\nimport type {\n AllItems,\n DocumentPair,\n EnhancedTreeItem,\n LocalTreeItem,\n NodeProps,\n StoredTreeItem,\n VisibilityMap,\n} from '../types'\nimport flatDataToTree from './flatDataToTree'\nimport {INTERNAL_NODE_TYPE, INTERNAL_NODE_VALUE_TYPE} from './injectNodeTypeInPatches'\n\nexport const dataToEditorTree = ({\n tree,\n allItems,\n visibilityMap,\n}: {\n tree: StoredTreeItem[]\n allItems: AllItems\n visibilityMap: VisibilityMap\n}): LocalTreeItem[] => {\n const itemsWithTitle = tree\n .filter((item) => item?.value?.reference?._ref)\n .map((item) => {\n const refId = item.value?.reference?._ref\n const docPair = refId ? allItems[refId] : undefined\n const draftDoc = docPair?.draft\n const publishedDoc = docPair?.published\n\n const enhancedItem: LocalTreeItem = {\n _key: item._key,\n _type: item._type,\n value: item.value,\n parent: item.parent,\n expanded: visibilityMap[item._key] !== false,\n draftId: draftDoc?._id,\n publishedId: publishedDoc?._id,\n draftUpdatedAt: draftDoc?._updatedAt,\n publishedUpdatedAt: publishedDoc?._updatedAt,\n }\n\n return Object.assign(enhancedItem, {\n title: (nodeProps: NodeProps) => (\n <DocumentInNode item={enhancedItem} action={<NodeActions nodeProps={nodeProps} />} />\n ),\n children: [],\n })\n })\n return flatDataToTree(itemsWithTitle)\n}\n\nconst documentPairToNode = (doc?: DocumentPair): EnhancedTreeItem | undefined => {\n if (!doc?.published?._id) {\n return undefined\n }\n\n return {\n _key: randomKey(12),\n _type: INTERNAL_NODE_TYPE,\n draftId: doc.draft?._id,\n draftUpdatedAt: doc.draft?._updatedAt,\n publishedId: doc.published._id,\n publishedUpdatedAt: doc.published?._updatedAt,\n value: {\n _type: INTERNAL_NODE_VALUE_TYPE,\n reference: {\n _ref: doc.published._id,\n _type: 'reference',\n _weak: true,\n },\n docType: doc.published._type,\n },\n }\n}\n\nexport const getUnaddedItems = (data: {\n allItems: AllItems\n tree: StoredTreeItem[]\n}): EnhancedTreeItem[] => {\n if (!data.tree) {\n return Object.values(data.allItems).flatMap((documentPair) => {\n const node = documentPairToNode(documentPair)\n return node ? [node] : []\n })\n }\n\n return Object.entries(data.allItems)\n .filter(\n ([publishedId]) =>\n publishedId &&\n // unadded items shouldn't be in the tree\n !data.tree.some((treeItem) => treeItem?.value?.reference?._ref === publishedId),\n )\n .flatMap(([, documentPair]) => {\n const node = documentPairToNode(documentPair)\n return node ? [node] : []\n })\n}\n\nexport function normalizeNodeForStorage(item: LocalTreeItem): StoredTreeItem {\n return {\n _key: item._key,\n _type: item._type || INTERNAL_NODE_TYPE,\n value: item.value,\n parent: item.parent,\n }\n}\n","import {useState} from 'react'\n\nimport type {AllItems, LocalTreeItem, StoredTreeItem, VisibilityMap} from '../types'\nimport {dataToEditorTree} from '../utils/treeData'\n\n/**\n * Enhances tree data with information on:\n * - `expanded` - native property of react-sortable-tree to determine collapsing & expanding of a node's children\n * - `draftId` & `publishedId` - refer to LocalTreeItem's type annotations\n *\n * Doesn't modify the main tree or has side-effects on data.\n * Has the added benefit of being local to the user, so external changes won't affect local visibility.\n */\nexport default function useLocalTree({\n tree,\n allItems,\n}: {\n tree: StoredTreeItem[]\n allItems: AllItems\n}): {\n handleVisibilityToggle: (data: any) => void\n localTree: LocalTreeItem[]\n} {\n const [visibilityMap, setVisibilityMap] = useState<VisibilityMap>({})\n\n function handleVisibilityToggle(data: any) {\n setVisibilityMap((currentMap) => ({\n ...currentMap,\n [data.node._key]: data.expanded,\n }))\n }\n\n return {\n localTree: dataToEditorTree({\n tree,\n allItems,\n visibilityMap,\n }),\n handleVisibilityToggle,\n }\n}\n","import type {LocalTreeItem} from '../types'\nimport type {LocalFlatDataItem} from './treePatches'\n\n/**\n * Gets adjescent non-children nodes of a given treeIndex.\n */\nexport default function getAdjescentNodes({\n flatTree,\n node,\n treeIndex,\n}: {\n flatTree: LocalFlatDataItem[]\n node: LocalTreeItem\n treeIndex: number\n}): {\n leadingNode?: LocalFlatDataItem\n followingNode?: LocalFlatDataItem\n} {\n // Disregard children nodes - these include the current node's key in their `path` array.\n // `path` is typed as number[] but contains the string keys returned by our `getNodeKey`.\n const isOutsideOfNode = (item: LocalFlatDataItem) => !(item.path as unknown[]).includes(node._key)\n\n const leadingNode = flatTree.slice(0, treeIndex).reverse().find(isOutsideOfNode)\n\n const followingNode = flatTree.slice(treeIndex + 1).find(isOutsideOfNode)\n\n return {\n leadingNode,\n followingNode,\n }\n}\n","export default function moveItemInArray<ItemType = unknown>({\n array,\n fromIndex,\n toIndex,\n}: {\n array: ItemType[]\n fromIndex: number\n toIndex: number\n}): ItemType[] {\n if (fromIndex === toIndex) {\n return array\n }\n\n const newArray = [...array]\n const [target] = newArray.splice(fromIndex, 1)\n\n if (target === undefined) {\n return array\n }\n\n newArray.splice(toIndex, 0, target)\n\n return newArray\n}\n","import {\n type FlatDataItem,\n type TreeItem,\n getFlatDataFromTree,\n} from '@nosferatu500/react-sortable-tree'\nimport {randomKey} from '@sanity/util/content'\nimport * as Patch from 'sanity'\n\nimport type {LocalTreeItem, NodeProps} from '../types'\nimport getAdjescentNodes from './getAdjescentNodes'\nimport moveItemInArray from './moveItemInArray'\nimport {normalizeNodeForStorage} from './treeData'\n\n/**\n * A {@link FlatDataItem} whose nodes are known to be the plugin's own tree items.\n */\nexport interface LocalFlatDataItem extends Omit<FlatDataItem, 'node' | 'parentNode'> {\n node: LocalTreeItem\n parentNode?: LocalTreeItem | null\n}\n\n/**\n * Data received from react-sortable-tree's `onMoveNode` callback.\n * `nextPath` is undefined / null when the node is removed from the tree.\n */\nexport interface HandleMovedNodeData {\n treeData: TreeItem[]\n node: LocalTreeItem\n nextParentNode?: LocalTreeItem | null\n nextPath?: number[] | null\n nextTreeIndex: number\n}\n\nexport type HandleMovedNode = (moveData: HandleMovedNodeData) => void\n\nfunction getLocalFlatDataFromTree(treeData: TreeItem[]): LocalFlatDataItem[] {\n return getFlatDataFromTree({\n treeData,\n getNodeKey: (t) => t.node['_key'] as string,\n }) as LocalFlatDataItem[]\n}\n\nexport function getAddItemPatch(item: LocalTreeItem): unknown[] {\n const normalizedNode = normalizeNodeForStorage(item)\n\n return [\n // Add the node to the end of the tree\n Patch.insert([normalizedNode], 'after', [-1]),\n ]\n}\n\nexport function getDuplicateItemPatch(nodeProps: NodeProps): unknown[] {\n const newItem = {\n ...nodeProps.node,\n _key: randomKey(12),\n }\n const normalizedNode = normalizeNodeForStorage(newItem)\n\n return [\n // Add duplicated node before the existing one\n Patch.insert([normalizedNode], 'before', [{_key: nodeProps.node._key}]),\n ]\n}\n\nexport function getRemoveItemPatch({node}: Pick<NodeProps, 'node'>): unknown[] {\n const keyPath = {_key: node._key}\n const children = getChildrenPaths(node)\n\n return [\n // 1. Unset the removed node\n Patch.unset([keyPath]),\n\n // 2. Unset its children\n ...children.map((path) => Patch.unset([{_key: path}])),\n ]\n}\n\nexport function getMovedNodePatch(data: HandleMovedNodeData): unknown[] {\n const {nextParentNode} = data\n const keyPath = {_key: data.node._key}\n\n // === REMOVING NODE FROM TREE ===\n // `nextPath` will be undefined / null if the item is removed from tree\n if (!Array.isArray(data.nextPath)) {\n return getRemoveItemPatch({node: data.node})\n }\n\n const nextFlatTree = getLocalFlatDataFromTree(data.treeData)\n const normalizedNode = normalizeNodeForStorage(data.node)\n\n const {leadingNode, followingNode} = getAdjescentNodes({\n flatTree: nextFlatTree,\n node: data.node,\n treeIndex: data.nextTreeIndex,\n })\n\n return [\n // 1. Unset the moved node\n // (will be ignored by Content Lake on new nodes with _key not yet in tree)\n Patch.unset([keyPath]),\n\n // 2. SIBLING-BASED PLACEMENT\n // If we were to place solely based on nextTreeIndex, concurrent changes from other editors could put the new node in an unexpected position.\n // Let's instead anchor it to the _key of the sibling coming before or after it.\n leadingNode?.node?._key\n ? // After the sibling before it\n Patch.insert([normalizedNode], 'after', [{_key: leadingNode.node._key}])\n : // Or before the sibling right after it, in case there's no leading sibling node\n // prettier-ignore\n Patch.insert([normalizedNode], 'before', [followingNode?.node?._key ? {_key: followingNode.node._key} : data.nextTreeIndex]),\n\n // 3. Patch the new node with its new `parent`\n nextParentNode\n ? // If it has a parent node, set that parent's _key\n Patch.set(nextParentNode._key, [keyPath, 'parent'])\n : // Else remove the parent key entirely\n Patch.unset([keyPath, 'parent']),\n ]\n}\n\nfunction getChildrenPaths(node: LocalTreeItem): string[] {\n if (!Array.isArray(node.children)) {\n return []\n }\n\n const keyPaths: string[] = []\n for (const child of node.children) {\n const childKey: unknown = child['_key']\n if (typeof childKey === 'string' && childKey) {\n keyPaths.push(childKey)\n }\n keyPaths.push(...getChildrenPaths(child as LocalTreeItem))\n }\n return keyPaths\n}\n\nexport function getMoveItemPatch({\n nodeProps: {node, treeIndex},\n localTree,\n direction,\n}: {\n nodeProps: NodeProps\n localTree: LocalTreeItem[]\n direction: 'up' | 'down'\n}): unknown[] {\n const keyPath = {_key: node._key}\n\n const nextTreeIndex = treeIndex + (direction === 'up' ? -1 : 1)\n\n const flatTree = getLocalFlatDataFromTree(localTree)\n const nextFlatTree = moveItemInArray<LocalFlatDataItem>({\n array: flatTree,\n fromIndex: treeIndex,\n toIndex: nextTreeIndex,\n })\n const {leadingNode, followingNode} = getAdjescentNodes({\n flatTree: nextFlatTree,\n node,\n treeIndex: nextTreeIndex,\n })\n\n const normalizedNode = normalizeNodeForStorage(node)\n\n // When moving up, look at following node to figure out what is the next parent.\n const nodeToInheritParent = direction === 'up' ? followingNode : leadingNode\n const nextParentNode = nodeToInheritParent?.parentNode\n\n return [\n // 1. Unset the moved node\n // (will be ignored by Content Lake on new nodes with _key not yet in tree)\n Patch.unset([keyPath]),\n\n // 2. SIBLING-BASED PLACEMENT\n leadingNode?.node?._key\n ? // After the sibling before it\n Patch.insert([normalizedNode], 'after', [{_key: leadingNode.node._key}])\n : // Or before the sibling right after it, in case there's no leading sibling node\n Patch.insert([normalizedNode], 'before', [\n followingNode?.node?._key ? {_key: followingNode.node._key} : nextTreeIndex,\n ]),\n\n // 3. Patch the new node with its new `parent`\n nextParentNode\n ? // If it has a parent node, set that parent's _key\n Patch.set(nextParentNode._key, [keyPath, 'parent'])\n : // Else remove the parent key entirely\n Patch.unset([keyPath, 'parent']),\n ]\n}\n","import {PatchEvent, type PathSegment, prefixPath, setIfMissing} from 'sanity'\n\nimport type {LocalTreeItem, NodeProps} from '../types'\nimport {\n type HandleMovedNode,\n type HandleMovedNodeData,\n getAddItemPatch,\n getDuplicateItemPatch,\n getMoveItemPatch,\n getMovedNodePatch,\n getRemoveItemPatch,\n} from '../utils/treePatches'\n\nexport default function useTreeOperationsProvider(props: {\n patchPrefix?: PathSegment\n onChange: (patch: PatchEvent) => void\n localTree: LocalTreeItem[]\n}): {\n handleMovedNode: HandleMovedNode\n addItem: (item: LocalTreeItem) => void\n duplicateItem: (nodeProps: NodeProps) => void\n removeItem: (nodeProps: NodeProps) => void\n moveItemUp: (nodeProps: NodeProps) => void\n moveItemDown: (nodeProps: NodeProps) => void\n} {\n const {localTree} = props\n\n function runPatches(patches: any) {\n const finalPatches = [\n // Ensure tree array exists before any operation\n setIfMissing([]),\n ...(patches || []),\n ]\n const prefix: PathSegment | undefined = props.patchPrefix\n let patchEvent = PatchEvent.from(finalPatches)\n if (prefix) {\n patchEvent = PatchEvent.from(finalPatches.map((patch) => prefixPath(patch, prefix)))\n }\n props.onChange(patchEvent)\n }\n\n function handleMovedNode(data: HandleMovedNodeData) {\n runPatches(getMovedNodePatch(data))\n }\n\n function addItem(item: LocalTreeItem) {\n runPatches(getAddItemPatch(item))\n }\n\n function duplicateItem(nodeProps: NodeProps) {\n runPatches(getDuplicateItemPatch(nodeProps))\n }\n\n function removeItem(nodeProps: NodeProps) {\n runPatches(getRemoveItemPatch(nodeProps))\n }\n\n function moveItemUp(nodeProps: NodeProps) {\n runPatches(\n getMoveItemPatch({\n nodeProps,\n localTree,\n direction: 'up',\n }),\n )\n }\n\n function moveItemDown(nodeProps: NodeProps) {\n runPatches(\n getMoveItemPatch({\n nodeProps,\n localTree,\n direction: 'down',\n }),\n )\n }\n\n return {\n handleMovedNode,\n addItem,\n removeItem,\n moveItemUp,\n moveItemDown,\n duplicateItem,\n }\n}\n","import {isDescendant} from '@nosferatu500/react-sortable-tree'\nimport {cyan, gray, red} from '@sanity/color'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {DragHandleIcon} from '@sanity/icons/DragHandle'\nimport {Box, Button, Flex, Spinner} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nconst Root = styled.div`\n // Adapted from react-sortable-tree/style.css\n &[data-landing='true'] > *,\n &[data-cancel='true'] > * {\n opacity: 0 !important;\n }\n &[data-landing='true']::before,\n &[data-cancel='true']::before {\n background-color: ${cyan[50].hex};\n border: 2px dashed ${gray[400].hex};\n border-radius: 3px;\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n }\n\n &[data-cancel='true']::before {\n background-color: ${red[50].hex};\n }\n`\n\n/**\n * Customization of react-sortable-tree's default node.\n * Created in order to use Sanity UI for styles.\n * Reference: https://github.com/frontend-collective/react-sortable-tree/blob/master/src/node-renderer-default.js\n */\nconst NodeContentRenderer: any = (props: any) => {\n const {\n node,\n path,\n treeIndex,\n canDrag = false,\n canDrop,\n connectDragSource,\n connectDragPreview,\n toggleChildrenVisibility,\n draggedNode,\n didDrop,\n isDragging,\n } = props\n const nodeTitle = node.title\n const Handle = useMemo(() => {\n if (!canDrag) {\n return null\n }\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n return <Spinner />\n }\n\n const button = (\n <Button\n mode=\"bleed\"\n paddingX={0}\n paddingY={1}\n style={{\n cursor: node.publishedId ? 'grab' : 'default',\n fontSize: '1.5625rem',\n }}\n data-ui=\"DragHandleButton\"\n data-drag-handle={canDrag}\n disabled={!node.publishedId}\n >\n <DragHandleIcon style={{marginBottom: '-0.1em'}} />\n </Button>\n )\n\n // Don't allow editors to drag invalid documents\n if (!node.publishedId) {\n return <div>{button}</div>\n }\n\n // Show the handle used to initiate a drag-and-drop\n return <div ref={connectDragSource}>{button}</div>\n }, [canDrag, node, connectDragSource])\n\n const isDraggedDescendant = draggedNode && isDescendant(draggedNode, node)\n const isLandingPadActive = !didDrop && isDragging\n\n return (\n <Box style={{position: 'relative'}}>\n {toggleChildrenVisibility &&\n node.children &&\n (node.children.length > 0 || typeof node.children === 'function') && (\n <div\n style={{\n position: 'absolute',\n left: '-2px',\n top: '40%',\n transform: 'translate(-100%, -50%)',\n }}\n >\n <Button\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n icon={\n node.expanded ? (\n <ChevronDownIcon color={gray[200].hex} />\n ) : (\n <ChevronRightIcon color={gray[200].hex} />\n )\n }\n mode=\"bleed\"\n fontSize={2}\n padding={1}\n type=\"button\"\n onClick={() =>\n toggleChildrenVisibility?.({\n node,\n path,\n treeIndex,\n })\n }\n />\n </div>\n )}\n\n <div ref={connectDragPreview}>\n <Root\n data-landing={isLandingPadActive}\n data-cancel={isLandingPadActive && !canDrop}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n }}\n >\n <Flex align=\"center\">\n {Handle}\n {typeof nodeTitle === 'function' ? nodeTitle({node, path, treeIndex}) : nodeTitle}\n </Flex>\n </Root>\n </div>\n </Box>\n )\n}\n\nexport default NodeContentRenderer\n","import {Box, Card, type CardTone, Stack, Text} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\ninterface PlaceholderDropzoneProps {\n title: string\n subtitle?: string\n isOver?: boolean\n canDrop?: boolean\n children?: ReactNode\n}\n\nconst PlaceholderDropzone = (props: PlaceholderDropzoneProps) => {\n const isValid = props.isOver && props.canDrop\n const isInvalid = props.isOver && !props.canDrop\n let tone: CardTone = 'transparent'\n if (isValid) {\n tone = 'positive'\n }\n if (isInvalid) {\n tone = 'caution'\n }\n return (\n <Box padding={3}>\n <Card\n padding={5}\n radius={2}\n border\n tone={tone}\n style={{\n borderStyle: props.isOver ? undefined : 'dashed',\n }}\n >\n <Stack gap={2} style={{textAlign: 'center'}}>\n <Text size={2} as=\"h2\" muted>\n {!props.isOver && props.title}\n {isValid && 'Drop here'}\n {isInvalid && 'Invalid location or element'}\n </Text>\n {props.subtitle && <Text size={1}>{props.subtitle}</Text>}\n {props.children}\n </Stack>\n </Card>\n </Box>\n )\n}\n\nexport default PlaceholderDropzone\n","import {blue} from '@sanity/color'\nimport type {ReactNode} from 'react'\nimport {createGlobalStyle} from 'styled-components'\n\n// Adapted from react-sortable-tree/src/tree-node.js\nconst ScaffoldStyles = createGlobalStyle`\n .rst__lineBlock,\n .rst__absoluteLineBlock {\n height: 100%;\n position: relative;\n display: inline-block;\n --stroke-width: 3px;\n }\n\n .rst__absoluteLineBlock {\n position: absolute;\n top: 0;\n }\n\n /* Highlight line for pointing to dragged row destination\n ========================================================================== */\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n .rst__highlightLineVertical {\n z-index: 3;\n }\n .rst__highlightLineVertical::before {\n position: absolute;\n content: '';\n background-color: ${blue[400].hex};\n width: calc(var(--stroke-width) * 2);\n margin-left: calc(var(--stroke-width) * -1);\n left: 50%;\n top: 0;\n height: 100%;\n }\n\n @keyframes arrow-pulse {\n 0% {\n transform: translate(0, 0);\n opacity: 0;\n }\n 30% {\n transform: translate(0, 300%);\n opacity: 1;\n }\n 70% {\n transform: translate(0, 700%);\n opacity: 1;\n }\n 100% {\n transform: translate(0, 1000%);\n opacity: 0;\n }\n }\n .rst__highlightLineVertical::after {\n content: '';\n position: absolute;\n height: 0;\n margin-left: calc(var(--stroke-width) * -1);\n left: 50%;\n top: 0;\n border-left: var(--stroke-width) solid transparent;\n border-right: var(--stroke-width) solid transparent;\n border-top: var(--stroke-width) solid white;\n animation: arrow-pulse 1s infinite linear both;\n }\n\n /**\n * +-----+\n * | |\n * | +--+\n * | | |\n * +--+--+\n */\n .rst__highlightTopLeftCorner::before {\n z-index: 3;\n content: '';\n position: absolute;\n border-top: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n border-left: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n box-sizing: border-box;\n height: calc(50% + var(--stroke-width));\n top: 50%;\n margin-top: calc(var(--stroke-width) * -1);\n right: 0;\n width: calc(50% + var(--stroke-width));\n }\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | +->|\n * +-----+\n */\n .rst__highlightBottomLeftCorner {\n z-index: 3;\n }\n .rst__highlightBottomLeftCorner::before {\n content: '';\n position: absolute;\n border-bottom: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n border-left: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n box-sizing: border-box;\n height: calc(100% + var(--stroke-width));\n top: 0;\n right: calc(var(--stroke-width) * 3);\n width: calc(50% - calc(var(--stroke-width) * 2));\n }\n\n .rst__highlightBottomLeftCorner::after {\n content: '';\n position: absolute;\n height: 0;\n right: 0;\n top: 100%;\n margin-top: calc(var(--stroke-width) * -3);\n border-top: calc(var(--stroke-width) * 3) solid transparent;\n border-bottom: calc(var(--stroke-width) * 3) solid transparent;\n border-left: calc(var(--stroke-width) * 3) solid ${blue[400].hex};\n }\n\n .rst__unclickable {\n pointer-events: none;\n margin-top: -calc(var(--stroke-width) * 3);\n }\n`\n\nconst TreeNodeRendererScaffold = (props: any) => {\n const {\n lowerSiblingCounts,\n scaffoldBlockPxWidth,\n listIndex,\n swapDepth,\n swapFrom,\n swapLength,\n treeIndex,\n } = props\n\n // Construct the scaffold representing the structure of the tree\n const scaffold: ReactNode[] = lowerSiblingCounts.map((lowerSiblingCount: number, i: number) => {\n if (lowerSiblingCount < 0 || treeIndex === listIndex || i !== swapDepth) {\n return null\n }\n\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = ''\n\n if (listIndex === (swapFrom || 0) + (swapLength || 0) - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner'\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner'\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical'\n }\n\n const style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i,\n }\n\n return (\n <div\n key={i}\n style={style}\n className={`rst__unclickable rst__absoluteLineBlock ${highlightLineClass || ''}`}\n tabIndex={-1}\n />\n )\n })\n\n return (\n <>\n {scaffold}\n <ScaffoldStyles />\n </>\n )\n}\n\nexport default TreeNodeRendererScaffold\n","import {Children, type ReactElement, cloneElement} from 'react'\n\nimport TreeNodeRendererScaffold from './TreeNodeRendererScaffold'\n\n/**\n * To prevent expand buttons from overflowing on the left, we add a minimum left padding to all entries\n */\nconst BASE_LEFT_PADDING = 10\nconst NESTING_PADDING = 14\n\nconst TreeNodeRenderer: any = (props: any) => {\n const {children, lowerSiblingCounts, connectDropTarget, isOver, draggedNode, canDrop} = props\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length\n\n return (\n <div ref={connectDropTarget} style={props.style} data-tree-row=\"\">\n <div\n style={{\n // prettier-ignore\n paddingLeft: `${BASE_LEFT_PADDING + (NESTING_PADDING * scaffoldBlockCount)}px`,\n }}\n >\n {Children.map(children, (child) =>\n cloneElement(child as ReactElement<any>, {\n isOver,\n canDrop,\n draggedNode,\n }),\n )}\n </div>\n <TreeNodeRendererScaffold {...props} />\n </div>\n )\n}\n\nexport default TreeNodeRenderer\n","import type {SortableTree} from '@nosferatu500/react-sortable-tree'\nimport type {ComponentProps} from 'react'\n\nimport NodeContentRenderer from '../components/NodeContentRenderer'\nimport PlaceholderDropzone from '../components/PlaceholderDropzone'\nimport TreeNodeRenderer from '../components/TreeNodeRenderer'\n\ntype ReactSortableTreeProps = ComponentProps<typeof SortableTree>\n\nexport default function getCommonTreeProps({\n placeholder,\n}: {\n placeholder: {\n title: string\n subtitle?: string\n }\n}): Partial<ReactSortableTreeProps> {\n return {\n theme: {\n nodeContentRenderer: NodeContentRenderer,\n placeholderRenderer: (props: any) => <PlaceholderDropzone {...placeholder} {...props} />,\n treeNodeRenderer: TreeNodeRenderer,\n style: {height: '100%'},\n innerStyle: undefined,\n scaffoldBlockPxWidth: 44,\n slideRegionSize: 100,\n },\n }\n}\n","import {type TreeItem, getVisibleNodeCount} from '@nosferatu500/react-sortable-tree'\n\nexport default function getTreeHeight(treeData: TreeItem[], rowHeight: number): string {\n const visibleNodeCount = getVisibleNodeCount({treeData})\n\n // prettier-ignore\n return `${50 + (rowHeight * visibleNodeCount)}px`\n}\n","/**\n * react-sortable-tree emits a lot of random errors when dragging to invalid states,\n * even when drag-targets are disabled.\n *\n * This boundary is a workaround so users are not pestered with error-toasts for things\n * that have no functional impact.\n *\n * This boundry does NOT handle errors that happen in the React dnd\n * event handlers, so there is addtional workarounds in the\n * DnDManager.\n * */\nexport const TreeEditorErrorBoundary = (props: any) => {\n return props.children\n}\n","import {\n SortableTreeWithoutDndContext as SortableTree,\n type TreeItem,\n} from '@nosferatu500/react-sortable-tree'\nimport {AddCircleIcon} from '@sanity/icons/AddCircle'\nimport {Box, Button, Card, Flex, Spinner, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {DndProvider} from 'react-dnd'\nimport {HTML5Backend} from 'react-dnd-html5-backend'\nimport type {PatchEvent} from 'sanity'\n\nimport useAllItems from '../hooks/useAllItems'\nimport useLocalTree from '../hooks/useLocalTree'\nimport {TreeOperationsContext} from '../hooks/useTreeOperations'\nimport useTreeOperationsProvider from '../hooks/useTreeOperationsProvider'\nimport type {Optional, StoredTreeItem, TreeDeskStructureProps} from '../types'\nimport getCommonTreeProps from '../utils/getCommonTreeProps'\nimport getTreeHeight from '../utils/getTreeHeight'\nimport {getUnaddedItems} from '../utils/treeData'\nimport type {HandleMovedNodeData} from '../utils/treePatches'\nimport DocumentInNode from './DocumentInNode'\nimport {TreeEditorErrorBoundary} from './TreeEditorErrorBoundary'\n\ninterface TreeEditorProps {\n tree: StoredTreeItem[]\n onChange: (patch: PatchEvent) => void\n options: Optional<TreeDeskStructureProps, 'documentId'>\n patchPrefix?: string\n}\n\n/**\n * The loaded tree users interact with\n */\nfunction TreeEditor(props: TreeEditorProps) {\n const {status: allItemsStatus, allItems} = useAllItems(props.options)\n const unAddedItems = getUnaddedItems({tree: props.tree, allItems})\n\n const {localTree, handleVisibilityToggle} = useLocalTree({\n tree: props.tree,\n allItems,\n })\n\n const operations = useTreeOperationsProvider({\n patchPrefix: props.patchPrefix,\n onChange: props.onChange,\n localTree,\n })\n\n const [context, setContext] = useState<HTMLElement | null>(null)\n const [treeViewHeight, setTreeViewHeight] = useState<string>('')\n\n const documentId = props.options.documentId\n\n const updateTreeViewHeight = useCallback(() => {\n const el = document.querySelector<HTMLElement>(`#${documentId} [data-tree-row]`)\n const rowHeight = el?.offsetHeight || 51\n setTreeViewHeight(getTreeHeight(localTree, rowHeight))\n }, [documentId, localTree])\n\n useEffect(() => {\n // Wait for dom to load before (re)calculating the tree height.\n const timeout = setTimeout(updateTreeViewHeight)\n return () => clearTimeout(timeout)\n }, [updateTreeViewHeight])\n\n const onMoveNode = useCallback(\n // The tree nodes are always our own LocalTreeItem objects\n (data: unknown) => operations.handleMovedNode(data as HandleMovedNodeData),\n [operations],\n )\n\n const treeProps = useMemo(\n () =>\n getCommonTreeProps({\n placeholder: {\n title: 'Add items from the list below',\n },\n }),\n [],\n )\n\n const operationContext = useMemo(\n () => ({...operations, allItemsStatus}),\n [operations, allItemsStatus],\n )\n\n return (\n <TreeEditorErrorBoundary>\n {/*Use this Box-wrapper to get a context Element to prevent DndProvider to have to HTML% backend at the same time https://github.com/react-dnd/react-dnd/issues/186#issuecomment-978206387 */}\n <Box id={documentId} ref={setContext}>\n {context ? (\n <DndProvider backend={HTML5Backend} options={{rootElement: context}}>\n <TreeOperationsContext.Provider value={operationContext}>\n <Stack gap={4} paddingTop={4}>\n <Card\n style={{minHeight: treeViewHeight}}\n // Only include borderBottom if there's something to show in unadded items\n borderBottom={allItemsStatus !== 'success' || unAddedItems?.length > 0}\n >\n <SortableTree\n maxDepth={props.options.maxDepth}\n onChange={doNothingOnChange}\n onVisibilityToggle={handleVisibilityToggle}\n canDrop={canDrop}\n onMoveNode={onMoveNode}\n // Stable keys keep row identity (and their DOM nodes) intact while\n // rows are repositioned during a drag\n getNodeKey={getNodeKey}\n treeData={localTree}\n // The tree renders inside a virtualized list which requires\n // a definite height (percentages would resolve to 0)\n style={treeViewHeight ? {height: treeViewHeight} : undefined}\n {...treeProps}\n />\n </Card>\n\n {allItemsStatus === 'success' && unAddedItems?.length > 0 && (\n <Stack gap={1} paddingX={2} paddingTop={3}>\n <Stack gap={2} paddingX={2} paddingBottom={3}>\n <Text size={2} as=\"h2\" weight=\"semibold\">\n Add more items\n </Text>\n <Text size={1} muted>\n Only published documents are shown.\n </Text>\n </Stack>\n {unAddedItems.map((item) => (\n <DocumentInNode\n key={item.publishedId || item.draftId}\n item={item}\n action={\n <Tooltip\n portal\n placement=\"left\"\n content={\n <Box padding={2}>\n <Text size={1}>Add to list</Text>\n </Box>\n }\n >\n <Button\n onClick={() => {\n operations.addItem(item)\n }}\n mode=\"bleed\"\n icon={AddCircleIcon}\n style={{cursor: 'pointer'}}\n />\n </Tooltip>\n }\n />\n ))}\n </Stack>\n )}\n {allItemsStatus === 'loading' && (\n <Flex padding={4} align={'center'} justify={'center'}>\n <Spinner size={3} muted />\n </Flex>\n )}\n {allItemsStatus === 'error' && (\n <Flex padding={4} align={'center'} justify={'center'}>\n <Text size={2} weight=\"semibold\">\n Something went wrong when loading documents\n </Text>\n </Flex>\n )}\n </Stack>\n </TreeOperationsContext.Provider>\n </DndProvider>\n ) : null}\n </Box>\n </TreeEditorErrorBoundary>\n )\n}\n\nfunction canDrop({nextPath, prevPath}: {nextPath: number[]; prevPath: number[]}) {\n const insideItself =\n nextPath.length >= prevPath.length &&\n prevPath.every((pathIndex, index) => nextPath[index] === pathIndex)\n return !insideItself\n}\n\nconst doNothingOnChange = () => {\n // Do nothing. onMoveNode will do all the work\n}\n\nconst getNodeKey = (data: {node: TreeItem}) => data.node['_key'] as string\n\nexport default TreeEditor\n","// Adapted from @sanity/form-builder/src/sanity/utils/gradientPatchAdapter.ts\nimport {arrayToJSONMatchPath} from '@sanity/mutator'\n\ninterface Patch {\n type?: string\n path?: any[]\n position?: string\n items?: unknown[]\n value?: unknown\n}\n\ntype GradientPatch = Record<string, any>\n\nexport function toGradient(patches: Patch[]): GradientPatch[] {\n return patches.map(toGradientPatch)\n}\n\nfunction toGradientPatch(patch: Patch): GradientPatch {\n const matchPath = arrayToJSONMatchPath(patch.path || [])\n if (patch.type === 'insert') {\n const {position, items} = patch\n return {\n insert: {\n [position as string]: matchPath,\n items: items,\n },\n }\n }\n\n if (patch.type === 'unset') {\n return {\n unset: [matchPath],\n }\n }\n\n if (!patch.type) {\n throw new Error(`Missing patch type in patch ${JSON.stringify(patch)}`)\n }\n if (matchPath) {\n return {\n [patch.type]: {\n [matchPath]: patch.value,\n },\n }\n }\n return {\n [patch.type]: patch.value,\n }\n}\n","import {Box, Flex, Spinner} from '@sanity/ui'\nimport {useCallback, useEffect} from 'react'\nimport {type PatchEvent, useDocumentOperation, useEditState} from 'sanity'\n\nimport DeskWarning from './components/DeskWarning'\nimport TreeEditor from './components/TreeEditor'\nimport type {DocumentOperations, StoredTreeItem, TreeDeskStructureProps} from './types'\nimport {toGradient} from './utils/gradientPatchAdapter'\nimport injectNodeTypeInPatches, {DEFAULT_DOC_TYPE} from './utils/injectNodeTypeInPatches'\n\ninterface ComponentProps {\n options: TreeDeskStructureProps\n}\n\nexport const DEFAULT_FIELD_KEY = 'tree'\n\nconst TreeDeskStructure = (props: ComponentProps) => {\n const treeDocType = props.options.documentType || DEFAULT_DOC_TYPE\n const treeFieldKey = props.options.fieldKeyInDocument || DEFAULT_FIELD_KEY\n const {published, draft, liveEdit} = useEditState(props.options.documentId, treeDocType)\n const {patch} = useDocumentOperation(props.options.documentId, treeDocType) as DocumentOperations\n\n const treeValue = (published?.[treeFieldKey] || []) as StoredTreeItem[]\n\n const handleChange = useCallback(\n (patchEvent: PatchEvent) => {\n if (!patch?.execute) {\n return\n }\n patch.execute(toGradient(injectNodeTypeInPatches(patchEvent.patches, treeDocType)))\n },\n [patch, treeDocType],\n )\n\n const publishedId = published?._id\n\n useEffect(() => {\n if (!publishedId && patch?.execute && !patch?.disabled) {\n // If no published document, create it\n patch.execute([{setIfMissing: {[treeFieldKey]: []}}])\n }\n }, [publishedId, patch, treeFieldKey])\n\n if (!liveEdit) {\n return (\n <DeskWarning\n title=\"Invalid configuration\"\n subtitle=\"The `documentType` passed to `createDeskHiearchy` isn't live editable. \\nTo continue using this plugin, add `liveEdit: true` to your custom schema type or unset `documentType` in your hierarchy configuration.\"\n />\n )\n }\n\n if (draft?._id) {\n return (\n <DeskWarning\n title=\"This hierarchy tree contains a draft\"\n subtitle=\"Click on the button below to publish your draft in order to continue editing the live\n published document.\"\n />\n )\n }\n\n if (!published?._id) {\n return (\n <Flex padding={5} align={'center'} justify={'center'} height={'fill'}>\n <Spinner width={4} muted />\n </Flex>\n )\n }\n\n return (\n <Box paddingBottom={5} paddingRight={2}>\n <TreeEditor\n options={props.options}\n tree={treeValue}\n onChange={handleChange}\n patchPrefix={treeFieldKey}\n />\n </Box>\n )\n}\n\nexport default TreeDeskStructure\n","const ERROR_MESSAGES = {\n invalidDocumentId: 'Please add a documentId to your tree',\n invalidDocumentType: 'Please add a valid documentType to createHierarchicalSchemas',\n invalidReferenceTo: \"Missing valid 'referenceTo' value\",\n}\n\nexport default function throwError(message: keyof typeof ERROR_MESSAGES, extraContext = ''): void {\n throw new Error(`[hierarchical input] ${ERROR_MESSAGES[message]} ${extraContext}`)\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport type {FC} from 'react'\n\nimport TreeDeskStructure from './TreeDeskStructure'\nimport type {TreeDeskStructureProps} from './types'\nimport throwError from './utils/throwError'\n\nexport interface TreeProps extends TreeDeskStructureProps {\n /**\n * Visible title above the tree.\n * Also used as the label in the desk list item.\n */\n title: string\n\n /**\n * Optional icon for rendering the item in the desk structure.\n */\n icon?: any\n\n /**\n * The `ConfigContext` available as the second parameter of the structure resolver.\n */\n context?: any\n /**\n * The `StructureBuilder` (`S`) available as the first parameter of the structure resolver.\n */\n S?: any\n /**\n * Restrict document types that can be created.\n */\n creatableTypes?: string[]\n}\n\nconst deskTreeValidator = (props: TreeProps): FC => {\n const {documentId, referenceTo} = props\n if (typeof documentId !== 'string' && !documentId) {\n throwError('invalidDocumentId')\n }\n if (!Array.isArray(referenceTo)) {\n throwError('invalidReferenceTo', `(documentId \"${documentId}\")`)\n }\n\n return (deskProps) => <TreeDeskStructure {...deskProps} options={props} />\n}\n\nexport default function createDeskHierarchy(props: TreeProps) {\n const {documentId, referenceTo, referenceOptions, context, S, creatableTypes} = props\n if (!S || !context) {\n throw new Error(\n 'Invalid configuration. S or context props are undefined. ' +\n 'These props are available as function parameters when configuring structure, and must be passed along to createDeskHierarchy. ' +\n 'Confer the plugin README for example usage.',\n )\n }\n\n const {schema} = context\n\n const safelyCreatableTypes =\n creatableTypes && !creatableTypes.some((type) => referenceTo.indexOf(type))\n ? creatableTypes\n : referenceTo\n\n let mainList = (\n referenceTo?.length === 1\n ? S.documentTypeList(referenceTo[0]).schemaType(referenceTo[0])\n : S.documentList().filter('_type in $types').params({types: referenceTo})\n )\n .id(documentId)\n .menuItems(\n (safelyCreatableTypes || []).map((schemaType) =>\n S.menuItem()\n .intent({\n type: 'create',\n params: {type: schemaType},\n })\n .title(`Create ${schema.get(schemaType)?.title}`)\n .icon(schema.get(schemaType)?.icon || AddIcon),\n ),\n )\n .canHandleIntent((intent: string, c: Record<string, unknown>) => {\n // Can edit itself\n if (intent === 'edit' && c['id'] === props.documentId) {\n return true\n }\n // Can create & edit referenced document types\n const intentType = c['type']\n if (typeof intentType === 'string' && safelyCreatableTypes.includes(intentType)) {\n return true\n }\n return false\n })\n\n if (referenceOptions?.filter) {\n mainList = mainList.filter(referenceOptions.filter)\n }\n\n if (referenceOptions?.filterParams) {\n mainList = mainList.params(referenceOptions.filterParams)\n }\n\n return S.listItem()\n .id(documentId)\n .title(props.title || documentId)\n .icon(props.icon)\n .child(\n Object.assign(\n mainList.serialize(),\n {\n type: 'component',\n component: deskTreeValidator(props),\n options: props,\n __preserveInstance: true,\n },\n props.title ? {title: props.title} : {},\n ),\n )\n}\n","import {useCallback} from 'react'\nimport {FormField, type FormNodePresence, PatchEvent, type Path} from 'sanity'\n\nimport TreeEditor from './components/TreeEditor'\nimport type {StoredTreeItem, TreeFieldSchema} from './types'\nimport injectNodeTypeInPatches, {DEFAULT_DOC_TYPE} from './utils/injectNodeTypeInPatches'\n\nexport interface TreeInputComponentProps {\n type: TreeFieldSchema\n value: StoredTreeItem[]\n level: number\n onChange: (event: unknown) => void\n onFocus: (path: Path) => void\n onBlur: () => void\n focusPath: Path\n readOnly: boolean\n presence: FormNodePresence[]\n}\n\nconst EMPTY_PATH: Path = []\n\nconst TreeInputComponent = (props: TreeInputComponentProps) => {\n const documentType = props.type.options.documentType || DEFAULT_DOC_TYPE\n const {onChange: onFieldChange} = props\n\n const onChange = useCallback(\n (patch: any) => {\n const patches = injectNodeTypeInPatches(patch?.patches, documentType)\n onFieldChange(new PatchEvent(patches))\n },\n [documentType, onFieldChange],\n )\n\n return (\n <FormField\n description={props.type.description} // Creates description from schema\n title={props.type.title} // Creates label from schema title\n __unstable_presence={props.presence} // Handles presence avatars\n path={EMPTY_PATH}\n >\n <TreeEditor options={props.type.options} tree={props.value || []} onChange={onChange} />\n </FormField>\n )\n}\n\nexport default TreeInputComponent\n","import type {FC} from 'react'\nimport type {ArraySchemaType} from 'sanity'\n\nimport {DEFAULT_FIELD_KEY} from './TreeDeskStructure'\nimport TreeInputComponent from './TreeInputComponent'\nimport type {TreeDeskStructureProps, TreeFieldSchema} from './types'\nimport {\n INTERNAL_NODE_ARRAY_TYPE,\n INTERNAL_NODE_TYPE,\n INTERNAL_NODE_VALUE_TYPE,\n getSchemaTypeName,\n} from './utils/injectNodeTypeInPatches'\nimport throwError from './utils/throwError'\n\ntype SchemaOptions = Omit<TreeDeskStructureProps, 'documentId' | 'maxDepth'>\n\nfunction createHierarchicalNodeValueType({\n referenceTo,\n referenceOptions,\n documentType,\n}: SchemaOptions) {\n return {\n // when used inside the field, name & type are overwritten by createHierarchicalNodeType\n name: documentType ? getSchemaTypeName(documentType, 'nodeValue') : INTERNAL_NODE_VALUE_TYPE,\n type: 'object',\n title: `Hierarchical node value (${documentType})`,\n\n fields: [\n {name: 'docType', type: 'string'},\n {\n name: 'reference',\n type: 'reference',\n weak: true,\n to: referenceTo.map((type) => ({type})),\n options: referenceOptions,\n },\n ],\n }\n}\n\nfunction createHierarchicalNodeType(options: SchemaOptions) {\n return {\n // name & type are overwritten by createHierarchicalField\n name: options.documentType\n ? getSchemaTypeName(options.documentType, 'node')\n : INTERNAL_NODE_TYPE,\n title: `Hierarchical node (${options.documentType})`,\n type: 'object',\n fields: [\n {name: 'parent', type: 'string'},\n\n options.documentType\n ? {name: 'value', type: getSchemaTypeName(options.documentType, 'nodeValue')}\n : // If no documentType is defined, use an anonymized inline object to avoid\n // having to define another custom schema type through the plugin\n {\n ...createHierarchicalNodeValueType(options),\n name: 'value',\n type: 'object',\n },\n ],\n }\n}\n\nfunction createHierarchicalArrayType(options: SchemaOptions) {\n return {\n // name & type are overwritten by createHierarchicalField\n name: options.documentType\n ? getSchemaTypeName(options.documentType, 'array')\n : INTERNAL_NODE_ARRAY_TYPE,\n title: `Hierarchical array of nodes (${options.documentType})`,\n type: 'array',\n of: [\n options.documentType\n ? {type: getSchemaTypeName(options.documentType, 'node')}\n : createHierarchicalNodeType(options),\n ],\n }\n}\n\nfunction createHierarchicalField({name, title, options, ...rest}: TreeFieldSchema): Omit<\n ArraySchemaType,\n 'type' | 'jsonType' | 'of'\n> & {\n type: string\n inputComponent: FC<any>\n of?: any[]\n} {\n if (!Array.isArray(options?.referenceTo)) {\n throwError('invalidReferenceTo', `(field of name \"${name}\")`)\n }\n\n return {\n ...rest,\n name,\n title,\n inputComponent: TreeInputComponent,\n options,\n ...(options.documentType\n ? {type: getSchemaTypeName(options.documentType, 'array')}\n : {\n ...createHierarchicalArrayType(options),\n name,\n }),\n }\n}\n\nfunction createHierarchicalDocType(options: SchemaOptions) {\n return {\n name: options.documentType,\n title: 'Hierarchical tree',\n type: 'document',\n // The plugin needs to define a `schemaType` with liveEdit enabled so that\n // `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.\n liveEdit: true,\n fields: [\n createHierarchicalField({\n name: options.fieldKeyInDocument || DEFAULT_FIELD_KEY,\n title: 'Hierarchical Tree',\n options,\n }),\n ],\n preview: {\n select: {\n id: '_id',\n tree: 'tree',\n },\n prepare({id, tree}: {id: string; tree: unknown[]}): Record<string, string> {\n return {\n title: `Hierarchical documents (ID: ${id})`,\n subtitle: `${tree?.length || 0} document(s) in its list.`,\n }\n },\n },\n }\n}\n\nexport default function createHierarchicalSchemas(options: SchemaOptions) {\n if (!Array.isArray(options.referenceTo) || options.referenceTo.length <= 0) {\n throwError('invalidReferenceTo')\n }\n if (!options.documentType) {\n throwError('invalidDocumentType')\n }\n\n return [\n createHierarchicalDocType(options),\n createHierarchicalArrayType(options),\n createHierarchicalNodeType(options),\n createHierarchicalNodeValueType(options),\n ]\n}\n","import {defineType} from 'sanity'\n\nexport default defineType({\n name: 'hierarchy.tree',\n title: 'Hierarchical tree',\n type: 'document',\n // The plugin needs to define a `schemaType` with liveEdit enabled so that\n // `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.\n liveEdit: true,\n // Let's avoid defining the actual hierarchical field, else GraphQL users won't be able to deploy schemas\n fields: [\n {\n name: 'unusedField',\n title: 'Unused field',\n type: 'string',\n hidden: true,\n },\n ],\n})\n","import {definePlugin} from 'sanity'\n\nimport {default as createDeskHierarchy, type TreeProps} from './createDeskHierarchy'\nimport {default as createHierarchicalSchemas} from './createHierarchicalSchemas'\nimport {default as hierarchyTree} from './schemas/hierarchy.tree'\nimport {default as flatDataToTree} from './utils/flatDataToTree'\n\nexport {createDeskHierarchy, createHierarchicalSchemas, flatDataToTree, hierarchyTree}\nexport type {TreeProps}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {hierarchicalDocumentList} from '@sanity/hierarchical-document-list'\n *\n * export default defineConfig({\n * // ...\n * plugins: [hierarchicalDocumentList()],\n * })\n * ```\n */\n\nexport const hierarchicalDocumentList = definePlugin({\n name: 'sanity-plugin-hierarchical-document-list',\n})\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["Box","Card","Container","Heading","Stack","Text","Fragment","PropsWithChildren","WrapCodeBlocks","t0","$","_c","text","t1","split","map","_temp","t2","DeskWarning","props","Symbol","for","maxWidth","title","subtitle","_temp2","t3","children","t4","part","i","line","unprefixId","_id","replace","isDraft","startsWith","useEffect","useReducer","useState","SanityDocument","useClient","AllItems","TreeInputOptions","isDraft","unprefixId","getDeskFilter","referenceTo","referenceOptions","filter","params","Record","filterParts","push","join","filterParams","docTypes","map","schemaType","Status","ACTIONTYPE","type","item","itemId","items","updateItemInState","state","newState","publishedId","_id","allItemsReducer","action","published","draft","reduce","useAllItems","options","$","_c","t0","Symbol","for","apiVersion","client","status","setStatus","t1","allItems","dispatch","t2","t3","handleListener","event","result","documentId","query","fetchInitialData","fetch","listener","listen","subscribe","unsubscribe","t4","createContext","useContext","useAllItems","useTreeOperationsProvider","ContextValue","ReturnType","allItemsStatus","placeholder","TreeOperationsContext","addItem","duplicateItem","removeItem","handleMovedNode","moveItemDown","moveItemUp","useTreeOperations","EditIcon","PublishIcon","Box","Inline","Text","Tooltip","SanityDocument","TextWithTone","useRelativeTime","DocumentPair","TimeAgo","t0","$","_c","time","timeAgo","t1","toLowerCase","trim","startsWith","t2","PublishedStatus","document","_updatedAt","t3","t4","Symbol","for","t5","t6","DraftStatus","DocumentPreviewStatus","draft","published","HelpCircleIcon","Box","Card","Flex","Stack","Text","Tooltip","ReactNode","useMemo","Preview","SanityDocument","SchemaType","TextWithTone","useSchema","RouterPaneGroup","usePaneRouter","useTreeOperations","LocalTreeItem","DocumentPreviewStatus","DocumentInNode","props","$","_c","value","t0","draftId","publishedId","item","t1","undefined","reference","docType","referenceId","_ref","routerPanesState","ChildLink","allItemsStatus","schema","t2","t3","pane","some","group","id","isActive","get","type","t4","Symbol","for","flex","t5","draftUpdatedAt","publishedUpdatedAt","_id","_type","_updatedAt","t6","action","CopyIcon","EllipsisVerticalIcon","LaunchIcon","RemoveCircleIcon","Button","Menu","MenuButton","MenuDivider","MenuItem","IntentButton","IntentLink","useTreeOperations","NodeProps","NodeActions","t0","$","_c","nodeProps","operations","node","t1","value","reference","docType","referenceId","_ref","isValid","publishedId","t2","Symbol","for","t3","_key","t4","removeItem","t5","t6","duplicateItem","t7","t8","t9","t10","id","type","t11","t12","t13","portal","tone","placement","t14","StoredTreeItem","TreeItemWithChildren","key","children","flatDataToTree","data","childrenByParent","Map","item","parentKey","parent","siblings","get","push","set","buildNode","_key","map","getSchemaTypeName","documentType","type","DEFAULT_DOC_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","INTERNAL_NODE_ARRAY_TYPE","injectNodeTypeInPatches","patchData","Array","isArray","map","child","newObject","Record","key","Object","keys","value","includes","randomKey","DocumentInNode","NodeActions","AllItems","DocumentPair","EnhancedTreeItem","LocalTreeItem","NodeProps","StoredTreeItem","VisibilityMap","flatDataToTree","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","dataToEditorTree","tree","allItems","visibilityMap","itemsWithTitle","filter","item","value","reference","_ref","map","refId","docPair","undefined","draftDoc","draft","publishedDoc","published","enhancedItem","_key","_type","parent","expanded","draftId","_id","publishedId","draftUpdatedAt","_updatedAt","publishedUpdatedAt","Object","assign","title","nodeProps","children","documentPairToNode","doc","_weak","docType","getUnaddedItems","data","values","flatMap","documentPair","node","entries","some","treeItem","normalizeNodeForStorage","useState","AllItems","LocalTreeItem","StoredTreeItem","VisibilityMap","dataToEditorTree","useLocalTree","t0","$","_c","tree","allItems","t1","Symbol","for","visibilityMap","setVisibilityMap","t2","handleVisibilityToggle","data","currentMap","node","_key","expanded","t3","t4","localTree","LocalTreeItem","LocalFlatDataItem","getAdjescentNodes","flatTree","node","treeIndex","leadingNode","followingNode","isOutsideOfNode","item","path","includes","_key","slice","reverse","find","moveItemInArray","array","fromIndex","toIndex","ItemType","newArray","target","splice","undefined","FlatDataItem","TreeItem","getFlatDataFromTree","randomKey","Patch","LocalTreeItem","NodeProps","getAdjescentNodes","moveItemInArray","normalizeNodeForStorage","LocalFlatDataItem","Omit","node","parentNode","HandleMovedNodeData","treeData","nextParentNode","nextPath","nextTreeIndex","HandleMovedNode","moveData","getLocalFlatDataFromTree","getNodeKey","t","getAddItemPatch","item","normalizedNode","insert","getDuplicateItemPatch","nodeProps","newItem","_key","getRemoveItemPatch","Pick","keyPath","children","getChildrenPaths","unset","map","path","getMovedNodePatch","data","Array","isArray","nextFlatTree","leadingNode","followingNode","flatTree","treeIndex","set","keyPaths","child","childKey","push","getMoveItemPatch","localTree","direction","array","fromIndex","toIndex","nodeToInheritParent","PatchEvent","PathSegment","prefixPath","setIfMissing","LocalTreeItem","NodeProps","HandleMovedNode","HandleMovedNodeData","getAddItemPatch","getDuplicateItemPatch","getMoveItemPatch","getMovedNodePatch","getRemoveItemPatch","useTreeOperationsProvider","props","patchPrefix","onChange","patch","localTree","handleMovedNode","addItem","item","duplicateItem","nodeProps","removeItem","moveItemUp","moveItemDown","runPatches","patches","finalPatches","prefix","patchEvent","from","map","data","direction","isDescendant","cyan","gray","red","ChevronDownIcon","ChevronRightIcon","DragHandleIcon","Box","Button","Flex","Spinner","useMemo","styled","Root","div","hex","NodeContentRenderer","props","$","_c","node","path","treeIndex","canDrag","t0","canDrop","connectDragSource","connectDragPreview","toggleChildrenVisibility","draggedNode","didDrop","isDragging","undefined","nodeTitle","title","t1","bb0","children","expanded","t2","Symbol","for","publishedId","t3","cursor","fontSize","t4","t5","marginBottom","t6","button","t7","Handle","isDraggedDescendant","isLandingPadActive","position","length","left","top","transform","opacity","t8","t9","t10","t11","Box","Card","CardTone","Stack","Text","ReactNode","PlaceholderDropzoneProps","title","subtitle","isOver","canDrop","children","PlaceholderDropzone","props","$","_c","isValid","isInvalid","tone","t0","undefined","t1","borderStyle","t2","Symbol","for","textAlign","t3","t4","t5","t6","t7","t8","t9","blue","ReactNode","createGlobalStyle","ScaffoldStyles","hex","TreeNodeRendererScaffold","props","$","_c","lowerSiblingCounts","scaffoldBlockPxWidth","listIndex","swapDepth","swapFrom","swapLength","treeIndex","t0","t1","lowerSiblingCount","i","highlightLineClass","style","width","left","map","scaffold","Symbol","for","t2","Children","ReactElement","cloneElement","TreeNodeRendererScaffold","BASE_LEFT_PADDING","NESTING_PADDING","TreeNodeRenderer","props","$","_c","children","lowerSiblingCounts","connectDropTarget","isOver","draggedNode","canDrop","scaffoldBlockCount","length","t0","style","t1","t2","paddingLeft","t3","t4","child","map","t5","t6","SortableTree","ComponentProps","NodeContentRenderer","PlaceholderDropzone","TreeNodeRenderer","ReactSortableTreeProps","getCommonTreeProps","placeholder","title","subtitle","Partial","theme","nodeContentRenderer","placeholderRenderer","props","treeNodeRenderer","style","height","innerStyle","undefined","scaffoldBlockPxWidth","slideRegionSize","TreeItem","getVisibleNodeCount","getTreeHeight","treeData","rowHeight","visibleNodeCount","TreeEditorErrorBoundary","props","children","SortableTreeWithoutDndContext","SortableTree","TreeItem","AddCircleIcon","Box","Button","Card","Flex","Spinner","Stack","Text","Tooltip","useCallback","useEffect","useMemo","useState","DndProvider","HTML5Backend","PatchEvent","useAllItems","useLocalTree","TreeOperationsContext","useTreeOperationsProvider","Optional","StoredTreeItem","TreeDeskStructureProps","getCommonTreeProps","getTreeHeight","getUnaddedItems","HandleMovedNodeData","DocumentInNode","TreeEditorErrorBoundary","TreeEditorProps","tree","onChange","patch","options","patchPrefix","TreeEditor","props","$","_c","status","allItemsStatus","allItems","unAddedItems","t0","localTree","handleVisibilityToggle","t1","operations","context","setContext","treeViewHeight","setTreeViewHeight","documentId","t2","el","document","querySelector","rowHeight","offsetHeight","updateTreeViewHeight","t3","t4","timeout","setTimeout","clearTimeout","t5","data","handleMovedNode","onMoveNode","t6","Symbol","for","placeholder","title","treeProps","t7","operationContext","T0","T1","t8","rootElement","minHeight","length","maxDepth","doNothingOnChange","canDrop","getNodeKey","height","undefined","map","item","publishedId","draftId","addItem","cursor","t9","t10","nextPath","prevPath","insideItself","every","pathIndex","index","node","arrayToJSONMatchPath","Patch","type","path","position","items","value","GradientPatch","Record","toGradient","patches","map","toGradientPatch","patch","matchPath","insert","unset","Error","JSON","stringify","Box","Flex","Spinner","useCallback","useEffect","PatchEvent","useDocumentOperation","useEditState","DeskWarning","TreeEditor","DocumentOperations","StoredTreeItem","TreeDeskStructureProps","toGradient","injectNodeTypeInPatches","DEFAULT_DOC_TYPE","ComponentProps","options","DEFAULT_FIELD_KEY","TreeDeskStructure","props","$","_c","treeDocType","documentType","treeFieldKey","fieldKeyInDocument","published","draft","liveEdit","documentId","patch","t0","treeValue","t1","patchEvent","execute","patches","handleChange","publishedId","_id","t2","t3","disabled","setIfMissing","t4","Symbol","for","ERROR_MESSAGES","invalidDocumentId","invalidDocumentType","invalidReferenceTo","throwError","message","extraContext","Error","AddIcon","FC","TreeDeskStructure","TreeDeskStructureProps","throwError","TreeProps","title","icon","context","S","creatableTypes","deskTreeValidator","props","documentId","referenceTo","Array","isArray","deskProps","createDeskHierarchy","referenceOptions","Error","schema","safelyCreatableTypes","some","type","indexOf","mainList","length","documentTypeList","schemaType","documentList","filter","params","types","id","menuItems","map","menuItem","intent","get","canHandleIntent","c","Record","intentType","includes","filterParams","listItem","child","Object","assign","serialize","component","options","__preserveInstance","useCallback","FormField","FormNodePresence","PatchEvent","Path","TreeEditor","StoredTreeItem","TreeFieldSchema","injectNodeTypeInPatches","DEFAULT_DOC_TYPE","TreeInputComponentProps","type","value","level","onChange","event","onFocus","path","onBlur","focusPath","readOnly","presence","EMPTY_PATH","TreeInputComponent","props","$","_c","documentType","options","onFieldChange","t0","patch","patches","t1","t2","t3","description","title","FC","ArraySchemaType","DEFAULT_FIELD_KEY","TreeInputComponent","TreeDeskStructureProps","TreeFieldSchema","INTERNAL_NODE_ARRAY_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","getSchemaTypeName","throwError","SchemaOptions","Omit","createHierarchicalNodeValueType","referenceTo","referenceOptions","documentType","name","type","title","fields","weak","to","map","options","createHierarchicalNodeType","createHierarchicalArrayType","of","createHierarchicalField","rest","inputComponent","Array","isArray","createHierarchicalDocType","liveEdit","fieldKeyInDocument","preview","select","id","tree","prepare","Record","subtitle","length","createHierarchicalSchemas","defineType","name","title","type","liveEdit","fields","hidden","definePlugin","default","createDeskHierarchy","TreeProps","createHierarchicalSchemas","hierarchyTree","flatDataToTree","hierarchicalDocumentList","name"],"sources":["../src/components/DeskWarning.tsx","../src/utils/idUtils.ts","../src/hooks/useAllItems.ts","../src/hooks/useTreeOperations.ts","../src/components/DocumentPreviewStatus.tsx","../src/components/DocumentInNode.tsx","../src/components/NodeActions.tsx","../src/utils/flatDataToTree.ts","../src/utils/injectNodeTypeInPatches.ts","../src/utils/treeData.tsx","../src/hooks/useLocalTree.ts","../src/utils/getAdjescentNodes.ts","../src/utils/moveItemInArray.ts","../src/utils/treePatches.ts","../src/hooks/useTreeOperationsProvider.ts","../src/components/NodeContentRenderer.tsx","../src/components/PlaceholderDropzone.tsx","../src/components/TreeNodeRendererScaffold.tsx","../src/components/TreeNodeRenderer.tsx","../src/utils/getCommonTreeProps.tsx","../src/utils/getTreeHeight.ts","../src/components/TreeEditorErrorBoundary.tsx","../src/components/TreeEditor.tsx","../src/utils/gradientPatchAdapter.ts","../src/TreeDeskStructure.tsx","../src/utils/throwError.ts","../src/createDeskHierarchy.tsx","../src/TreeInputComponent.tsx","../src/createHierarchicalSchemas.tsx","../src/schemas/hierarchy.tree.ts","../src/index.ts"],"sourcesContent":["import {Box, Card, Container, Heading, Stack, Text} from '@sanity/ui'\nimport {Fragment, type PropsWithChildren} from 'react'\n\n// React component that wraps text between two delimiters in a <code> tag\n\nconst WrapCodeBlocks = ({text}: {text: string}) => {\n return (\n <>\n {text.split('`').map((part, i) => (\n <Fragment key={i}>{i % 2 === 0 ? part : <code>{part}</code>}</Fragment>\n ))}\n </>\n )\n}\n\nconst DeskWarning = (\n props: PropsWithChildren<{\n title: string\n subtitle?: string\n }>,\n) => {\n return (\n <Container padding={5} style={{maxWidth: '25rem'}} sizing={'content'}>\n <Card padding={4} border radius={2} tone=\"caution\">\n <Stack gap={3}>\n <Heading size={1}>{props.title}</Heading>\n {props.subtitle &&\n props.subtitle.split('\\\\n').map((line: string) => (\n <Text size={1} key={line}>\n <WrapCodeBlocks text={line} />\n </Text>\n ))}\n {props.children && <Box marginTop={2}>{props.children}</Box>}\n </Stack>\n </Card>\n </Container>\n )\n}\n\nexport default DeskWarning\n","export function unprefixId(_id = ''): string {\n return _id.replace('drafts.', '')\n}\n\nexport function isDraft(_id = ''): boolean {\n return _id.startsWith('drafts.')\n}\n","import {useEffect, useReducer, useState} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {AllItems, TreeInputOptions} from '../types'\nimport {isDraft, unprefixId} from '../utils/idUtils'\n\nfunction getDeskFilter({referenceTo, referenceOptions}: TreeInputOptions): {\n filter: string\n params: Record<string, unknown>\n} {\n const filterParts: string[] = ['_type in $docTypes']\n\n if (referenceOptions?.filter) {\n filterParts.push(referenceOptions.filter)\n }\n\n return {\n filter: filterParts.join(' && '),\n params: {\n ...referenceOptions?.filterParams,\n docTypes: referenceTo.map((schemaType) => schemaType),\n },\n }\n}\n\ntype Status = 'loading' | 'success' | 'error'\n\ntype ACTIONTYPE =\n | {type: 'addOrEditItem'; item: SanityDocument}\n | {type: 'removeItem'; itemId: string}\n | {type: 'setInitialData'; items: SanityDocument[]}\n\nfunction updateItemInState(state: AllItems, item: SanityDocument): AllItems {\n const newState = {...state}\n const publishedId = unprefixId(item._id)\n newState[publishedId] = {\n ...newState[publishedId],\n [isDraft(item._id) ? 'draft' : 'published']: item,\n }\n return newState\n}\n\nfunction allItemsReducer(state: AllItems, action: ACTIONTYPE): AllItems {\n if (action.type === 'addOrEditItem' && action.item?._id) {\n return updateItemInState(state, action.item)\n }\n\n if (action.type === 'removeItem') {\n const publishedId = unprefixId(action.itemId)\n return {\n ...state,\n [publishedId]: isDraft(action.itemId)\n ? // If a draft, keep only published\n {\n published: state[publishedId]?.published,\n }\n : {\n draft: state[publishedId]?.draft,\n },\n }\n }\n\n if (action.type === 'setInitialData') {\n return action.items.reduce(updateItemInState, {})\n }\n return state\n}\n\nexport default function useAllItems(options: TreeInputOptions): {\n status: Status\n allItems: AllItems\n} {\n const client = useClient({\n apiVersion: '2021-09-01',\n })\n const [status, setStatus] = useState<Status>('loading')\n const [allItems, dispatch] = useReducer(allItemsReducer, {})\n\n useEffect(() => {\n function handleListener(event: {type?: string; result?: SanityDocument; documentId?: string}) {\n if (event.type !== 'mutation') {\n return\n }\n\n if (event.result) {\n dispatch({type: 'addOrEditItem', item: event.result})\n } else if (event.documentId) {\n dispatch({type: 'removeItem', itemId: event.documentId})\n }\n }\n\n const {filter, params} = getDeskFilter(options)\n const query = `*[${filter}] {\n _id,\n _type,\n _updatedAt,\n }`\n\n async function fetchInitialData() {\n try {\n const items = await client.fetch<SanityDocument[]>(query, params)\n dispatch({type: 'setInitialData', items})\n setStatus('success')\n } catch {\n setStatus('error')\n }\n }\n void fetchInitialData()\n\n const listener = client.listen(query, params).subscribe(handleListener)\n return () => {\n listener.unsubscribe()\n }\n }, [client, options])\n\n return {\n status,\n allItems,\n }\n}\n","import {createContext, useContext} from 'react'\n\nimport type useAllItems from './useAllItems'\nimport type useTreeOperationsProvider from './useTreeOperationsProvider'\n\ntype ContextValue = ReturnType<typeof useTreeOperationsProvider> & {\n allItemsStatus: ReturnType<typeof useAllItems>['status']\n}\n\nfunction placeholder() {\n // no-op\n}\n\nexport const TreeOperationsContext = createContext<ContextValue>({\n addItem: placeholder,\n duplicateItem: placeholder,\n removeItem: placeholder,\n handleMovedNode: placeholder,\n moveItemDown: placeholder,\n moveItemUp: placeholder,\n allItemsStatus: 'loading',\n})\n\nexport default function useTreeOperations(): ContextValue {\n return useContext(TreeOperationsContext)\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {PublishIcon} from '@sanity/icons/Publish'\nimport {Box, Inline, Text, Tooltip} from '@sanity/ui'\nimport {type SanityDocument, TextWithTone, useRelativeTime} from 'sanity'\n\nimport type {DocumentPair} from '../types'\n\nfunction TimeAgo({time}: {time: string | Date}) {\n const timeAgo = useRelativeTime(time)\n\n return (\n <span title={timeAgo}>\n {timeAgo}\n {timeAgo.toLowerCase().trim().startsWith('just now') ? '' : ' ago'}\n </span>\n )\n}\n\nconst PublishedStatus = ({document}: {document?: SanityDocument | null}) => (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Published {document._updatedAt && <TimeAgo time={document._updatedAt} />}</>\n ) : (\n <>Not published</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"positive\" dimmed={!document} muted={!document} size={1}>\n <PublishIcon />\n </TextWithTone>\n </Tooltip>\n)\n\nconst DraftStatus = ({document}: {document?: SanityDocument | null}) => (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Edited {document?._updatedAt && <TimeAgo time={document?._updatedAt} />}</>\n ) : (\n <>No unpublished edits</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"caution\" dimmed={!document} muted={!document} size={1}>\n <EditIcon />\n </TextWithTone>\n </Tooltip>\n)\n\n// Adapted from @sanity\\desk-tool\\src\\components\\paneItem\\helpers.tsx\nconst DocumentPreviewStatus = ({draft, published}: DocumentPair) => {\n return (\n <Inline gap={4}>\n <PublishedStatus document={published} />\n <DraftStatus document={draft} />\n </Inline>\n )\n}\n\nexport default DocumentPreviewStatus\n","import {HelpCircleIcon} from '@sanity/icons/HelpCircle'\nimport {Box, Card, Flex, Stack, Text, Tooltip} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport {Preview, type SanityDocument, type SchemaType, TextWithTone, useSchema} from 'sanity'\nimport {type RouterPaneGroup, usePaneRouter} from 'sanity/structure'\n\nimport useTreeOperations from '../hooks/useTreeOperations'\nimport type {LocalTreeItem} from '../types'\nimport DocumentPreviewStatus from './DocumentPreviewStatus'\n\n/**\n * Renders a preview for each referenced document.\n * Nested inside TreeNode.tsx\n */\nconst DocumentInNode = (props: {item: LocalTreeItem; action?: ReactNode}) => {\n const {value: {reference, docType} = {}, draftId, publishedId} = props.item\n const referenceId = reference?._ref\n const {routerPanesState, ChildLink} = usePaneRouter()\n const {allItemsStatus} = useTreeOperations()\n const schema = useSchema()\n const isActive = useMemo(() => {\n // If some pane is active with the current document `_id`, it's active\n return routerPanesState.some((pane: RouterPaneGroup) =>\n pane.some((group) => group.id === referenceId),\n )\n }, [referenceId, routerPanesState])\n\n const type = useMemo(() => {\n return docType ? schema.get(docType) : undefined\n }, [docType, schema])\n\n if (!reference?._ref) {\n return null\n }\n\n return (\n <Flex gap={2} align=\"center\" style={{flex: 1}}>\n {/* Show loading preview while allItems aren't ready */}\n {publishedId || allItemsStatus !== 'success' ? (\n /* Card loosely copied from @sanity/desk-tool's PaneItem.tsx */\n <Card\n __unstable_focusRing\n as={ChildLink}\n childId={referenceId!}\n childParameters={{type: docType!}}\n tone={isActive ? 'primary' : 'default'}\n padding={1}\n radius={2}\n flex={1}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n >\n <Preview\n layout=\"default\"\n schemaType={type as SchemaType}\n value={{_ref: draftId || reference?._ref}}\n status={\n <DocumentPreviewStatus\n draft={\n draftId\n ? ({\n _id: draftId,\n _type: docType,\n _updatedAt: props.item.draftUpdatedAt,\n } as SanityDocument)\n : undefined\n }\n published={\n {\n _id: reference?._ref,\n _type: docType,\n _updatedAt: props.item.publishedUpdatedAt,\n } as SanityDocument\n }\n />\n }\n />\n </Card>\n ) : (\n <Card padding={3} radius={1} flex={1}>\n <Flex align=\"center\">\n <Text size={2} muted style={{flex: 1}}>\n Invalid document\n </Text>\n <Tooltip\n placement=\"left\"\n portal\n content={\n <Box padding={3}>\n <Flex align=\"flex-start\" gap={3}>\n <TextWithTone tone=\"default\" size={3}>\n <HelpCircleIcon />\n </TextWithTone>\n <Stack gap={3}>\n <Text as=\"h2\" size={1} weight=\"semibold\">\n This document is not valid\n </Text>\n {/* <Text size={1}>\n It was deleted or it doesn't match the filters set by this hierarchy.\n </Text> */}\n <Text size={1}>ID: {reference?._ref}</Text>\n </Stack>\n </Flex>\n </Box>\n }\n >\n <TextWithTone tone=\"default\" size={2}>\n <HelpCircleIcon />\n </TextWithTone>\n </Tooltip>\n </Flex>\n </Card>\n )}\n {props.action}\n </Flex>\n )\n}\n\nexport default DocumentInNode\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {EllipsisVerticalIcon} from '@sanity/icons/EllipsisVertical'\nimport {LaunchIcon} from '@sanity/icons/Launch'\nimport {RemoveCircleIcon} from '@sanity/icons/RemoveCircle'\nimport {Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {IntentButton as IntentLink} from 'sanity'\n\nimport useTreeOperations from '../hooks/useTreeOperations'\nimport type {NodeProps} from '../types'\n\n/**\n * Applicable only to nodes inside the main tree.\n * Unadded items have their actions defined in TreeEditor.\n */\nconst NodeActions = ({nodeProps}: {nodeProps: NodeProps}) => {\n const operations = useTreeOperations()\n const {node} = nodeProps\n const {reference, docType} = node?.value || {}\n const referenceId = reference?._ref\n\n const isValid = !!node.publishedId\n return (\n <MenuButton\n button={<Button padding={2} mode=\"bleed\" icon={EllipsisVerticalIcon} />}\n id={`hiearchical-doc-list--${node._key}-menuButton`}\n menu={\n <Menu>\n <MenuItem\n text=\"Remove from list\"\n tone=\"critical\"\n icon={RemoveCircleIcon}\n onClick={() => operations.removeItem(nodeProps)}\n />\n <MenuItem\n text=\"Duplicate item\"\n icon={CopyIcon}\n disabled={!isValid}\n onClick={() => operations.duplicateItem(nodeProps)}\n />\n {/* <MenuItem\n text=\"Move up\"\n icon={ArrowUpIcon}\n disabled={!isValid}\n onClick={() => operations.moveItemUp(nodeProps)}\n />\n <MenuItem\n text=\"Move down\"\n icon={ArrowDownIcon}\n disabled={!isValid}\n onClick={() => operations.moveItemDown(nodeProps)}\n /> */}\n <MenuDivider />\n <MenuItem\n text=\"Open in new tab\"\n icon={LaunchIcon}\n disabled={!isValid}\n as={IntentLink}\n intent=\"edit\"\n params={{id: referenceId, type: docType}}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-as=\"a\"\n />\n </Menu>\n }\n popover={{portal: true, tone: 'default', placement: 'right'}}\n />\n )\n}\n\nexport default NodeActions\n","import type {StoredTreeItem} from '../types'\n\ninterface TreeItemWithChildren extends StoredTreeItem {\n // Index signature for structural compatibility with react-sortable-tree's TreeItem\n [key: string]: unknown\n children?: TreeItemWithChildren[]\n}\n\n/**\n * Converts the flat array stored in the Sanity document into a nested tree,\n * nesting items under their `parent` _key. Items without a `parent` are roots.\n */\nexport default function flatDataToTree(data: StoredTreeItem[]): TreeItemWithChildren[] {\n const childrenByParent = new Map<string | null, StoredTreeItem[]>()\n for (const item of data) {\n const parentKey = item.parent || null\n const siblings = childrenByParent.get(parentKey)\n if (siblings) {\n siblings.push(item)\n } else {\n childrenByParent.set(parentKey, [item])\n }\n }\n\n const buildNode = (item: StoredTreeItem): TreeItemWithChildren => {\n const children = childrenByParent.get(item._key)\n return children ? {...item, children: children.map(buildNode)} : {...item}\n }\n\n return (childrenByParent.get(null) || []).map(buildNode)\n}\n","export function getSchemaTypeName(\n documentType: string,\n type: 'document' | 'node' | 'nodeValue' | 'array',\n): string {\n switch (type) {\n case 'document':\n return documentType\n case 'array':\n return `${documentType}.array`\n case 'node':\n return `${documentType}.node`\n case 'nodeValue':\n return `${documentType}.nodeValue`\n default:\n return documentType\n }\n}\n\n/**\n * Temporary value of nodes' `_type` before they are normalized and persisted as the user-defined choice.\n */\nexport const DEFAULT_DOC_TYPE = 'hierarchy.tree'\nexport const INTERNAL_NODE_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'node')\nexport const INTERNAL_NODE_VALUE_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'nodeValue')\nexport const INTERNAL_NODE_ARRAY_TYPE = getSchemaTypeName(DEFAULT_DOC_TYPE, 'array')\n\n/**\n * Barebones recursive utility to inject the desired nodeObjectType in patches generated in deeply nested components and utilities.\n */\nexport default function injectNodeTypeInPatches(patchData: any, documentType: string): any {\n if (Array.isArray(patchData)) {\n return patchData.map((child) => injectNodeTypeInPatches(child, documentType))\n }\n if (typeof patchData === 'object' && patchData !== null) {\n const newObject: Record<string, unknown> = {}\n for (const key of Object.keys(patchData)) {\n const value = patchData[key as keyof typeof patchData]\n\n if (\n key === '_type' &&\n typeof value === 'string' &&\n [INTERNAL_NODE_TYPE, INTERNAL_NODE_VALUE_TYPE].includes(value)\n ) {\n newObject[key] = getSchemaTypeName(\n documentType,\n value === INTERNAL_NODE_TYPE ? 'node' : 'nodeValue',\n )\n } else {\n newObject[key] = injectNodeTypeInPatches(value, documentType)\n }\n }\n return newObject\n }\n return patchData\n}\n","import {randomKey} from '@sanity/util/content'\n\nimport DocumentInNode from '../components/DocumentInNode'\nimport NodeActions from '../components/NodeActions'\nimport type {\n AllItems,\n DocumentPair,\n EnhancedTreeItem,\n LocalTreeItem,\n NodeProps,\n StoredTreeItem,\n VisibilityMap,\n} from '../types'\nimport flatDataToTree from './flatDataToTree'\nimport {INTERNAL_NODE_TYPE, INTERNAL_NODE_VALUE_TYPE} from './injectNodeTypeInPatches'\n\nexport const dataToEditorTree = ({\n tree,\n allItems,\n visibilityMap,\n}: {\n tree: StoredTreeItem[]\n allItems: AllItems\n visibilityMap: VisibilityMap\n}): LocalTreeItem[] => {\n const itemsWithTitle = tree\n .filter((item) => item?.value?.reference?._ref)\n .map((item) => {\n const refId = item.value?.reference?._ref\n const docPair = refId ? allItems[refId] : undefined\n const draftDoc = docPair?.draft\n const publishedDoc = docPair?.published\n\n const enhancedItem: LocalTreeItem = {\n _key: item._key,\n _type: item._type,\n value: item.value,\n parent: item.parent,\n expanded: visibilityMap[item._key] !== false,\n draftId: draftDoc?._id,\n publishedId: publishedDoc?._id,\n draftUpdatedAt: draftDoc?._updatedAt,\n publishedUpdatedAt: publishedDoc?._updatedAt,\n }\n\n return Object.assign(enhancedItem, {\n title: (nodeProps: NodeProps) => (\n <DocumentInNode item={enhancedItem} action={<NodeActions nodeProps={nodeProps} />} />\n ),\n children: [],\n })\n })\n return flatDataToTree(itemsWithTitle)\n}\n\nconst documentPairToNode = (doc?: DocumentPair): EnhancedTreeItem | undefined => {\n if (!doc?.published?._id) {\n return undefined\n }\n\n return {\n _key: randomKey(12),\n _type: INTERNAL_NODE_TYPE,\n draftId: doc.draft?._id,\n draftUpdatedAt: doc.draft?._updatedAt,\n publishedId: doc.published._id,\n publishedUpdatedAt: doc.published?._updatedAt,\n value: {\n _type: INTERNAL_NODE_VALUE_TYPE,\n reference: {\n _ref: doc.published._id,\n _type: 'reference',\n _weak: true,\n },\n docType: doc.published._type,\n },\n }\n}\n\nexport const getUnaddedItems = (data: {\n allItems: AllItems\n tree: StoredTreeItem[]\n}): EnhancedTreeItem[] => {\n if (!data.tree) {\n return Object.values(data.allItems).flatMap((documentPair) => {\n const node = documentPairToNode(documentPair)\n return node ? [node] : []\n })\n }\n\n return Object.entries(data.allItems)\n .filter(\n ([publishedId]) =>\n publishedId &&\n // unadded items shouldn't be in the tree\n !data.tree.some((treeItem) => treeItem?.value?.reference?._ref === publishedId),\n )\n .flatMap(([, documentPair]) => {\n const node = documentPairToNode(documentPair)\n return node ? [node] : []\n })\n}\n\nexport function normalizeNodeForStorage(item: LocalTreeItem): StoredTreeItem {\n return {\n _key: item._key,\n _type: item._type || INTERNAL_NODE_TYPE,\n value: item.value,\n parent: item.parent,\n }\n}\n","import {useState} from 'react'\n\nimport type {AllItems, LocalTreeItem, StoredTreeItem, VisibilityMap} from '../types'\nimport {dataToEditorTree} from '../utils/treeData'\n\n/**\n * Enhances tree data with information on:\n * - `expanded` - native property of react-sortable-tree to determine collapsing & expanding of a node's children\n * - `draftId` & `publishedId` - refer to LocalTreeItem's type annotations\n *\n * Doesn't modify the main tree or has side-effects on data.\n * Has the added benefit of being local to the user, so external changes won't affect local visibility.\n */\nexport default function useLocalTree({\n tree,\n allItems,\n}: {\n tree: StoredTreeItem[]\n allItems: AllItems\n}): {\n handleVisibilityToggle: (data: any) => void\n localTree: LocalTreeItem[]\n} {\n const [visibilityMap, setVisibilityMap] = useState<VisibilityMap>({})\n\n function handleVisibilityToggle(data: any) {\n setVisibilityMap((currentMap) => ({\n ...currentMap,\n [data.node._key]: data.expanded,\n }))\n }\n\n return {\n localTree: dataToEditorTree({\n tree,\n allItems,\n visibilityMap,\n }),\n handleVisibilityToggle,\n }\n}\n","import type {LocalTreeItem} from '../types'\nimport type {LocalFlatDataItem} from './treePatches'\n\n/**\n * Gets adjescent non-children nodes of a given treeIndex.\n */\nexport default function getAdjescentNodes({\n flatTree,\n node,\n treeIndex,\n}: {\n flatTree: LocalFlatDataItem[]\n node: LocalTreeItem\n treeIndex: number\n}): {\n leadingNode?: LocalFlatDataItem\n followingNode?: LocalFlatDataItem\n} {\n // Disregard children nodes - these include the current node's key in their `path` array.\n // `path` is typed as number[] but contains the string keys returned by our `getNodeKey`.\n const isOutsideOfNode = (item: LocalFlatDataItem) => !(item.path as unknown[]).includes(node._key)\n\n const leadingNode = flatTree.slice(0, treeIndex).reverse().find(isOutsideOfNode)\n\n const followingNode = flatTree.slice(treeIndex + 1).find(isOutsideOfNode)\n\n return {\n leadingNode,\n followingNode,\n }\n}\n","export default function moveItemInArray<ItemType = unknown>({\n array,\n fromIndex,\n toIndex,\n}: {\n array: ItemType[]\n fromIndex: number\n toIndex: number\n}): ItemType[] {\n if (fromIndex === toIndex) {\n return array\n }\n\n const newArray = [...array]\n const [target] = newArray.splice(fromIndex, 1)\n\n if (target === undefined) {\n return array\n }\n\n newArray.splice(toIndex, 0, target)\n\n return newArray\n}\n","import {\n type FlatDataItem,\n type TreeItem,\n getFlatDataFromTree,\n} from '@nosferatu500/react-sortable-tree'\nimport {randomKey} from '@sanity/util/content'\nimport * as Patch from 'sanity'\n\nimport type {LocalTreeItem, NodeProps} from '../types'\nimport getAdjescentNodes from './getAdjescentNodes'\nimport moveItemInArray from './moveItemInArray'\nimport {normalizeNodeForStorage} from './treeData'\n\n/**\n * A {@link FlatDataItem} whose nodes are known to be the plugin's own tree items.\n */\nexport interface LocalFlatDataItem extends Omit<FlatDataItem, 'node' | 'parentNode'> {\n node: LocalTreeItem\n parentNode?: LocalTreeItem | null\n}\n\n/**\n * Data received from react-sortable-tree's `onMoveNode` callback.\n * `nextPath` is undefined / null when the node is removed from the tree.\n */\nexport interface HandleMovedNodeData {\n treeData: TreeItem[]\n node: LocalTreeItem\n nextParentNode?: LocalTreeItem | null\n nextPath?: number[] | null\n nextTreeIndex: number\n}\n\nexport type HandleMovedNode = (moveData: HandleMovedNodeData) => void\n\nfunction getLocalFlatDataFromTree(treeData: TreeItem[]): LocalFlatDataItem[] {\n return getFlatDataFromTree({\n treeData,\n getNodeKey: (t) => t.node['_key'] as string,\n }) as LocalFlatDataItem[]\n}\n\nexport function getAddItemPatch(item: LocalTreeItem): unknown[] {\n const normalizedNode = normalizeNodeForStorage(item)\n\n return [\n // Add the node to the end of the tree\n Patch.insert([normalizedNode], 'after', [-1]),\n ]\n}\n\nexport function getDuplicateItemPatch(nodeProps: NodeProps): unknown[] {\n const newItem = {\n ...nodeProps.node,\n _key: randomKey(12),\n }\n const normalizedNode = normalizeNodeForStorage(newItem)\n\n return [\n // Add duplicated node before the existing one\n Patch.insert([normalizedNode], 'before', [{_key: nodeProps.node._key}]),\n ]\n}\n\nexport function getRemoveItemPatch({node}: Pick<NodeProps, 'node'>): unknown[] {\n const keyPath = {_key: node._key}\n const children = getChildrenPaths(node)\n\n return [\n // 1. Unset the removed node\n Patch.unset([keyPath]),\n\n // 2. Unset its children\n ...children.map((path) => Patch.unset([{_key: path}])),\n ]\n}\n\nexport function getMovedNodePatch(data: HandleMovedNodeData): unknown[] {\n const {nextParentNode} = data\n const keyPath = {_key: data.node._key}\n\n // === REMOVING NODE FROM TREE ===\n // `nextPath` will be undefined / null if the item is removed from tree\n if (!Array.isArray(data.nextPath)) {\n return getRemoveItemPatch({node: data.node})\n }\n\n const nextFlatTree = getLocalFlatDataFromTree(data.treeData)\n const normalizedNode = normalizeNodeForStorage(data.node)\n\n const {leadingNode, followingNode} = getAdjescentNodes({\n flatTree: nextFlatTree,\n node: data.node,\n treeIndex: data.nextTreeIndex,\n })\n\n return [\n // 1. Unset the moved node\n // (will be ignored by Content Lake on new nodes with _key not yet in tree)\n Patch.unset([keyPath]),\n\n // 2. SIBLING-BASED PLACEMENT\n // If we were to place solely based on nextTreeIndex, concurrent changes from other editors could put the new node in an unexpected position.\n // Let's instead anchor it to the _key of the sibling coming before or after it.\n leadingNode?.node?._key\n ? // After the sibling before it\n Patch.insert([normalizedNode], 'after', [{_key: leadingNode.node._key}])\n : // Or before the sibling right after it, in case there's no leading sibling node\n // prettier-ignore\n Patch.insert([normalizedNode], 'before', [followingNode?.node?._key ? {_key: followingNode.node._key} : data.nextTreeIndex]),\n\n // 3. Patch the new node with its new `parent`\n nextParentNode\n ? // If it has a parent node, set that parent's _key\n Patch.set(nextParentNode._key, [keyPath, 'parent'])\n : // Else remove the parent key entirely\n Patch.unset([keyPath, 'parent']),\n ]\n}\n\nfunction getChildrenPaths(node: LocalTreeItem): string[] {\n if (!Array.isArray(node.children)) {\n return []\n }\n\n const keyPaths: string[] = []\n for (const child of node.children) {\n const childKey: unknown = child['_key']\n if (typeof childKey === 'string' && childKey) {\n keyPaths.push(childKey)\n }\n keyPaths.push(...getChildrenPaths(child as LocalTreeItem))\n }\n return keyPaths\n}\n\nexport function getMoveItemPatch({\n nodeProps: {node, treeIndex},\n localTree,\n direction,\n}: {\n nodeProps: NodeProps\n localTree: LocalTreeItem[]\n direction: 'up' | 'down'\n}): unknown[] {\n const keyPath = {_key: node._key}\n\n const nextTreeIndex = treeIndex + (direction === 'up' ? -1 : 1)\n\n const flatTree = getLocalFlatDataFromTree(localTree)\n const nextFlatTree = moveItemInArray<LocalFlatDataItem>({\n array: flatTree,\n fromIndex: treeIndex,\n toIndex: nextTreeIndex,\n })\n const {leadingNode, followingNode} = getAdjescentNodes({\n flatTree: nextFlatTree,\n node,\n treeIndex: nextTreeIndex,\n })\n\n const normalizedNode = normalizeNodeForStorage(node)\n\n // When moving up, look at following node to figure out what is the next parent.\n const nodeToInheritParent = direction === 'up' ? followingNode : leadingNode\n const nextParentNode = nodeToInheritParent?.parentNode\n\n return [\n // 1. Unset the moved node\n // (will be ignored by Content Lake on new nodes with _key not yet in tree)\n Patch.unset([keyPath]),\n\n // 2. SIBLING-BASED PLACEMENT\n leadingNode?.node?._key\n ? // After the sibling before it\n Patch.insert([normalizedNode], 'after', [{_key: leadingNode.node._key}])\n : // Or before the sibling right after it, in case there's no leading sibling node\n Patch.insert([normalizedNode], 'before', [\n followingNode?.node?._key ? {_key: followingNode.node._key} : nextTreeIndex,\n ]),\n\n // 3. Patch the new node with its new `parent`\n nextParentNode\n ? // If it has a parent node, set that parent's _key\n Patch.set(nextParentNode._key, [keyPath, 'parent'])\n : // Else remove the parent key entirely\n Patch.unset([keyPath, 'parent']),\n ]\n}\n","import {PatchEvent, type PathSegment, prefixPath, setIfMissing} from 'sanity'\n\nimport type {LocalTreeItem, NodeProps} from '../types'\nimport {\n type HandleMovedNode,\n type HandleMovedNodeData,\n getAddItemPatch,\n getDuplicateItemPatch,\n getMoveItemPatch,\n getMovedNodePatch,\n getRemoveItemPatch,\n} from '../utils/treePatches'\n\nexport default function useTreeOperationsProvider(props: {\n patchPrefix?: PathSegment\n onChange: (patch: PatchEvent) => void\n localTree: LocalTreeItem[]\n}): {\n handleMovedNode: HandleMovedNode\n addItem: (item: LocalTreeItem) => void\n duplicateItem: (nodeProps: NodeProps) => void\n removeItem: (nodeProps: NodeProps) => void\n moveItemUp: (nodeProps: NodeProps) => void\n moveItemDown: (nodeProps: NodeProps) => void\n} {\n const {localTree} = props\n\n function runPatches(patches: any) {\n const finalPatches = [\n // Ensure tree array exists before any operation\n setIfMissing([]),\n ...(patches || []),\n ]\n const prefix: PathSegment | undefined = props.patchPrefix\n let patchEvent = PatchEvent.from(finalPatches)\n if (prefix) {\n patchEvent = PatchEvent.from(finalPatches.map((patch) => prefixPath(patch, prefix)))\n }\n props.onChange(patchEvent)\n }\n\n function handleMovedNode(data: HandleMovedNodeData) {\n runPatches(getMovedNodePatch(data))\n }\n\n function addItem(item: LocalTreeItem) {\n runPatches(getAddItemPatch(item))\n }\n\n function duplicateItem(nodeProps: NodeProps) {\n runPatches(getDuplicateItemPatch(nodeProps))\n }\n\n function removeItem(nodeProps: NodeProps) {\n runPatches(getRemoveItemPatch(nodeProps))\n }\n\n function moveItemUp(nodeProps: NodeProps) {\n runPatches(\n getMoveItemPatch({\n nodeProps,\n localTree,\n direction: 'up',\n }),\n )\n }\n\n function moveItemDown(nodeProps: NodeProps) {\n runPatches(\n getMoveItemPatch({\n nodeProps,\n localTree,\n direction: 'down',\n }),\n )\n }\n\n return {\n handleMovedNode,\n addItem,\n removeItem,\n moveItemUp,\n moveItemDown,\n duplicateItem,\n }\n}\n","import {isDescendant} from '@nosferatu500/react-sortable-tree'\nimport {cyan, gray, red} from '@sanity/color'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {DragHandleIcon} from '@sanity/icons/DragHandle'\nimport {Box, Button, Flex, Spinner} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nconst Root = styled.div`\n // Adapted from react-sortable-tree/style.css\n &[data-landing='true'] > *,\n &[data-cancel='true'] > * {\n opacity: 0 !important;\n }\n &[data-landing='true']::before,\n &[data-cancel='true']::before {\n background-color: ${cyan[50].hex};\n border: 2px dashed ${gray[400].hex};\n border-radius: 3px;\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n }\n\n &[data-cancel='true']::before {\n background-color: ${red[50].hex};\n }\n`\n\n/**\n * Customization of react-sortable-tree's default node.\n * Created in order to use Sanity UI for styles.\n * Reference: https://github.com/frontend-collective/react-sortable-tree/blob/master/src/node-renderer-default.js\n */\nconst NodeContentRenderer: any = (props: any) => {\n const {\n node,\n path,\n treeIndex,\n canDrag = false,\n canDrop,\n connectDragSource,\n connectDragPreview,\n toggleChildrenVisibility,\n draggedNode,\n didDrop,\n isDragging,\n } = props\n const nodeTitle = node.title\n const Handle = useMemo(() => {\n if (!canDrag) {\n return null\n }\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n return <Spinner />\n }\n\n const button = (\n <Button\n mode=\"bleed\"\n paddingX={0}\n paddingY={1}\n style={{\n cursor: node.publishedId ? 'grab' : 'default',\n fontSize: '1.5625rem',\n }}\n data-ui=\"DragHandleButton\"\n data-drag-handle={canDrag}\n disabled={!node.publishedId}\n >\n <DragHandleIcon style={{marginBottom: '-0.1em'}} />\n </Button>\n )\n\n // Don't allow editors to drag invalid documents\n if (!node.publishedId) {\n return <div>{button}</div>\n }\n\n // Show the handle used to initiate a drag-and-drop\n return <div ref={connectDragSource}>{button}</div>\n }, [canDrag, node, connectDragSource])\n\n const isDraggedDescendant = draggedNode && isDescendant(draggedNode, node)\n const isLandingPadActive = !didDrop && isDragging\n\n return (\n <Box style={{position: 'relative'}}>\n {toggleChildrenVisibility &&\n node.children &&\n (node.children.length > 0 || typeof node.children === 'function') && (\n <div\n style={{\n position: 'absolute',\n left: '-2px',\n top: '40%',\n transform: 'translate(-100%, -50%)',\n }}\n >\n <Button\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n icon={\n node.expanded ? (\n <ChevronDownIcon color={gray[200].hex} />\n ) : (\n <ChevronRightIcon color={gray[200].hex} />\n )\n }\n mode=\"bleed\"\n fontSize={2}\n padding={1}\n type=\"button\"\n onClick={() =>\n toggleChildrenVisibility?.({\n node,\n path,\n treeIndex,\n })\n }\n />\n </div>\n )}\n\n <div ref={connectDragPreview}>\n <Root\n data-landing={isLandingPadActive}\n data-cancel={isLandingPadActive && !canDrop}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n }}\n >\n <Flex align=\"center\">\n {Handle}\n {typeof nodeTitle === 'function' ? nodeTitle({node, path, treeIndex}) : nodeTitle}\n </Flex>\n </Root>\n </div>\n </Box>\n )\n}\n\nexport default NodeContentRenderer\n","import {Box, Card, type CardTone, Stack, Text} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\ninterface PlaceholderDropzoneProps {\n title: string\n subtitle?: string\n isOver?: boolean\n canDrop?: boolean\n children?: ReactNode\n}\n\nconst PlaceholderDropzone = (props: PlaceholderDropzoneProps) => {\n const isValid = props.isOver && props.canDrop\n const isInvalid = props.isOver && !props.canDrop\n let tone: CardTone = 'transparent'\n if (isValid) {\n tone = 'positive'\n }\n if (isInvalid) {\n tone = 'caution'\n }\n return (\n <Box padding={3}>\n <Card\n padding={5}\n radius={2}\n border\n tone={tone}\n style={{\n borderStyle: props.isOver ? undefined : 'dashed',\n }}\n >\n <Stack gap={2} style={{textAlign: 'center'}}>\n <Text size={2} as=\"h2\" muted>\n {!props.isOver && props.title}\n {isValid && 'Drop here'}\n {isInvalid && 'Invalid location or element'}\n </Text>\n {props.subtitle && <Text size={1}>{props.subtitle}</Text>}\n {props.children}\n </Stack>\n </Card>\n </Box>\n )\n}\n\nexport default PlaceholderDropzone\n","import {blue} from '@sanity/color'\nimport type {ReactNode} from 'react'\nimport {createGlobalStyle} from 'styled-components'\n\n// Adapted from react-sortable-tree/src/tree-node.js\nconst ScaffoldStyles = createGlobalStyle`\n .rst__lineBlock,\n .rst__absoluteLineBlock {\n height: 100%;\n position: relative;\n display: inline-block;\n --stroke-width: 3px;\n }\n\n .rst__absoluteLineBlock {\n position: absolute;\n top: 0;\n }\n\n /* Highlight line for pointing to dragged row destination\n ========================================================================== */\n /**\n * +--+--+\n * | | |\n * | | |\n * | | |\n * +--+--+\n */\n .rst__highlightLineVertical {\n z-index: 3;\n }\n .rst__highlightLineVertical::before {\n position: absolute;\n content: '';\n background-color: ${blue[400].hex};\n width: calc(var(--stroke-width) * 2);\n margin-left: calc(var(--stroke-width) * -1);\n left: 50%;\n top: 0;\n height: 100%;\n }\n\n @keyframes arrow-pulse {\n 0% {\n transform: translate(0, 0);\n opacity: 0;\n }\n 30% {\n transform: translate(0, 300%);\n opacity: 1;\n }\n 70% {\n transform: translate(0, 700%);\n opacity: 1;\n }\n 100% {\n transform: translate(0, 1000%);\n opacity: 0;\n }\n }\n .rst__highlightLineVertical::after {\n content: '';\n position: absolute;\n height: 0;\n margin-left: calc(var(--stroke-width) * -1);\n left: 50%;\n top: 0;\n border-left: var(--stroke-width) solid transparent;\n border-right: var(--stroke-width) solid transparent;\n border-top: var(--stroke-width) solid white;\n animation: arrow-pulse 1s infinite linear both;\n }\n\n /**\n * +-----+\n * | |\n * | +--+\n * | | |\n * +--+--+\n */\n .rst__highlightTopLeftCorner::before {\n z-index: 3;\n content: '';\n position: absolute;\n border-top: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n border-left: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n box-sizing: border-box;\n height: calc(50% + var(--stroke-width));\n top: 50%;\n margin-top: calc(var(--stroke-width) * -1);\n right: 0;\n width: calc(50% + var(--stroke-width));\n }\n\n /**\n * +--+--+\n * | | |\n * | | |\n * | +->|\n * +-----+\n */\n .rst__highlightBottomLeftCorner {\n z-index: 3;\n }\n .rst__highlightBottomLeftCorner::before {\n content: '';\n position: absolute;\n border-bottom: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n border-left: solid calc(var(--stroke-width) * 2) ${blue[400].hex};\n box-sizing: border-box;\n height: calc(100% + var(--stroke-width));\n top: 0;\n right: calc(var(--stroke-width) * 3);\n width: calc(50% - calc(var(--stroke-width) * 2));\n }\n\n .rst__highlightBottomLeftCorner::after {\n content: '';\n position: absolute;\n height: 0;\n right: 0;\n top: 100%;\n margin-top: calc(var(--stroke-width) * -3);\n border-top: calc(var(--stroke-width) * 3) solid transparent;\n border-bottom: calc(var(--stroke-width) * 3) solid transparent;\n border-left: calc(var(--stroke-width) * 3) solid ${blue[400].hex};\n }\n\n .rst__unclickable {\n pointer-events: none;\n margin-top: -calc(var(--stroke-width) * 3);\n }\n`\n\nconst TreeNodeRendererScaffold = (props: any) => {\n const {\n lowerSiblingCounts,\n scaffoldBlockPxWidth,\n listIndex,\n swapDepth,\n swapFrom,\n swapLength,\n treeIndex,\n } = props\n\n // Construct the scaffold representing the structure of the tree\n const scaffold: ReactNode[] = lowerSiblingCounts.map((lowerSiblingCount: number, i: number) => {\n if (lowerSiblingCount < 0 || treeIndex === listIndex || i !== swapDepth) {\n return null\n }\n\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = ''\n\n if (listIndex === (swapFrom || 0) + (swapLength || 0) - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner'\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner'\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical'\n }\n\n const style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i,\n }\n\n return (\n <div\n key={i}\n style={style}\n className={`rst__unclickable rst__absoluteLineBlock ${highlightLineClass || ''}`}\n tabIndex={-1}\n />\n )\n })\n\n return (\n <>\n {scaffold}\n <ScaffoldStyles />\n </>\n )\n}\n\nexport default TreeNodeRendererScaffold\n","import {Children, type ReactElement, cloneElement} from 'react'\n\nimport TreeNodeRendererScaffold from './TreeNodeRendererScaffold'\n\n/**\n * To prevent expand buttons from overflowing on the left, we add a minimum left padding to all entries\n */\nconst BASE_LEFT_PADDING = 10\nconst NESTING_PADDING = 14\n\nconst TreeNodeRenderer: any = (props: any) => {\n const {children, lowerSiblingCounts, connectDropTarget, isOver, draggedNode, canDrop} = props\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length\n\n return (\n <div ref={connectDropTarget} style={props.style} data-tree-row=\"\">\n <div\n style={{\n // prettier-ignore\n paddingLeft: `${BASE_LEFT_PADDING + (NESTING_PADDING * scaffoldBlockCount)}px`,\n }}\n >\n {Children.map(children, (child) =>\n cloneElement(child as ReactElement<any>, {\n isOver,\n canDrop,\n draggedNode,\n }),\n )}\n </div>\n <TreeNodeRendererScaffold {...props} />\n </div>\n )\n}\n\nexport default TreeNodeRenderer\n","import type {SortableTree} from '@nosferatu500/react-sortable-tree'\nimport type {ComponentProps} from 'react'\n\nimport NodeContentRenderer from '../components/NodeContentRenderer'\nimport PlaceholderDropzone from '../components/PlaceholderDropzone'\nimport TreeNodeRenderer from '../components/TreeNodeRenderer'\n\ntype ReactSortableTreeProps = ComponentProps<typeof SortableTree>\n\nexport default function getCommonTreeProps({\n placeholder,\n}: {\n placeholder: {\n title: string\n subtitle?: string\n }\n}): Partial<ReactSortableTreeProps> {\n return {\n theme: {\n nodeContentRenderer: NodeContentRenderer,\n placeholderRenderer: (props: any) => <PlaceholderDropzone {...placeholder} {...props} />,\n treeNodeRenderer: TreeNodeRenderer,\n style: {height: '100%'},\n innerStyle: undefined,\n scaffoldBlockPxWidth: 44,\n slideRegionSize: 100,\n },\n }\n}\n","import {type TreeItem, getVisibleNodeCount} from '@nosferatu500/react-sortable-tree'\n\nexport default function getTreeHeight(treeData: TreeItem[], rowHeight: number): string {\n const visibleNodeCount = getVisibleNodeCount({treeData})\n\n // prettier-ignore\n return `${50 + (rowHeight * visibleNodeCount)}px`\n}\n","/**\n * react-sortable-tree emits a lot of random errors when dragging to invalid states,\n * even when drag-targets are disabled.\n *\n * This boundary is a workaround so users are not pestered with error-toasts for things\n * that have no functional impact.\n *\n * This boundry does NOT handle errors that happen in the React dnd\n * event handlers, so there is addtional workarounds in the\n * DnDManager.\n * */\nexport const TreeEditorErrorBoundary = (props: any) => {\n return props.children\n}\n","import {\n SortableTreeWithoutDndContext as SortableTree,\n type TreeItem,\n} from '@nosferatu500/react-sortable-tree'\nimport {AddCircleIcon} from '@sanity/icons/AddCircle'\nimport {Box, Button, Card, Flex, Spinner, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {DndProvider} from 'react-dnd'\nimport {HTML5Backend} from 'react-dnd-html5-backend'\nimport type {PatchEvent} from 'sanity'\n\nimport useAllItems from '../hooks/useAllItems'\nimport useLocalTree from '../hooks/useLocalTree'\nimport {TreeOperationsContext} from '../hooks/useTreeOperations'\nimport useTreeOperationsProvider from '../hooks/useTreeOperationsProvider'\nimport type {Optional, StoredTreeItem, TreeDeskStructureProps} from '../types'\nimport getCommonTreeProps from '../utils/getCommonTreeProps'\nimport getTreeHeight from '../utils/getTreeHeight'\nimport {getUnaddedItems} from '../utils/treeData'\nimport type {HandleMovedNodeData} from '../utils/treePatches'\nimport DocumentInNode from './DocumentInNode'\nimport {TreeEditorErrorBoundary} from './TreeEditorErrorBoundary'\n\ninterface TreeEditorProps {\n tree: StoredTreeItem[]\n onChange: (patch: PatchEvent) => void\n options: Optional<TreeDeskStructureProps, 'documentId'>\n patchPrefix?: string\n}\n\n/**\n * The loaded tree users interact with\n */\nfunction TreeEditor(props: TreeEditorProps) {\n const {status: allItemsStatus, allItems} = useAllItems(props.options)\n const unAddedItems = getUnaddedItems({tree: props.tree, allItems})\n\n const {localTree, handleVisibilityToggle} = useLocalTree({\n tree: props.tree,\n allItems,\n })\n\n const operations = useTreeOperationsProvider({\n patchPrefix: props.patchPrefix,\n onChange: props.onChange,\n localTree,\n })\n\n const [context, setContext] = useState<HTMLElement | null>(null)\n const [treeViewHeight, setTreeViewHeight] = useState<string>('')\n\n const documentId = props.options.documentId\n\n const updateTreeViewHeight = useCallback(() => {\n const el = document.querySelector<HTMLElement>(`#${documentId} [data-tree-row]`)\n const rowHeight = el?.offsetHeight || 51\n setTreeViewHeight(getTreeHeight(localTree, rowHeight))\n }, [documentId, localTree])\n\n useEffect(() => {\n // Wait for dom to load before (re)calculating the tree height.\n const timeout = setTimeout(updateTreeViewHeight)\n return () => clearTimeout(timeout)\n }, [updateTreeViewHeight])\n\n const onMoveNode = useCallback(\n // The tree nodes are always our own LocalTreeItem objects\n (data: unknown) => operations.handleMovedNode(data as HandleMovedNodeData),\n [operations],\n )\n\n const treeProps = useMemo(\n () =>\n getCommonTreeProps({\n placeholder: {\n title: 'Add items from the list below',\n },\n }),\n [],\n )\n\n const operationContext = useMemo(\n () => ({...operations, allItemsStatus}),\n [operations, allItemsStatus],\n )\n\n return (\n <TreeEditorErrorBoundary>\n {/*Use this Box-wrapper to get a context Element to prevent DndProvider to have to HTML% backend at the same time https://github.com/react-dnd/react-dnd/issues/186#issuecomment-978206387 */}\n <Box id={documentId} ref={setContext}>\n {context ? (\n <DndProvider backend={HTML5Backend} options={{rootElement: context}}>\n <TreeOperationsContext.Provider value={operationContext}>\n <Stack gap={4} paddingTop={4}>\n <Card\n style={{minHeight: treeViewHeight}}\n // Only include borderBottom if there's something to show in unadded items\n borderBottom={allItemsStatus !== 'success' || unAddedItems?.length > 0}\n >\n <SortableTree\n maxDepth={props.options.maxDepth}\n onChange={doNothingOnChange}\n onVisibilityToggle={handleVisibilityToggle}\n canDrop={canDrop}\n onMoveNode={onMoveNode}\n // Stable keys keep row identity (and their DOM nodes) intact while\n // rows are repositioned during a drag\n getNodeKey={getNodeKey}\n treeData={localTree}\n // The tree renders inside a virtualized list which requires\n // a definite height (percentages would resolve to 0)\n style={treeViewHeight ? {height: treeViewHeight} : undefined}\n {...treeProps}\n />\n </Card>\n\n {allItemsStatus === 'success' && unAddedItems?.length > 0 && (\n <Stack gap={1} paddingX={2} paddingTop={3}>\n <Stack gap={2} paddingX={2} paddingBottom={3}>\n <Text size={2} as=\"h2\" weight=\"semibold\">\n Add more items\n </Text>\n <Text size={1} muted>\n Only published documents are shown.\n </Text>\n </Stack>\n {unAddedItems.map((item) => (\n <DocumentInNode\n key={item.publishedId || item.draftId}\n item={item}\n action={\n <Tooltip\n portal\n placement=\"left\"\n content={\n <Box padding={2}>\n <Text size={1}>Add to list</Text>\n </Box>\n }\n >\n <Button\n onClick={() => {\n operations.addItem(item)\n }}\n mode=\"bleed\"\n icon={AddCircleIcon}\n style={{cursor: 'pointer'}}\n />\n </Tooltip>\n }\n />\n ))}\n </Stack>\n )}\n {allItemsStatus === 'loading' && (\n <Flex padding={4} align={'center'} justify={'center'}>\n <Spinner size={3} muted />\n </Flex>\n )}\n {allItemsStatus === 'error' && (\n <Flex padding={4} align={'center'} justify={'center'}>\n <Text size={2} weight=\"semibold\">\n Something went wrong when loading documents\n </Text>\n </Flex>\n )}\n </Stack>\n </TreeOperationsContext.Provider>\n </DndProvider>\n ) : null}\n </Box>\n </TreeEditorErrorBoundary>\n )\n}\n\nfunction canDrop({nextPath, prevPath}: {nextPath: number[]; prevPath: number[]}) {\n const insideItself =\n nextPath.length >= prevPath.length &&\n prevPath.every((pathIndex, index) => nextPath[index] === pathIndex)\n return !insideItself\n}\n\nconst doNothingOnChange = () => {\n // Do nothing. onMoveNode will do all the work\n}\n\nconst getNodeKey = (data: {node: TreeItem}) => data.node['_key'] as string\n\nexport default TreeEditor\n","// Adapted from @sanity/form-builder/src/sanity/utils/gradientPatchAdapter.ts\nimport {arrayToJSONMatchPath} from '@sanity/mutator'\n\ninterface Patch {\n type?: string\n path?: any[]\n position?: string\n items?: unknown[]\n value?: unknown\n}\n\ntype GradientPatch = Record<string, any>\n\nexport function toGradient(patches: Patch[]): GradientPatch[] {\n return patches.map(toGradientPatch)\n}\n\nfunction toGradientPatch(patch: Patch): GradientPatch {\n const matchPath = arrayToJSONMatchPath(patch.path || [])\n if (patch.type === 'insert') {\n const {position, items} = patch\n return {\n insert: {\n [position as string]: matchPath,\n items: items,\n },\n }\n }\n\n if (patch.type === 'unset') {\n return {\n unset: [matchPath],\n }\n }\n\n if (!patch.type) {\n throw new Error(`Missing patch type in patch ${JSON.stringify(patch)}`)\n }\n if (matchPath) {\n return {\n [patch.type]: {\n [matchPath]: patch.value,\n },\n }\n }\n return {\n [patch.type]: patch.value,\n }\n}\n","import {Box, Flex, Spinner} from '@sanity/ui'\nimport {useCallback, useEffect} from 'react'\nimport {type PatchEvent, useDocumentOperation, useEditState} from 'sanity'\n\nimport DeskWarning from './components/DeskWarning'\nimport TreeEditor from './components/TreeEditor'\nimport type {DocumentOperations, StoredTreeItem, TreeDeskStructureProps} from './types'\nimport {toGradient} from './utils/gradientPatchAdapter'\nimport injectNodeTypeInPatches, {DEFAULT_DOC_TYPE} from './utils/injectNodeTypeInPatches'\n\ninterface ComponentProps {\n options: TreeDeskStructureProps\n}\n\nexport const DEFAULT_FIELD_KEY = 'tree'\n\nconst TreeDeskStructure = (props: ComponentProps) => {\n const treeDocType = props.options.documentType || DEFAULT_DOC_TYPE\n const treeFieldKey = props.options.fieldKeyInDocument || DEFAULT_FIELD_KEY\n const {published, draft, liveEdit} = useEditState(props.options.documentId, treeDocType)\n const {patch} = useDocumentOperation(props.options.documentId, treeDocType) as DocumentOperations\n\n const treeValue = (published?.[treeFieldKey] || []) as StoredTreeItem[]\n\n const handleChange = useCallback(\n (patchEvent: PatchEvent) => {\n if (!patch?.execute) {\n return\n }\n patch.execute(toGradient(injectNodeTypeInPatches(patchEvent.patches, treeDocType)))\n },\n [patch, treeDocType],\n )\n\n const publishedId = published?._id\n\n useEffect(() => {\n if (!publishedId && patch?.execute && !patch?.disabled) {\n // If no published document, create it\n patch.execute([{setIfMissing: {[treeFieldKey]: []}}])\n }\n }, [publishedId, patch, treeFieldKey])\n\n if (!liveEdit) {\n return (\n <DeskWarning\n title=\"Invalid configuration\"\n subtitle=\"The `documentType` passed to `createDeskHiearchy` isn't live editable. \\nTo continue using this plugin, add `liveEdit: true` to your custom schema type or unset `documentType` in your hierarchy configuration.\"\n />\n )\n }\n\n if (draft?._id) {\n return (\n <DeskWarning\n title=\"This hierarchy tree contains a draft\"\n subtitle=\"Click on the button below to publish your draft in order to continue editing the live\n published document.\"\n />\n )\n }\n\n if (!published?._id) {\n return (\n <Flex padding={5} align={'center'} justify={'center'} height={'fill'}>\n <Spinner width={4} muted />\n </Flex>\n )\n }\n\n return (\n <Box paddingBottom={5} paddingRight={2}>\n <TreeEditor\n options={props.options}\n tree={treeValue}\n onChange={handleChange}\n patchPrefix={treeFieldKey}\n />\n </Box>\n )\n}\n\nexport default TreeDeskStructure\n","const ERROR_MESSAGES = {\n invalidDocumentId: 'Please add a documentId to your tree',\n invalidDocumentType: 'Please add a valid documentType to createHierarchicalSchemas',\n invalidReferenceTo: \"Missing valid 'referenceTo' value\",\n}\n\nexport default function throwError(message: keyof typeof ERROR_MESSAGES, extraContext = ''): void {\n throw new Error(`[hierarchical input] ${ERROR_MESSAGES[message]} ${extraContext}`)\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport type {FC} from 'react'\n\nimport TreeDeskStructure from './TreeDeskStructure'\nimport type {TreeDeskStructureProps} from './types'\nimport throwError from './utils/throwError'\n\nexport interface TreeProps extends TreeDeskStructureProps {\n /**\n * Visible title above the tree.\n * Also used as the label in the desk list item.\n */\n title: string\n\n /**\n * Optional icon for rendering the item in the desk structure.\n */\n icon?: any\n\n /**\n * The `ConfigContext` available as the second parameter of the structure resolver.\n */\n context?: any\n /**\n * The `StructureBuilder` (`S`) available as the first parameter of the structure resolver.\n */\n S?: any\n /**\n * Restrict document types that can be created.\n */\n creatableTypes?: string[]\n}\n\nconst deskTreeValidator = (props: TreeProps): FC => {\n const {documentId, referenceTo} = props\n if (typeof documentId !== 'string' && !documentId) {\n throwError('invalidDocumentId')\n }\n if (!Array.isArray(referenceTo)) {\n throwError('invalidReferenceTo', `(documentId \"${documentId}\")`)\n }\n\n return (deskProps) => <TreeDeskStructure {...deskProps} options={props} />\n}\n\nexport default function createDeskHierarchy(props: TreeProps) {\n const {documentId, referenceTo, referenceOptions, context, S, creatableTypes} = props\n if (!S || !context) {\n throw new Error(\n 'Invalid configuration. S or context props are undefined. ' +\n 'These props are available as function parameters when configuring structure, and must be passed along to createDeskHierarchy. ' +\n 'Confer the plugin README for example usage.',\n )\n }\n\n const {schema} = context\n\n const safelyCreatableTypes =\n creatableTypes && !creatableTypes.some((type) => referenceTo.indexOf(type))\n ? creatableTypes\n : referenceTo\n\n let mainList = (\n referenceTo?.length === 1\n ? S.documentTypeList(referenceTo[0]).schemaType(referenceTo[0])\n : S.documentList().filter('_type in $types').params({types: referenceTo})\n )\n .id(documentId)\n .menuItems(\n (safelyCreatableTypes || []).map((schemaType) =>\n S.menuItem()\n .intent({\n type: 'create',\n params: {type: schemaType},\n })\n .title(`Create ${schema.get(schemaType)?.title}`)\n .icon(schema.get(schemaType)?.icon || AddIcon),\n ),\n )\n .canHandleIntent((intent: string, c: Record<string, unknown>) => {\n // Can edit itself\n if (intent === 'edit' && c['id'] === props.documentId) {\n return true\n }\n // Can create & edit referenced document types\n const intentType = c['type']\n if (typeof intentType === 'string' && safelyCreatableTypes.includes(intentType)) {\n return true\n }\n return false\n })\n\n if (referenceOptions?.filter) {\n mainList = mainList.filter(referenceOptions.filter)\n }\n\n if (referenceOptions?.filterParams) {\n mainList = mainList.params(referenceOptions.filterParams)\n }\n\n return S.listItem()\n .id(documentId)\n .title(props.title || documentId)\n .icon(props.icon)\n .child(\n Object.assign(\n mainList.serialize(),\n {\n type: 'component',\n component: deskTreeValidator(props),\n options: props,\n __preserveInstance: true,\n },\n props.title ? {title: props.title} : {},\n ),\n )\n}\n","import {useCallback} from 'react'\nimport {FormField, type FormNodePresence, PatchEvent, type Path} from 'sanity'\n\nimport TreeEditor from './components/TreeEditor'\nimport type {StoredTreeItem, TreeFieldSchema} from './types'\nimport injectNodeTypeInPatches, {DEFAULT_DOC_TYPE} from './utils/injectNodeTypeInPatches'\n\nexport interface TreeInputComponentProps {\n type: TreeFieldSchema\n value: StoredTreeItem[]\n level: number\n onChange: (event: unknown) => void\n onFocus: (path: Path) => void\n onBlur: () => void\n focusPath: Path\n readOnly: boolean\n presence: FormNodePresence[]\n}\n\nconst EMPTY_PATH: Path = []\n\nconst TreeInputComponent = (props: TreeInputComponentProps) => {\n const documentType = props.type.options.documentType || DEFAULT_DOC_TYPE\n const {onChange: onFieldChange} = props\n\n const onChange = useCallback(\n (patch: any) => {\n const patches = injectNodeTypeInPatches(patch?.patches, documentType)\n onFieldChange(new PatchEvent(patches))\n },\n [documentType, onFieldChange],\n )\n\n return (\n <FormField\n description={props.type.description} // Creates description from schema\n title={props.type.title} // Creates label from schema title\n __unstable_presence={props.presence} // Handles presence avatars\n path={EMPTY_PATH}\n >\n <TreeEditor options={props.type.options} tree={props.value || []} onChange={onChange} />\n </FormField>\n )\n}\n\nexport default TreeInputComponent\n","import type {FC} from 'react'\nimport type {ArraySchemaType} from 'sanity'\n\nimport {DEFAULT_FIELD_KEY} from './TreeDeskStructure'\nimport TreeInputComponent from './TreeInputComponent'\nimport type {TreeDeskStructureProps, TreeFieldSchema} from './types'\nimport {\n INTERNAL_NODE_ARRAY_TYPE,\n INTERNAL_NODE_TYPE,\n INTERNAL_NODE_VALUE_TYPE,\n getSchemaTypeName,\n} from './utils/injectNodeTypeInPatches'\nimport throwError from './utils/throwError'\n\ntype SchemaOptions = Omit<TreeDeskStructureProps, 'documentId' | 'maxDepth'>\n\nfunction createHierarchicalNodeValueType({\n referenceTo,\n referenceOptions,\n documentType,\n}: SchemaOptions) {\n return {\n // when used inside the field, name & type are overwritten by createHierarchicalNodeType\n name: documentType ? getSchemaTypeName(documentType, 'nodeValue') : INTERNAL_NODE_VALUE_TYPE,\n type: 'object',\n title: `Hierarchical node value (${documentType})`,\n\n fields: [\n {name: 'docType', type: 'string'},\n {\n name: 'reference',\n type: 'reference',\n weak: true,\n to: referenceTo.map((type) => ({type})),\n options: referenceOptions,\n },\n ],\n }\n}\n\nfunction createHierarchicalNodeType(options: SchemaOptions) {\n return {\n // name & type are overwritten by createHierarchicalField\n name: options.documentType\n ? getSchemaTypeName(options.documentType, 'node')\n : INTERNAL_NODE_TYPE,\n title: `Hierarchical node (${options.documentType})`,\n type: 'object',\n fields: [\n {name: 'parent', type: 'string'},\n\n options.documentType\n ? {name: 'value', type: getSchemaTypeName(options.documentType, 'nodeValue')}\n : // If no documentType is defined, use an anonymized inline object to avoid\n // having to define another custom schema type through the plugin\n {\n ...createHierarchicalNodeValueType(options),\n name: 'value',\n type: 'object',\n },\n ],\n }\n}\n\nfunction createHierarchicalArrayType(options: SchemaOptions) {\n return {\n // name & type are overwritten by createHierarchicalField\n name: options.documentType\n ? getSchemaTypeName(options.documentType, 'array')\n : INTERNAL_NODE_ARRAY_TYPE,\n title: `Hierarchical array of nodes (${options.documentType})`,\n type: 'array',\n of: [\n options.documentType\n ? {type: getSchemaTypeName(options.documentType, 'node')}\n : createHierarchicalNodeType(options),\n ],\n }\n}\n\nfunction createHierarchicalField({name, title, options, ...rest}: TreeFieldSchema): Omit<\n ArraySchemaType,\n 'type' | 'jsonType' | 'of'\n> & {\n type: string\n inputComponent: FC<any>\n of?: any[]\n} {\n if (!Array.isArray(options?.referenceTo)) {\n throwError('invalidReferenceTo', `(field of name \"${name}\")`)\n }\n\n return {\n ...rest,\n name,\n title,\n inputComponent: TreeInputComponent,\n options,\n ...(options.documentType\n ? {type: getSchemaTypeName(options.documentType, 'array')}\n : {\n ...createHierarchicalArrayType(options),\n name,\n }),\n }\n}\n\nfunction createHierarchicalDocType(options: SchemaOptions) {\n return {\n name: options.documentType,\n title: 'Hierarchical tree',\n type: 'document',\n // The plugin needs to define a `schemaType` with liveEdit enabled so that\n // `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.\n liveEdit: true,\n fields: [\n createHierarchicalField({\n name: options.fieldKeyInDocument || DEFAULT_FIELD_KEY,\n title: 'Hierarchical Tree',\n options,\n }),\n ],\n preview: {\n select: {\n id: '_id',\n tree: 'tree',\n },\n prepare({id, tree}: {id: string; tree: unknown[]}): Record<string, string> {\n return {\n title: `Hierarchical documents (ID: ${id})`,\n subtitle: `${tree?.length || 0} document(s) in its list.`,\n }\n },\n },\n }\n}\n\nexport default function createHierarchicalSchemas(options: SchemaOptions) {\n if (!Array.isArray(options.referenceTo) || options.referenceTo.length <= 0) {\n throwError('invalidReferenceTo')\n }\n if (!options.documentType) {\n throwError('invalidDocumentType')\n }\n\n return [\n createHierarchicalDocType(options),\n createHierarchicalArrayType(options),\n createHierarchicalNodeType(options),\n createHierarchicalNodeValueType(options),\n ]\n}\n","import {defineType} from 'sanity'\n\nexport default defineType({\n name: 'hierarchy.tree',\n title: 'Hierarchical tree',\n type: 'document',\n // The plugin needs to define a `schemaType` with liveEdit enabled so that\n // `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.\n liveEdit: true,\n // Let's avoid defining the actual hierarchical field, else GraphQL users won't be able to deploy schemas\n fields: [\n {\n name: 'unusedField',\n title: 'Unused field',\n type: 'string',\n hidden: true,\n },\n ],\n})\n","import {definePlugin} from 'sanity'\n\nimport {default as createDeskHierarchy, type TreeProps} from './createDeskHierarchy'\nimport {default as createHierarchicalSchemas} from './createHierarchicalSchemas'\nimport {default as hierarchyTree} from './schemas/hierarchy.tree'\nimport {default as flatDataToTree} from './utils/flatDataToTree'\n\nexport {createDeskHierarchy, createHierarchicalSchemas, flatDataToTree, hierarchyTree}\nexport type {TreeProps}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {hierarchicalDocumentList} from '@sanity/hierarchical-document-list'\n *\n * export default defineConfig({\n * // ...\n * plugins: [hierarchicalDocumentList()],\n * })\n * ```\n */\n\nexport const hierarchicalDocumentList = definePlugin({\n name: 'sanity-plugin-hierarchical-document-list',\n})\n"],"mappings":"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"}
\ No newline at end of file Index: package/dist/index.d.ts
===================================================================
--- package/dist/index.d.ts
+++ package/dist/index.d.ts
@@ -1,6 +1,7 @@
import { ArraySchemaType } from "sanity";
import { FC } from "react";
+import "@nosferatu500/react-sortable-tree";
declare const INTERNAL_NODE_TYPE: string;
declare const INTERNAL_NODE_VALUE_TYPE: string;
interface SanityReference {
_type: 'reference';
@@ -172,12 +173,9 @@
select: {
id: string;
tree: string;
};
- prepare({
- id,
- tree
- }: {
+ prepare({ id, tree }: {
id: string;
tree: unknown[];
}): Record<string, string>;
};