{"version":3,"file":"index.dev.mjs","sources":["../../src/path-fx.ts","../../src/tree/nodes-by-id.ts","../../src/tree/leaf.ts","../../src/tree/branch.ts","../../src/utils.ts","../../src/tree/subject.ts","../../src/tree/tree.ts","../../src/file-tree.ts","../../src/use-node-plugins.ts","../../src/node.tsx","../../src/observable-data.ts","../../src/use-observer.ts","../../src/use-dnd.ts","../../src/use-deferred-value.ts","../../src/use-visible-nodes.ts","../../src/use-filter.ts","../../src/use-hotkeys.ts","../../src/use-file-tree-snapshot.ts","../../src/use-traits.ts","../../src/use-roving-focus.ts","../../src/use-selections.ts","../../src/use-resize-observer.ts","../../src/use-transition.ts","../../src/use-virtualize.ts"],"sourcesContent":["export const SEP = \"/\";\nconst SEP_NEGATE_RE = /[^/]+/g;\nconst TRAILING_SEP_RE = /\\/$/;\n\n/**\n * Returns `true` if the path is relative.\n *\n * @param path - The path to check\n */\nexport function isRelative(path: string): boolean {\n  return path[0] !== SEP;\n}\n\n/**\n * Join all arguments together and normalize the resulting path.\n *\n * @param paths - The paths to join\n */\nexport function join(...paths: string[]) {\n  const composed = [];\n  const hasLeadingSlash = paths[0][0] === SEP;\n  const lastPath = paths[paths.length - 1];\n  const hasTrailingSlash = lastPath[lastPath.length - 1] === SEP;\n\n  for (let i = 0; i < paths.length; i++) {\n    const path = paths[i];\n    const parts = split(path);\n\n    for (let j = 0; j < parts.length; j++) {\n      const part = parts[j];\n\n      if (part === \".\") {\n        continue;\n      } else if (part.length === 2 && part[0] === \".\" && part[1] === \".\") {\n        composed.pop();\n      } else {\n        composed.push(part);\n      }\n    }\n  }\n\n  if (hasLeadingSlash) {\n    composed.unshift(\"\");\n  }\n\n  if (hasTrailingSlash) {\n    composed.push(\"\");\n  }\n\n  return composed.join(SEP);\n}\n\n/**\n * Solve the relative path from `from` to `to`. Paths must be absolute.\n *\n * @param from - The absolute path to start from\n * @param to - The absolute path to solve to\n */\nexport function relative(from: string, to: string) {\n  if (isRelative(from) || isRelative(to)) {\n    throw new Error(`Paths must be absolute`);\n  }\n\n  const fromFrags = split(from);\n  const toFrags = split(to);\n  const hasTrailingSep = to[to.length - 1] === SEP;\n\n  for (let i = 0; i < fromFrags.length; i++) {\n    const fromFrag = fromFrags[i];\n\n    if (fromFrag !== toFrags[i]) {\n      const remainder = fromFrags.length - i;\n\n      return new Array(remainder).fill(\"..\").concat(toFrags.slice(i)).join(SEP);\n    }\n  }\n\n  return removeTrailingSlashes(\n    toFrags.slice(fromFrags.length).join(SEP) + (hasTrailingSep ? SEP : \"\")\n  );\n}\n\n/**\n * Splits a path into an array of path segments.\n *\n * @param path - The path to split.\n */\nexport function split(path: string): string[] {\n  return path.match(SEP_NEGATE_RE) ?? [];\n}\n\n/**\n * Normalize a path, taking care of `..` and `.`, and removing redundant slashes\n * while preserving trailing slashes.\n *\n * @param path - The path to normalize.\n */\nexport function normalize(path: string): string {\n  // Hot path for known roots\n  if (path === \"\" || path === \"/\") return path;\n  return join(path);\n}\n\n/**\n * Returns `true` if `path` is inside `dir`.\n *\n * @param path - The path to check\n * @param dir - The directory to check if the path is inside of.\n */\nexport function isPathInside(path: string, dir: string): boolean {\n  const pathFrags = split(dir);\n  const contPathFrags = split(path);\n  return pathFrags.every((fragment, i) => fragment === contPathFrags[i]);\n}\n\n/**\n * Get the depth of a path.\n *\n * @param path - The path to split.\n */\nexport function depth(path: string): number {\n  return split(path).length;\n}\n\n/**\n * Return the last fragment of a path.\n *\n * @param path - The path to get the basename of.\n */\nexport function basename(path: string): string {\n  const frags = split(path);\n  const lastIndex = frags.length - 1;\n  return lastIndex === -1 ? \"\" : frags[lastIndex];\n}\n\n/**\n * Returns the extension of a file path, which is the part of the path after the last `.`.\n * If the path has no extension, returns an empty string.\n *\n * @param path - The path to get the extension of.\n */\nexport function extname(path: string): string {\n  const name = basename(path);\n  const i = name.lastIndexOf(\".\");\n  return i < 0 ? \"\" : name.slice(i);\n}\n\n/**\n * Return the directory name of a path.\n *\n * @param path - The path to get the directory name of.\n */\nexport function dirname(path: string): string {\n  const parts = split(path);\n  const hasLeadingSep = path[0] === SEP;\n  parts.pop();\n\n  if (parts.length === 0) {\n    return hasLeadingSep ? SEP : \".\";\n  }\n\n  if (hasLeadingSep) {\n    parts.unshift(\"\");\n  }\n\n  return parts.join(SEP);\n}\n\n/**\n * Remove any trailing slashes from a path.\n *\n * @param path - The path to remove trailing slashes from.\n */\nexport function removeTrailingSlashes(path: string) {\n  return path.replace(TRAILING_SEP_RE, \"\");\n}\n","import type { Node } from \"./branch\";\n\nexport const nodesById: Node[] = new Array(1000);\n","import type { Branch } from \"./branch\";\nimport { nodesById } from \"./nodes-by-id\";\n\nexport class Leaf<NodeData = {}> {\n  /**\n   * The unique ID of the node\n   */\n  public readonly id = nextId();\n  /**\n   * The ID of the parent node\n   */\n  public parentId = -1;\n\n  constructor(\n    /**\n     * The parent node\n     */\n    parent: Branch<NodeData> | null,\n    /**\n     * The data for this node\n     */\n    public data: NodeData\n  ) {\n    this.parentId = parent === null ? -1 : parent.id;\n  }\n\n  /**\n   * The parent node\n   */\n  get parent(): Branch<NodeData> | null {\n    return this.parentId === -1\n      ? null\n      : (nodesById[this.parentId] as Branch<NodeData>);\n  }\n\n  /**\n   * The depth of the node in the tree\n   */\n  get depth(): number {\n    if (this.parentId === -1) {\n      return 0;\n    }\n\n    return nodesById[this.parentId].depth + 1;\n  }\n}\n\nconst nextId = (() => {\n  let id = 0;\n  return () => id++;\n})();\n","import { Leaf } from \"./leaf\";\nimport { nodesById } from \"./nodes-by-id\";\n\nexport class Branch<NodeData = {}> extends Leaf<NodeData> {\n  /**\n   * The child node IDs of this branch\n   */\n  public nodes?: number[];\n  /**\n   * A flag indicating the \"intended\" expansion status of this branch. If this is `true`, the branch\n   * is either already expanded OR is about to be expanded. Explained below.\n   *\n   * This value represents the \"intended\" expansion state not the \"actual\" expansion state. When\n   * `Tree#expand` is called, the value of this will be immediately become `true`, however because\n   * the child nodes of the branch in question might need to be loaded, the actual expansion won't\n   * take effect until the children are loaded. So in that interim time while children are loading,\n   * the branch isn't truly expanded even if the value is `true`.\n   *\n   * Depending on your use case you might want to rely on `Tree#isExpanded` for a \"real-time\" status.\n   */\n  public expanded: boolean;\n\n  constructor(\n    /**\n     * The parent node\n     */\n    parent: Branch<NodeData> | null,\n    /**\n     * The data for this node\n     */\n    data: NodeData,\n    /**\n     * Is the branch expanded?\n     */\n    expanded = false\n  ) {\n    super(parent, data);\n    this.expanded = expanded;\n  }\n\n  /**\n   * Returns `true` if the node is a child of this branch, regardless of\n   * depth.\n   *\n   * @param node - A tree node\n   */\n  contains(node: Node<NodeData>): boolean {\n    while (node.parentId > -1) {\n      if (node.parentId === this.id) return true;\n      node = nodesById[node.parentId] as Branch<NodeData>;\n    }\n\n    return false;\n  }\n}\n\nexport type Node<NodeData = {}> = Leaf<NodeData> | Branch<NodeData>;\n","// @react-aria/utils\n// Credit: https://github.com/adobe/react-spectrum/tree/main/packages/%40react-aria\nimport {\n  clearRequestTimeout,\n  requestTimeout,\n} from \"@essentials/request-timeout\";\nimport clsx from \"clsx\";\n\n/**\n * Merges multiple props objects together. Event handlers are chained,\n * classNames are combined, and styles are combined.\n *\n * For all other props, the last prop object overrides all previous ones.\n *\n * @param args - Multiple sets of props to merge together.\n */\nexport function mergeProps<T extends Props[]>(\n  args: T\n): UnionToIntersection<TupleTypes<T>> {\n  // Start with a base clone of the first argument. This is a lot faster than starting\n  // with an empty object and adding properties as we go.\n  const result: Props = { ...args[0], style: { ...args[0]?.style } };\n\n  for (let i = 1; i < args.length; i++) {\n    const props = args[i];\n\n    for (const key in props) {\n      const a = result[key];\n      const b = props[key];\n\n      // Chain events\n      if (\n        typeof a === \"function\" &&\n        typeof b === \"function\" &&\n        // This is a lot faster than a regex.\n        key[0] === \"o\" &&\n        key[1] === \"n\" &&\n        key.charCodeAt(2) >= /* 'A' */ 65 &&\n        key.charCodeAt(2) <= /* 'Z' */ 90\n      ) {\n        result[key] = chain(a, b);\n        // Merge classnames, sometimes classNames are empty string which eval to false,\n        // so we just need to do a type check\n      } else if (\n        (key === \"className\" || key === \"UNSAFE_className\") &&\n        typeof a === \"string\" &&\n        typeof b === \"string\"\n      ) {\n        result[key] = clsx(a, b);\n      } else if (\n        key === \"style\" &&\n        typeof a === \"object\" &&\n        typeof b === \"object\"\n      ) {\n        result[key] = Object.assign(a, b);\n      } else {\n        result[key] = b;\n      }\n    }\n  }\n\n  return result as UnionToIntersection<TupleTypes<T>>;\n}\n\n/**\n * Calls all functions in the order they were chained with the same arguments.\n *\n * @param  callbacks - Callbacks to chain together\n */\nexport function chain<Args extends any[]>(\n  ...callbacks: Args\n): (...args: Args) => void {\n  return (...args: any[]) => {\n    for (let i = 0; i < callbacks.length; i++) {\n      const callback = callbacks[i];\n\n      if (typeof callback === \"function\") {\n        callback(...args);\n      }\n    }\n  };\n}\n\nexport function throttle<CallbackArguments extends any[]>(\n  callback: (...args: CallbackArguments) => void,\n  fps = 30,\n  leading = false\n): (...args: CallbackArguments) => void {\n  const ms = 1000 / fps;\n  let prev = 0;\n  let trailingTimeout: ReturnType<typeof requestTimeout>;\n  const clearTrailing = () =>\n    trailingTimeout && clearRequestTimeout(trailingTimeout);\n\n  return function () {\n    // eslint-disable-next-line prefer-rest-params\n    const args = arguments;\n    const rightNow = performance.now();\n    const call = () => {\n      prev = rightNow;\n      clearTrailing();\n      // @ts-expect-error: IArguments isn't assignable, but they're the same thing\n      // eslint-disable-next-line prefer-spread\n      callback.apply(null, args);\n    };\n    const current = prev;\n    // leading\n    if (leading && current === 0) return call();\n    const delta = rightNow - current;\n    // body\n    if (rightNow - current > ms) {\n      if (current > 0) return call();\n      prev = rightNow;\n    }\n    // trailing\n    clearTrailing();\n    trailingTimeout = requestTimeout(() => {\n      call();\n      prev = 0;\n    }, ms - delta);\n  };\n}\n\nexport function shallowEqual<\n  A extends Record<string | number | symbol, unknown> | null,\n  B extends Record<string | number | symbol, unknown> | null\n>(objA: A, objB: B | A): boolean {\n  if (objA === objB) return true;\n  if (objA === null || objB === null) return false;\n  for (const key in objA) if (objA[key] !== objB[key]) return false;\n  return true;\n}\n\n/**\n * Retry a promise until it resolves or the max number of retries is reached.\n *\n * @param promiseFn - A function that returns a promise to retry\n * @param config - Options\n * @param config.maxRetries - Max number of retries\n * @param config.initialDelay - Initial delay before first retry\n * @param config.delayMultiple - Multiplier for each subsequent retry\n * @param config.shouldRetry - A function that should return `false` to stop retrying\n */\nexport async function retryWithBackoff<T>(\n  promiseFn: () => Promise<T>,\n  config: RetryWithBackoffConfig = {}\n): Promise<T> {\n  const {\n    maxRetries = 4,\n    initialDelay = 100,\n    delayMultiple = 2,\n    shouldRetry,\n  } = config;\n\n  try {\n    const result = await promiseFn();\n    return result;\n  } catch (err) {\n    if (\n      maxRetries === 0 ||\n      (typeof shouldRetry === \"function\" && !shouldRetry(err))\n    ) {\n      throw err;\n    }\n\n    await new Promise((resolve) => setTimeout(resolve, initialDelay));\n    return retryWithBackoff(promiseFn, {\n      maxRetries: maxRetries - 1,\n      initialDelay: initialDelay * delayMultiple,\n      delayMultiple,\n      shouldRetry,\n    });\n  }\n}\n\nexport interface RetryWithBackoffConfig {\n  /**\n   * Max number of retries\n   *\n   * @default 4\n   */\n  maxRetries?: number;\n  /**\n   * Initial delay before first retry\n   *\n   * @default 100\n   */\n  initialDelay?: number;\n  /**\n   * Multiplier for each subsequent retry\n   *\n   * @default 2\n   */\n  delayMultiple?: number;\n  /**\n   * A function that should return `false` to stop retrying\n   *\n   * @param error - The error that caused the retry\n   */\n  shouldRetry?: (error: unknown) => boolean;\n}\n\ninterface Props {\n  [key: string]: any;\n}\n\n// Taken from:\n// https://stackoverflow.com/questions/51603250/typescript-3-parameter-list-intersection-type/51604379#51604379\ntype TupleTypes<T> = { [P in keyof T]: T[P] } extends { [key: number]: infer V }\n  ? V\n  : never;\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n  k: infer I\n) => void\n  ? I\n  : never;\n","/**\n * A utility for emitting abd subscribing to changes to a value.\n *\n * @param  initialState - The initial value of the subject.\n */\nexport function subject<T>(initialState: T): Subject<T> {\n  const observers: Set<Observer<T>> = new Set();\n  let state = initialState;\n\n  return {\n    setState(nextState: T) {\n      state = nextState;\n\n      for (const listener of observers) {\n        listener(nextState);\n      }\n    },\n\n    getState() {\n      return state;\n    },\n\n    observe(observer: Observer<T>) {\n      observers.add(observer);\n\n      return () => {\n        observers.delete(observer);\n      };\n    },\n\n    unobserve(observer: Observer<T>) {\n      observers.delete(observer);\n    },\n  };\n}\n\nexport function pureSubject<T>(\n  initialValue: T,\n  areEqual: (current: T, next: T) => boolean = (current, next) =>\n    current === next\n): Subject<T> {\n  const observers: Set<Observer<T>> = new Set();\n  let state = initialValue;\n\n  return {\n    setState(nextState: T) {\n      if (areEqual(state, nextState)) return;\n      state = nextState;\n\n      for (const listener of observers) {\n        listener(nextState);\n      }\n    },\n\n    getState() {\n      return state;\n    },\n\n    observe(observer: Observer<T>) {\n      observers.add(observer);\n\n      return () => {\n        observers.delete(observer);\n      };\n    },\n\n    unobserve(observer: Observer<T>) {\n      observers.delete(observer);\n    },\n  };\n}\n\nexport type Subject<T> = {\n  /**\n   * Emit a new state.\n   *\n   * @param state - The new state\n   */\n  setState(state: T): void;\n  /**\n   * Get the current state.\n   */\n  getState(): T;\n  /**\n   * Observe changes to the state.\n   *\n   * @param observer - A callback that is invoked when the value changes\n   */\n  observe(observer: Observer<T>): () => void;\n  /**\n   * Remove a observer from the list of observers\n   *\n   * @param observer - A callback that is invoked when the value changes\n   */\n  unobserve(observer: Observer<T>): void;\n};\n\nexport type Observer<T> = {\n  (state: T): void;\n};\n","import memoizeOne from \"@essentials/memoize-one\";\nimport { retryWithBackoff } from \"../utils\";\nimport type { Node } from \"./branch\";\nimport { Branch } from \"./branch\";\nimport { Leaf } from \"./leaf\";\nimport { nodesById } from \"./nodes-by-id\";\nimport { subject } from \"./subject\";\n\nexport class Tree<NodeData = {}> {\n  protected loadingBranches = new Map<Branch<NodeData>, Promise<void>>();\n  private getNodes: GetNodes<NodeData>;\n  comparator?: (a: Node<NodeData>, b: Node<NodeData>) => number;\n  flatView = subject(0);\n  root: Branch<NodeData>;\n  nodesById = nodesById as Node<NodeData>[];\n\n  constructor({\n    getNodes,\n    root,\n    comparator,\n  }: {\n    getNodes: GetNodes<NodeData>;\n    root: Branch<NodeData>;\n    comparator?: (a: Node<NodeData>, b: Node<NodeData>) => number;\n  }) {\n    this.root = root;\n    this.getNodes = getNodes;\n    this.comparator = comparator;\n    retryWithBackoff(() => this.expand(this.root), {\n      shouldRetry: () => {\n        return !this.isExpanded(this.root);\n      },\n    }).catch(() => {});\n  }\n\n  get visibleNodes(): number[] {\n    return this.createVisibleNodes(this.flatView.getState());\n  }\n\n  getSnapshot = () => {\n    return this.visibleNodes;\n  };\n\n  getById(id: number): Node<NodeData> | undefined {\n    return this.nodesById[id];\n  }\n\n  /**\n   * Ensures that the children of any given branch have been loaded and ready to be worked with.\n   *\n   * Call this method without any arguments to check if the root branch is loaded.\n   *\n   * ⚠ \"Loaded\" doesn't mean expanded, it just means the contents are \"ready\". Except when no arguments are given, the\n   * branch being checked is root, and root is always expanded.\n   *\n   * @param branch - The branch to check\n   */\n  async ensureLoaded(branch: Branch<NodeData> = this.root): Promise<void> {\n    if (!branch.nodes) {\n      await this.loadNodes(branch);\n    }\n  }\n\n  async expand(\n    branch: Branch<NodeData>,\n    options: {\n      ensureVisible?: boolean;\n      recursive?: boolean;\n    } = {}\n  ): Promise<void> {\n    const { ensureVisible = false, recursive = false } = options;\n    const isVisibilitySkippable =\n      !ensureVisible || (ensureVisible && this.isVisible(branch));\n\n    if (!recursive && this.isExpanded(branch) && isVisibilitySkippable) {\n      return;\n    }\n\n    branch.expanded = true;\n    await this.ensureLoaded(branch);\n\n    // Check again as collapse might have been called in the meantime\n    if (branch.expanded) {\n      if (ensureVisible) {\n        while (branch.parent) {\n          const node = branch.parent;\n\n          if (isBranch(node)) {\n            branch = node;\n            branch.expanded = true;\n          }\n        }\n      }\n\n      if (recursive && branch.nodes) {\n        await Promise.all(\n          branch.nodes.map((nodeId) => {\n            const node = this.nodesById[nodeId];\n            return isBranch(node) ? this.expand(node, options) : null;\n          })\n        );\n      }\n\n      this.invalidate();\n    }\n  }\n\n  collapse(branch: Branch<NodeData>): void {\n    if (branch.expanded) {\n      branch.expanded = false;\n      this.invalidate();\n    }\n  }\n\n  protected _produce(\n    branch: Branch<NodeData>,\n    produceFn: (context: {\n      get draft(): Node<NodeData>[];\n      insert<NodeType extends Node<NodeData>>(\n        node: NodeType,\n        insertionIndex?: number\n      ): NodeType;\n      revert(): void;\n    }) => void | Node<NodeData>[]\n  ): void {\n    const nodes = (branch.nodes ?? []).map((nodeId) => this.nodesById[nodeId]);\n    let draftResult = createDraft(nodes);\n\n    draftResult.draft =\n      produceFn({\n        get draft() {\n          return draftResult.draft;\n        },\n        insert(node, insertionIndex) {\n          draftResult.modified = true;\n          draftResult.draft.splice(insertionIndex ?? Infinity, 0, node);\n          return node;\n        },\n        revert: () => {\n          draftResult = createDraft(\n            (branch.nodes ?? []).map((nodeId) => this.nodesById[nodeId])\n          );\n        },\n      }) ?? draftResult.draft;\n\n    if (draftResult.modified) {\n      this.setNodes(branch, draftResult.draft);\n      this.invalidate();\n    }\n  }\n\n  remove(nodeToRemove: Node<NodeData>): void {\n    if (isBranch(nodeToRemove) && nodeToRemove.nodes) {\n      const nodes = [...nodeToRemove.nodes];\n      let nodeId: number | undefined;\n\n      while ((nodeId = nodes.pop())) {\n        const node = this.nodesById[nodeId];\n\n        if (isBranch(node) && node.nodes) {\n          nodes.push(...node.nodes);\n        }\n      }\n\n      for (let i = 0; i < nodes.length; i++) {\n        // @ts-expect-error\n        nodesById[nodes[i]] = undefined;\n      }\n    }\n\n    const nodeToRemoveParent = nodeToRemove.parent ?? this.root;\n\n    // @ts-expect-error\n    nodesById[nodeToRemove.id] = undefined;\n\n    if (nodeToRemoveParent?.nodes) {\n      let found = 0;\n      const nextNodes: number[] = new Array(\n        Math.max(nodeToRemoveParent.nodes.length - 1, 0)\n      );\n\n      for (let i = 0; i < nodeToRemoveParent.nodes.length; i++) {\n        const nodeId = nodeToRemoveParent.nodes[i];\n\n        if (nodeId !== nodeToRemove.id) {\n          nextNodes[i - found] = nodeId;\n        } else {\n          found = 1;\n        }\n      }\n\n      this.setNodes(nodeToRemoveParent, nextNodes);\n    }\n\n    this.invalidate();\n  }\n\n  async move(node: Node<NodeData>, to: Branch<NodeData>): Promise<void> {\n    const initialParent = node.parent ?? this.root;\n\n    if (\n      // If the node is already in the target branch, do nothing\n      initialParent === to ||\n      // You can't move a node to a child of itself\n      (isBranch(node) && node.contains(to))\n    ) {\n      return;\n    }\n\n    if (!to.nodes) {\n      await this.expand(to);\n    }\n\n    // Parent may have changed in the meantime\n    if (node.parent === initialParent) {\n      if (initialParent?.nodes) {\n        const nextNodes: number[] = new Array(\n          Math.max(initialParent.nodes.length - 1, 0)\n        );\n        let found = 0;\n\n        for (let i = 0; i < initialParent.nodes.length; i++) {\n          const nodeId = initialParent.nodes[i];\n\n          if (nodeId !== node.id) {\n            nextNodes[i - found] = nodeId;\n          } else {\n            found = 1;\n          }\n        }\n\n        this.setNodes(initialParent, nextNodes);\n      }\n\n      if (to.nodes) {\n        node.parentId = to.id;\n        const nextNodes = [...to.nodes];\n        nextNodes[nextNodes.length] = node.id;\n        this.setNodes(to, nextNodes);\n      }\n\n      this.invalidate();\n    }\n  }\n\n  /**\n   * Invalidate the list of visible nodes. This is useful for re-rendering your tree\n   * when node data changes.\n   */\n  invalidate(): void {\n    this.flatView.setState(this.flatView.getState() + 1);\n  }\n\n  /**\n   * A more accurate and real-time representation of whether a branch is expanded.\n   *\n   * `Branch#expanded` represents the \"optimistic\" expansion state of the branch in\n   * question not the actual status, because the child nodes might still need to be\n   * loaded before the change can be seen in the tree.\n   *\n   * @param branch - The branch to check\n   */\n  isExpanded(branch: Branch<NodeData>): boolean {\n    return !!(branch.nodes && branch.expanded);\n  }\n\n  /**\n   * Returns `true` if the node and its parents are visible in the tree.\n   *\n   * @param node - The node to check\n   */\n  isVisible(node: Node<NodeData>): boolean {\n    let p = node.parent;\n\n    while (p) {\n      if (!p.expanded) return false;\n      p = p.parent;\n    }\n\n    return true;\n  }\n\n  /**\n   * You can use this method to manually trigger a reload of a branch in the tree.\n   *\n   * @param branch - The branch to load nodes for\n   */\n  async loadNodes(branch: Branch<NodeData>): Promise<void> {\n    const promise = this.loadingBranches.get(branch);\n\n    if (!promise) {\n      const promise = (async (): Promise<void> => {\n        const nodes = await this.getNodes(branch);\n        this.setNodes(branch, nodes);\n\n        for (let i = 0; i < nodes.length; i++) {\n          const node = nodes[i];\n\n          if (isBranch(node) && node.expanded) {\n            retryWithBackoff(() => this.expand(node), {\n              shouldRetry: () => {\n                return node.expanded && !this.isExpanded(node);\n              },\n            }).catch(() => {});\n          }\n        }\n      })();\n\n      promise.finally(() => this.loadingBranches.delete(branch));\n      this.loadingBranches.set(branch, promise);\n      return promise;\n    }\n\n    return promise;\n  }\n\n  protected setNodes(\n    branch: Branch<NodeData>,\n    nodeIds: number[] | Node<NodeData>[]\n  ): void {\n    const comparator = this.comparator;\n    let nodes: Node<NodeData>[] = nodeIds as Node<NodeData>[];\n\n    if (typeof nodeIds[0] === \"number\") {\n      for (let i = 0; i < nodeIds.length; i++) {\n        const nodeId = nodeIds[i] as number;\n        nodes[i] = this.nodesById[nodeId];\n      }\n    }\n\n    nodes = comparator ? nodes.sort(comparator) : nodes;\n\n    branch.nodes = new Array(nodes.length);\n    this.nodesById[branch.id] = branch;\n\n    for (let i = 0; i < nodes.length; i++) {\n      const node = nodes[i];\n      branch.nodes[i] = node.id;\n      this.nodesById[node.id] = node;\n    }\n  }\n\n  private createVisibleNodes = memoizeOne(\n    (id: number) => {\n      const flatView: number[] = [];\n\n      if (this.root.nodes) {\n        const nodes: number[] = [...this.root.nodes].reverse();\n        let nodeId: number | undefined;\n\n        while ((nodeId = nodes.pop())) {\n          flatView.push(nodeId);\n          const node = this.nodesById[nodeId];\n\n          if (\n            isBranch(node) &&\n            node.expanded &&\n            node.nodes &&\n            node.nodes.length > 0\n          ) {\n            nodes.push(...[...node.nodes].reverse());\n          }\n        }\n      }\n\n      return flatView;\n    },\n    (prevArgs, args) => prevArgs[0] === args[0]\n  );\n\n  dispose(): void {\n    // @ts-expect-error\n    nodesById[this.root.id] = undefined;\n\n    for (let i = 0; i < this.visibleNodes.length; i++) {\n      // @ts-expect-error\n      nodesById[this.visibleNodes[i]] = undefined;\n    }\n  }\n}\n\nfunction createDraft<NodeData = {}>(\n  nodes: ReadonlyArray<Node<NodeData>>\n): { draft: Node<NodeData>[]; modified: boolean } {\n  const draft = new Proxy([...nodes], {\n    set(target, index, value) {\n      if (typeof index === \"string\" || typeof index === \"number\") {\n        target[parseInt(index)] = value;\n        draftResult.modified = true;\n      }\n\n      return true;\n    },\n  });\n\n  const draftResult = { draft, modified: false };\n\n  Object.getOwnPropertyNames(Array.prototype).forEach((prop) => {\n    switch (prop) {\n      case \"pop\":\n      case \"push\":\n      case \"shift\":\n      case \"unshift\":\n      case \"reverse\":\n      case \"sort\":\n      case \"splice\":\n        Object.defineProperty(draft, prop, {\n          value: (...args: any[]) => {\n            draftResult.modified = true;\n            // eslint-disable-next-line prefer-spread\n            return Array.prototype[prop].apply(draft, args);\n          },\n        });\n    }\n  });\n\n  return draftResult;\n}\n\nexport function isLeaf<T>(node: Node<T> | undefined): node is Leaf<T> {\n  return node instanceof Leaf && !(node instanceof Branch);\n}\n\nexport function isBranch<T>(node: Node<T> | undefined): node is Branch<T> {\n  return node instanceof Branch;\n}\n\nexport type GetNodes<NodeData = {}> = {\n  (parent: Branch<NodeData>): Node<NodeData>[] | Promise<Node<NodeData>[]>;\n};\n","import * as pathFx from \"./path-fx\";\nimport { Branch } from \"./tree/branch\";\nimport { Leaf } from \"./tree/leaf\";\nimport { nodesById } from \"./tree/nodes-by-id\";\nimport type { GetNodes as GetNodesBase } from \"./tree/tree\";\nimport { Tree } from \"./tree/tree\";\nimport type { FileTreeSnapshot } from \"./types\";\n\n/**\n * Create a file tree that can be used with the React API.\n *\n * @param getNodes - A function that returns the nodes of the file tree.\n * @param config - Configuration options for the file tree.\n * @param config.comparator - A function that compares two nodes for sorting.\n * @param config.root - The root node data of the file tree.\n */\nexport function createFileTree<Meta = {}>(\n  getNodes: GetNodes<Meta>,\n  config: FileTreeConfig<Meta> = {}\n) {\n  const { comparator = defaultComparator, root, restoreFromSnapshot } = config;\n\n  const tree = new FileTree<Meta>({\n    async getNodes(parent) {\n      const factory: Omit<FileTreeFactory<Meta>, \"createPrompt\"> = {\n        createFile(data) {\n          return new File(parent, data);\n        },\n\n        createDir(data, expanded?: boolean) {\n          const path =\n            parent.id === -1\n              ? data.name\n              : pathFx.join(\n                  // @ts-expect-error: branch type but is dir\n                  parent.path,\n                  pathFx.basename(data.name)\n                );\n\n          return new Dir(\n            parent,\n            data,\n            expanded ??\n              !!(\n                restoreFromSnapshot &&\n                (restoreFromSnapshot.expandedPaths.includes(path) ||\n                  restoreFromSnapshot.buriedPaths.includes(path))\n              )\n          );\n        },\n      };\n\n      return getNodes(parent as Dir<Meta>, factory);\n    },\n    comparator,\n    root: new Dir(null, root ? { ...root } : { name: pathFx.SEP }),\n  });\n\n  return tree;\n}\n\nexport class FileTree<Meta = {}> extends Tree<FileTreeData<Meta>> {\n  /**\n   * The root directory of the file tree\n   */\n  declare root: Dir<Meta>;\n  protected declare treeNodeMap: Map<number, File<Meta> | Dir<Meta>>;\n  declare nodesById: FileTreeNode<Meta>[];\n  protected declare loadingBranches: Map<Dir<Meta>, Promise<void>>;\n\n  /**\n   * Get a node by its ID.\n   *\n   * @param id - The ID of the node\n   */\n  declare getById: (id: number) => FileTreeNode<Meta> | undefined;\n  /**\n   * Expand a directory in the tree.\n   *\n   * @param dir - The directory to expand\n   * @param options - Options for expanding the directory\n   */\n  declare expand: (\n    dir: Dir<Meta>,\n    options?: {\n      /**\n       * Ensure that the directory's parents are visible in the tree, as well.\n       */\n      ensureVisible?: boolean;\n      /**\n       * Expand all of the directory's child directories.\n       */\n      recursive?: boolean;\n    }\n  ) => Promise<void>;\n  /**\n   * Collapse a directory in the tree.\n   *\n   * @param dir - The directory to collapse\n   */\n  declare collapse: (dir: Dir<Meta>) => void;\n  /**\n   * Remove a node and its descendants from the tree.\n   */\n  declare remove: (node: FileTreeNode<Meta>) => void;\n  /**\n   * You can use this method to manually trigger a reload of a directory in the tree.\n   *\n   * @param dir - The branch to load nodes for\n   */\n  declare loadNodes: (dir: Dir<Meta>) => Promise<void>;\n\n  constructor({\n    getNodes,\n    comparator,\n    root,\n  }: {\n    getNodes: GetNodesBase<FileTreeData<Meta>>;\n    comparator: (a: FileTreeNode<Meta>, b: FileTreeNode<Meta>) => number;\n    root: Dir<Meta>;\n  }) {\n    super({ getNodes, root });\n    // @ts-expect-error\n    this.comparator = comparator;\n  }\n\n  /**\n   * Get a node in the tree by its path. Note that this requires walking the tree,\n   * which has O(n) complexity. It should therefore be avoided unless absolutely necessary.\n   *\n   * @param path - The path to search for in the tree\n   */\n  getByPath(path: string) {\n    let found: FileTreeNode<Meta> | undefined;\n    path = pathFx.removeTrailingSlashes(pathFx.normalize(path));\n\n    this.walk(this.root, (node) => {\n      if (node.path === path) {\n        found = node;\n        return false;\n      }\n    });\n\n    return found;\n  }\n\n  /**\n   * Walks the tree starting at a given directory and calls a visitor\n   * function for each node.\n   *\n   * @param dir - The directory to walk\n   * @param visitor - A function that is called for each node in the tree. Returning\n   *   `false` will stop the walk.\n   * @example\n   * tree.walk(tree.root, node => {\n   *   console.log(node.path);\n   *\n   *   if (node.path === '/foo/bar') {\n   *     return false\n   *   }\n   * })\n   */\n  walk(\n    dir: Dir<Meta>,\n    visitor: (\n      node: FileTreeNode<Meta>,\n      parent: FileTreeNode<Meta>\n    ) => boolean | void\n  ) {\n    const nodeIds = !dir.nodes ? [] : [...dir.nodes];\n    let nodeId: number | undefined;\n\n    while ((nodeId = nodeIds.pop())) {\n      const node = this.getById(nodeId);\n      if (!node) continue;\n\n      const shouldContinue = visitor(node, dir);\n      if (shouldContinue === false) return;\n\n      if (isDir(node) && node.nodes) {\n        nodeIds.push(...node.nodes);\n      }\n    }\n  }\n\n  /**\n   * Produce a new tree with the given function applied to the given node.\n   * This is similar to `immer`'s produce function as you're working on a draft\n   * and can freely mutate the object.\n   *\n   * @param dir - The directory to produce the tree for\n   * @param produceFn - The function to produce the tree with\n   */\n  produce(\n    dir: Dir<Meta>,\n    produceFn: (\n      context: FileTreeFactory<Meta> & {\n        /**\n         * The draft of the directory.\n         */\n        get draft(): FileTreeNode<Meta>[];\n        /**\n         * Insert a node into the draft.\n         *\n         * @param node - The node to insert\n         */\n        insert<NodeType extends FileTreeNode<Meta>>(node: NodeType): NodeType;\n        /**\n         * Revert the draft back to its original state.\n         */\n        revert(): void;\n      }\n    ) => void | (Dir<Meta> | File<Meta>)[]\n  ) {\n    return this._produce(dir, (context) => {\n      const producer = produceFn({\n        get draft() {\n          return context.draft as (Dir<Meta> | File<Meta>)[];\n        },\n\n        insert(node) {\n          const insertedNode = context.insert(node, 0);\n          return insertedNode;\n        },\n\n        revert() {\n          context.revert();\n        },\n\n        createFile(data) {\n          return new File(dir, data);\n        },\n\n        createDir(data, expanded?: boolean) {\n          return new Dir(dir, data, expanded);\n        },\n\n        createPrompt() {\n          return new Prompt(dir, { name: \"\" });\n        },\n      });\n\n      return producer;\n    });\n  }\n\n  /**\n   * Move a node to a new parent.\n   *\n   * @param node - The node to move\n   * @param to - The new parent\n   */\n  move(node: File<Meta> | Dir<Meta>, to: Dir<Meta>) {\n    return super.move(node, to);\n  }\n\n  /**\n   * Create a new file in a given directory.\n   *\n   * @param inDir - The directory to create the file in\n   * @param withData - The data for the file\n   */\n  newFile(inDir: Dir<Meta>, withData: FileTreeData<Meta>) {\n    const file = new File(inDir, withData);\n\n    this.produce(inDir, ({ insert }) => {\n      insert(file);\n    });\n\n    return file;\n  }\n\n  /**\n   * Create a new directory in a given directory.\n   *\n   * @param inDir - The directory to create the directory in\n   * @param withData - The data for the directory\n   * @param expanded - Whether the directory should be expanded by default\n   */\n  newDir(inDir: Dir<Meta>, withData: FileTreeData<Meta>, expanded?: boolean) {\n    const dir = new Dir(inDir, withData, expanded);\n\n    this.produce(inDir, ({ insert }) => {\n      insert(dir);\n    });\n\n    return dir;\n  }\n\n  /**\n   * Create a new directory in a given directory.\n   *\n   * @param inDir - The directory to create the directory in\n   */\n  newPrompt(inDir: Dir<Meta>) {\n    const prompt = new Prompt(inDir, { name: \"\" });\n\n    this.produce(inDir, ({ insert }) => {\n      insert(prompt);\n    });\n\n    return prompt;\n  }\n\n  /**\n   * Rename a node.\n   *\n   * @param node - The node to rename\n   * @param newName - The new name for the node\n   */\n  rename(node: File<Meta> | Dir<Meta>, newName: string) {\n    node.data.name = newName;\n    const parent = node.parent;\n\n    if (parent && parent.nodes) {\n      this.setNodes(parent, [...parent.nodes]);\n    }\n  }\n}\n\nexport class File<Meta = {}> extends Leaf<FileTreeData<Meta>> {\n  readonly $$type = \"file\";\n  private _basenameName?: string;\n  private _basename?: string;\n\n  /**\n   * The parent directory of the file\n   */\n  get parent(): Dir<Meta> | null {\n    return this.parentId === -1\n      ? null\n      : (nodesById[this.parentId] as Dir<Meta>);\n  }\n\n  /**\n   * The basename of the file\n   */\n  get basename() {\n    if (this._basenameName === this.data.name) {\n      return this._basename!;\n    }\n\n    this._basenameName = this.data.name;\n    return (this._basename = pathFx.basename(this.data.name));\n  }\n\n  /**\n   * The full path of the file\n   */\n  get path(): string {\n    return getPath(this);\n  }\n}\n\nexport class Dir<Meta = {}> extends Branch<FileTreeData<Meta>> {\n  readonly $$type = \"dir\";\n  private _basenameName?: string;\n  private _basename?: string;\n\n  /**\n   * The parent directory of this directory\n   */\n  get parent(): Dir<Meta> | null {\n    return this.parentId === -1\n      ? null\n      : (nodesById[this.parentId] as Dir<Meta>);\n  }\n\n  /**\n   * The basename of the directory\n   */\n  get basename() {\n    if (this._basenameName === this.data.name) {\n      return this._basename!;\n    }\n\n    this._basenameName = this.data.name;\n    return (this._basename = pathFx.basename(this.data.name));\n  }\n\n  /**\n   * The full path of the directory\n   */\n  get path(): string {\n    return getPath(this);\n  }\n}\n\nexport class Prompt<Meta = {}> extends Leaf<FileTreeData<Meta>> {\n  readonly $$type = \"prompt\";\n  /**\n   * The parent directory of this directory\n   */\n  get parent(): Dir<Meta> | null {\n    return this.parentId === -1\n      ? null\n      : (nodesById[this.parentId] as Dir<Meta>);\n  }\n\n  get basename() {\n    return \"\";\n  }\n\n  /**\n   * The full path of the prompt\n   */\n  get path(): string {\n    return getPath(this);\n  }\n}\n\nfunction getPath(node: FileTreeNode) {\n  if (node.parent) {\n    const parentPath = node.parent.path;\n    const hasTrailingSlash = parentPath[parentPath.length - 1] === pathFx.SEP;\n    const sep =\n      hasTrailingSlash || parentPath === \"\" || node.basename === \"\"\n        ? \"\"\n        : pathFx.SEP;\n    return parentPath + sep + node.basename;\n  }\n\n  return pathFx.normalize(node.data.name);\n}\n\n/**\n * A sort comparator for sorting path names\n *\n * @param a - A tree node\n * @param b - A tree node to compare against `a`\n */\nexport function defaultComparator(a: FileTreeNode, b: FileTreeNode) {\n  if (a.constructor === b.constructor) {\n    return a.basename.localeCompare(b.basename);\n  }\n\n  if (isPrompt(a)) {\n    return -1;\n  } else if (isPrompt(b)) {\n    return 1;\n  } else if (isDir(a)) {\n    return -1;\n  } else if (isDir(b)) {\n    return 1;\n  }\n\n  return 0;\n}\n\n/**\n * Returns `true` if the given node is a prompt\n *\n * @param treeNode - A tree node\n */\nexport function isPrompt<Meta>(\n  treeNode: FileTreeNode<Meta>\n): treeNode is Prompt<Meta> {\n  return treeNode.constructor === Prompt;\n}\n\n/**\n * Returns `true` if the given node is a file\n *\n * @param treeNode - A tree node\n */\nexport function isFile<Meta>(\n  treeNode: FileTreeNode<Meta>\n): treeNode is File<Meta> {\n  return treeNode.constructor === File;\n}\n\n/**\n * Returns `true` if the given node is a directory\n *\n * @param treeNode - A tree node\n */\nexport function isDir<Meta>(\n  treeNode: FileTreeNode<Meta>\n): treeNode is Dir<Meta> {\n  return treeNode.constructor === Dir;\n}\n\nexport type FileTreeNode<Meta = {}> = File<Meta> | Dir<Meta> | Prompt<Meta>;\n\nexport type FileTreeData<Meta = {}> = {\n  name: string;\n  meta?: Meta;\n};\n\nexport type FileTreeFactory<Meta = {}> = {\n  /**\n   * Create a file node that can be inserted into the tree.\n   *\n   * @param data - The data to create a file with\n   */\n  createFile(data: FileTreeData<Meta>): File<Meta>;\n  /**\n   * Create a directory node that can be inserted into the tree.\n   *\n   * @param data - The data to create a directory with\n   * @param expanded - Should the directory be expanded by default?\n   */\n  createDir(data: FileTreeData<Meta>, expanded?: boolean): Dir<Meta>;\n  /**\n   * Create a prompt node that can be inserted into the tree.\n   */\n  createPrompt(): Prompt<Meta>;\n};\n\nexport type GetNodes<Meta> = {\n  /**\n   * Get the nodes for a given directory\n   *\n   * @param parent - The parent directory to get the nodes for\n   * @param factory - A factory to create nodes (file/dir) with\n   */\n  (parent: Dir<Meta>, factory: Omit<FileTreeFactory<Meta>, \"createPrompt\">):\n    | Promise<FileTreeNode<Meta>[]>\n    | FileTreeNode<Meta>[];\n};\n\nexport type FileTreeConfig<Meta> = {\n  /**\n   * A function that compares two nodes for sorting.\n   */\n  comparator?: FileTree[\"comparator\"];\n  /**\n   * The root node data\n   */\n  root?: Omit<FileTreeData<Meta>, \"type\">;\n  /**\n   * Restore the tree from a snapshot\n   */\n  restoreFromSnapshot?: FileTreeSnapshot;\n};\n","import memoizeOne from \"@essentials/memoize-one\";\nimport * as React from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport type { Subject } from \"./tree/subject\";\nimport { mergeProps as mergeProps_ } from \"./utils\";\n\n/**\n * A hook that observes to plugins and retrieves props that should be applied\n * to a given node. An example of a plugin wouuld be the `useTraits()` hook.\n *\n * @param nodeId - The node ID used to retrieve props from a plugin\n * @param plugins - A list of file tree plugins\n * @example\n * ```ts\n * const traits = useTraits(fileTree)\n * const props = useNodePlugins(fileTree.visibleNodes[0], [traits])\n * return <div {...props}>...</div>\n * ```\n */\nexport function useNodePlugins(\n  nodeId: number,\n  plugins: NodePlugin[] = []\n): React.HTMLAttributes<HTMLElement> {\n  const subject = createSubject(plugins);\n  const mergeProps = React.useRef(\n    memoizeOne(mergeProps_, (a, b) => shallowEqualArray(a[0], b[0]))\n  ).current;\n  const storedPlugins = React.useRef(plugins);\n\n  React.useEffect(() => {\n    storedPlugins.current = plugins;\n  });\n\n  const getSnapshot = React.useCallback(() => {\n    const plugins = storedPlugins.current;\n    const length = plugins.length;\n    const props: React.HTMLAttributes<HTMLElement>[] = new Array(length);\n    for (let i = 0; i < length; i++) props[i] = plugins[i].getProps(nodeId);\n    return mergeProps(props);\n  }, [mergeProps, nodeId]);\n\n  return useSyncExternalStore(subject, getSnapshot, getSnapshot);\n}\n\nconst createSubject = memoizeOne((plugins: NodePlugin[]) => {\n  return function subject(onStoreChange: () => void) {\n    const numPlugins = plugins.length;\n    const unsubs: (() => void)[] = new Array(numPlugins);\n    let i = 0;\n    for (; i < numPlugins; i++)\n      unsubs[i] = plugins[i].didChange.observe(onStoreChange);\n    return () => {\n      for (i = 0; i < unsubs.length; i++) unsubs[i]();\n    };\n  };\n}, shallowEqualArray);\n\nfunction shallowEqualArray(a: any[], b: any[]) {\n  if (a === b) return true;\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n  return true;\n}\n\nexport type NodePlugin<T = unknown> = {\n  /**\n   * A subject that the `useNodePlugins()` hook will observe to.\n   */\n  didChange: Subject<T>;\n  /**\n   * A function that returns React props based on a node ID.\n   *\n   * @param nodeId - The ID of a node in the file tree.\n   */\n  getProps(nodeId: number): React.HTMLAttributes<HTMLElement>;\n};\n","import * as React from \"react\";\nimport { isDir, isFile } from \"./file-tree\";\nimport type { FileTree, FileTreeNode } from \"./file-tree\";\nimport { subject } from \"./tree/subject\";\nimport type { NodePlugin } from \"./use-node-plugins\";\nimport { useNodePlugins } from \"./use-node-plugins\";\nimport { retryWithBackoff } from \"./utils\";\n\n/**\n * A React component that renders a node in a file tree with plugins. The\n * `<Node>` component uses this under the hood.\n *\n * @param props - Node props\n */\nexport function Node<Meta>(props: NodeProps<Meta>) {\n  const elementProps = useNodePlugins(props.node.id, [\n    ...(props.plugins ?? empty),\n    useNode(props.tree, props),\n  ]);\n\n  return React.createElement(props.as ?? \"div\", elementProps, props.children);\n}\n\n/**\n * A plugin that creates and memoizes node-specific props.\n *\n * @param fileTree - A file tree\n * @param config - Props to generate exploration node-specific props from\n */\nexport function useNode<Meta>(\n  fileTree: FileTree<Meta>,\n  config: UseNodeConfig<Meta>\n) {\n  const { node, index, style } = config;\n  const type = isDir(node) ? \"dir\" : isFile(node) ? \"file\" : \"prompt\";\n  const expanded = isDir(node) ? node.expanded : undefined;\n  const { id, depth } = node;\n  const props = React.useMemo<React.HTMLAttributes<HTMLElement>>(() => {\n    return {\n      role: \"button\",\n      style,\n      \"data-exploration-id\": id,\n      \"data-exploration-index\": index,\n      \"data-exploration-depth\": depth,\n      \"data-exploration-type\": type,\n      \"data-exploration-expanded\": expanded,\n      onClick(event) {\n        event.currentTarget.focus();\n\n        if (\n          event.metaKey ||\n          event.shiftKey ||\n          event.altKey ||\n          event.ctrlKey ||\n          event.button === 2\n        ) {\n          return;\n        }\n\n        if (isDir(node)) {\n          if (expanded) {\n            fileTree.collapse(node);\n          } else {\n            retryWithBackoff(() => fileTree.expand(node), {\n              shouldRetry() {\n                return node.expanded && !fileTree.isExpanded(node);\n              },\n            }).catch(() => {});\n          }\n        }\n      },\n    };\n  }, [index, depth, expanded, style, type, node, fileTree, id]);\n\n  return {\n    didChange: noopSubject,\n    getProps() {\n      return props;\n    },\n  };\n}\n\nconst empty: [] = [];\nconst noopSubject = subject(0);\n\nexport interface NodeProps<Meta> {\n  /**\n   * Render the node as this component\n   *\n   * @default \"div\"\n   */\n  as?: React.ComponentType<React.HTMLAttributes<HTMLElement>>;\n  /**\n   *  A file tree node\n   */\n  node: FileTreeNode<Meta>;\n  /**\n   * The index of the node within the file tree list of visible nodes\n   */\n  index: number;\n  /**\n   * The file tree that contains the node\n   */\n  tree: FileTree<Meta>;\n  /**\n   * A list of plugins to apply to the node. For example `useTraits()`.\n   */\n  plugins?: NodePlugin[];\n  /**\n   * Styles to apply to the `<div>` element\n   */\n  style: React.CSSProperties;\n  /**\n   * Children to render within the node\n   */\n  children: React.ReactNode;\n}\n\nexport type UseNodeConfig<Meta> = Pick<\n  NodeProps<Meta>,\n  \"node\" | \"index\" | \"style\"\n>;\n","import type { Subject } from \"./tree/subject\";\nimport { subject } from \"./tree/subject\";\n\nexport class SubjectSet<T> extends Set<T> {\n  didChange: Subject<Set<T>>;\n\n  constructor(initialValue?: T[]) {\n    super(initialValue);\n    this.didChange = subject(new Set(this));\n  }\n\n  add(value: T) {\n    super.add(value);\n    this.didChange.setState(new Set(this));\n    return this;\n  }\n\n  delete(value: T) {\n    const deleted = super.delete(value);\n    this.didChange.setState(new Set(this));\n    return deleted;\n  }\n\n  clear() {\n    super.clear();\n    this.didChange.setState(new Set(this));\n    return this;\n  }\n}\n\nexport class SubjectMap<K, V> extends Map<K, V> {\n  didChange: Subject<Map<K, V>>;\n\n  constructor(initialValue?: [K, V][]) {\n    super(initialValue);\n    this.didChange = subject(new Map(this));\n  }\n\n  set(key: K, value: V) {\n    super.set(key, value);\n    this.didChange.setState(new Map(this));\n    return this;\n  }\n\n  delete(key: K) {\n    const deleted = super.delete(key);\n    this.didChange.setState(new Map(this));\n    return deleted;\n  }\n\n  clear() {\n    super.clear();\n    this.didChange.setState(new Map(this));\n    return this;\n  }\n}\n","import * as React from \"react\";\nimport type { Observer, Subject } from \"./tree/subject\";\n\n/**\n * A hook for observing changes to the value of a subject.\n *\n * @param subject - A subject to observe\n * @param observer - A callback that is invoked when the subject changes\n */\nexport function useObserver<T>(subject: Subject<T>, observer: Observer<T>) {\n  const storedObserver = React.useRef(observer);\n\n  React.useEffect(() => {\n    storedObserver.current = observer;\n  });\n\n  React.useEffect(() => {\n    let didUnmount = false;\n    let cleanup: void | (() => void);\n\n    const unobserve = subject.observe((value) => {\n      if (didUnmount) return;\n      cleanup?.();\n      cleanup = storedObserver.current(value);\n    });\n\n    return () => {\n      didUnmount = true;\n      cleanup?.();\n      unobserve();\n    };\n  }, [subject]);\n}\n","import * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport type { Dir, FileTree, FileTreeNode } from \"./file-tree\";\nimport { isDir } from \"./file-tree\";\nimport type { Subject } from \"./tree/subject\";\nimport { pureSubject } from \"./tree/subject\";\nimport type { WindowRef } from \"./types\";\nimport { useObserver } from \"./use-observer\";\nimport { retryWithBackoff, shallowEqual } from \"./utils\";\n\n/**\n * A plugin hook for adding drag and drop to the file tree.\n *\n * @param fileTree - A file tree\n * @param config - Configuration options\n * @param config.windowRef - A React ref created by useRef() or an HTML element for the\n *   container viewport you're rendering the list inside of.\n * @param config.dragOverExpandTimeout - Timeout for expanding a directory when a draggable\n *   element enters it.\n */\nexport function useDnd<Meta>(\n  fileTree: FileTree<Meta>,\n  config: UseDndConfig\n): UseDndPlugin<Meta> {\n  const storedConfig = React.useRef(config);\n  const dnd = createDnd(fileTree);\n  const storedTimeout = React.useRef<{\n    id: number;\n    timeout: ReturnType<typeof setTimeout> | null;\n  }>({ id: -1, timeout: null });\n  const storedDir = React.useRef<Dir | null>(null);\n\n  React.useEffect(() => {\n    storedConfig.current = config;\n  });\n\n  useObserver(dnd, (event) => {\n    if (!event) return;\n\n    if (event.type === \"enter\") {\n      storedTimeout.current.timeout &&\n        clearTimeout(storedTimeout.current.timeout);\n      storedTimeout.current.id = event.dir.id;\n      storedDir.current = event.dir;\n\n      storedTimeout.current.timeout = setTimeout(() => {\n        if (!event.dir.expanded) {\n          retryWithBackoff(\n            () =>\n              fileTree.expand(event.dir).then(() => {\n                if (event.dir === storedDir.current) {\n                  dnd.setState({ ...event, type: \"expanded\" });\n                }\n              }),\n            {\n              shouldRetry() {\n                return (\n                  event.dir === storedDir.current &&\n                  !fileTree.isExpanded(event.dir)\n                );\n              },\n            }\n          ).catch(() => {});\n        }\n      }, storedConfig.current.dragOverExpandTimeout ?? DEFAULT_DRAG_OVER_EXPAND_TIMEOUT);\n    } else if (\n      event.type === \"end\" ||\n      (event.type === \"leave\" && storedTimeout.current.id === event.dir.id)\n    ) {\n      storedDir.current = null;\n      storedTimeout.current.timeout &&\n        clearTimeout(storedTimeout.current.timeout);\n    } else if (event.type === \"drop\") {\n      storedDir.current = null;\n      storedTimeout.current.timeout &&\n        clearTimeout(storedTimeout.current.timeout);\n    }\n  });\n\n  React.useEffect(() => {\n    const { windowRef } = storedConfig.current;\n    const windowEl =\n      windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n\n    if (windowEl) {\n      const handlers = createProps(dnd, fileTree.root);\n\n      const isCurrentTarget = (event: Event) => {\n        return (\n          event.currentTarget instanceof HTMLElement &&\n          (event.currentTarget === event.target ||\n            event.currentTarget.firstChild === event.target)\n        );\n      };\n\n      const handleDragEnter = (event: Event) => {\n        if (isCurrentTarget(event)) {\n          // @ts-expect-error: technically incompatible types but that is ok\n          handlers.onDragEnter(event);\n        }\n      };\n      const handleDragOver = (event: Event) => {\n        if (isCurrentTarget(event)) {\n          // @ts-expect-error: technically incompatible types but that is ok\n          handlers.onDragOver(event);\n        }\n      };\n      const handleDragLeave = (event: Event) => {\n        if (isCurrentTarget(event)) {\n          // @ts-expect-error: technically incompatible types but that is ok\n          handlers.onDragLeave(event);\n        }\n      };\n      const handleDrop = (event: Event) => {\n        if (isCurrentTarget(event)) {\n          // @ts-expect-error: technically incompatible types but that is ok\n          handlers.onDrop(event);\n        }\n      };\n      windowEl.addEventListener(\"dragenter\", handleDragEnter);\n      windowEl.addEventListener(\"dragover\", handleDragOver);\n      windowEl.addEventListener(\"dragleave\", handleDragLeave);\n      windowEl.addEventListener(\"drop\", handleDrop);\n\n      return () => {\n        windowEl.removeEventListener(\"dragenter\", handleDragEnter);\n        windowEl.removeEventListener(\"dragover\", handleDragOver);\n        windowEl.removeEventListener(\"dragleave\", handleDragLeave);\n        windowEl.removeEventListener(\"drop\", handleDrop);\n      };\n    }\n  }, [dnd, fileTree.root]);\n\n  return {\n    didChange: dnd,\n\n    getProps(nodeId) {\n      const node = fileTree.getById(nodeId);\n      if (!node) return empty;\n      return createProps(dnd, node);\n    },\n  };\n}\n\nconst DEFAULT_DRAG_OVER_EXPAND_TIMEOUT = 400;\nconst empty = {};\n\nconst createProps = trieMemoize(\n  [WeakMap, WeakMap],\n  <Meta>(\n    dnd: Subject<DndEvent<Meta> | null>,\n    node: FileTreeNode<Meta>\n  ): DndProps => ({\n    draggable: true,\n\n    onDragStart() {\n      dnd.setState({ type: \"start\", node });\n    },\n\n    onDragEnd() {\n      dnd.setState({ type: \"end\", node });\n    },\n\n    onDragEnter() {\n      const dir = isDir(node) ? node : node.parent;\n      const state = dnd.getState();\n\n      if (dir && state?.node) {\n        dnd.setState({ type: \"enter\", node: state.node, dir });\n      }\n    },\n\n    onDragOver(event) {\n      event.preventDefault();\n    },\n\n    onDragLeave() {\n      const dir = isDir(node) ? node : node.parent;\n      const state = dnd.getState();\n\n      if (dir && state && state.type === \"enter\" && state.node) {\n        dnd.setState({ type: \"leave\", node: state.node, dir });\n      }\n    },\n\n    onDrop() {\n      const dir = isDir(node) ? node : node.parent;\n      const state = dnd.getState();\n\n      if (dir && state?.node) {\n        dnd.setState({ type: \"drop\", node: state.node, dir });\n      }\n    },\n  })\n);\n\nconst createDnd = trieMemoize([WeakMap], <Meta>(fileTree: FileTree<Meta>) => {\n  return pureSubject<DndEvent<Meta> | null>(null, shallowEqual);\n});\n\nexport type DndEvent<Meta> =\n  | {\n      type: \"start\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n    }\n  | {\n      type: \"end\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n    }\n  | {\n      type: \"enter\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n      /**\n       * The directory that the node is being dragged over\n       */\n      dir: Dir<Meta>;\n    }\n  | {\n      type: \"expanded\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n      /**\n       * The directory that the node is being dragged over\n       */\n      dir: Dir<Meta>;\n    }\n  | {\n      type: \"leave\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n      /**\n       * The directory that the node was being dragged over\n       */\n      dir: Dir<Meta>;\n    }\n  | {\n      type: \"drop\";\n      /**\n       * The node that is being dragged\n       */\n      node: FileTreeNode<Meta>;\n      /**\n       * The directory that the node is being dragged over\n       */\n      dir: Dir<Meta>;\n    };\n\nexport interface DndProps {\n  draggable: true;\n  onDragStart: React.MouseEventHandler<HTMLElement>;\n  onDragEnd: React.MouseEventHandler<HTMLElement>;\n  onDragOver: React.MouseEventHandler<HTMLElement>;\n  onDragEnter: React.MouseEventHandler<HTMLElement>;\n  onDragLeave: React.MouseEventHandler<HTMLElement>;\n  onDrop: React.MouseEventHandler<HTMLElement>;\n}\n\nexport interface UseDndConfig {\n  /**\n   * Timeout for expanding a directory when a draggable element enters it.\n   */\n  dragOverExpandTimeout?: number;\n  /**\n   * A React ref created by useRef() or an HTML element for the container viewport\n   * you're rendering the list inside of.\n   */\n  windowRef: WindowRef;\n}\n\nexport interface UseDndPlugin<Meta> {\n  /**\n   * A subject that emits drag 'n drop events.\n   */\n  didChange: Subject<DndEvent<Meta> | null>;\n  /**\n   * Get the drag 'n drop props for a given node ID.\n   */\n  getProps: (nodeId: number) => DndProps | React.HTMLAttributes<HTMLElement>;\n}\n","import {\n  clearRequestTimeout,\n  requestTimeout,\n} from \"@essentials/request-timeout\";\nimport * as React from \"react\";\n\nexport const useDeferredValue: <T>(\n  value: T,\n  options?: {\n    timeoutMs: number;\n  }\n) => T =\n  typeof React.useDeferredValue === \"function\"\n    ? (React.useDeferredValue as any)\n    : useThrottle;\n\nexport function useThrottle<T>(\n  value: T,\n  options: { timeoutMs: number } = { timeoutMs: 200 }\n) {\n  const [state, setState] = React.useState<T>(value);\n  const lastInvocation = React.useRef<number>(0);\n  const waitedFor = React.useRef<number>(0);\n\n  React.useEffect(() => {\n    let didUnmount = false;\n    const now = performance.now();\n    waitedFor.current +=\n      now - (lastInvocation.current === 0 ? now : lastInvocation.current);\n    lastInvocation.current = now;\n\n    const timeout = requestTimeout(() => {\n      if (!didUnmount) {\n        setState(value);\n        waitedFor.current = 0;\n        lastInvocation.current = 0;\n      }\n    }, Math.max(options.timeoutMs - waitedFor.current, 0));\n\n    return () => {\n      didUnmount = true;\n      clearRequestTimeout(timeout);\n    };\n  }, [value, options.timeoutMs]);\n\n  return state;\n}\n","import { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport type { FileTree } from \"./file-tree\";\n\n/**\n * A hook that observes to updates to the file tree and returns the nodes that\n * are currently visible in the file tree.\n *\n * @param fileTree - A file tree\n * @example\n * ```tsx\n * const visibleNodes = useVisibleNodes(fileTree)\n * return visibleNodes.map((node) => <div className={`depth-${node.depth}`}>{node.basename}</div>)\n * ```\n */\nexport function useVisibleNodes<Meta>(fileTree: FileTree<Meta>) {\n  return (\n    useSyncExternalStore(\n      fileTree.flatView.observe,\n      fileTree.getSnapshot,\n      fileTree.getSnapshot\n    ) ?? empty\n  );\n}\n\nconst empty: number[] = [];\n","import * as React from \"react\";\nimport type { FileTree, FileTreeNode } from \"./file-tree\";\nimport { useDeferredValue } from \"./use-deferred-value\";\nimport { useVisibleNodes } from \"./use-visible-nodes\";\n\n/**\n * A hook that returns filtered visible nodes based on a filter function.\n *\n * @param fileTree - The file tree to use.\n * @param filter - A _stable_ callback that returns `true` if the node should be visible.\n *   This needs to be memoized or hoisted to the top level to ensure the filtered nodes\n *   only get re-generated when the filter changes or the file tree's visible nodes change.\n */\nexport function useFilter<Meta>(\n  fileTree: FileTree<Meta>,\n  filter: ((node: FileTreeNode<Meta>, i: number) => boolean) | null\n) {\n  const visibleNodes = useVisibleNodes(fileTree);\n\n  const value = React.useMemo(() => {\n    if (filter) {\n      const filteredNodes = [];\n\n      for (let i = 0; i < visibleNodes.length; i++) {\n        const nodeId = visibleNodes[i];\n        const node = fileTree.getById(nodeId);\n\n        if (node && filter(node, i)) {\n          filteredNodes.push(nodeId);\n        }\n      }\n\n      return filteredNodes;\n    }\n\n    return visibleNodes;\n  }, [fileTree, visibleNodes, filter]);\n\n  return useDeferredValue(value);\n}\n","import { useHotkeys as useHotkeys_ } from \"@react-hook/hotkey\";\nimport type { FileTree } from \"./file-tree\";\nimport { isDir } from \"./file-tree\";\nimport type { WindowRef } from \"./types\";\nimport type { useRovingFocus } from \"./use-roving-focus\";\nimport type { useSelections } from \"./use-selections\";\nimport { useVisibleNodes } from \"./use-visible-nodes\";\nimport { retryWithBackoff } from \"./utils\";\n\n/**\n * A hook for adding standard hotkeys to the file tree.\n *\n * @param fileTree - A file tree\n * @param config - Configuration options\n */\nexport function useHotkeys(fileTree: FileTree, config: UseHotkeysConfig) {\n  const {\n    nodes,\n    windowRef,\n    rovingFocus,\n    selections,\n    querySelectorPattern = `[data-exploration-index=\"{index}\"]`,\n  } = config;\n  const visibleNodes_ = useVisibleNodes(fileTree);\n  const visibleNodes = nodes ?? visibleNodes_;\n\n  function getSelectedId() {\n    const rovingId = rovingFocus.didChange.getState();\n    return rovingId > -1 ? rovingId : selections.tail ?? -1;\n  }\n\n  function getSelectedIndex() {\n    return visibleNodes.indexOf(getSelectedId());\n  }\n\n  // @ts-expect-error: `window` isn't explicitly allowed but it works\n  useHotkeys_(windowRef, [\n    [\n      \"up\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const selectedIndex = getSelectedIndex();\n        const nextSelector = querySelectorPattern.replace(\n          \"{index}\",\n          `${Math.max(selectedIndex - 1, 0)}`\n        );\n\n        const element = document.querySelector(nextSelector);\n\n        if (element instanceof HTMLElement) {\n          element.focus();\n        }\n      },\n    ],\n\n    [\n      \"down\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const selectedIndex = getSelectedIndex();\n        const nextSelector = querySelectorPattern.replace(\n          \"{index}\",\n          `${Math.min(selectedIndex + 1, visibleNodes.length)}`\n        );\n\n        const element = document.querySelector(nextSelector);\n\n        if (element instanceof HTMLElement) {\n          element.focus();\n        }\n      },\n    ],\n\n    [\n      \"right\",\n      async (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const nodeId = getSelectedId();\n        const selectedIndex = getSelectedIndex();\n        const node = fileTree.getById(nodeId);\n\n        if (node && isDir(node)) {\n          if (!fileTree.isExpanded(node)) {\n            await fileTree.expand(node);\n          } else if (fileTree.isVisible(node) && node.nodes?.length) {\n            const element = document.querySelector(\n              querySelectorPattern.replace(\n                \"{index}\",\n                `${Math.min(selectedIndex + 1, visibleNodes.length)}`\n              )\n            );\n\n            if (element instanceof HTMLElement) {\n              element.focus();\n            }\n          }\n        }\n      },\n    ],\n\n    [\n      \"left\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const nodeId = getSelectedId();\n        const node = fileTree.getById(nodeId);\n\n        if (node && isDir(node)) {\n          if (node.expanded) {\n            fileTree.collapse(node);\n            return;\n          }\n        }\n\n        if (node && node.parent) {\n          const parentIndex = visibleNodes.indexOf(node.parent.id);\n          const element = document.querySelector(\n            querySelectorPattern.replace(\"{index}\", parentIndex + \"\")\n          );\n\n          if (element instanceof HTMLElement) {\n            element.focus();\n          }\n        }\n      },\n    ],\n\n    [\n      \"space\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const nodeId = getSelectedId();\n        const selectedIndex = getSelectedIndex();\n\n        if (selectedIndex > -1) {\n          const element = document.querySelector(\n            querySelectorPattern.replace(\"{index}\", selectedIndex + \"\")\n          );\n\n          if (element instanceof HTMLElement) {\n            element.focus();\n          }\n\n          const node = fileTree.getById(nodeId);\n\n          if (node) {\n            if (isDir(node)) {\n              if (node.expanded) {\n                fileTree.collapse(node);\n              } else {\n                retryWithBackoff(() => fileTree.expand(node), {\n                  shouldRetry() {\n                    return node.expanded && !fileTree.isExpanded(node);\n                  },\n                }).catch(() => {});\n              }\n            } else {\n              selections.clear();\n              selections.select(nodeId);\n            }\n          }\n        }\n      },\n    ],\n\n    [\n      \"home\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const element = document.querySelector(\n          querySelectorPattern.replace(\"{index}\", \"0\")\n        );\n\n        if (element instanceof HTMLElement) {\n          element.focus();\n        }\n      },\n    ],\n\n    [\n      \"end\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const element = document.querySelector(\n          querySelectorPattern.replace(\"{index}\", visibleNodes.length - 1 + \"\")\n        );\n\n        if (element instanceof HTMLElement) {\n          element.focus();\n        }\n      },\n    ],\n\n    [\n      \"escape\",\n      (event) => {\n        if (\n          event.target instanceof HTMLInputElement ||\n          event.target instanceof HTMLTextAreaElement\n        ) {\n          return;\n        }\n\n        event.preventDefault();\n        const rovingId = rovingFocus.didChange.getState();\n        const selectedIndex = visibleNodes.indexOf(rovingId);\n\n        if (rovingId > -1) {\n          rovingFocus.didChange.setState(-1);\n        }\n\n        selections.clear();\n\n        if (selectedIndex > -1) {\n          const element = document.querySelector(\n            querySelectorPattern.replace(\"{index}\", selectedIndex + \"\")\n          );\n\n          if (element instanceof HTMLElement) {\n            element.blur();\n\n            if (windowRef && \"current\" in windowRef) {\n              windowRef.current?.focus();\n            } else if (windowRef) {\n              windowRef.focus();\n            }\n          }\n        }\n      },\n    ],\n  ]);\n}\n\nexport interface UseHotkeysConfig {\n  /**\n   * When using a hook like `useFilter` you can supply the filtered list of\n   * nodes to this option. By default, `useVirtualize()` uses the nodes returned\n   * by `useVisibleNodes()`\n   */\n  nodes?: number[];\n  /**\n   * A React ref created by useRef() or an HTML element for the container viewport\n   * you're rendering the list inside of.\n   */\n  windowRef: WindowRef;\n  /**\n   * The returned value of the `useRovingFocus()` plugin\n   */\n  rovingFocus: ReturnType<typeof useRovingFocus>;\n  /**\n   * The returned value of the `useSelections()` plugin\n   */\n  selections: ReturnType<typeof useSelections>;\n  /**\n   * A pattern to use for selecting the elements in the list. Must contain an\n   * `{index}` placeholder for the index of the element to select.\n   */\n  querySelectorPattern?: string;\n}\n","import type { FileTree } from \"./file-tree\";\nimport { isDir } from \"./file-tree\";\nimport type { FileTreeSnapshot } from \"./types\";\nimport { useObserver } from \"./use-observer\";\n\n/**\n * Take a snapshot of the expanded and buried directories of a file tree.\n * This snapshot can be used to restore the expanded/collapsed state of the\n * file tree when you initially load it.\n *\n * @param fileTree - A file tree\n * @param observer - A callback that handles the file tree snapshot\n */\nexport function useFileTreeSnapshot<Meta>(\n  fileTree: FileTree<Meta>,\n  observer: (state: FileTreeSnapshot) => Promise<void> | void\n) {\n  useObserver(fileTree.flatView, () => {\n    const expandedPaths: string[] = [];\n    const nodeIds = [...fileTree.visibleNodes];\n    const buriedIds: number[] = [];\n    let nodeId: number | undefined;\n\n    while ((nodeId = nodeIds.pop())) {\n      const node = fileTree.getById(nodeId);\n\n      if (node && isDir(node)) {\n        if (node.expanded) {\n          expandedPaths.push(node.path);\n        } else if (node.nodes) {\n          buriedIds.push(...node.nodes);\n        }\n      }\n    }\n\n    const buriedPaths: string[] = [];\n\n    while ((nodeId = buriedIds.pop())) {\n      const node = fileTree.getById(nodeId);\n\n      if (!node) continue;\n      if (isDir(node)) {\n        if (node.expanded) {\n          buriedPaths.push(node.path);\n        }\n\n        if (node.nodes) {\n          buriedIds.push(...node.nodes);\n        }\n      }\n    }\n\n    observer({ expandedPaths, buriedPaths, version: SNAPSHOT_VERSION })?.catch(\n      () => {}\n    );\n  });\n}\n\nconst SNAPSHOT_VERSION = 1;\n","import * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport type { FileTree } from \"./file-tree\";\nimport { SubjectMap } from \"./observable-data\";\nimport type { Subject } from \"./tree/subject\";\n\n/**\n * A hook that allows you to arbitrarily apply traits/decorations to nodes in the file\n * tree. For example, if you wanted to add a class name to a node in the tree if it were\n * selected, focused, et. al. you could use this hook to do that. Another example would\n * be the `M` modified decorations in VSCode.\n *\n * @param fileTree - A file tree\n * @param traits - The list of available traits that can be applied to nodes\n */\nexport function useTraits<Trait extends string>(\n  fileTree: FileTree,\n  traits: Trait[]\n): UseTraitsPlugin<Trait> {\n  const storedTraits = React.useRef(traits);\n  const traitsMap = createTraitsMap(fileTree);\n\n  React.useEffect(() => {\n    storedTraits.current = traits;\n  });\n\n  return {\n    didChange: traitsMap.didChange,\n    getProps(nodeId) {\n      let className = \"\";\n\n      for (const entry of traitsMap) {\n        if (entry[1].has(nodeId)) {\n          className += entry[0] + \" \";\n        }\n      }\n\n      return createProps(className);\n    },\n\n    add(trait, ...nodeIds) {\n      const traitSet = traitsMap.get(trait) ?? new Set<number>();\n\n      for (let i = 0; i < nodeIds.length; i++) {\n        const nodeId = nodeIds[i];\n        traitSet.add(nodeId);\n      }\n\n      traitsMap.set(trait, traitSet);\n    },\n\n    set(trait, nodeIds) {\n      const traitSet = traitsMap.get(trait) ?? new Set<number>();\n\n      if (traitSet) {\n        traitSet.clear();\n      }\n\n      for (let i = 0; i < nodeIds.length; i++) {\n        traitSet.add(nodeIds[i]);\n      }\n\n      traitsMap.set(trait, traitSet);\n    },\n\n    delete(trait, nodeId) {\n      const traitSet = traitsMap.get(trait) ?? new Set<number>();\n\n      if (traitSet) {\n        traitSet.delete(nodeId);\n      }\n\n      traitsMap.set(trait, traitSet);\n    },\n\n    clear(trait) {\n      const traitSet = traitsMap.get(trait) ?? new Set<number>();\n      traitSet.clear();\n      traitsMap.set(trait, traitSet);\n    },\n\n    clearAll() {\n      for (const trait of storedTraits.current) {\n        const traitSet = traitsMap.get(trait) ?? new Set<number>();\n        traitSet.clear();\n        traitsMap.set(trait, traitSet);\n      }\n    },\n\n    clearNode(nodeId) {\n      for (const trait of storedTraits.current) {\n        const traitSet = traitsMap.get(trait) ?? new Set<number>();\n        traitSet.delete(nodeId);\n        traitsMap.set(trait, traitSet);\n      }\n    },\n  };\n}\n\nconst createProps = trieMemoize([Map], (className: string): TraitsProps => {\n  return { className: className.slice(0, -1) };\n});\n\nconst createTraitsMap = trieMemoize(\n  [WeakMap],\n  (fileTree: FileTree) => new SubjectMap<string, Set<number>>()\n);\n\nexport interface TraitsProps {\n  className?: string;\n}\n\nexport interface UseTraitsPlugin<Trait> {\n  /**\n   * A subject that you can use to observe to changes to traits.\n   */\n  didChange: Subject<Map<string, Set<number>>>;\n  /**\n   * Get the React props for a given node ID.\n   *\n   * @param nodeId - A node ID\n   */\n  getProps(nodeId: number): TraitsProps;\n  /**\n   * Adds a trait to given node IDs\n   *\n   * @param trait - The trait to apply to the given node IDs\n   * @param nodeIds - Node IDs to add the traits to\n   */\n  add(trait: Extract<Trait, string>, ...nodeIds: number[]): void;\n  /**\n   * Sets node IDs to a given trait. This is different from add in\n   * that it replaces any exist node IDs assigned to the trait.\n   *\n   * @param trait - The trait to apply to the given node IDs\n   * @param nodeIds - Node IDs to add the traits to\n   */\n  set(trait: Extract<Trait, string>, nodeIds: number[]): void;\n  /**\n   * Deletes a node ID from a given trait\n   *\n   * @param trait - The trait\n   * @param nodeId - The node ID to delete a trait for\n   */\n  delete(trait: Extract<Trait, string>, nodeId: number): void;\n  /**\n   * Clears all of the node IDs assigned to a given trait\n   *\n   * @param trait - The trait\n   */\n  clear(trait: Extract<Trait, string>): void;\n  /**\n   * Clears all of the node IDs assigned to all traits\n   */\n  clearAll(): void;\n  /**\n   * Clears the traits assigned to a given node ID\n   *\n   * @param nodeId - A node ID\n   */\n  clearNode(nodeId: number): void;\n}\n","import type * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport type { FileTree } from \"./file-tree\";\nimport type { Subject } from \"./tree/subject\";\nimport { subject } from \"./tree/subject\";\n\n/**\n * A plugin hook for adding roving focus to file tree nodes.\n *\n * @param fileTree - A file tree\n */\nexport function useRovingFocus<Meta>(\n  fileTree: FileTree<Meta>\n): UseRovingFocusPlugin {\n  const focusedNodeId = createFocusedNodeId(fileTree);\n\n  return {\n    didChange: focusedNodeId,\n\n    getProps(nodeId) {\n      return createProps(\n        focusedNodeId,\n        nodeId,\n        nodeId === focusedNodeId.getState()\n      );\n    },\n  };\n}\n\nconst createProps = trieMemoize(\n  [WeakMap, Map, Map],\n  (\n    focusedNodeId: Subject<number>,\n    nodeId: number,\n    focused: boolean\n  ): RovingFocusProps => {\n    return {\n      tabIndex: focused ? 0 : -1,\n\n      onFocus() {\n        focusedNodeId.setState(nodeId);\n      },\n\n      onBlur() {\n        if (focused) {\n          focusedNodeId.setState(-1);\n        }\n      },\n    };\n  }\n);\n\nconst createFocusedNodeId = trieMemoize(\n  [WeakMap],\n  <Meta>(fileTree: FileTree<Meta>) => subject(-1)\n);\n\nexport interface RovingFocusProps {\n  tabIndex: number;\n  onFocus(e: React.FocusEvent<HTMLElement>): void;\n  onBlur(e: React.FocusEvent<HTMLElement>): void;\n}\n\nexport interface UseRovingFocusPlugin {\n  /**\n   * A subject that you can use to observe to changes to the focused node.\n   */\n  didChange: Subject<number>;\n  /**\n   * Get the React props for a given node ID.\n   *\n   * @param nodeId - A node ID\n   */\n  getProps: (nodeId: number) => RovingFocusProps;\n}\n","import * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport type { FileTree } from \"./file-tree\";\nimport { SubjectSet } from \"./observable-data\";\nimport { nodesById } from \"./tree/nodes-by-id\";\nimport type { Subject } from \"./tree/subject\";\nimport { useVisibleNodes } from \"./use-visible-nodes\";\n\n/**\n * A hook for adding select and multi-select to the file tree.\n *\n * @param fileTree - A file tree\n * @param nodes - When using a hook like `useFilter` you can supply the filtered list of\n *   nodes to this option. By default, `useVirtualize()` uses the nodes returned by\n *   `useVisibleNodes()`\n */\nexport function useSelections<Meta>(\n  fileTree: FileTree<Meta>,\n  nodes?: number[]\n): UseSelectionsPlugin {\n  const visibleNodes_ = useVisibleNodes(fileTree);\n  const visibleNodes = nodes ?? visibleNodes_;\n  const prevSelectionsSet = React.useRef<SubjectRange<number> | null>(null);\n  const selectionsSet = createSelectionsSet(fileTree, nodes ?? emptyArray);\n\n  React.useEffect(() => {\n    if (prevSelectionsSet.current) {\n      for (const nodeId of prevSelectionsSet.current) {\n        selectionsSet.add(nodeId);\n      }\n    }\n\n    prevSelectionsSet.current = selectionsSet;\n  }, [selectionsSet]);\n\n  return {\n    didChange: selectionsSet.didChange,\n\n    get head() {\n      return selectionsSet.head;\n    },\n\n    get tail() {\n      return selectionsSet.tail;\n    },\n\n    getProps(nodeId: number) {\n      return createProps(selectionsSet, visibleNodes, nodeId);\n    },\n\n    select(...nodeIds: number[]) {\n      for (const nodeId of nodeIds) {\n        selectionsSet.add(nodeId);\n      }\n    },\n\n    deselect(...nodeIds: number[]) {\n      for (const nodeId of nodeIds) {\n        selectionsSet.delete(nodeId);\n      }\n    },\n\n    clear() {\n      selectionsSet.clear();\n    },\n\n    narrow: function* () {\n      // Remove child nodes from selections if their parent is already selected\n      for (const nodeId of selectionsSet) {\n        const node = nodesById[nodeId];\n\n        if (node) {\n          let parentId = node.parentId;\n\n          while (parentId > -1) {\n            if (selectionsSet.has(parentId)) {\n              break;\n            }\n\n            const parentNode = nodesById[parentId];\n\n            if (!parentNode) {\n              break;\n            }\n\n            parentId = parentNode.parentId;\n          }\n\n          if (parentId === -1) {\n            yield nodeId;\n          }\n        }\n      }\n    },\n  };\n}\n\nconst emptyArray: number[] = [];\n\nconst createProps = trieMemoize(\n  [WeakMap, WeakMap, Map],\n  (\n    selectionsSet: SubjectRange<number>,\n    visibleNodes: number[],\n    nodeId: number\n  ): SelectionsProps => {\n    return {\n      onClick(event) {\n        if (!visibleNodes) {\n          return;\n        }\n\n        if (event.shiftKey) {\n          const { head, tail } = selectionsSet;\n          const headIndex = !head ? -1 : visibleNodes.indexOf(head);\n          const tailIndex = !tail ? -1 : visibleNodes.indexOf(tail);\n          const nodeIndex = visibleNodes.indexOf(nodeId);\n          const direction = tailIndex > nodeIndex ? -1 : 1;\n\n          // Select range\n          let selectStart = tailIndex;\n          let selectEnd = nodeIndex;\n\n          if (direction === 1) {\n            selectStart = tailIndex;\n          } else {\n            selectStart = nodeIndex;\n            selectEnd = tailIndex;\n          }\n\n          if (selectStart > -1 && selectEnd > -1) {\n            for (let i = selectStart; i <= selectEnd; i++) {\n              const node = visibleNodes[i];\n              selectionsSet.add(node);\n            }\n          }\n\n          // Deselect range\n          let deselectStart = -1;\n          let deselectEnd = -1;\n\n          if (direction === 1 && headIndex > tailIndex) {\n            deselectStart = tailIndex;\n            deselectEnd = Math.min(headIndex, nodeIndex) - 1;\n          } else if (direction === -1 && headIndex < tailIndex) {\n            deselectStart = Math.max(headIndex, nodeIndex) + 1;\n            deselectEnd = tailIndex;\n          }\n\n          if (deselectStart > -1 && deselectEnd > -1) {\n            for (let i = deselectStart; i <= deselectEnd; i++) {\n              const node = visibleNodes[i];\n              selectionsSet.delete(node);\n            }\n          }\n\n          if (selectionsSet.head === null) {\n            selectionsSet.head = nodeId;\n          }\n        } else if (event.metaKey) {\n          if (selectionsSet.has(nodeId)) {\n            selectionsSet.delete(nodeId);\n          } else {\n            selectionsSet.add(nodeId);\n          }\n\n          selectionsSet.head = nodeId;\n        } else {\n          selectionsSet.clear();\n          selectionsSet.add(nodeId);\n          selectionsSet.head = nodeId;\n        }\n\n        selectionsSet.tail = nodeId;\n      },\n    };\n  }\n);\n\nconst createSelectionsSet = trieMemoize(\n  [WeakMap, WeakMap],\n  <Meta>(fileTree: FileTree<Meta>, visibleNodes: number[]) =>\n    new SubjectRange<number>()\n);\n\nclass SubjectRange<T> extends SubjectSet<T> {\n  head: T | null = null;\n  tail: T | null = null;\n\n  add(value: T) {\n    super.add(value);\n\n    if (this.head === null) {\n      this.head = value;\n    }\n\n    this.tail = value;\n    return this;\n  }\n\n  delete(value: T) {\n    const deleted = super.delete(value);\n    return deleted;\n  }\n\n  clear() {\n    super.clear();\n    this.head = null;\n    this.tail = null;\n    return this;\n  }\n}\n\nexport interface SelectionsProps {\n  onClick: React.MouseEventHandler<HTMLElement>;\n}\n\nexport interface UseSelectionsPlugin {\n  /**\n   * A subject that you can use to observe to changes to selections.\n   */\n  didChange: Subject<Set<number>>;\n  /**\n   * Get the React props for a given node ID.\n   *\n   * @param nodeId - A node ID\n   */\n  getProps(nodeId: number): SelectionsProps;\n  /**\n   * The head of the selections list\n   */\n  get head(): number | null;\n  /**\n   * The tail of the selections list\n   */\n  get tail(): number | null;\n  /**\n   * Select given node ids\n   *\n   * @param nodeIds - Node IDs\n   */\n  select(...nodeIds: number[]): void;\n  /**\n   * Deselect given node ids\n   *\n   * @param nodeIds - Node IDs\n   */\n  deselect(...nodeIds: number[]): void;\n  /**\n   * Clear all of the selections\n   */\n  clear(): void;\n  /**\n   * A utility function that yields nodes from a set of selections if they\n   * don't have a parent node in the set.\n   *\n   * @yields {number} - A node id\n   */\n  narrow(): Generator<number, void, unknown>;\n}\n","import * as React from \"react\";\n\nexport function useResizeObserver<\n  T extends HTMLElement,\n  R extends typeof ResizeObserver\n>(\n  target: React.RefObject<T> | T | null,\n  callback: UseResizeObserverCallback,\n  options?: { ResizeObserver: R }\n) {\n  const resizeObserver = getResizeObserver(\n    options?.ResizeObserver ??\n      (typeof window !== \"undefined\" ? window.ResizeObserver : false)\n  );\n  const storedCallback = React.useRef(callback);\n\n  React.useEffect(() => {\n    storedCallback.current = callback;\n  });\n\n  React.useEffect(() => {\n    let didUnobserve = false;\n    const targetEl = target && \"current\" in target ? target.current : target;\n    if (!targetEl) return () => {};\n\n    function cb(entry: ResizeObserverEntry, observer: ResizeObserver) {\n      if (didUnobserve) return;\n      storedCallback.current(entry, observer);\n    }\n\n    resizeObserver?.observe(targetEl, cb);\n\n    return () => {\n      didUnobserve = true;\n      resizeObserver?.unobserve(targetEl, cb);\n    };\n  }, [target, resizeObserver]);\n}\n\nfunction createResizeObserver<R extends typeof ResizeObserver>(\n  ResizeObserver: R | false\n) {\n  if (!ResizeObserver) return;\n\n  const callbacks: Map<Element, Array<UseResizeObserverCallback>> = new Map();\n  const observer = new ResizeObserver((entries, obs) => {\n    for (let i = 0; i < entries.length; i++) {\n      const cbs = callbacks.get(entries[i].target);\n      cbs?.forEach((cb) => cb(entries[i], obs));\n    }\n  });\n\n  return {\n    observer,\n    observe(target: HTMLElement, callback: UseResizeObserverCallback) {\n      observer.observe(target);\n      const cbs = callbacks.get(target) ?? [];\n      cbs.push(callback);\n      callbacks.set(target, cbs);\n    },\n    unobserve(target: HTMLElement, callback: UseResizeObserverCallback) {\n      const cbs = callbacks.get(target) ?? [];\n      if (cbs.length === 1) {\n        observer.unobserve(target);\n        callbacks.delete(target);\n        return;\n      }\n      const cbIndex = cbs.indexOf(callback);\n      if (cbIndex !== -1) cbs.splice(cbIndex, 1);\n      callbacks.set(target, cbs);\n    },\n  };\n}\n\nlet _resizeObserver: ReturnType<typeof createResizeObserver>;\n\nconst getResizeObserver = <R extends typeof ResizeObserver>(\n  resizeObserver: R | false\n) =>\n  !_resizeObserver\n    ? (_resizeObserver = createResizeObserver(resizeObserver))\n    : _resizeObserver;\n\nexport type UseResizeObserverCallback = (\n  entry: ResizeObserverEntry,\n  observer: ResizeObserver\n) => void;\n","import * as React from \"react\";\n\nexport const useTransition: () => [boolean, typeof React.startTransition] =\n  typeof React.useTransition === \"function\"\n    ? React.useTransition\n    : () => [false, (fn) => fn()];\n","import {\n  clearRequestTimeout,\n  requestTimeout,\n} from \"@essentials/request-timeout\";\nimport * as React from \"react\";\nimport trieMemoize from \"trie-memoize\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport type { FileTree, FileTreeNode } from \"./file-tree\";\nimport type { WindowRef } from \"./types\";\nimport { useResizeObserver } from \"./use-resize-observer\";\nimport { useTransition } from \"./use-transition\";\nimport { useVisibleNodes } from \"./use-visible-nodes\";\nimport { throttle } from \"./utils\";\n\n/**\n * A hook similar to `react-window`'s [`FixesSizeList`](https://react-window.vercel.app/#/examples/list/fixed-size)\n * component. It allows you to render only enough components to fill a viewport, solving\n * some important performance bottlenecks when rendering large lists.\n *\n * @param fileTree - The file tree to virtualize.\n * @param config - Configuration options\n */\nexport function useVirtualize<Meta>(\n  fileTree: FileTree<Meta>,\n  config: UseVirtualizeConfig\n): UseVirtualizeResult<Meta> {\n  const {\n    windowRef,\n    nodes,\n    nodeHeight,\n    nodeGap = 0,\n    overscanBy = 2,\n    ResizeObserver,\n  } = config;\n  const _visibleNodes = useVisibleNodes(fileTree);\n  const visibleNodes = nodes ?? _visibleNodes;\n  const scrollPosition = useScrollPosition(windowRef);\n  const height = useHeight(windowRef, ResizeObserver);\n  const scrollHeight = (nodeHeight + nodeGap) * visibleNodes.length - nodeGap;\n\n  return {\n    scrollTop: scrollPosition.scrollTop,\n    isScrolling: scrollPosition.isScrolling,\n\n    scrollTo(scrollTop, config = {}) {\n      const windowEl =\n        windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n\n      if (windowEl) {\n        windowEl.scrollTo({ top: scrollTop, behavior: config.behavior });\n      }\n    },\n\n    scrollToNode(nodeId, config = {}) {\n      const index = visibleNodes.indexOf(nodeId) ?? -1;\n\n      if (index > -1) {\n        // eslint-disable-next-line prefer-const\n        let { behavior = \"auto\", align = \"start\" } = config;\n        const lastNodeOffset = Math.max(\n          0,\n          visibleNodes.length * nodeHeight - height\n        );\n        const nodeOffset = index * (nodeHeight + nodeGap);\n        const minOffset = Math.max(\n          0,\n          nodeOffset - (height + (nodeHeight + nodeGap))\n        );\n        const maxOffset = Math.min(nodeOffset, lastNodeOffset);\n        const windowEl =\n          windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n        // use \"start\" alignment by default\n        let top: number = maxOffset;\n\n        if (align === \"smart\") {\n          if (\n            scrollPosition.scrollTop >= minOffset - height &&\n            scrollPosition.scrollTop <= maxOffset + height\n          ) {\n            align = \"auto\";\n          } else {\n            align = \"center\";\n          }\n        }\n\n        if (align === \"end\") {\n          top = minOffset;\n        } else if (align === \"center\") {\n          top = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n          if (top < Math.ceil(height / 2)) {\n            top = 0; // near the beginning\n          } else if (top > lastNodeOffset + Math.floor(height / 2)) {\n            top = lastNodeOffset; // near the end\n          }\n        } else if (align === \"auto\") {\n          top = maxOffset;\n\n          if (\n            scrollPosition.scrollTop >= minOffset &&\n            scrollPosition.scrollTop <= maxOffset\n          ) {\n            top = scrollPosition.scrollTop;\n          } else if (scrollPosition.scrollTop < minOffset) {\n            top = minOffset;\n          }\n        }\n\n        if (top !== scrollPosition.scrollTop) {\n          windowEl?.scrollTo({ top, behavior });\n        }\n      }\n    },\n\n    props: {\n      tabIndex: 0,\n      style: {\n        position: \"relative\",\n        width: \"100%\",\n        height: Math.max(Math.ceil(scrollHeight), height),\n        contain: \"strict\",\n        userSelect: \"none\",\n        pointerEvents: scrollPosition.isScrolling ? \"none\" : undefined,\n      },\n    },\n\n    map(render) {\n      const totalNodeHeight = nodeHeight + nodeGap;\n      const overscan = height * overscanBy;\n\n      let index = Math.floor(\n        Math.max(0, scrollPosition.scrollTop - overscan / 2) / totalNodeHeight\n      );\n      const stopIndex = Math.min(\n        visibleNodes.length,\n        Math.ceil((scrollPosition.scrollTop + overscan) / totalNodeHeight)\n      );\n      const start = index;\n      const children: React.ReactElement[] = new Array(\n        Math.max(stopIndex - index, 0)\n      );\n\n      for (; index < stopIndex; index++) {\n        const nodeId = visibleNodes[index];\n        const node = fileTree.getById(nodeId);\n        if (!node) continue;\n\n        children[index - start] = render({\n          key: nodeId,\n          index,\n          node,\n          tree: fileTree,\n          style: createStyle(nodeHeight, nodeGap * index + index * nodeHeight),\n        });\n      }\n\n      return children;\n    },\n  };\n}\n\nconst createStyle = trieMemoize(\n  [Map, Map],\n  (height: number, top: number): React.CSSProperties => ({\n    position: \"absolute\",\n    contain: \"strict\",\n    userSelect: \"none\",\n    width: \"100%\",\n    left: 0,\n    height,\n    top,\n  })\n);\n\nexport function useHeight(windowRef: WindowRef, ResizeObserver: any) {\n  const [, startTransition] = useTransition();\n  const getWindowHeight = () => {\n    const windowEl =\n      windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n\n    if (typeof window !== \"undefined\" && windowEl instanceof HTMLElement) {\n      const computedStyle = getComputedStyle(windowEl);\n      return (\n        windowEl.clientHeight -\n        parseFloat(computedStyle.paddingTop) -\n        parseFloat(computedStyle.paddingBottom)\n      );\n    }\n\n    return 0;\n  };\n  const [height, setHeight] = React.useState(getWindowHeight);\n\n  useResizeObserver(\n    // @ts-expect-error\n    typeof window === \"undefined\" ||\n      (typeof window !== \"undefined\" && windowRef === window)\n      ? null\n      : windowRef,\n    () => {\n      startTransition(() => {\n        setHeight(getWindowHeight());\n      });\n    },\n    { ResizeObserver }\n  );\n\n  return useGlobalWindowHeight(windowRef) ?? height;\n}\n\nexport function useGlobalWindowHeight(windowRef: WindowRef) {\n  return useSyncExternalStore(\n    (callback) => {\n      callback = throttle(callback, 12, true);\n      if (typeof window !== \"undefined\" && windowRef instanceof Window) {\n        window.addEventListener(\"resize\", callback);\n        window.addEventListener(\"orientationchange\", callback);\n\n        return () => {\n          window.removeEventListener(\"resize\", callback);\n          window.removeEventListener(\"orientationchange\", callback);\n        };\n      }\n\n      return () => {};\n    },\n    () => {\n      if (typeof window !== \"undefined\" && windowRef === window) {\n        return window.innerHeight;\n      }\n\n      return null;\n    },\n    () => {\n      if (typeof window !== \"undefined\" && windowRef === window) {\n        return window.innerHeight;\n      }\n\n      return null;\n    }\n  );\n}\n\nexport function useScrollPosition(\n  windowRef: WindowRef,\n  { offset = 0 }: UseScrollPosition = {}\n): { scrollTop: number; isScrolling: boolean } {\n  const [isScrolling, setIsScrolling] = React.useState(false);\n  const getSnapshot = () => {\n    const current =\n      windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n\n    if (typeof window !== \"undefined\") {\n      return !current\n        ? 0\n        : \"scrollTop\" in current\n        ? current.scrollTop\n        : current.scrollY;\n    }\n\n    return 0;\n  };\n  const scrollTop = useSyncExternalStore(\n    (callback) => {\n      const current =\n        windowRef && \"current\" in windowRef ? windowRef.current : windowRef;\n      callback = throttle(callback, 15, true);\n\n      if (current) {\n        current.addEventListener(\"scroll\", callback);\n\n        return () => {\n          window.removeEventListener(\"scroll\", callback);\n        };\n      }\n\n      return () => {};\n    },\n    getSnapshot,\n    getSnapshot\n  );\n\n  React.useEffect(() => {\n    let didUnmount = false;\n\n    const to = requestTimeout(() => {\n      if (didUnmount) return;\n      // This is here to prevent premature bail outs while maintaining high resolution\n      // unsets. Without it there will always be a lot of unnecessary DOM writes to style.\n      setIsScrolling(false);\n    }, 1000 / 8);\n\n    setIsScrolling(true);\n\n    return () => {\n      didUnmount = true;\n      to && clearRequestTimeout(to);\n    };\n  }, [scrollTop]);\n\n  return { scrollTop: Math.max(0, scrollTop - offset), isScrolling };\n}\n\nexport interface UseScrollPosition {\n  offset?: number;\n}\n\nexport interface UseVirtualizeConfig {\n  /**\n   * The fixed height (in px) of each node in your list.\n   */\n  nodeHeight: number;\n  /**\n   * Optionally set a gap (in px) between each node in your list.\n   */\n  nodeGap?: number;\n  /**\n   * When using a hook like `useFilter` you can supply the filtered list of\n   * nodes to this option. By default, `useVirtualize()` uses the nodes returned\n   * by `useVisibleNodes()`\n   */\n  nodes?: number[];\n  /**\n   * This number is used for determining the number of nodes outside of the visible\n   * window to render. The default value is 2 which means \"render 2 windows worth (2 * height)\n   * of content before and after the items in the visible window\". A value of 3 would be\n   * 3 windows worth of grid cells, so it's a linear relationship. Overscanning is important\n   * for preventing tearing when scrolling through items in the grid, but setting too high of\n   * a value may create too much work for React to handle, so it's best that you tune this\n   * value accordingly.\n   *\n   * @default 2\n   */\n  overscanBy?: number;\n  /**\n   * A React ref created by useRef() or an HTML element for the container viewport\n   * you're rendering the list inside of.\n   */\n  windowRef: WindowRef;\n  /**\n   * This hook uses a [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver)\n   * for tracking the size of the viewport. If you need to polyfill ResizeObserver you can provide\n   * that polyfill here. By default, we use the `ResizeObserver` from the `window` global.\n   */\n  ResizeObserver?: ResizeObserver;\n}\n\nexport type ScrollToNodeConfig = {\n  /**\n   * The scrolling behavior\n   */\n  behavior?: \"smooth\" | \"auto\";\n  /**\n   * By default, the list will scroll as little as possible to ensure the item is\n   * visible. You can control the alignment of the item though by specifying a\n   * second alignment parameter.\n   * - `auto` - Scroll as little as possible to ensure the item is visible. (If the item\n   *     is already visible, it won't scroll at all.)\n   * - `smart` - If the item is already visible, don't scroll at all. If it is less than\n   *      one viewport away, scroll as little as possible so that it becomes visible. If\n   *      it is more than one viewport away, scroll so that it is centered within the list.\n   * - `center` - Center align the item within the list.\n   * - `end` - Align the item to the end of the list (the bottom for vertical lists or the\n   *      right for horizontal lists).\n   * - `start` - Align the item to the beginning of the list (the top for vertical lists or\n   *      the left for horizontal lists).\n   *\n   * @default \"auto\"\n   */\n  align?: \"auto\" | \"smart\" | \"center\" | \"start\" | \"end\";\n};\n\nexport interface UseVirtualizeResult<Meta> {\n  /**\n   * The current scroll position of the viewport\n   */\n  scrollTop: number;\n  /**\n   * `true` if the viewport is currently scrolling\n   */\n  isScrolling: boolean;\n  /**\n   * Scroll to the viewport a given position\n   *\n   * @param scrollTop - The new scroll position\n   * @param config - Configuration options\n   */\n  scrollTo(\n    scrollTop: number,\n    config?: Pick<ScrollToNodeConfig, \"behavior\">\n  ): void;\n  /**\n   * Scroll to a given node by its ID\n   *\n   * @param nodeId - The node ID to scroll to\n   * @param config - Configuration options\n   */\n  scrollToNode(nodeId: number, config?: ScrollToNodeConfig): void;\n  /**\n   * Props that should be applied to the container you're mapping your virtualized\n   * nodes into.\n   *\n   * @example\n   * ```tsx\n   * const windowRef = React.useRef(null)\n   * const virtualize = useVirtualize(fileTree, {windowRef, nodeHeight: 24})\n   * return (\n   *   <div ref={windowRef} className='file-tree'>\n   *     <div className='file-tree-container' {...virtualize.props}>\n   *      {virtualize.map(props => <Node {...props}/>)}\n   *     </div>\n   *   </div>\n   * )\n   * ```\n   */\n  props: VirtualizeContainerProps;\n  /**\n   * Calls a defined render function on each node and returns an array that\n   * contains the resulting React elements.\n   *\n   * @param render - A callback that renders a node.\n   * @example\n   * ```tsx\n   * const windowRef = React.useRef(null)\n   * const virtualize = useVirtualize(fileTree, {windowRef, nodeHeight: 24})\n   * return (\n   *   <div ref={windowRef} className='file-tree'>\n   *     <div className='file-tree-container' {...virtualize.props}>\n   *      {virtualize.map(props => <Node {...props}/>)}\n   *     </div>\n   *   </div>\n   * )\n   * ```\n   */\n  map(\n    render: (config: VirtualizeRenderProps<Meta>) => React.ReactElement\n  ): React.ReactElement[];\n}\n\nexport interface VirtualizeRenderProps<Meta> {\n  /**\n   * A stable key as required by React elements that are included in arrays\n   */\n  key: number;\n  /**\n   * The index of the node within the list of visible nodes\n   */\n  index: number;\n  /**\n   * A file tree node\n   */\n  node: FileTreeNode<Meta>;\n  /**\n   * The file tree that contains the node\n   */\n  tree: FileTree<Meta>;\n  /**\n   * Styles that need to be applied to the node element\n   */\n  style: React.CSSProperties;\n}\n\nexport interface VirtualizeContainerProps {\n  tabIndex: number;\n  style: React.CSSProperties;\n}\n"],"names":["SEP","SEP_NEGATE_RE","TRAILING_SEP_RE","isRelative","path","join","composed","paths","hasLeadingSlash","lastPath","length","hasTrailingSlash","i","parts","split","j","part","pop","push","unshift","relative","from","to","Error","fromFrags","toFrags","hasTrailingSep","fromFrag","remainder","Array","fill","concat","slice","removeTrailingSlashes","match","normalize","isPathInside","dir","pathFrags","contPathFrags","every","fragment","depth","basename","frags","lastIndex","extname","name","lastIndexOf","dirname","hasLeadingSep","replace","nodesById","Leaf","constructor","parent","data","id","nextId","parentId","Branch","expanded","nodes","contains","node","mergeProps","args","result","style","props","key","a","b","charCodeAt","chain","clsx","Object","assign","callbacks","callback","throttle","fps","leading","ms","prev","trailingTimeout","clearTrailing","clearRequestTimeout","arguments","rightNow","performance","now","call","apply","current","delta","requestTimeout","shallowEqual","objA","objB","retryWithBackoff","promiseFn","config","maxRetries","initialDelay","delayMultiple","shouldRetry","resolve","setTimeout","err","Promise","subject","initialState","observers","Set","state","setState","nextState","listener","getState","observe","observer","add","delete","unobserve","next","pureSubject","initialValue","areEqual","_ref","prevArgs","_ref3","Tree","getNodes","root","comparator","loadingBranches","Map","flatView","getSnapshot","visibleNodes","createVisibleNodes","memoizeOne","reverse","nodeId","isBranch","_ref2","expand","isExpanded","catch","getById","ensureLoaded","branch","loadNodes","options","ensureVisible","recursive","isVisibilitySkippable","isVisible","all","map","invalidate","collapse","_produce","produceFn","draftResult","createDraft","draft","insert","insertionIndex","modified","splice","Infinity","revert","setNodes","remove","nodeToRemove","undefined","nodeToRemoveParent","found","nextNodes","Math","max","move","initialParent","p","promise","get","finally","set","nodeIds","sort","dispose","Proxy","target","index","value","parseInt","getOwnPropertyNames","prototype","forEach","prop","defineProperty","createFileTree","defaultComparator","restoreFromSnapshot","tree","FileTree","factory","createFile","File","createDir","pathFx","Dir","expandedPaths","includes","buriedPaths","getByPath","walk","visitor","shouldContinue","isDir","produce","context","producer","insertedNode","createPrompt","Prompt","newFile","inDir","withData","file","newDir","newPrompt","prompt","rename","newName","$$type","_basenameName","_basename","getPath","parentPath","sep","localeCompare","isPrompt","treeNode","isFile","shallowEqualArray","useNodePlugins","plugins","createSubject","React","useRef","mergeProps_","storedPlugins","useEffect","useCallback","getProps","useSyncExternalStore","onStoreChange","numPlugins","unsubs","didChange","Node","elementProps","empty","useNode","as","children","fileTree","type","useMemo","role","onClick","event","currentTarget","focus","metaKey","shiftKey","altKey","ctrlKey","button","noopSubject","SubjectSet","deleted","clear","SubjectMap","useObserver","storedObserver","didUnmount","cleanup","_ref5","HTMLElement","firstChild","useDnd","storedConfig","dnd","createDnd","storedTimeout","timeout","storedDir","then","clearTimeout","dragOverExpandTimeout","DEFAULT_DRAG_OVER_EXPAND_TIMEOUT","windowRef","windowEl","handlers","createProps","isCurrentTarget","handleDragEnter","onDragEnter","handleDragOver","onDragOver","handleDragLeave","onDragLeave","handleDrop","onDrop","addEventListener","removeEventListener","trieMemoize","WeakMap","draggable","onDragStart","onDragEnd","preventDefault","useDeferredValue","useThrottle","timeoutMs","useState","lastInvocation","waitedFor","useVisibleNodes","useFilter","filter","filteredNodes","useHotkeys","rovingFocus","selections","querySelectorPattern","visibleNodes_","getSelectedId","rovingId","tail","getSelectedIndex","indexOf","HTMLInputElement","HTMLTextAreaElement","selectedIndex","element","document","querySelector","min","useHotkeys_","nextSelector","parentIndex","select","blur","useFileTreeSnapshot","buriedIds","version","SNAPSHOT_VERSION","useTraits","traits","storedTraits","traitsMap","createTraitsMap","className","entry","has","trait","traitSet","clearAll","clearNode","useRovingFocus","focusedNodeId","createFocusedNodeId","focused","tabIndex","onFocus","onBlur","useSelections","prevSelectionsSet","selectionsSet","createSelectionsSet","emptyArray","head","deselect","narrow","parentNode","headIndex","tailIndex","nodeIndex","direction","selectStart","selectEnd","deselectStart","deselectEnd","SubjectRange","useResizeObserver","resizeObserver","getResizeObserver","ResizeObserver","window","storedCallback","didUnobserve","targetEl","cb","createResizeObserver","entries","obs","cbs","cbIndex","_resizeObserver","fn","useTransition","useVirtualize","nodeHeight","nodeGap","overscanBy","_visibleNodes","scrollPosition","useScrollPosition","height","useHeight","scrollHeight","scrollTop","isScrolling","scrollTo","top","behavior","scrollToNode","align","lastNodeOffset","nodeOffset","minOffset","maxOffset","round","ceil","floor","position","width","contain","userSelect","pointerEvents","render","totalNodeHeight","overscan","stopIndex","start","createStyle","left","startTransition","getWindowHeight","computedStyle","getComputedStyle","clientHeight","parseFloat","paddingTop","paddingBottom","setHeight","useGlobalWindowHeight","Window","innerHeight","offset","setIsScrolling","scrollY"],"mappings":"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"}