@sanity/hierarchical-document-list 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -96,7 +96,7 @@ declare function createHierarchicalSchemas(options: SchemaOptions): ({
|
|
|
96
96
|
title: string;
|
|
97
97
|
type: string;
|
|
98
98
|
liveEdit: boolean;
|
|
99
|
-
fields: (Omit<ArraySchemaType<unknown>, "
|
|
99
|
+
fields: (Omit<ArraySchemaType<unknown>, "of" | "type" | "jsonType"> & {
|
|
100
100
|
type: string;
|
|
101
101
|
inputComponent: FC<any>;
|
|
102
102
|
of?: any[];
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import * as Patch from "sanity";
|
|
2
2
|
import { useClient, useRelativeTime, TextWithTone, useSchema, Preview, IntentButton, setIfMissing, PatchEvent, prefixPath, useEditState, useDocumentOperation, FormField, defineType, definePlugin } from "sanity";
|
|
3
3
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
4
|
-
import {
|
|
4
|
+
import { AddIcon } from "@sanity/icons/Add";
|
|
5
5
|
import { c } from "react/compiler-runtime";
|
|
6
6
|
import { Heading, Box, Container, Card, Stack, Text, Inline, Tooltip, Flex, MenuButton, Button, MenuItem, MenuDivider, Menu, Spinner } from "@sanity/ui";
|
|
7
7
|
import { Fragment as Fragment$1, useState, useReducer, useEffect, createContext, useContext, Children, cloneElement } from "react";
|
|
8
8
|
import { getFlatDataFromTree, isDescendant, getVisibleNodeCount, SortableTreeWithoutDndContext } from "@nosferatu500/react-sortable-tree";
|
|
9
|
+
import { AddCircleIcon } from "@sanity/icons/AddCircle";
|
|
9
10
|
import { DndProvider } from "react-dnd";
|
|
10
11
|
import { HTML5Backend } from "react-dnd-html5-backend";
|
|
11
12
|
import { randomKey } from "@sanity/util/content";
|
|
13
|
+
import { HelpCircleIcon } from "@sanity/icons/HelpCircle";
|
|
12
14
|
import { usePaneRouter } from "sanity/structure";
|
|
15
|
+
import { EditIcon } from "@sanity/icons/Edit";
|
|
16
|
+
import { PublishIcon } from "@sanity/icons/Publish";
|
|
17
|
+
import { CopyIcon } from "@sanity/icons/Copy";
|
|
18
|
+
import { EllipsisVerticalIcon } from "@sanity/icons/EllipsisVertical";
|
|
19
|
+
import { LaunchIcon } from "@sanity/icons/Launch";
|
|
20
|
+
import { RemoveCircleIcon } from "@sanity/icons/RemoveCircle";
|
|
13
21
|
import { cyan, gray, red, blue } from "@sanity/color";
|
|
22
|
+
import { ChevronDownIcon } from "@sanity/icons/ChevronDown";
|
|
23
|
+
import { ChevronRightIcon } from "@sanity/icons/ChevronRight";
|
|
24
|
+
import { DragHandleIcon } from "@sanity/icons/DragHandle";
|
|
14
25
|
import { styled, createGlobalStyle } from "styled-components";
|
|
15
26
|
import { arrayToJSONMatchPath } from "@sanity/mutator";
|
|
16
27
|
const WrapCodeBlocks = (t0) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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, PublishIcon} from '@sanity/icons'\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'\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, EllipsisVerticalIcon, LaunchIcon, RemoveCircleIcon} from '@sanity/icons'\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, ChevronRightIcon, DragHandleIcon} from '@sanity/icons'\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'\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'\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"],"names":["WrapCodeBlocks","t0","$","_c","text","t1","split","map","_temp","t2","DeskWarning","props","for","maxWidth","title","subtitle","_temp2","t3","children","t4","part","i","Fragment","line","unprefixId","_id","replace","isDraft","startsWith","getDeskFilter","referenceTo","referenceOptions","filterParts","filter","push","join","params","filterParams","docTypes","schemaType","updateItemInState","state","item","newState","publishedId","allItemsReducer","action","type","itemId","published","draft","items","reduce","useAllItems","options","apiVersion","client","useClient","status","setStatus","useState","Symbol","allItems","dispatch","useReducer","handleListener","event","result","documentId","query","fetchInitialData","fetch","listener","listen","subscribe","unsubscribe","useEffect","placeholder","TreeOperationsContext","createContext","addItem","duplicateItem","removeItem","handleMovedNode","moveItemDown","moveItemUp","allItemsStatus","useTreeOperations","useContext","TimeAgo","time","timeAgo","useRelativeTime","toLowerCase","trim","PublishedStatus","document","_updatedAt","t5","t6","DraftStatus","DocumentPreviewStatus","DocumentInNode","value","draftId","undefined","reference","docType","referenceId","_ref","routerPanesState","ChildLink","usePaneRouter","schema","useSchema","pane","some","group","id","isActive","get","flex","draftUpdatedAt","publishedUpdatedAt","_type","NodeActions","nodeProps","operations","node","isValid","EllipsisVerticalIcon","_key","RemoveCircleIcon","t7","CopyIcon","t8","t9","t10","t11","LaunchIcon","IntentLink","t12","t13","portal","tone","placement","t14","flatDataToTree","data","childrenByParent","Map","parentKey","parent","siblings","set","buildNode","getSchemaTypeName","documentType","DEFAULT_DOC_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","INTERNAL_NODE_ARRAY_TYPE","injectNodeTypeInPatches","patchData","Array","isArray","child","newObject","key","Object","keys","includes","dataToEditorTree","tree","visibilityMap","itemsWithTitle","refId","docPair","draftDoc","publishedDoc","enhancedItem","expanded","assign","documentPairToNode","doc","randomKey","_weak","getUnaddedItems","entries","treeItem","flatMap","documentPair","values","normalizeNodeForStorage","useLocalTree","setVisibilityMap","currentMap","handleVisibilityToggle","localTree","getAdjescentNodes","flatTree","treeIndex","isOutsideOfNode","path","leadingNode","slice","reverse","find","followingNode","moveItemInArray","array","fromIndex","toIndex","newArray","target","splice","getLocalFlatDataFromTree","treeData","getFlatDataFromTree","getNodeKey","t","getAddItemPatch","normalizedNode","Patch","insert","getDuplicateItemPatch","newItem","getRemoveItemPatch","keyPath","getChildrenPaths","unset","getMovedNodePatch","nextParentNode","nextPath","nextFlatTree","nextTreeIndex","keyPaths","childKey","getMoveItemPatch","direction","parentNode","useTreeOperationsProvider","runPatches","patches","finalPatches","setIfMissing","prefix","patchPrefix","patchEvent","PatchEvent","from","patch","prefixPath","onChange","Root","styled","div","withConfig","displayName","componentId","cyan","hex","gray","red","NodeContentRenderer","canDrag","canDrop","connectDragSource","connectDragPreview","toggleChildrenVisibility","draggedNode","didDrop","isDragging","nodeTitle","bb0","cursor","fontSize","marginBottom","button","Handle","isDraggedDescendant","isDescendant","isLandingPadActive","position","length","left","top","transform","opacity","PlaceholderDropzone","isOver","isInvalid","borderStyle","textAlign","ScaffoldStyles","createGlobalStyle","blue","TreeNodeRendererScaffold","lowerSiblingCounts","scaffoldBlockPxWidth","listIndex","swapDepth","swapFrom","swapLength","lowerSiblingCount","highlightLineClass","style","width","scaffold","BASE_LEFT_PADDING","NESTING_PADDING","TreeNodeRenderer","connectDropTarget","scaffoldBlockCount","paddingLeft","cloneElement","Children","getCommonTreeProps","theme","nodeContentRenderer","placeholderRenderer","treeNodeRenderer","height","innerStyle","slideRegionSize","getTreeHeight","rowHeight","visibleNodeCount","getVisibleNodeCount","TreeEditorErrorBoundary","TreeEditor","unAddedItems","context","setContext","treeViewHeight","setTreeViewHeight","querySelector","offsetHeight","updateTreeViewHeight","timeout","setTimeout","clearTimeout","onMoveNode","treeProps","operationContext","T0","T1","Box","HTML5Backend","rootElement","minHeight","SortableTree","maxDepth","doNothingOnChange","AddCircleIcon","prevPath","every","pathIndex","index","toGradient","toGradientPatch","matchPath","arrayToJSONMatchPath","Error","JSON","stringify","DEFAULT_FIELD_KEY","TreeDeskStructure","treeDocType","treeFieldKey","fieldKeyInDocument","liveEdit","useEditState","useDocumentOperation","treeValue","execute","handleChange","disabled","ERROR_MESSAGES","invalidDocumentId","invalidDocumentType","invalidReferenceTo","throwError","message","extraContext","deskTreeValidator","deskProps","createDeskHierarchy","S","creatableTypes","safelyCreatableTypes","indexOf","mainList","documentTypeList","documentList","types","menuItems","menuItem","intent","icon","AddIcon","canHandleIntent","c","intentType","listItem","serialize","component","__preserveInstance","EMPTY_PATH","TreeInputComponent","onFieldChange","presence","description","createHierarchicalNodeValueType","name","fields","weak","to","createHierarchicalNodeType","createHierarchicalArrayType","of","createHierarchicalField","rest","inputComponent","createHierarchicalDocType","preview","select","prepare","createHierarchicalSchemas","defineType","hidden","hierarchicalDocumentList","definePlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","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"],"names":["WrapCodeBlocks","t0","$","_c","text","t1","split","map","_temp","t2","DeskWarning","props","for","maxWidth","title","subtitle","_temp2","t3","children","t4","part","i","Fragment","line","unprefixId","_id","replace","isDraft","startsWith","getDeskFilter","referenceTo","referenceOptions","filterParts","filter","push","join","params","filterParams","docTypes","schemaType","updateItemInState","state","item","newState","publishedId","allItemsReducer","action","type","itemId","published","draft","items","reduce","useAllItems","options","apiVersion","client","useClient","status","setStatus","useState","Symbol","allItems","dispatch","useReducer","handleListener","event","result","documentId","query","fetchInitialData","fetch","listener","listen","subscribe","unsubscribe","useEffect","placeholder","TreeOperationsContext","createContext","addItem","duplicateItem","removeItem","handleMovedNode","moveItemDown","moveItemUp","allItemsStatus","useTreeOperations","useContext","TimeAgo","time","timeAgo","useRelativeTime","toLowerCase","trim","PublishedStatus","document","_updatedAt","t5","t6","DraftStatus","DocumentPreviewStatus","DocumentInNode","value","draftId","undefined","reference","docType","referenceId","_ref","routerPanesState","ChildLink","usePaneRouter","schema","useSchema","pane","some","group","id","isActive","get","flex","draftUpdatedAt","publishedUpdatedAt","_type","NodeActions","nodeProps","operations","node","isValid","EllipsisVerticalIcon","_key","RemoveCircleIcon","t7","CopyIcon","t8","t9","t10","t11","LaunchIcon","IntentLink","t12","t13","portal","tone","placement","t14","flatDataToTree","data","childrenByParent","Map","parentKey","parent","siblings","set","buildNode","getSchemaTypeName","documentType","DEFAULT_DOC_TYPE","INTERNAL_NODE_TYPE","INTERNAL_NODE_VALUE_TYPE","INTERNAL_NODE_ARRAY_TYPE","injectNodeTypeInPatches","patchData","Array","isArray","child","newObject","key","Object","keys","includes","dataToEditorTree","tree","visibilityMap","itemsWithTitle","refId","docPair","draftDoc","publishedDoc","enhancedItem","expanded","assign","documentPairToNode","doc","randomKey","_weak","getUnaddedItems","entries","treeItem","flatMap","documentPair","values","normalizeNodeForStorage","useLocalTree","setVisibilityMap","currentMap","handleVisibilityToggle","localTree","getAdjescentNodes","flatTree","treeIndex","isOutsideOfNode","path","leadingNode","slice","reverse","find","followingNode","moveItemInArray","array","fromIndex","toIndex","newArray","target","splice","getLocalFlatDataFromTree","treeData","getFlatDataFromTree","getNodeKey","t","getAddItemPatch","normalizedNode","Patch","insert","getDuplicateItemPatch","newItem","getRemoveItemPatch","keyPath","getChildrenPaths","unset","getMovedNodePatch","nextParentNode","nextPath","nextFlatTree","nextTreeIndex","keyPaths","childKey","getMoveItemPatch","direction","parentNode","useTreeOperationsProvider","runPatches","patches","finalPatches","setIfMissing","prefix","patchPrefix","patchEvent","PatchEvent","from","patch","prefixPath","onChange","Root","styled","div","withConfig","displayName","componentId","cyan","hex","gray","red","NodeContentRenderer","canDrag","canDrop","connectDragSource","connectDragPreview","toggleChildrenVisibility","draggedNode","didDrop","isDragging","nodeTitle","bb0","cursor","fontSize","marginBottom","button","Handle","isDraggedDescendant","isDescendant","isLandingPadActive","position","length","left","top","transform","opacity","PlaceholderDropzone","isOver","isInvalid","borderStyle","textAlign","ScaffoldStyles","createGlobalStyle","blue","TreeNodeRendererScaffold","lowerSiblingCounts","scaffoldBlockPxWidth","listIndex","swapDepth","swapFrom","swapLength","lowerSiblingCount","highlightLineClass","style","width","scaffold","BASE_LEFT_PADDING","NESTING_PADDING","TreeNodeRenderer","connectDropTarget","scaffoldBlockCount","paddingLeft","cloneElement","Children","getCommonTreeProps","theme","nodeContentRenderer","placeholderRenderer","treeNodeRenderer","height","innerStyle","slideRegionSize","getTreeHeight","rowHeight","visibleNodeCount","getVisibleNodeCount","TreeEditorErrorBoundary","TreeEditor","unAddedItems","context","setContext","treeViewHeight","setTreeViewHeight","querySelector","offsetHeight","updateTreeViewHeight","timeout","setTimeout","clearTimeout","onMoveNode","treeProps","operationContext","T0","T1","Box","HTML5Backend","rootElement","minHeight","SortableTree","maxDepth","doNothingOnChange","AddCircleIcon","prevPath","every","pathIndex","index","toGradient","toGradientPatch","matchPath","arrayToJSONMatchPath","Error","JSON","stringify","DEFAULT_FIELD_KEY","TreeDeskStructure","treeDocType","treeFieldKey","fieldKeyInDocument","liveEdit","useEditState","useDocumentOperation","treeValue","execute","handleChange","disabled","ERROR_MESSAGES","invalidDocumentId","invalidDocumentType","invalidReferenceTo","throwError","message","extraContext","deskTreeValidator","deskProps","createDeskHierarchy","S","creatableTypes","safelyCreatableTypes","indexOf","mainList","documentTypeList","documentList","types","menuItems","menuItem","intent","icon","AddIcon","canHandleIntent","c","intentType","listItem","serialize","component","__preserveInstance","EMPTY_PATH","TreeInputComponent","onFieldChange","presence","description","createHierarchicalNodeValueType","name","fields","weak","to","createHierarchicalNodeType","createHierarchicalArrayType","of","createHierarchicalField","rest","inputComponent","createHierarchicalDocType","preview","select","prepare","createHierarchicalSchemas","defineType","hidden","hierarchicalDocumentList","definePlugin"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/hierarchical-document-list",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Sanity Plugin - Hierarchical Document List",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@nosferatu500/react-sortable-tree": "^5.0.0",
|
|
31
31
|
"@sanity/color": "^3.0.6",
|
|
32
|
-
"@sanity/icons": "^
|
|
32
|
+
"@sanity/icons": "^4.1.0",
|
|
33
33
|
"@sanity/mutator": "^6.3.0",
|
|
34
34
|
"@sanity/ui": "^3.3.0",
|
|
35
35
|
"@sanity/util": "^6.3.0",
|