{
  "version": 3,
  "sources": ["../../../../node_modules/.pnpm/@zag-js+anatomy@1.32.0/node_modules/@zag-js/anatomy/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+utils@1.32.0/node_modules/@zag-js/utils/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+collection@1.32.0/node_modules/@zag-js/collection/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+dom-query@1.32.0/node_modules/@zag-js/dom-query/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+core@1.32.0/node_modules/@zag-js/core/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+types@1.32.0/node_modules/@zag-js/types/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+tree-view@1.32.0/node_modules/@zag-js/tree-view/dist/index.mjs", "../../../../node_modules/.pnpm/proxy-compare@3.0.1/node_modules/proxy-compare/dist/index.js", "../../../../node_modules/.pnpm/@zag-js+store@1.32.0/node_modules/@zag-js/store/dist/index.mjs", "../../../../node_modules/.pnpm/@zag-js+vanilla@1.32.0/node_modules/@zag-js/vanilla/dist/index.mjs", "../../src/lib/component.ts", "../../src/lib/util.ts", "../../src/components/tree-view.ts"],
  "sourcesContent": ["// src/create-anatomy.ts\nvar createAnatomy = (name, parts = []) => ({\n  parts: (...values) => {\n    if (isEmpty(parts)) {\n      return createAnatomy(name, values);\n    }\n    throw new Error(\"createAnatomy().parts(...) should only be called once. Did you mean to use .extendWith(...) ?\");\n  },\n  extendWith: (...values) => createAnatomy(name, [...parts, ...values]),\n  omit: (...values) => createAnatomy(name, parts.filter((part) => !values.includes(part))),\n  rename: (newName) => createAnatomy(newName, parts),\n  keys: () => parts,\n  build: () => [...new Set(parts)].reduce(\n    (prev, part) => Object.assign(prev, {\n      [part]: {\n        selector: [\n          `&[data-scope=\"${toKebabCase(name)}\"][data-part=\"${toKebabCase(part)}\"]`,\n          `& [data-scope=\"${toKebabCase(name)}\"][data-part=\"${toKebabCase(part)}\"]`\n        ].join(\", \"),\n        attrs: { \"data-scope\": toKebabCase(name), \"data-part\": toKebabCase(part) }\n      }\n    }),\n    {}\n  )\n});\nvar toKebabCase = (value) => value.replace(/([A-Z])([A-Z])/g, \"$1-$2\").replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[\\s_]+/g, \"-\").toLowerCase();\nvar isEmpty = (v) => v.length === 0;\n\nexport { createAnatomy };\n", "var __defProp = Object.defineProperty;\nvar __typeError = (msg) => {\n  throw TypeError(msg);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n\n// src/array.ts\nfunction toArray(v) {\n  if (v == null) return [];\n  return Array.isArray(v) ? v : [v];\n}\nvar fromLength = (length) => Array.from(Array(length).keys());\nvar first = (v) => v[0];\nvar last = (v) => v[v.length - 1];\nvar isEmpty = (v) => v.length === 0;\nvar has = (v, t) => v.indexOf(t) !== -1;\nvar add = (v, ...items) => v.concat(items);\nvar remove = (v, ...items) => v.filter((t) => !items.includes(t));\nvar removeAt = (v, i) => v.filter((_, idx) => idx !== i);\nvar insertAt = (v, i, ...items) => [...v.slice(0, i), ...items, ...v.slice(i)];\nvar uniq = (v) => Array.from(new Set(v));\nvar diff = (a, b) => {\n  const set = new Set(b);\n  return a.filter((t) => !set.has(t));\n};\nvar addOrRemove = (v, item) => has(v, item) ? remove(v, item) : add(v, item);\nfunction clear(v) {\n  while (v.length > 0) v.pop();\n  return v;\n}\nfunction nextIndex(v, idx, opts = {}) {\n  const { step = 1, loop = true } = opts;\n  const next2 = idx + step;\n  const len = v.length;\n  const last2 = len - 1;\n  if (idx === -1) return step > 0 ? 0 : last2;\n  if (next2 < 0) return loop ? last2 : 0;\n  if (next2 >= len) return loop ? 0 : idx > len ? len : idx;\n  return next2;\n}\nfunction next(v, idx, opts = {}) {\n  return v[nextIndex(v, idx, opts)];\n}\nfunction prevIndex(v, idx, opts = {}) {\n  const { step = 1, loop = true } = opts;\n  return nextIndex(v, idx, { step: -step, loop });\n}\nfunction prev(v, index, opts = {}) {\n  return v[prevIndex(v, index, opts)];\n}\nfunction chunk(v, size) {\n  return v.reduce((rows, value, index) => {\n    if (index % size === 0) rows.push([value]);\n    else last(rows)?.push(value);\n    return rows;\n  }, []);\n}\nfunction flatArray(arr) {\n  return arr.reduce((flat, item) => {\n    if (Array.isArray(item)) {\n      return flat.concat(flatArray(item));\n    }\n    return flat.concat(item);\n  }, []);\n}\nfunction partition(arr, fn) {\n  return arr.reduce(\n    ([pass, fail], value) => {\n      if (fn(value)) pass.push(value);\n      else fail.push(value);\n      return [pass, fail];\n    },\n    [[], []]\n  );\n}\n\n// src/equal.ts\nvar isArrayLike = (value) => value?.constructor.name === \"Array\";\nvar isArrayEqual = (a, b) => {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) {\n    if (!isEqual(a[i], b[i])) return false;\n  }\n  return true;\n};\nvar isEqual = (a, b) => {\n  if (Object.is(a, b)) return true;\n  if (a == null && b != null || a != null && b == null) return false;\n  if (typeof a?.isEqual === \"function\" && typeof b?.isEqual === \"function\") {\n    return a.isEqual(b);\n  }\n  if (typeof a === \"function\" && typeof b === \"function\") {\n    return a.toString() === b.toString();\n  }\n  if (isArrayLike(a) && isArrayLike(b)) {\n    return isArrayEqual(Array.from(a), Array.from(b));\n  }\n  if (!(typeof a === \"object\") || !(typeof b === \"object\")) return false;\n  const keys = Object.keys(b ?? /* @__PURE__ */ Object.create(null));\n  const length = keys.length;\n  for (let i = 0; i < length; i++) {\n    const hasKey = Reflect.has(a, keys[i]);\n    if (!hasKey) return false;\n  }\n  for (let i = 0; i < length; i++) {\n    const key = keys[i];\n    if (!isEqual(a[key], b[key])) return false;\n  }\n  return true;\n};\n\n// src/guard.ts\nvar isDev = () => process.env.NODE_ENV !== \"production\";\nvar isArray = (v) => Array.isArray(v);\nvar isBoolean = (v) => v === true || v === false;\nvar isObjectLike = (v) => v != null && typeof v === \"object\";\nvar isObject = (v) => isObjectLike(v) && !isArray(v);\nvar isNumber = (v) => typeof v === \"number\" && !Number.isNaN(v);\nvar isString = (v) => typeof v === \"string\";\nvar isFunction = (v) => typeof v === \"function\";\nvar isNull = (v) => v == null;\nvar hasProp = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nvar baseGetTag = (v) => Object.prototype.toString.call(v);\nvar fnToString = Function.prototype.toString;\nvar objectCtorString = fnToString.call(Object);\nvar isPlainObject = (v) => {\n  if (!isObjectLike(v) || baseGetTag(v) != \"[object Object]\" || isFrameworkElement(v)) return false;\n  const proto = Object.getPrototypeOf(v);\n  if (proto === null) return true;\n  const Ctor = hasProp(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor == \"function\" && Ctor instanceof Ctor && fnToString.call(Ctor) == objectCtorString;\n};\nvar isReactElement = (x) => typeof x === \"object\" && x !== null && \"$$typeof\" in x && \"props\" in x;\nvar isVueElement = (x) => typeof x === \"object\" && x !== null && \"__v_isVNode\" in x;\nvar isFrameworkElement = (x) => isReactElement(x) || isVueElement(x);\n\n// src/functions.ts\nvar runIfFn = (v, ...a) => {\n  const res = typeof v === \"function\" ? v(...a) : v;\n  return res ?? void 0;\n};\nvar cast = (v) => v;\nvar identity = (v) => v();\nvar noop = () => {\n};\nvar callAll = (...fns) => (...a) => {\n  fns.forEach(function(fn) {\n    fn?.(...a);\n  });\n};\nvar uuid = /* @__PURE__ */ (() => {\n  let id = 0;\n  return () => {\n    id++;\n    return id.toString(36);\n  };\n})();\nfunction match(key, record, ...args) {\n  if (key in record) {\n    const fn = record[key];\n    return isFunction(fn) ? fn(...args) : fn;\n  }\n  const error = new Error(`No matching key: ${JSON.stringify(key)} in ${JSON.stringify(Object.keys(record))}`);\n  Error.captureStackTrace?.(error, match);\n  throw error;\n}\nvar tryCatch = (fn, fallback) => {\n  try {\n    return fn();\n  } catch (error) {\n    if (error instanceof Error) {\n      Error.captureStackTrace?.(error, tryCatch);\n    }\n    return fallback?.();\n  }\n};\nfunction throttle(fn, wait = 0) {\n  let lastCall = 0;\n  let timeout = null;\n  return ((...args) => {\n    const now = Date.now();\n    const timeSinceLastCall = now - lastCall;\n    if (timeSinceLastCall >= wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      fn(...args);\n      lastCall = now;\n    } else if (!timeout) {\n      timeout = setTimeout(() => {\n        fn(...args);\n        lastCall = Date.now();\n        timeout = null;\n      }, wait - timeSinceLastCall);\n    }\n  });\n}\nfunction debounce(fn, wait = 0) {\n  let timeout = null;\n  return ((...args) => {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n    timeout = setTimeout(() => {\n      fn(...args);\n    }, wait);\n  });\n}\nvar toChar = (code) => String.fromCharCode(code + (code > 25 ? 39 : 97));\nfunction toName(code) {\n  let name = \"\";\n  let x;\n  for (x = Math.abs(code); x > 52; x = x / 52 | 0) name = toChar(x % 52) + name;\n  return toChar(x % 52) + name;\n}\nfunction toPhash(h, x) {\n  let i = x.length;\n  while (i) h = h * 33 ^ x.charCodeAt(--i);\n  return h;\n}\nvar hash = (value) => toName(toPhash(5381, value) >>> 0);\n\n// src/number.ts\nvar { floor, abs, round, min, max, pow, sign } = Math;\nvar isNaN = (v) => Number.isNaN(v);\nvar nan = (v) => isNaN(v) ? 0 : v;\nvar mod = (v, m) => (v % m + m) % m;\nvar wrap = (v, vmax) => (v % vmax + vmax) % vmax;\nvar getMinValueAtIndex = (i, v, vmin) => i === 0 ? vmin : v[i - 1];\nvar getMaxValueAtIndex = (i, v, vmax) => i === v.length - 1 ? vmax : v[i + 1];\nvar isValueAtMax = (v, vmax) => nan(v) >= vmax;\nvar isValueAtMin = (v, vmin) => nan(v) <= vmin;\nvar isValueWithinRange = (v, vmin, vmax) => {\n  const value = nan(v);\n  const minCheck = vmin == null || value >= vmin;\n  const maxCheck = vmax == null || value <= vmax;\n  return minCheck && maxCheck;\n};\nvar roundValue = (v, vmin, step) => round((nan(v) - vmin) / step) * step + vmin;\nvar clampValue = (v, vmin, vmax) => min(max(nan(v), vmin), vmax);\nvar clampPercent = (v) => clampValue(v, 0, 1);\nvar getValuePercent = (v, vmin, vmax) => (nan(v) - vmin) / (vmax - vmin);\nvar getPercentValue = (p, vmin, vmax, step) => clampValue(roundValue(p * (vmax - vmin) + vmin, vmin, step), vmin, vmax);\nvar roundToStepPrecision = (v, step) => {\n  let rv = v;\n  let ss = step.toString();\n  let pi = ss.indexOf(\".\");\n  let p = pi >= 0 ? ss.length - pi : 0;\n  if (p > 0) {\n    let pw = pow(10, p);\n    rv = round(rv * pw) / pw;\n  }\n  return rv;\n};\nvar roundToDpr = (v, dpr) => typeof dpr === \"number\" ? floor(v * dpr + 0.5) / dpr : round(v);\nvar snapValueToStep = (v, vmin, vmax, step) => {\n  const min2 = vmin != null ? Number(vmin) : 0;\n  const max2 = Number(vmax);\n  const remainder = (v - min2) % step;\n  let snapped = abs(remainder) * 2 >= step ? v + sign(remainder) * (step - abs(remainder)) : v - remainder;\n  snapped = roundToStepPrecision(snapped, step);\n  if (!isNaN(min2) && snapped < min2) {\n    snapped = min2;\n  } else if (!isNaN(max2) && snapped > max2) {\n    const stepsInRange = floor((max2 - min2) / step);\n    const largestValidStep = min2 + stepsInRange * step;\n    snapped = stepsInRange <= 0 || largestValidStep < min2 ? max2 : largestValidStep;\n  }\n  return roundToStepPrecision(snapped, step);\n};\nvar setValueAtIndex = (vs, i, v) => {\n  if (vs[i] === v) return vs;\n  return [...vs.slice(0, i), v, ...vs.slice(i + 1)];\n};\nfunction getValueSetterAtIndex(index, ctx) {\n  const minValueAtIndex = getMinValueAtIndex(index, ctx.values, ctx.min);\n  const maxValueAtIndex = getMaxValueAtIndex(index, ctx.values, ctx.max);\n  let nextValues = ctx.values.slice();\n  return function setValue(value) {\n    let nextValue = snapValueToStep(value, minValueAtIndex, maxValueAtIndex, ctx.step);\n    nextValues = setValueAtIndex(nextValues, index, value);\n    nextValues[index] = nextValue;\n    return nextValues;\n  };\n}\nfunction getNextStepValue(index, ctx) {\n  const nextValue = ctx.values[index] + ctx.step;\n  return getValueSetterAtIndex(index, ctx)(nextValue);\n}\nfunction getPreviousStepValue(index, ctx) {\n  const nextValue = ctx.values[index] - ctx.step;\n  return getValueSetterAtIndex(index, ctx)(nextValue);\n}\nvar getClosestValueIndex = (vs, t) => {\n  let i = vs.findIndex((v) => t - v < 0);\n  if (i === 0) return i;\n  if (i === -1) return vs.length - 1;\n  let vLeft = vs[i - 1];\n  let vRight = vs[i];\n  if (abs(vLeft - t) < abs(vRight - t)) return i - 1;\n  return i;\n};\nvar getClosestValue = (vs, t) => vs[getClosestValueIndex(vs, t)];\nvar getValueRanges = (vs, vmin, vmax, gap) => vs.map((v, i) => ({\n  min: i === 0 ? vmin : vs[i - 1] + gap,\n  max: i === vs.length - 1 ? vmax : vs[i + 1] - gap,\n  value: v\n}));\nvar getValueTransformer = (va, vb) => {\n  const [a, b] = va;\n  const [c, d] = vb;\n  return (v) => a === b || c === d ? c : c + (d - c) / (b - a) * (v - a);\n};\nvar toFixedNumber = (v, d = 0, b = 10) => {\n  const pow2 = Math.pow(b, d);\n  return round(v * pow2) / pow2;\n};\nvar countDecimals = (value) => {\n  if (!Number.isFinite(value)) return 0;\n  let e = 1, p = 0;\n  while (Math.round(value * e) / e !== value) {\n    e *= 10;\n    p += 1;\n  }\n  return p;\n};\nvar decimalOp = (a, op, b) => {\n  let result = op === \"+\" ? a + b : a - b;\n  if (a % 1 !== 0 || b % 1 !== 0) {\n    const multiplier = 10 ** Math.max(countDecimals(a), countDecimals(b));\n    a = Math.round(a * multiplier);\n    b = Math.round(b * multiplier);\n    result = op === \"+\" ? a + b : a - b;\n    result /= multiplier;\n  }\n  return result;\n};\nvar incrementValue = (v, s) => decimalOp(nan(v), \"+\", s);\nvar decrementValue = (v, s) => decimalOp(nan(v), \"-\", s);\nvar toPx = (v) => typeof v === \"number\" ? `${v}px` : v;\n\n// src/object.ts\nfunction compact(obj) {\n  if (!isPlainObject(obj) || obj === void 0) return obj;\n  const keys = Reflect.ownKeys(obj).filter((key) => typeof key === \"string\");\n  const filtered = {};\n  for (const key of keys) {\n    const value = obj[key];\n    if (value !== void 0) {\n      filtered[key] = compact(value);\n    }\n  }\n  return filtered;\n}\nvar json = (v) => JSON.parse(JSON.stringify(v));\nfunction pick(obj, keys) {\n  const filtered = {};\n  for (const key of keys) {\n    const value = obj[key];\n    if (value !== void 0) {\n      filtered[key] = value;\n    }\n  }\n  return filtered;\n}\nfunction splitProps(props, keys) {\n  const rest = {};\n  const result = {};\n  const keySet = new Set(keys);\n  const ownKeys = Reflect.ownKeys(props);\n  for (const key of ownKeys) {\n    if (keySet.has(key)) {\n      result[key] = props[key];\n    } else {\n      rest[key] = props[key];\n    }\n  }\n  return [result, rest];\n}\nvar createSplitProps = (keys) => {\n  return function split(props) {\n    return splitProps(props, keys);\n  };\n};\nfunction omit(obj, keys) {\n  return createSplitProps(keys)(obj)[1];\n}\n\n// src/store.ts\nfunction createStore(initialState, compare = Object.is) {\n  let state = { ...initialState };\n  const listeners = /* @__PURE__ */ new Set();\n  const subscribe = (listener) => {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const publish = () => {\n    listeners.forEach((listener) => listener());\n  };\n  const get = (key) => {\n    return state[key];\n  };\n  const set = (key, value) => {\n    if (!compare(state[key], value)) {\n      state[key] = value;\n      publish();\n    }\n  };\n  const update = (updates) => {\n    let hasChanges = false;\n    for (const key in updates) {\n      const value = updates[key];\n      if (value !== void 0 && !compare(state[key], value)) {\n        state[key] = value;\n        hasChanges = true;\n      }\n    }\n    if (hasChanges) {\n      publish();\n    }\n  };\n  const snapshot = () => ({ ...state });\n  return {\n    subscribe,\n    get,\n    set,\n    update,\n    snapshot\n  };\n}\n\n// src/timers.ts\nvar currentTime = () => performance.now();\nvar _tick;\nvar Timer = class {\n  constructor(onTick) {\n    this.onTick = onTick;\n    __publicField(this, \"frameId\", null);\n    __publicField(this, \"pausedAtMs\", null);\n    __publicField(this, \"context\");\n    __publicField(this, \"cancelFrame\", () => {\n      if (this.frameId === null) return;\n      cancelAnimationFrame(this.frameId);\n      this.frameId = null;\n    });\n    __publicField(this, \"setStartMs\", (startMs) => {\n      this.context.startMs = startMs;\n    });\n    __publicField(this, \"start\", () => {\n      if (this.frameId !== null) return;\n      const now = currentTime();\n      if (this.pausedAtMs !== null) {\n        this.context.startMs += now - this.pausedAtMs;\n        this.pausedAtMs = null;\n      } else {\n        this.context.startMs = now;\n      }\n      this.frameId = requestAnimationFrame(__privateGet(this, _tick));\n    });\n    __publicField(this, \"pause\", () => {\n      if (this.frameId === null) return;\n      this.cancelFrame();\n      this.pausedAtMs = currentTime();\n    });\n    __publicField(this, \"stop\", () => {\n      if (this.frameId === null) return;\n      this.cancelFrame();\n      this.pausedAtMs = null;\n    });\n    __privateAdd(this, _tick, (now) => {\n      this.context.now = now;\n      this.context.deltaMs = now - this.context.startMs;\n      const shouldContinue = this.onTick(this.context);\n      if (shouldContinue === false) {\n        this.stop();\n        return;\n      }\n      this.frameId = requestAnimationFrame(__privateGet(this, _tick));\n    });\n    this.context = { now: 0, startMs: currentTime(), deltaMs: 0 };\n  }\n  get elapsedMs() {\n    if (this.pausedAtMs !== null) {\n      return this.pausedAtMs - this.context.startMs;\n    }\n    return currentTime() - this.context.startMs;\n  }\n};\n_tick = new WeakMap();\nfunction setRafInterval(fn, intervalMs) {\n  const timer = new Timer(({ now, deltaMs }) => {\n    if (deltaMs >= intervalMs) {\n      const startMs = intervalMs > 0 ? now - deltaMs % intervalMs : now;\n      timer.setStartMs(startMs);\n      fn({ startMs, deltaMs });\n    }\n  });\n  timer.start();\n  return () => timer.stop();\n}\nfunction setRafTimeout(fn, delayMs) {\n  const timer = new Timer(({ deltaMs }) => {\n    if (deltaMs >= delayMs) {\n      fn();\n      return false;\n    }\n  });\n  timer.start();\n  return () => timer.stop();\n}\n\n// src/warning.ts\nfunction warn(...a) {\n  const m = a.length === 1 ? a[0] : a[1];\n  const c = a.length === 2 ? a[0] : true;\n  if (c && process.env.NODE_ENV !== \"production\") {\n    console.warn(m);\n  }\n}\nfunction invariant(...a) {\n  const m = a.length === 1 ? a[0] : a[1];\n  const c = a.length === 2 ? a[0] : true;\n  if (c && process.env.NODE_ENV !== \"production\") {\n    throw new Error(m);\n  }\n}\nfunction ensure(c, m) {\n  if (c == null) throw new Error(m());\n}\nfunction ensureProps(props, keys, scope) {\n  let missingKeys = [];\n  for (const key of keys) {\n    if (props[key] == null) missingKeys.push(key);\n  }\n  if (missingKeys.length > 0)\n    throw new Error(`[zag-js${scope ? ` > ${scope}` : \"\"}] missing required props: ${missingKeys.join(\", \")}`);\n}\n\nexport { Timer, add, addOrRemove, callAll, cast, chunk, clampPercent, clampValue, clear, compact, createSplitProps, createStore, debounce, decrementValue, diff, ensure, ensureProps, first, flatArray, fromLength, getClosestValue, getClosestValueIndex, getMaxValueAtIndex, getMinValueAtIndex, getNextStepValue, getPercentValue, getPreviousStepValue, getValuePercent, getValueRanges, getValueSetterAtIndex, getValueTransformer, has, hasProp, hash, identity, incrementValue, insertAt, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNaN, isNull, isNumber, isObject, isObjectLike, isPlainObject, isString, isValueAtMax, isValueAtMin, isValueWithinRange, json, last, match, mod, nan, next, nextIndex, noop, omit, partition, pick, prev, prevIndex, remove, removeAt, roundToDpr, roundToStepPrecision, roundValue, runIfFn, setRafInterval, setRafTimeout, setValueAtIndex, snapValueToStep, splitProps, throttle, toArray, toFixedNumber, toPx, tryCatch, uniq, uuid, warn, wrap };\n", "import { hasProp, isObject, isEqual, chunk, prevIndex, nextIndex } from '@zag-js/utils';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar fallback = {\n  itemToValue(item) {\n    if (typeof item === \"string\") return item;\n    if (isObject(item) && hasProp(item, \"value\")) return item.value;\n    return \"\";\n  },\n  itemToString(item) {\n    if (typeof item === \"string\") return item;\n    if (isObject(item) && hasProp(item, \"label\")) return item.label;\n    return fallback.itemToValue(item);\n  },\n  isItemDisabled(item) {\n    if (isObject(item) && hasProp(item, \"disabled\")) return !!item.disabled;\n    return false;\n  }\n};\nvar ListCollection = class _ListCollection {\n  constructor(options) {\n    this.options = options;\n    /**\n     * The items in the collection\n     */\n    __publicField(this, \"items\");\n    __publicField(this, \"indexMap\", null);\n    /**\n     * Copy the collection\n     */\n    __publicField(this, \"copy\", (items) => {\n      return new _ListCollection({ ...this.options, items: items ?? [...this.items] });\n    });\n    /**\n     * Check if the collection is equal to another collection\n     */\n    __publicField(this, \"isEqual\", (other) => {\n      return isEqual(this.items, other.items);\n    });\n    /**\n     * Function to update the collection items\n     */\n    __publicField(this, \"setItems\", (items) => {\n      return this.copy(items);\n    });\n    /**\n     * Returns all the values in the collection\n     */\n    __publicField(this, \"getValues\", (items = this.items) => {\n      const values = [];\n      for (const item of items) {\n        const value = this.getItemValue(item);\n        if (value != null) values.push(value);\n      }\n      return values;\n    });\n    /**\n     * Get the item based on its value\n     */\n    __publicField(this, \"find\", (value) => {\n      if (value == null) return null;\n      const index = this.indexOf(value);\n      return index !== -1 ? this.at(index) : null;\n    });\n    /**\n     * Get the items based on its values\n     */\n    __publicField(this, \"findMany\", (values) => {\n      const result = [];\n      for (const value of values) {\n        const item = this.find(value);\n        if (item != null) result.push(item);\n      }\n      return result;\n    });\n    /**\n     * Get the item based on its index\n     */\n    __publicField(this, \"at\", (index) => {\n      if (!this.options.groupBy && !this.options.groupSort) {\n        return this.items[index] ?? null;\n      }\n      let idx = 0;\n      const groups = this.group();\n      for (const [, items] of groups) {\n        for (const item of items) {\n          if (idx === index) return item;\n          idx++;\n        }\n      }\n      return null;\n    });\n    __publicField(this, \"sortFn\", (valueA, valueB) => {\n      const indexA = this.indexOf(valueA);\n      const indexB = this.indexOf(valueB);\n      return (indexA ?? 0) - (indexB ?? 0);\n    });\n    /**\n     * Sort the values based on their index\n     */\n    __publicField(this, \"sort\", (values) => {\n      return [...values].sort(this.sortFn.bind(this));\n    });\n    /**\n     * Convert an item to a value\n     */\n    __publicField(this, \"getItemValue\", (item) => {\n      if (item == null) return null;\n      return this.options.itemToValue?.(item) ?? fallback.itemToValue(item);\n    });\n    /**\n     * Whether an item is disabled\n     */\n    __publicField(this, \"getItemDisabled\", (item) => {\n      if (item == null) return false;\n      return this.options.isItemDisabled?.(item) ?? fallback.isItemDisabled(item);\n    });\n    /**\n     * Convert an item to a string\n     */\n    __publicField(this, \"stringifyItem\", (item) => {\n      if (item == null) return null;\n      return this.options.itemToString?.(item) ?? fallback.itemToString(item);\n    });\n    /**\n     * Convert a value to a string\n     */\n    __publicField(this, \"stringify\", (value) => {\n      if (value == null) return null;\n      return this.stringifyItem(this.find(value));\n    });\n    /**\n     * Convert an array of items to a string\n     */\n    __publicField(this, \"stringifyItems\", (items, separator = \", \") => {\n      const strs = [];\n      for (const item of items) {\n        const str = this.stringifyItem(item);\n        if (str != null) strs.push(str);\n      }\n      return strs.join(separator);\n    });\n    /**\n     * Convert an array of items to a string\n     */\n    __publicField(this, \"stringifyMany\", (value, separator) => {\n      return this.stringifyItems(this.findMany(value), separator);\n    });\n    /**\n     * Whether the collection has a value\n     */\n    __publicField(this, \"has\", (value) => {\n      return this.indexOf(value) !== -1;\n    });\n    /**\n     * Whether the collection has an item\n     */\n    __publicField(this, \"hasItem\", (item) => {\n      if (item == null) return false;\n      return this.has(this.getItemValue(item));\n    });\n    /**\n     * Group items by the groupBy function provided in options\n     * Returns an array of [groupKey, items] tuples\n     */\n    __publicField(this, \"group\", () => {\n      const { groupBy, groupSort } = this.options;\n      if (!groupBy) return [[\"\", [...this.items]]];\n      const groups = /* @__PURE__ */ new Map();\n      this.items.forEach((item, index) => {\n        const groupKey = groupBy(item, index);\n        if (!groups.has(groupKey)) {\n          groups.set(groupKey, []);\n        }\n        groups.get(groupKey).push(item);\n      });\n      let entries = Array.from(groups.entries());\n      if (groupSort) {\n        entries.sort(([a], [b]) => {\n          if (typeof groupSort === \"function\") return groupSort(a, b);\n          if (Array.isArray(groupSort)) {\n            const indexA = groupSort.indexOf(a);\n            const indexB = groupSort.indexOf(b);\n            if (indexA === -1) return 1;\n            if (indexB === -1) return -1;\n            return indexA - indexB;\n          }\n          if (groupSort === \"asc\") return a.localeCompare(b);\n          if (groupSort === \"desc\") return b.localeCompare(a);\n          return 0;\n        });\n      }\n      return entries;\n    });\n    /**\n     * Returns the next value in the collection\n     */\n    __publicField(this, \"getNextValue\", (value, step = 1, clamp = false) => {\n      let index = this.indexOf(value);\n      if (index === -1) return null;\n      index = clamp ? Math.min(index + step, this.size - 1) : index + step;\n      while (index <= this.size && this.getItemDisabled(this.at(index))) index++;\n      return this.getItemValue(this.at(index));\n    });\n    /**\n     * Returns the previous value in the collection\n     */\n    __publicField(this, \"getPreviousValue\", (value, step = 1, clamp = false) => {\n      let index = this.indexOf(value);\n      if (index === -1) return null;\n      index = clamp ? Math.max(index - step, 0) : index - step;\n      while (index >= 0 && this.getItemDisabled(this.at(index))) index--;\n      return this.getItemValue(this.at(index));\n    });\n    /**\n     * Get the index of an item based on its key\n     */\n    __publicField(this, \"indexOf\", (value) => {\n      if (value == null) return -1;\n      if (!this.options.groupBy && !this.options.groupSort) {\n        return this.items.findIndex((item) => this.getItemValue(item) === value);\n      }\n      if (!this.indexMap) {\n        this.indexMap = /* @__PURE__ */ new Map();\n        let idx = 0;\n        const groups = this.group();\n        for (const [, items] of groups) {\n          for (const item of items) {\n            const itemValue = this.getItemValue(item);\n            if (itemValue != null) {\n              this.indexMap.set(itemValue, idx);\n            }\n            idx++;\n          }\n        }\n      }\n      return this.indexMap.get(value) ?? -1;\n    });\n    __publicField(this, \"getByText\", (text, current) => {\n      const currentIndex = current != null ? this.indexOf(current) : -1;\n      const isSingleKey = text.length === 1;\n      for (let i = 0; i < this.items.length; i++) {\n        const item = this.items[(currentIndex + i + 1) % this.items.length];\n        if (isSingleKey && this.getItemValue(item) === current) continue;\n        if (this.getItemDisabled(item)) continue;\n        if (match(this.stringifyItem(item), text)) return item;\n      }\n      return void 0;\n    });\n    /**\n     * Search for a value based on a query\n     */\n    __publicField(this, \"search\", (queryString, options) => {\n      const { state, currentValue, timeout = 350 } = options;\n      const search = state.keysSoFar + queryString;\n      const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n      const query = isRepeated ? search[0] : search;\n      const item = this.getByText(query, currentValue);\n      const value = this.getItemValue(item);\n      function cleanup() {\n        clearTimeout(state.timer);\n        state.timer = -1;\n      }\n      function update(value2) {\n        state.keysSoFar = value2;\n        cleanup();\n        if (value2 !== \"\") {\n          state.timer = +setTimeout(() => {\n            update(\"\");\n            cleanup();\n          }, timeout);\n        }\n      }\n      update(search);\n      return value;\n    });\n    /**\n     * Update an item in the collection\n     */\n    __publicField(this, \"update\", (value, item) => {\n      let index = this.indexOf(value);\n      if (index === -1) return this;\n      return this.copy([...this.items.slice(0, index), item, ...this.items.slice(index + 1)]);\n    });\n    /**\n     * Update an item in the collection if it exists, otherwise append it\n     */\n    __publicField(this, \"upsert\", (value, item, mode = \"append\") => {\n      let index = this.indexOf(value);\n      if (index === -1) {\n        const fn = mode === \"append\" ? this.append : this.prepend;\n        return fn(item);\n      }\n      return this.copy([...this.items.slice(0, index), item, ...this.items.slice(index + 1)]);\n    });\n    /**\n     * Insert items at a specific index\n     */\n    __publicField(this, \"insert\", (index, ...items) => {\n      return this.copy(insert(this.items, index, ...items));\n    });\n    /**\n     * Insert items before a specific value\n     */\n    __publicField(this, \"insertBefore\", (value, ...items) => {\n      let toIndex = this.indexOf(value);\n      if (toIndex === -1) {\n        if (this.items.length === 0) toIndex = 0;\n        else return this;\n      }\n      return this.copy(insert(this.items, toIndex, ...items));\n    });\n    /**\n     * Insert items after a specific value\n     */\n    __publicField(this, \"insertAfter\", (value, ...items) => {\n      let toIndex = this.indexOf(value);\n      if (toIndex === -1) {\n        if (this.items.length === 0) toIndex = 0;\n        else return this;\n      }\n      return this.copy(insert(this.items, toIndex + 1, ...items));\n    });\n    /**\n     * Prepend items to the collection\n     */\n    __publicField(this, \"prepend\", (...items) => {\n      return this.copy(insert(this.items, 0, ...items));\n    });\n    /**\n     * Append items to the collection\n     */\n    __publicField(this, \"append\", (...items) => {\n      return this.copy(insert(this.items, this.items.length, ...items));\n    });\n    /**\n     * Filter the collection\n     */\n    __publicField(this, \"filter\", (fn) => {\n      const filteredItems = this.items.filter((item, index) => fn(this.stringifyItem(item), index, item));\n      return this.copy(filteredItems);\n    });\n    /**\n     * Remove items from the collection\n     */\n    __publicField(this, \"remove\", (...itemsOrValues) => {\n      const values = itemsOrValues.map(\n        (itemOrValue) => typeof itemOrValue === \"string\" ? itemOrValue : this.getItemValue(itemOrValue)\n      );\n      return this.copy(\n        this.items.filter((item) => {\n          const value = this.getItemValue(item);\n          if (value == null) return false;\n          return !values.includes(value);\n        })\n      );\n    });\n    /**\n     * Move an item to a specific index\n     */\n    __publicField(this, \"move\", (value, toIndex) => {\n      const fromIndex = this.indexOf(value);\n      if (fromIndex === -1) return this;\n      return this.copy(move(this.items, [fromIndex], toIndex));\n    });\n    /**\n     * Move items before a specific value\n     */\n    __publicField(this, \"moveBefore\", (value, ...values) => {\n      let toIndex = this.items.findIndex((item) => this.getItemValue(item) === value);\n      if (toIndex === -1) return this;\n      let indices = values.map((value2) => this.items.findIndex((item) => this.getItemValue(item) === value2)).sort((a, b) => a - b);\n      return this.copy(move(this.items, indices, toIndex));\n    });\n    /**\n     * Move items after a specific value\n     */\n    __publicField(this, \"moveAfter\", (value, ...values) => {\n      let toIndex = this.items.findIndex((item) => this.getItemValue(item) === value);\n      if (toIndex === -1) return this;\n      let indices = values.map((value2) => this.items.findIndex((item) => this.getItemValue(item) === value2)).sort((a, b) => a - b);\n      return this.copy(move(this.items, indices, toIndex + 1));\n    });\n    /**\n     * Reorder items\n     */\n    __publicField(this, \"reorder\", (fromIndex, toIndex) => {\n      return this.copy(move(this.items, [fromIndex], toIndex));\n    });\n    /**\n     * Compare two values\n     */\n    __publicField(this, \"compareValue\", (a, b) => {\n      const indexA = this.indexOf(a);\n      const indexB = this.indexOf(b);\n      if (indexA < indexB) return -1;\n      if (indexA > indexB) return 1;\n      return 0;\n    });\n    /**\n     * Get the range of values between two values\n     */\n    __publicField(this, \"range\", (from, to) => {\n      let keys = [];\n      let key = from;\n      while (key != null) {\n        let item = this.find(key);\n        if (item) keys.push(key);\n        if (key === to) return keys;\n        key = this.getNextValue(key);\n      }\n      return [];\n    });\n    /**\n     * Get the range of values between two values\n     */\n    __publicField(this, \"getValueRange\", (from, to) => {\n      if (from && to) {\n        if (this.compareValue(from, to) <= 0) {\n          return this.range(from, to);\n        }\n        return this.range(to, from);\n      }\n      return [];\n    });\n    /**\n     * Convert the collection to a string\n     */\n    __publicField(this, \"toString\", () => {\n      let result = \"\";\n      for (const item of this.items) {\n        const value = this.getItemValue(item);\n        const label = this.stringifyItem(item);\n        const disabled = this.getItemDisabled(item);\n        const itemString = [value, label, disabled].filter(Boolean).join(\":\");\n        result += itemString + \",\";\n      }\n      return result;\n    });\n    /**\n     * Convert the collection to a JSON object\n     */\n    __publicField(this, \"toJSON\", () => {\n      return {\n        size: this.size,\n        first: this.firstValue,\n        last: this.lastValue\n      };\n    });\n    this.items = [...options.items];\n  }\n  /**\n   * Returns the number of items in the collection\n   */\n  get size() {\n    return this.items.length;\n  }\n  /**\n   * Returns the first value in the collection\n   */\n  get firstValue() {\n    let index = 0;\n    while (this.getItemDisabled(this.at(index))) index++;\n    return this.getItemValue(this.at(index));\n  }\n  /**\n   * Returns the last value in the collection\n   */\n  get lastValue() {\n    let index = this.size - 1;\n    while (this.getItemDisabled(this.at(index))) index--;\n    return this.getItemValue(this.at(index));\n  }\n  *[Symbol.iterator]() {\n    yield* this.items;\n  }\n};\nvar match = (label, query) => {\n  return !!label?.toLowerCase().startsWith(query.toLowerCase());\n};\nfunction isListCollection(v) {\n  return v instanceof ListCollection;\n}\nfunction insert(items, index, ...values) {\n  return [...items.slice(0, index), ...values, ...items.slice(index)];\n}\nfunction move(items, indices, toIndex) {\n  indices = [...indices].sort((a, b) => a - b);\n  const itemsToMove = indices.map((i) => items[i]);\n  for (let i = indices.length - 1; i >= 0; i--) {\n    items = [...items.slice(0, indices[i]), ...items.slice(indices[i] + 1)];\n  }\n  toIndex = Math.max(0, toIndex - indices.filter((i) => i < toIndex).length);\n  return [...items.slice(0, toIndex), ...itemsToMove, ...items.slice(toIndex)];\n}\n\n// src/grid-collection.ts\nvar GridCollection = class extends ListCollection {\n  constructor(options) {\n    const { columnCount } = options;\n    super(options);\n    __publicField(this, \"columnCount\");\n    __publicField(this, \"rows\", null);\n    /**\n     * Returns the row data in the grid\n     */\n    __publicField(this, \"getRows\", () => {\n      if (!this.rows) {\n        this.rows = chunk([...this.items], this.columnCount);\n      }\n      return this.rows;\n    });\n    /**\n     * Returns the number of rows in the grid\n     */\n    __publicField(this, \"getRowCount\", () => {\n      return Math.ceil(this.items.length / this.columnCount);\n    });\n    /**\n     * Returns the index of the specified row and column in the grid\n     */\n    __publicField(this, \"getCellIndex\", (row, column) => {\n      return row * this.columnCount + column;\n    });\n    /**\n     * Returns the item at the specified row and column in the grid\n     */\n    __publicField(this, \"getCell\", (row, column) => {\n      return this.at(this.getCellIndex(row, column));\n    });\n    /**\n     * Returns the row and column index for a given value\n     */\n    __publicField(this, \"getValueCell\", (value) => {\n      const index = this.indexOf(value);\n      if (index === -1) return null;\n      const row = Math.floor(index / this.columnCount);\n      const column = index % this.columnCount;\n      return { row, column };\n    });\n    /**\n     * Returns the value of the last enabled column in a row\n     */\n    __publicField(this, \"getLastEnabledColumnIndex\", (row) => {\n      for (let col = this.columnCount - 1; col >= 0; col--) {\n        const cell = this.getCell(row, col);\n        if (cell && !this.getItemDisabled(cell)) {\n          return col;\n        }\n      }\n      return null;\n    });\n    /**\n     * Returns the index of the first enabled column in a row\n     */\n    __publicField(this, \"getFirstEnabledColumnIndex\", (row) => {\n      for (let col = 0; col < this.columnCount; col++) {\n        const cell = this.getCell(row, col);\n        if (cell && !this.getItemDisabled(cell)) {\n          return col;\n        }\n      }\n      return null;\n    });\n    /**\n     * Returns the value of the previous row in the grid, based on the current value\n     */\n    __publicField(this, \"getPreviousRowValue\", (value, loop = false) => {\n      const currentCell = this.getValueCell(value);\n      if (currentCell === null) return null;\n      const rows = this.getRows();\n      const rowCount = rows.length;\n      let prevRowIndex = currentCell.row;\n      let prevColumnIndex = currentCell.column;\n      for (let i = 1; i <= rowCount; i++) {\n        prevRowIndex = prevIndex(rows, prevRowIndex, { loop });\n        const prevRow = rows[prevRowIndex];\n        if (!prevRow) continue;\n        const prevCell = prevRow[prevColumnIndex];\n        if (!prevCell) {\n          const lastColumnIndex = this.getLastEnabledColumnIndex(prevRowIndex);\n          if (lastColumnIndex != null) {\n            prevColumnIndex = lastColumnIndex;\n          }\n        }\n        const cell = this.getCell(prevRowIndex, prevColumnIndex);\n        if (!this.getItemDisabled(cell)) {\n          return this.getItemValue(cell);\n        }\n      }\n      return this.firstValue;\n    });\n    /**\n     * Returns the value of the next row in the grid, based on the current value\n     */\n    __publicField(this, \"getNextRowValue\", (value, loop = false) => {\n      const currentCell = this.getValueCell(value);\n      if (currentCell === null) return null;\n      const rows = this.getRows();\n      const rowCount = rows.length;\n      let nextRowIndex = currentCell.row;\n      let nextColumnIndex = currentCell.column;\n      for (let i = 1; i <= rowCount; i++) {\n        nextRowIndex = nextIndex(rows, nextRowIndex, { loop });\n        const nextRow = rows[nextRowIndex];\n        if (!nextRow) continue;\n        const nextCell = nextRow[nextColumnIndex];\n        if (!nextCell) {\n          const lastColumnIndex = this.getLastEnabledColumnIndex(nextRowIndex);\n          if (lastColumnIndex != null) {\n            nextColumnIndex = lastColumnIndex;\n          }\n        }\n        const cell = this.getCell(nextRowIndex, nextColumnIndex);\n        if (!this.getItemDisabled(cell)) {\n          return this.getItemValue(cell);\n        }\n      }\n      return this.lastValue;\n    });\n    this.columnCount = columnCount;\n  }\n};\nfunction isGridCollection(v) {\n  return hasProp(v, \"columnCount\") && hasProp(v, \"getRows\");\n}\nvar Selection = class _Selection extends Set {\n  constructor(values = []) {\n    super(values);\n    __publicField(this, \"selectionMode\", \"single\");\n    __publicField(this, \"deselectable\", true);\n    __publicField(this, \"copy\", () => {\n      const clone = new _Selection([...this]);\n      return this.sync(clone);\n    });\n    __publicField(this, \"sync\", (other) => {\n      other.selectionMode = this.selectionMode;\n      other.deselectable = this.deselectable;\n      return other;\n    });\n    __publicField(this, \"isEmpty\", () => {\n      return this.size === 0;\n    });\n    __publicField(this, \"isSelected\", (value) => {\n      if (this.selectionMode === \"none\" || value == null) {\n        return false;\n      }\n      return this.has(value);\n    });\n    __publicField(this, \"canSelect\", (collection, value) => {\n      return this.selectionMode !== \"none\" || !collection.getItemDisabled(collection.find(value));\n    });\n    __publicField(this, \"firstSelectedValue\", (collection) => {\n      let firstValue = null;\n      for (let value of this) {\n        if (!firstValue || collection.compareValue(value, firstValue) < 0) {\n          firstValue = value;\n        }\n      }\n      return firstValue;\n    });\n    __publicField(this, \"lastSelectedValue\", (collection) => {\n      let lastValue = null;\n      for (let value of this) {\n        if (!lastValue || collection.compareValue(value, lastValue) > 0) {\n          lastValue = value;\n        }\n      }\n      return lastValue;\n    });\n    __publicField(this, \"extendSelection\", (collection, anchorValue, targetValue) => {\n      if (this.selectionMode === \"none\") {\n        return this;\n      }\n      if (this.selectionMode === \"single\") {\n        return this.replaceSelection(collection, targetValue);\n      }\n      const selection = this.copy();\n      const lastSelected = Array.from(this).pop();\n      for (let key of collection.getValueRange(anchorValue, lastSelected ?? targetValue)) {\n        selection.delete(key);\n      }\n      for (let key of collection.getValueRange(targetValue, anchorValue)) {\n        if (this.canSelect(collection, key)) {\n          selection.add(key);\n        }\n      }\n      return selection;\n    });\n    __publicField(this, \"toggleSelection\", (collection, value) => {\n      if (this.selectionMode === \"none\") {\n        return this;\n      }\n      if (this.selectionMode === \"single\" && !this.isSelected(value)) {\n        return this.replaceSelection(collection, value);\n      }\n      const selection = this.copy();\n      if (selection.has(value)) {\n        selection.delete(value);\n      } else if (selection.canSelect(collection, value)) {\n        selection.add(value);\n      }\n      return selection;\n    });\n    __publicField(this, \"replaceSelection\", (collection, value) => {\n      if (this.selectionMode === \"none\") {\n        return this;\n      }\n      if (value == null) {\n        return this;\n      }\n      if (!this.canSelect(collection, value)) {\n        return this;\n      }\n      const selection = new _Selection([value]);\n      return this.sync(selection);\n    });\n    __publicField(this, \"setSelection\", (values) => {\n      if (this.selectionMode === \"none\") {\n        return this;\n      }\n      let selection = new _Selection();\n      for (let value of values) {\n        if (value != null) {\n          selection.add(value);\n          if (this.selectionMode === \"single\") {\n            break;\n          }\n        }\n      }\n      return this.sync(selection);\n    });\n    __publicField(this, \"clearSelection\", () => {\n      const selection = this.copy();\n      if (selection.deselectable && selection.size > 0) {\n        selection.clear();\n      }\n      return selection;\n    });\n    __publicField(this, \"select\", (collection, value, forceToggle) => {\n      if (this.selectionMode === \"none\") {\n        return this;\n      }\n      if (this.selectionMode === \"single\") {\n        if (this.isSelected(value) && this.deselectable) {\n          return this.toggleSelection(collection, value);\n        } else {\n          return this.replaceSelection(collection, value);\n        }\n      } else if (this.selectionMode === \"multiple\" || forceToggle) {\n        return this.toggleSelection(collection, value);\n      } else {\n        return this.replaceSelection(collection, value);\n      }\n    });\n    __publicField(this, \"deselect\", (value) => {\n      const selection = this.copy();\n      selection.delete(value);\n      return selection;\n    });\n    __publicField(this, \"isEqual\", (other) => {\n      return isEqual(Array.from(this), Array.from(other));\n    });\n  }\n};\n\n// src/tree-visit.ts\nfunction access(node, indexPath, options) {\n  for (let i = 0; i < indexPath.length; i++) node = options.getChildren(node, indexPath.slice(i + 1))[indexPath[i]];\n  return node;\n}\nfunction ancestorIndexPaths(indexPaths) {\n  const sortedPaths = sortIndexPaths(indexPaths);\n  const result = [];\n  const seen = /* @__PURE__ */ new Set();\n  for (const indexPath of sortedPaths) {\n    const key = indexPath.join();\n    if (!seen.has(key)) {\n      seen.add(key);\n      result.push(indexPath);\n    }\n  }\n  return result;\n}\nfunction compareIndexPaths(a, b) {\n  for (let i = 0; i < Math.min(a.length, b.length); i++) {\n    if (a[i] < b[i]) return -1;\n    if (a[i] > b[i]) return 1;\n  }\n  return a.length - b.length;\n}\nfunction sortIndexPaths(indexPaths) {\n  return indexPaths.sort(compareIndexPaths);\n}\nfunction find(node, options) {\n  let found;\n  visit(node, {\n    ...options,\n    onEnter: (child, indexPath) => {\n      if (options.predicate(child, indexPath)) {\n        found = child;\n        return \"stop\";\n      }\n    }\n  });\n  return found;\n}\nfunction findAll(node, options) {\n  const found = [];\n  visit(node, {\n    onEnter: (child, indexPath) => {\n      if (options.predicate(child, indexPath)) found.push(child);\n    },\n    getChildren: options.getChildren\n  });\n  return found;\n}\nfunction findIndexPath(node, options) {\n  let found;\n  visit(node, {\n    onEnter: (child, indexPath) => {\n      if (options.predicate(child, indexPath)) {\n        found = [...indexPath];\n        return \"stop\";\n      }\n    },\n    getChildren: options.getChildren\n  });\n  return found;\n}\nfunction reduce(node, options) {\n  let result = options.initialResult;\n  visit(node, {\n    ...options,\n    onEnter: (child, indexPath) => {\n      result = options.nextResult(result, child, indexPath);\n    }\n  });\n  return result;\n}\nfunction flatMap(node, options) {\n  return reduce(node, {\n    ...options,\n    initialResult: [],\n    nextResult: (result, child, indexPath) => {\n      result.push(...options.transform(child, indexPath));\n      return result;\n    }\n  });\n}\nfunction filter(node, options) {\n  const { predicate, create, getChildren } = options;\n  const filterRecursive = (node2, indexPath) => {\n    const children = getChildren(node2, indexPath);\n    const filteredChildren = [];\n    children.forEach((child, index) => {\n      const childIndexPath = [...indexPath, index];\n      const filteredChild = filterRecursive(child, childIndexPath);\n      if (filteredChild) filteredChildren.push(filteredChild);\n    });\n    const isRoot = indexPath.length === 0;\n    const nodeMatches = predicate(node2, indexPath);\n    const hasFilteredChildren = filteredChildren.length > 0;\n    if (isRoot || nodeMatches || hasFilteredChildren) {\n      return create(node2, filteredChildren, indexPath);\n    }\n    return null;\n  };\n  return filterRecursive(node, []) || create(node, [], []);\n}\nfunction flatten(rootNode, options) {\n  const nodes = [];\n  let idx = 0;\n  const idxMap = /* @__PURE__ */ new Map();\n  const parentMap = /* @__PURE__ */ new Map();\n  visit(rootNode, {\n    getChildren: options.getChildren,\n    onEnter: (node, indexPath) => {\n      if (!idxMap.has(node)) {\n        idxMap.set(node, idx++);\n      }\n      const children = options.getChildren(node, indexPath);\n      children.forEach((child) => {\n        if (!parentMap.has(child)) {\n          parentMap.set(child, node);\n        }\n        if (!idxMap.has(child)) {\n          idxMap.set(child, idx++);\n        }\n      });\n      const _children = children.length > 0 ? children.map((child) => idxMap.get(child)) : void 0;\n      const parent = parentMap.get(node);\n      const _parent = parent ? idxMap.get(parent) : void 0;\n      const _index = idxMap.get(node);\n      nodes.push({ ...node, _children, _parent, _index });\n    }\n  });\n  return nodes;\n}\nfunction insertOperation(index, nodes) {\n  return { type: \"insert\", index, nodes };\n}\nfunction removeOperation(indexes) {\n  return { type: \"remove\", indexes };\n}\nfunction replaceOperation() {\n  return { type: \"replace\" };\n}\nfunction splitIndexPath(indexPath) {\n  return [indexPath.slice(0, -1), indexPath[indexPath.length - 1]];\n}\nfunction getInsertionOperations(indexPath, nodes, operations = /* @__PURE__ */ new Map()) {\n  const [parentIndexPath, index] = splitIndexPath(indexPath);\n  for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n    const parentKey = parentIndexPath.slice(0, i).join();\n    switch (operations.get(parentKey)?.type) {\n      case \"remove\":\n        continue;\n    }\n    operations.set(parentKey, replaceOperation());\n  }\n  const operation = operations.get(parentIndexPath.join());\n  switch (operation?.type) {\n    case \"remove\":\n      operations.set(parentIndexPath.join(), {\n        type: \"removeThenInsert\",\n        removeIndexes: operation.indexes,\n        insertIndex: index,\n        insertNodes: nodes\n      });\n      break;\n    default:\n      operations.set(parentIndexPath.join(), insertOperation(index, nodes));\n  }\n  return operations;\n}\nfunction getRemovalOperations(indexPaths) {\n  const operations = /* @__PURE__ */ new Map();\n  const indexesToRemove = /* @__PURE__ */ new Map();\n  for (const indexPath of indexPaths) {\n    const parentKey = indexPath.slice(0, -1).join();\n    const value = indexesToRemove.get(parentKey) ?? [];\n    value.push(indexPath[indexPath.length - 1]);\n    indexesToRemove.set(\n      parentKey,\n      value.sort((a, b) => a - b)\n    );\n  }\n  for (const indexPath of indexPaths) {\n    for (let i = indexPath.length - 2; i >= 0; i--) {\n      const parentKey = indexPath.slice(0, i).join();\n      if (!operations.has(parentKey)) {\n        operations.set(parentKey, replaceOperation());\n      }\n    }\n  }\n  for (const [parentKey, indexes] of indexesToRemove) {\n    operations.set(parentKey, removeOperation(indexes));\n  }\n  return operations;\n}\nfunction getReplaceOperations(indexPath, node) {\n  const operations = /* @__PURE__ */ new Map();\n  const [parentIndexPath, index] = splitIndexPath(indexPath);\n  for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n    const parentKey = parentIndexPath.slice(0, i).join();\n    operations.set(parentKey, replaceOperation());\n  }\n  operations.set(parentIndexPath.join(), {\n    type: \"removeThenInsert\",\n    removeIndexes: [index],\n    insertIndex: index,\n    insertNodes: [node]\n  });\n  return operations;\n}\nfunction mutate(node, operations, options) {\n  return map(node, {\n    ...options,\n    getChildren: (node2, indexPath) => {\n      const key = indexPath.join();\n      const operation = operations.get(key);\n      switch (operation?.type) {\n        case \"replace\":\n        case \"remove\":\n        case \"removeThenInsert\":\n        case \"insert\":\n          return options.getChildren(node2, indexPath);\n        default:\n          return [];\n      }\n    },\n    transform: (node2, children, indexPath) => {\n      const key = indexPath.join();\n      const operation = operations.get(key);\n      switch (operation?.type) {\n        case \"remove\":\n          return options.create(\n            node2,\n            children.filter((_, index) => !operation.indexes.includes(index)),\n            indexPath\n          );\n        case \"removeThenInsert\":\n          const updatedChildren = children.filter((_, index) => !operation.removeIndexes.includes(index));\n          const adjustedIndex = operation.removeIndexes.reduce(\n            (index, removedIndex) => removedIndex < index ? index - 1 : index,\n            operation.insertIndex\n          );\n          return options.create(node2, splice(updatedChildren, adjustedIndex, 0, ...operation.insertNodes), indexPath);\n        case \"insert\":\n          return options.create(node2, splice(children, operation.index, 0, ...operation.nodes), indexPath);\n        case \"replace\":\n          return options.create(node2, children, indexPath);\n        default:\n          return node2;\n      }\n    }\n  });\n}\nfunction splice(array, start, deleteCount, ...items) {\n  return [...array.slice(0, start), ...items, ...array.slice(start + deleteCount)];\n}\nfunction map(node, options) {\n  const childrenMap = {};\n  visit(node, {\n    ...options,\n    onLeave: (child, indexPath) => {\n      const keyIndexPath = [0, ...indexPath];\n      const key = keyIndexPath.join();\n      const transformed = options.transform(child, childrenMap[key] ?? [], indexPath);\n      const parentKey = keyIndexPath.slice(0, -1).join();\n      const parentChildren = childrenMap[parentKey] ?? [];\n      parentChildren.push(transformed);\n      childrenMap[parentKey] = parentChildren;\n    }\n  });\n  return childrenMap[\"\"][0];\n}\nfunction insert2(node, options) {\n  const { nodes, at } = options;\n  if (at.length === 0) throw new Error(`Can't insert nodes at the root`);\n  const state = getInsertionOperations(at, nodes);\n  return mutate(node, state, options);\n}\nfunction replace(node, options) {\n  if (options.at.length === 0) return options.node;\n  const operations = getReplaceOperations(options.at, options.node);\n  return mutate(node, operations, options);\n}\nfunction remove(node, options) {\n  if (options.indexPaths.length === 0) return node;\n  for (const indexPath of options.indexPaths) {\n    if (indexPath.length === 0) throw new Error(`Can't remove the root node`);\n  }\n  const operations = getRemovalOperations(options.indexPaths);\n  return mutate(node, operations, options);\n}\nfunction move2(node, options) {\n  if (options.indexPaths.length === 0) return node;\n  for (const indexPath of options.indexPaths) {\n    if (indexPath.length === 0) throw new Error(`Can't move the root node`);\n  }\n  if (options.to.length === 0) throw new Error(`Can't move nodes to the root`);\n  const _ancestorIndexPaths = ancestorIndexPaths(options.indexPaths);\n  const nodesToInsert = _ancestorIndexPaths.map((indexPath) => access(node, indexPath, options));\n  const operations = getInsertionOperations(options.to, nodesToInsert, getRemovalOperations(_ancestorIndexPaths));\n  return mutate(node, operations, options);\n}\nfunction visit(node, options) {\n  const { onEnter, onLeave, getChildren } = options;\n  let indexPath = [];\n  let stack = [{ node }];\n  const getIndexPath = options.reuseIndexPath ? () => indexPath : () => indexPath.slice();\n  while (stack.length > 0) {\n    let wrapper = stack[stack.length - 1];\n    if (wrapper.state === void 0) {\n      const enterResult = onEnter?.(wrapper.node, getIndexPath());\n      if (enterResult === \"stop\") return;\n      wrapper.state = enterResult === \"skip\" ? -1 : 0;\n    }\n    const children = wrapper.children || getChildren(wrapper.node, getIndexPath());\n    wrapper.children || (wrapper.children = children);\n    if (wrapper.state !== -1) {\n      if (wrapper.state < children.length) {\n        let currentIndex = wrapper.state;\n        indexPath.push(currentIndex);\n        stack.push({ node: children[currentIndex] });\n        wrapper.state = currentIndex + 1;\n        continue;\n      }\n      const leaveResult = onLeave?.(wrapper.node, getIndexPath());\n      if (leaveResult === \"stop\") return;\n    }\n    indexPath.pop();\n    stack.pop();\n  }\n}\n\n// src/tree-collection.ts\nvar TreeCollection = class _TreeCollection {\n  constructor(options) {\n    this.options = options;\n    __publicField(this, \"rootNode\");\n    __publicField(this, \"isEqual\", (other) => {\n      return isEqual(this.rootNode, other.rootNode);\n    });\n    __publicField(this, \"getNodeChildren\", (node) => {\n      return this.options.nodeToChildren?.(node) ?? fallbackMethods.nodeToChildren(node) ?? [];\n    });\n    __publicField(this, \"resolveIndexPath\", (valueOrIndexPath) => {\n      return typeof valueOrIndexPath === \"string\" ? this.getIndexPath(valueOrIndexPath) : valueOrIndexPath;\n    });\n    __publicField(this, \"resolveNode\", (valueOrIndexPath) => {\n      const indexPath = this.resolveIndexPath(valueOrIndexPath);\n      return indexPath ? this.at(indexPath) : void 0;\n    });\n    __publicField(this, \"getNodeChildrenCount\", (node) => {\n      return this.options.nodeToChildrenCount?.(node) ?? fallbackMethods.nodeToChildrenCount(node);\n    });\n    __publicField(this, \"getNodeValue\", (node) => {\n      return this.options.nodeToValue?.(node) ?? fallbackMethods.nodeToValue(node);\n    });\n    __publicField(this, \"getNodeDisabled\", (node) => {\n      return this.options.isNodeDisabled?.(node) ?? fallbackMethods.isNodeDisabled(node);\n    });\n    __publicField(this, \"stringify\", (value) => {\n      const node = this.findNode(value);\n      if (!node) return null;\n      return this.stringifyNode(node);\n    });\n    __publicField(this, \"stringifyNode\", (node) => {\n      return this.options.nodeToString?.(node) ?? fallbackMethods.nodeToString(node);\n    });\n    __publicField(this, \"getFirstNode\", (rootNode = this.rootNode) => {\n      let firstChild;\n      visit(rootNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (!firstChild && indexPath.length > 0 && !this.getNodeDisabled(node)) {\n            firstChild = node;\n            return \"stop\";\n          }\n        }\n      });\n      return firstChild;\n    });\n    __publicField(this, \"getLastNode\", (rootNode = this.rootNode, opts = {}) => {\n      let lastChild;\n      visit(rootNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (this.isSameNode(node, rootNode)) return;\n          if (opts.skip?.({ value: this.getNodeValue(node), node, indexPath })) return \"skip\";\n          if (indexPath.length > 0 && !this.getNodeDisabled(node)) {\n            lastChild = node;\n          }\n        }\n      });\n      return lastChild;\n    });\n    __publicField(this, \"at\", (indexPath) => {\n      return access(this.rootNode, indexPath, {\n        getChildren: this.getNodeChildren\n      });\n    });\n    __publicField(this, \"findNode\", (value, rootNode = this.rootNode) => {\n      return find(rootNode, {\n        getChildren: this.getNodeChildren,\n        predicate: (node) => this.getNodeValue(node) === value\n      });\n    });\n    __publicField(this, \"findNodes\", (values, rootNode = this.rootNode) => {\n      const v = new Set(values.filter((v2) => v2 != null));\n      return findAll(rootNode, {\n        getChildren: this.getNodeChildren,\n        predicate: (node) => v.has(this.getNodeValue(node))\n      });\n    });\n    __publicField(this, \"sort\", (values) => {\n      return values.reduce((acc, value) => {\n        const indexPath = this.getIndexPath(value);\n        if (indexPath) acc.push({ value, indexPath });\n        return acc;\n      }, []).sort((a, b) => compareIndexPaths(a.indexPath, b.indexPath)).map(({ value }) => value);\n    });\n    __publicField(this, \"getIndexPath\", (value) => {\n      return findIndexPath(this.rootNode, {\n        getChildren: this.getNodeChildren,\n        predicate: (node) => this.getNodeValue(node) === value\n      });\n    });\n    __publicField(this, \"getValue\", (indexPath) => {\n      const node = this.at(indexPath);\n      return node ? this.getNodeValue(node) : void 0;\n    });\n    __publicField(this, \"getValuePath\", (indexPath) => {\n      if (!indexPath) return [];\n      const valuePath = [];\n      let currentPath = [...indexPath];\n      while (currentPath.length > 0) {\n        const node = this.at(currentPath);\n        if (node) valuePath.unshift(this.getNodeValue(node));\n        currentPath.pop();\n      }\n      return valuePath;\n    });\n    __publicField(this, \"getDepth\", (value) => {\n      const indexPath = findIndexPath(this.rootNode, {\n        getChildren: this.getNodeChildren,\n        predicate: (node) => this.getNodeValue(node) === value\n      });\n      return indexPath?.length ?? 0;\n    });\n    __publicField(this, \"isSameNode\", (node, other) => {\n      return this.getNodeValue(node) === this.getNodeValue(other);\n    });\n    __publicField(this, \"isRootNode\", (node) => {\n      return this.isSameNode(node, this.rootNode);\n    });\n    __publicField(this, \"contains\", (parentIndexPath, valueIndexPath) => {\n      if (!parentIndexPath || !valueIndexPath) return false;\n      return valueIndexPath.slice(0, parentIndexPath.length).every((_, i) => parentIndexPath[i] === valueIndexPath[i]);\n    });\n    __publicField(this, \"getNextNode\", (value, opts = {}) => {\n      let found = false;\n      let nextNode;\n      visit(this.rootNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (this.isRootNode(node)) return;\n          const nodeValue = this.getNodeValue(node);\n          if (opts.skip?.({ value: nodeValue, node, indexPath })) {\n            if (nodeValue === value) {\n              found = true;\n            }\n            return \"skip\";\n          }\n          if (found && !this.getNodeDisabled(node)) {\n            nextNode = node;\n            return \"stop\";\n          }\n          if (nodeValue === value) {\n            found = true;\n          }\n        }\n      });\n      return nextNode;\n    });\n    __publicField(this, \"getPreviousNode\", (value, opts = {}) => {\n      let previousNode;\n      let found = false;\n      visit(this.rootNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (this.isRootNode(node)) return;\n          const nodeValue = this.getNodeValue(node);\n          if (opts.skip?.({ value: nodeValue, node, indexPath })) {\n            return \"skip\";\n          }\n          if (nodeValue === value) {\n            found = true;\n            return \"stop\";\n          }\n          if (!this.getNodeDisabled(node)) {\n            previousNode = node;\n          }\n        }\n      });\n      return found ? previousNode : void 0;\n    });\n    __publicField(this, \"getParentNodes\", (valueOrIndexPath) => {\n      const indexPath = this.resolveIndexPath(valueOrIndexPath)?.slice();\n      if (!indexPath) return [];\n      const result = [];\n      while (indexPath.length > 0) {\n        indexPath.pop();\n        const parentNode = this.at(indexPath);\n        if (parentNode && !this.isRootNode(parentNode)) {\n          result.unshift(parentNode);\n        }\n      }\n      return result;\n    });\n    __publicField(this, \"getDescendantNodes\", (valueOrIndexPath, options) => {\n      const parentNode = this.resolveNode(valueOrIndexPath);\n      if (!parentNode) return [];\n      const result = [];\n      visit(parentNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, nodeIndexPath) => {\n          if (nodeIndexPath.length === 0) return;\n          if (!options?.withBranch && this.isBranchNode(node)) return;\n          result.push(node);\n        }\n      });\n      return result;\n    });\n    __publicField(this, \"getDescendantValues\", (valueOrIndexPath, options) => {\n      const children = this.getDescendantNodes(valueOrIndexPath, options);\n      return children.map((child) => this.getNodeValue(child));\n    });\n    __publicField(this, \"getParentIndexPath\", (indexPath) => {\n      return indexPath.slice(0, -1);\n    });\n    __publicField(this, \"getParentNode\", (valueOrIndexPath) => {\n      const indexPath = this.resolveIndexPath(valueOrIndexPath);\n      return indexPath ? this.at(this.getParentIndexPath(indexPath)) : void 0;\n    });\n    __publicField(this, \"visit\", (opts) => {\n      const { skip, ...rest } = opts;\n      visit(this.rootNode, {\n        ...rest,\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (this.isRootNode(node)) return;\n          if (skip?.({ value: this.getNodeValue(node), node, indexPath })) return \"skip\";\n          return rest.onEnter?.(node, indexPath);\n        }\n      });\n    });\n    __publicField(this, \"getPreviousSibling\", (indexPath) => {\n      const parentNode = this.getParentNode(indexPath);\n      if (!parentNode) return;\n      const siblings = this.getNodeChildren(parentNode);\n      let idx = indexPath[indexPath.length - 1];\n      while (--idx >= 0) {\n        const sibling = siblings[idx];\n        if (!this.getNodeDisabled(sibling)) return sibling;\n      }\n      return;\n    });\n    __publicField(this, \"getNextSibling\", (indexPath) => {\n      const parentNode = this.getParentNode(indexPath);\n      if (!parentNode) return;\n      const siblings = this.getNodeChildren(parentNode);\n      let idx = indexPath[indexPath.length - 1];\n      while (++idx < siblings.length) {\n        const sibling = siblings[idx];\n        if (!this.getNodeDisabled(sibling)) return sibling;\n      }\n      return;\n    });\n    __publicField(this, \"getSiblingNodes\", (indexPath) => {\n      const parentNode = this.getParentNode(indexPath);\n      return parentNode ? this.getNodeChildren(parentNode) : [];\n    });\n    __publicField(this, \"getValues\", (rootNode = this.rootNode) => {\n      const values = flatMap(rootNode, {\n        getChildren: this.getNodeChildren,\n        transform: (node) => [this.getNodeValue(node)]\n      });\n      return values.slice(1);\n    });\n    __publicField(this, \"isValidDepth\", (indexPath, depth) => {\n      if (depth == null) return true;\n      if (typeof depth === \"function\") return depth(indexPath.length);\n      return indexPath.length === depth;\n    });\n    __publicField(this, \"isBranchNode\", (node) => {\n      return this.getNodeChildren(node).length > 0 || this.getNodeChildrenCount(node) != null;\n    });\n    __publicField(this, \"getBranchValues\", (rootNode = this.rootNode, opts = {}) => {\n      let values = [];\n      visit(rootNode, {\n        getChildren: this.getNodeChildren,\n        onEnter: (node, indexPath) => {\n          if (indexPath.length === 0) return;\n          const nodeValue = this.getNodeValue(node);\n          if (opts.skip?.({ value: nodeValue, node, indexPath })) return \"skip\";\n          if (this.isBranchNode(node) && this.isValidDepth(indexPath, opts.depth)) {\n            values.push(this.getNodeValue(node));\n          }\n        }\n      });\n      return values;\n    });\n    __publicField(this, \"flatten\", (rootNode = this.rootNode) => {\n      return flatten(rootNode, { getChildren: this.getNodeChildren });\n    });\n    __publicField(this, \"_create\", (node, children) => {\n      if (this.getNodeChildren(node).length > 0 || children.length > 0) {\n        return { ...node, children };\n      }\n      return { ...node };\n    });\n    __publicField(this, \"_insert\", (rootNode, indexPath, nodes) => {\n      return this.copy(\n        insert2(rootNode, { at: indexPath, nodes, getChildren: this.getNodeChildren, create: this._create })\n      );\n    });\n    __publicField(this, \"copy\", (rootNode) => {\n      return new _TreeCollection({ ...this.options, rootNode });\n    });\n    __publicField(this, \"_replace\", (rootNode, indexPath, node) => {\n      return this.copy(\n        replace(rootNode, { at: indexPath, node, getChildren: this.getNodeChildren, create: this._create })\n      );\n    });\n    __publicField(this, \"_move\", (rootNode, indexPaths, to) => {\n      return this.copy(move2(rootNode, { indexPaths, to, getChildren: this.getNodeChildren, create: this._create }));\n    });\n    __publicField(this, \"_remove\", (rootNode, indexPaths) => {\n      return this.copy(remove(rootNode, { indexPaths, getChildren: this.getNodeChildren, create: this._create }));\n    });\n    __publicField(this, \"replace\", (indexPath, node) => {\n      return this._replace(this.rootNode, indexPath, node);\n    });\n    __publicField(this, \"remove\", (indexPaths) => {\n      return this._remove(this.rootNode, indexPaths);\n    });\n    __publicField(this, \"insertBefore\", (indexPath, nodes) => {\n      const parentNode = this.getParentNode(indexPath);\n      return parentNode ? this._insert(this.rootNode, indexPath, nodes) : void 0;\n    });\n    __publicField(this, \"insertAfter\", (indexPath, nodes) => {\n      const parentNode = this.getParentNode(indexPath);\n      if (!parentNode) return;\n      const nextIndex2 = [...indexPath.slice(0, -1), indexPath[indexPath.length - 1] + 1];\n      return this._insert(this.rootNode, nextIndex2, nodes);\n    });\n    __publicField(this, \"move\", (fromIndexPaths, toIndexPath) => {\n      return this._move(this.rootNode, fromIndexPaths, toIndexPath);\n    });\n    __publicField(this, \"filter\", (predicate) => {\n      const filteredRoot = filter(this.rootNode, {\n        predicate,\n        getChildren: this.getNodeChildren,\n        create: this._create\n      });\n      return this.copy(filteredRoot);\n    });\n    __publicField(this, \"toJSON\", () => {\n      return this.getValues(this.rootNode);\n    });\n    this.rootNode = options.rootNode;\n  }\n};\nfunction flattenedToTree(nodes, options = fallbackMethods) {\n  if (nodes.length === 0) {\n    throw new Error(\"[zag-js/tree] Cannot create tree from empty flattened array\");\n  }\n  const rootFlatNode = nodes.find((node) => node._parent === void 0);\n  if (!rootFlatNode) {\n    throw new Error(\"[zag-js/tree] No root node found in flattened data\");\n  }\n  const nodeMap = /* @__PURE__ */ new Map();\n  nodes.forEach((node) => {\n    nodeMap.set(node._index, node);\n  });\n  const buildNode = (idx) => {\n    const flatNode = nodeMap.get(idx);\n    if (!flatNode) return {};\n    const { _children, _parent, _index, ...cleanNode } = flatNode;\n    const children = [];\n    _children?.forEach((childIndex) => {\n      children.push(buildNode(childIndex));\n    });\n    return {\n      ...cleanNode,\n      ...children.length > 0 && { children }\n    };\n  };\n  const rootNode = buildNode(rootFlatNode._index);\n  return new TreeCollection({ ...options, rootNode });\n}\nfunction filePathToTree(paths) {\n  const rootNode = {\n    label: \"\",\n    value: \"ROOT\",\n    children: []\n  };\n  paths.forEach((path) => {\n    const parts = path.split(\"/\");\n    let currentNode = rootNode;\n    parts.forEach((part, index) => {\n      let childNode = currentNode.children?.find((child) => child.label === part);\n      if (!childNode) {\n        childNode = {\n          value: parts.slice(0, index + 1).join(\"/\"),\n          label: part\n        };\n        currentNode.children || (currentNode.children = []);\n        currentNode.children.push(childNode);\n      }\n      currentNode = childNode;\n    });\n  });\n  return new TreeCollection({ rootNode });\n}\nvar fallbackMethods = {\n  nodeToValue(node) {\n    if (typeof node === \"string\") return node;\n    if (isObject(node) && hasProp(node, \"value\")) return node.value;\n    return \"\";\n  },\n  nodeToString(node) {\n    if (typeof node === \"string\") return node;\n    if (isObject(node) && hasProp(node, \"label\")) return node.label;\n    return fallbackMethods.nodeToValue(node);\n  },\n  isNodeDisabled(node) {\n    if (isObject(node) && hasProp(node, \"disabled\")) return !!node.disabled;\n    return false;\n  },\n  nodeToChildren(node) {\n    return node.children;\n  },\n  nodeToChildrenCount(node) {\n    if (isObject(node) && hasProp(node, \"childrenCount\")) return node.childrenCount;\n  }\n};\n\nexport { GridCollection, ListCollection, Selection, TreeCollection, filePathToTree, flattenedToTree, isGridCollection, isListCollection };\n", "var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/caret.ts\nfunction isCaretAtStart(input) {\n  if (!input) return false;\n  try {\n    return input.selectionStart === 0 && input.selectionEnd === 0;\n  } catch {\n    return input.value === \"\";\n  }\n}\nfunction setCaretToEnd(input) {\n  if (!input) return;\n  const start = input.selectionStart ?? 0;\n  const end = input.selectionEnd ?? 0;\n  if (Math.abs(end - start) !== 0) return;\n  if (start !== 0) return;\n  input.setSelectionRange(input.value.length, input.value.length);\n}\n\n// src/shared.ts\nvar clamp = (value) => Math.max(0, Math.min(1, value));\nvar wrap = (v, idx) => {\n  return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length]);\n};\nvar pipe = (...fns) => (arg) => fns.reduce((acc, fn) => fn(acc), arg);\nvar noop = () => void 0;\nvar isObject = (v) => typeof v === \"object\" && v !== null;\nvar MAX_Z_INDEX = 2147483647;\nvar dataAttr = (guard) => guard ? \"\" : void 0;\nvar ariaAttr = (guard) => guard ? \"true\" : void 0;\n\n// src/node.ts\nvar ELEMENT_NODE = 1;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\nvar isHTMLElement = (el) => isObject(el) && el.nodeType === ELEMENT_NODE && typeof el.nodeName === \"string\";\nvar isDocument = (el) => isObject(el) && el.nodeType === DOCUMENT_NODE;\nvar isWindow = (el) => isObject(el) && el === el.window;\nvar isVisualViewport = (el) => isObject(el) && el.constructor.name === \"VisualViewport\";\nvar getNodeName = (node) => {\n  if (isHTMLElement(node)) return node.localName || \"\";\n  return \"#document\";\n};\nfunction isRootElement(node) {\n  return [\"html\", \"body\", \"#document\"].includes(getNodeName(node));\n}\nvar isNode = (el) => isObject(el) && el.nodeType !== void 0;\nvar isShadowRoot = (el) => isNode(el) && el.nodeType === DOCUMENT_FRAGMENT_NODE && \"host\" in el;\nvar isInputElement = (el) => isHTMLElement(el) && el.localName === \"input\";\nvar isAnchorElement = (el) => !!el?.matches(\"a[href]\");\nvar isElementVisible = (el) => {\n  if (!isHTMLElement(el)) return false;\n  return el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0;\n};\nfunction isActiveElement(element) {\n  if (!element) return false;\n  const rootNode = element.getRootNode();\n  return getActiveElement(rootNode) === element;\n}\nvar TEXTAREA_SELECT_REGEX = /(textarea|select)/;\nfunction isEditableElement(el) {\n  if (el == null || !isHTMLElement(el)) return false;\n  try {\n    return isInputElement(el) && el.selectionStart != null || TEXTAREA_SELECT_REGEX.test(el.localName) || el.isContentEditable || el.getAttribute(\"contenteditable\") === \"true\" || el.getAttribute(\"contenteditable\") === \"\";\n  } catch {\n    return false;\n  }\n}\nfunction contains(parent, child) {\n  if (!parent || !child) return false;\n  if (!isHTMLElement(parent) || !isHTMLElement(child)) return false;\n  const rootNode = child.getRootNode?.();\n  if (parent === child) return true;\n  if (parent.contains(child)) return true;\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) return true;\n      next = next.parentNode || next.host;\n    }\n  }\n  return false;\n}\nfunction getDocument(el) {\n  if (isDocument(el)) return el;\n  if (isWindow(el)) return el.document;\n  return el?.ownerDocument ?? document;\n}\nfunction getDocumentElement(el) {\n  return getDocument(el).documentElement;\n}\nfunction getWindow(el) {\n  if (isShadowRoot(el)) return getWindow(el.host);\n  if (isDocument(el)) return el.defaultView ?? window;\n  if (isHTMLElement(el)) return el.ownerDocument?.defaultView ?? window;\n  return window;\n}\nfunction getActiveElement(rootNode) {\n  let activeElement = rootNode.activeElement;\n  while (activeElement?.shadowRoot) {\n    const el = activeElement.shadowRoot.activeElement;\n    if (!el || el === activeElement) break;\n    else activeElement = el;\n  }\n  return activeElement;\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === \"html\") return node;\n  const result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getRootNode(node) {\n  let result;\n  try {\n    result = node.getRootNode({ composed: true });\n    if (isDocument(result) || isShadowRoot(result)) return result;\n  } catch {\n  }\n  return node.ownerDocument ?? document;\n}\n\n// src/computed-style.ts\nvar styleCache = /* @__PURE__ */ new WeakMap();\nfunction getComputedStyle(el) {\n  if (!styleCache.has(el)) {\n    styleCache.set(el, getWindow(el).getComputedStyle(el));\n  }\n  return styleCache.get(el);\n}\n\n// src/controller.ts\nvar INTERACTIVE_CONTAINER_ROLE = /* @__PURE__ */ new Set([\"menu\", \"listbox\", \"dialog\", \"grid\", \"tree\", \"region\"]);\nvar isInteractiveContainerRole = (role) => INTERACTIVE_CONTAINER_ROLE.has(role);\nvar getAriaControls = (element) => element.getAttribute(\"aria-controls\")?.split(\" \") || [];\nfunction isControlledElement(container, element) {\n  const visitedIds = /* @__PURE__ */ new Set();\n  const rootNode = getRootNode(container);\n  const checkElement = (searchRoot) => {\n    const controllingElements = searchRoot.querySelectorAll(\"[aria-controls]\");\n    for (const controller of controllingElements) {\n      if (controller.getAttribute(\"aria-expanded\") !== \"true\") continue;\n      const controlledIds = getAriaControls(controller);\n      for (const id of controlledIds) {\n        if (!id || visitedIds.has(id)) continue;\n        visitedIds.add(id);\n        const controlledElement = rootNode.getElementById(id);\n        if (controlledElement) {\n          const role = controlledElement.getAttribute(\"role\");\n          const modal = controlledElement.getAttribute(\"aria-modal\") === \"true\";\n          if (role && isInteractiveContainerRole(role) && !modal) {\n            if (controlledElement === element || controlledElement.contains(element)) {\n              return true;\n            }\n            if (checkElement(controlledElement)) {\n              return true;\n            }\n          }\n        }\n      }\n    }\n    return false;\n  };\n  return checkElement(container);\n}\nfunction findControlledElements(searchRoot, callback) {\n  const rootNode = getRootNode(searchRoot);\n  const visitedIds = /* @__PURE__ */ new Set();\n  const findRecursive = (root) => {\n    const controllingElements = root.querySelectorAll(\"[aria-controls]\");\n    for (const controller of controllingElements) {\n      if (controller.getAttribute(\"aria-expanded\") !== \"true\") continue;\n      const controlledIds = getAriaControls(controller);\n      for (const id of controlledIds) {\n        if (!id || visitedIds.has(id)) continue;\n        visitedIds.add(id);\n        const controlledElement = rootNode.getElementById(id);\n        if (controlledElement) {\n          const role = controlledElement.getAttribute(\"role\");\n          const modal = controlledElement.getAttribute(\"aria-modal\") === \"true\";\n          if (role && INTERACTIVE_CONTAINER_ROLE.has(role) && !modal) {\n            callback(controlledElement);\n            findRecursive(controlledElement);\n          }\n        }\n      }\n    }\n  };\n  findRecursive(searchRoot);\n}\nfunction getControlledElements(container) {\n  const controlledElements = /* @__PURE__ */ new Set();\n  findControlledElements(container, (controlledElement) => {\n    if (!container.contains(controlledElement)) {\n      controlledElements.add(controlledElement);\n    }\n  });\n  return Array.from(controlledElements);\n}\nfunction isInteractiveContainerElement(element) {\n  const role = element.getAttribute(\"role\");\n  return Boolean(role && INTERACTIVE_CONTAINER_ROLE.has(role));\n}\nfunction isControllerElement(element) {\n  return element.hasAttribute(\"aria-controls\") && element.getAttribute(\"aria-expanded\") === \"true\";\n}\nfunction hasControllerElements(element) {\n  if (isControllerElement(element)) return true;\n  return Boolean(element.querySelector?.('[aria-controls][aria-expanded=\"true\"]'));\n}\nfunction isControlledByExpandedController(element) {\n  if (!element.id) return false;\n  const rootNode = getRootNode(element);\n  const escapedId = CSS.escape(element.id);\n  const selector = `[aria-controls~=\"${escapedId}\"][aria-expanded=\"true\"], [aria-controls=\"${escapedId}\"][aria-expanded=\"true\"]`;\n  const controller = rootNode.querySelector(selector);\n  return Boolean(controller && isInteractiveContainerElement(element));\n}\n\n// src/data-url.ts\nfunction getDataUrl(svg, opts) {\n  const { type, quality = 0.92, background } = opts;\n  if (!svg) throw new Error(\"[zag-js > getDataUrl]: Could not find the svg element\");\n  const win = getWindow(svg);\n  const doc = win.document;\n  const svgBounds = svg.getBoundingClientRect();\n  const svgClone = svg.cloneNode(true);\n  if (!svgClone.hasAttribute(\"viewBox\")) {\n    svgClone.setAttribute(\"viewBox\", `0 0 ${svgBounds.width} ${svgBounds.height}`);\n  }\n  const serializer = new win.XMLSerializer();\n  const source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + serializer.serializeToString(svgClone);\n  const svgString = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n  if (type === \"image/svg+xml\") {\n    return Promise.resolve(svgString).then((str) => {\n      svgClone.remove();\n      return str;\n    });\n  }\n  const dpr = win.devicePixelRatio || 1;\n  const canvas = doc.createElement(\"canvas\");\n  const image = new win.Image();\n  image.src = svgString;\n  canvas.width = svgBounds.width * dpr;\n  canvas.height = svgBounds.height * dpr;\n  const context = canvas.getContext(\"2d\");\n  if (type === \"image/jpeg\" || background) {\n    context.fillStyle = background || \"white\";\n    context.fillRect(0, 0, canvas.width, canvas.height);\n  }\n  return new Promise((resolve) => {\n    image.onload = () => {\n      context?.drawImage(image, 0, 0, canvas.width, canvas.height);\n      resolve(canvas.toDataURL(type, quality));\n      svgClone.remove();\n    };\n  });\n}\n\n// src/platform.ts\nvar isDom = () => typeof document !== \"undefined\";\nfunction getPlatform() {\n  const agent = navigator.userAgentData;\n  return agent?.platform ?? navigator.platform;\n}\nfunction getUserAgent() {\n  const ua2 = navigator.userAgentData;\n  if (ua2 && Array.isArray(ua2.brands)) {\n    return ua2.brands.map(({ brand, version }) => `${brand}/${version}`).join(\" \");\n  }\n  return navigator.userAgent;\n}\nvar pt = (v) => isDom() && v.test(getPlatform());\nvar ua = (v) => isDom() && v.test(getUserAgent());\nvar vn = (v) => isDom() && v.test(navigator.vendor);\nvar isTouchDevice = () => isDom() && !!navigator.maxTouchPoints;\nvar isIPhone = () => pt(/^iPhone/i);\nvar isIPad = () => pt(/^iPad/i) || isMac() && navigator.maxTouchPoints > 1;\nvar isIos = () => isIPhone() || isIPad();\nvar isApple = () => isMac() || isIos();\nvar isMac = () => pt(/^Mac/i);\nvar isSafari = () => isApple() && vn(/apple/i);\nvar isFirefox = () => ua(/Firefox/i);\nvar isChrome = () => ua(/Chrome/i);\nvar isWebKit = () => ua(/AppleWebKit/i) && !isChrome();\nvar isAndroid = () => ua(/Android/i);\n\n// src/event.ts\nfunction getBeforeInputValue(event) {\n  const { selectionStart, selectionEnd, value } = event.currentTarget;\n  const data = event.data;\n  return value.slice(0, selectionStart) + (data ?? \"\") + value.slice(selectionEnd);\n}\nfunction getComposedPath(event) {\n  return event.composedPath?.() ?? event.nativeEvent?.composedPath?.();\n}\nfunction getEventTarget(event) {\n  const composedPath = getComposedPath(event);\n  return composedPath?.[0] ?? event.target;\n}\nfunction isOpeningInNewTab(event) {\n  const element = event.currentTarget;\n  if (!element) return false;\n  const validElement = element.matches(\"a[href], button[type='submit'], input[type='submit']\");\n  if (!validElement) return false;\n  const isMiddleClick = event.button === 1;\n  const isModKeyClick = isCtrlOrMetaKey(event);\n  return isMiddleClick || isModKeyClick;\n}\nfunction isDownloadingEvent(event) {\n  const element = event.currentTarget;\n  if (!element) return false;\n  const localName = element.localName;\n  if (!event.altKey) return false;\n  if (localName === \"a\") return true;\n  if (localName === \"button\" && element.type === \"submit\") return true;\n  if (localName === \"input\" && element.type === \"submit\") return true;\n  return false;\n}\nfunction isComposingEvent(event) {\n  return getNativeEvent(event).isComposing || event.keyCode === 229;\n}\nfunction isKeyboardClick(e) {\n  return e.detail === 0 || e.clientX === 0 && e.clientY === 0;\n}\nfunction isCtrlOrMetaKey(e) {\n  if (isMac()) return e.metaKey;\n  return e.ctrlKey;\n}\nfunction isPrintableKey(e) {\n  return e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n}\nfunction isVirtualPointerEvent(e) {\n  return e.width === 0 && e.height === 0 || e.width === 1 && e.height === 1 && e.pressure === 0 && e.detail === 0 && e.pointerType === \"mouse\";\n}\nfunction isVirtualClick(e) {\n  if (e.pointerType === \"\" && e.isTrusted) return true;\n  if (isAndroid() && e.pointerType) {\n    return e.type === \"click\" && e.buttons === 1;\n  }\n  return e.detail === 0 && !e.pointerType;\n}\nvar isLeftClick = (e) => e.button === 0;\nvar isContextMenuEvent = (e) => {\n  return e.button === 2 || isMac() && e.ctrlKey && e.button === 0;\n};\nvar isModifierKey = (e) => e.ctrlKey || e.altKey || e.metaKey;\nvar isTouchEvent = (event) => \"touches\" in event && event.touches.length > 0;\nvar keyMap = {\n  Up: \"ArrowUp\",\n  Down: \"ArrowDown\",\n  Esc: \"Escape\",\n  \" \": \"Space\",\n  \",\": \"Comma\",\n  Left: \"ArrowLeft\",\n  Right: \"ArrowRight\"\n};\nvar rtlKeyMap = {\n  ArrowLeft: \"ArrowRight\",\n  ArrowRight: \"ArrowLeft\"\n};\nfunction getEventKey(event, options = {}) {\n  const { dir = \"ltr\", orientation = \"horizontal\" } = options;\n  let key = event.key;\n  key = keyMap[key] ?? key;\n  const isRtl = dir === \"rtl\" && orientation === \"horizontal\";\n  if (isRtl && key in rtlKeyMap) key = rtlKeyMap[key];\n  return key;\n}\nfunction getNativeEvent(event) {\n  return event.nativeEvent ?? event;\n}\nvar pageKeys = /* @__PURE__ */ new Set([\"PageUp\", \"PageDown\"]);\nvar arrowKeys = /* @__PURE__ */ new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"]);\nfunction getEventStep(event) {\n  if (event.ctrlKey || event.metaKey) {\n    return 0.1;\n  } else {\n    const isPageKey = pageKeys.has(event.key);\n    const isSkipKey = isPageKey || event.shiftKey && arrowKeys.has(event.key);\n    return isSkipKey ? 10 : 1;\n  }\n}\nfunction getEventPoint(event, type = \"client\") {\n  const point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] : event;\n  return { x: point[`${type}X`], y: point[`${type}Y`] };\n}\nvar addDomEvent = (target, eventName, handler, options) => {\n  const node = typeof target === \"function\" ? target() : target;\n  node?.addEventListener(eventName, handler, options);\n  return () => {\n    node?.removeEventListener(eventName, handler, options);\n  };\n};\nvar isSelfTarget = (event) => {\n  const composedPath = getComposedPath(event);\n  const target = composedPath?.[0] ?? event.target;\n  return event.currentTarget === target;\n};\n\n// src/form.ts\nfunction getDescriptor(el, options) {\n  const { type = \"HTMLInputElement\", property = \"value\" } = options;\n  const proto = getWindow(el)[type].prototype;\n  return Object.getOwnPropertyDescriptor(proto, property) ?? {};\n}\nfunction getElementType(el) {\n  if (el.localName === \"input\") return \"HTMLInputElement\";\n  if (el.localName === \"textarea\") return \"HTMLTextAreaElement\";\n  if (el.localName === \"select\") return \"HTMLSelectElement\";\n}\nfunction setElementValue(el, value, property = \"value\") {\n  if (!el) return;\n  const type = getElementType(el);\n  if (type) {\n    const descriptor = getDescriptor(el, { type, property });\n    descriptor.set?.call(el, value);\n  }\n  el.setAttribute(property, value);\n}\nfunction setElementChecked(el, checked) {\n  if (!el) return;\n  const descriptor = getDescriptor(el, { type: \"HTMLInputElement\", property: \"checked\" });\n  descriptor.set?.call(el, checked);\n  if (checked) el.setAttribute(\"checked\", \"\");\n  else el.removeAttribute(\"checked\");\n}\nfunction dispatchInputValueEvent(el, options) {\n  const { value, bubbles = true } = options;\n  if (!el) return;\n  const win = getWindow(el);\n  if (!(el instanceof win.HTMLInputElement)) return;\n  setElementValue(el, `${value}`);\n  el.dispatchEvent(new win.Event(\"input\", { bubbles }));\n}\nfunction dispatchInputCheckedEvent(el, options) {\n  const { checked, bubbles = true } = options;\n  if (!el) return;\n  const win = getWindow(el);\n  if (!(el instanceof win.HTMLInputElement)) return;\n  setElementChecked(el, checked);\n  el.dispatchEvent(new win.Event(\"click\", { bubbles }));\n}\nfunction getClosestForm(el) {\n  return isFormElement(el) ? el.form : el.closest(\"form\");\n}\nfunction isFormElement(el) {\n  return el.matches(\"textarea, input, select, button\");\n}\nfunction trackFormReset(el, callback) {\n  if (!el) return;\n  const form = getClosestForm(el);\n  const onReset = (e) => {\n    if (e.defaultPrevented) return;\n    callback();\n  };\n  form?.addEventListener(\"reset\", onReset, { passive: true });\n  return () => form?.removeEventListener(\"reset\", onReset);\n}\nfunction trackFieldsetDisabled(el, callback) {\n  const fieldset = el?.closest(\"fieldset\");\n  if (!fieldset) return;\n  callback(fieldset.disabled);\n  const win = getWindow(fieldset);\n  const obs = new win.MutationObserver(() => callback(fieldset.disabled));\n  obs.observe(fieldset, {\n    attributes: true,\n    attributeFilter: [\"disabled\"]\n  });\n  return () => obs.disconnect();\n}\nfunction trackFormControl(el, options) {\n  if (!el) return;\n  const { onFieldsetDisabledChange, onFormReset } = options;\n  const cleanups = [trackFormReset(el, onFormReset), trackFieldsetDisabled(el, onFieldsetDisabledChange)];\n  return () => cleanups.forEach((cleanup) => cleanup?.());\n}\n\n// src/tabbable.ts\nvar isFrame = (el) => isHTMLElement(el) && el.tagName === \"IFRAME\";\nvar NATURALLY_TABBABLE_REGEX = /^(audio|video|details)$/;\nfunction parseTabIndex(el) {\n  const attr = el.getAttribute(\"tabindex\");\n  if (!attr) return NaN;\n  return parseInt(attr, 10);\n}\nvar hasTabIndex = (el) => !Number.isNaN(parseTabIndex(el));\nvar hasNegativeTabIndex = (el) => parseTabIndex(el) < 0;\nfunction getShadowRootForNode(element, getShadowRoot) {\n  if (!getShadowRoot) return null;\n  if (getShadowRoot === true) {\n    return element.shadowRoot || null;\n  }\n  const result = getShadowRoot(element);\n  return (result === true ? element.shadowRoot : result) || null;\n}\nfunction collectElementsWithShadowDOM(elements, getShadowRoot, filterFn) {\n  const allElements = [...elements];\n  const toProcess = [...elements];\n  const processed = /* @__PURE__ */ new Set();\n  const positionMap = /* @__PURE__ */ new Map();\n  elements.forEach((el, i) => positionMap.set(el, i));\n  let processIndex = 0;\n  while (processIndex < toProcess.length) {\n    const element = toProcess[processIndex++];\n    if (!element || processed.has(element)) continue;\n    processed.add(element);\n    const shadowRoot = getShadowRootForNode(element, getShadowRoot);\n    if (shadowRoot) {\n      const shadowElements = Array.from(shadowRoot.querySelectorAll(focusableSelector)).filter(filterFn);\n      const hostIndex = positionMap.get(element);\n      if (hostIndex !== void 0) {\n        const insertPosition = hostIndex + 1;\n        allElements.splice(insertPosition, 0, ...shadowElements);\n        shadowElements.forEach((el, i) => {\n          positionMap.set(el, insertPosition + i);\n        });\n        for (let i = insertPosition + shadowElements.length; i < allElements.length; i++) {\n          positionMap.set(allElements[i], i);\n        }\n      } else {\n        const insertPosition = allElements.length;\n        allElements.push(...shadowElements);\n        shadowElements.forEach((el, i) => {\n          positionMap.set(el, insertPosition + i);\n        });\n      }\n      toProcess.push(...shadowElements);\n    }\n  }\n  return allElements;\n}\nvar focusableSelector = \"input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false']), details > summary:first-of-type\";\nvar getFocusables = (container, options = {}) => {\n  if (!container) return [];\n  const { includeContainer = false, getShadowRoot } = options;\n  const elements = Array.from(container.querySelectorAll(focusableSelector));\n  const include = includeContainer == true || includeContainer == \"if-empty\" && elements.length === 0;\n  if (include && isHTMLElement(container) && isFocusable(container)) {\n    elements.unshift(container);\n  }\n  const focusableElements = [];\n  for (const element of elements) {\n    if (!isFocusable(element)) continue;\n    if (isFrame(element) && element.contentDocument) {\n      const frameBody = element.contentDocument.body;\n      focusableElements.push(...getFocusables(frameBody, { getShadowRoot }));\n      continue;\n    }\n    focusableElements.push(element);\n  }\n  if (getShadowRoot) {\n    return collectElementsWithShadowDOM(focusableElements, getShadowRoot, isFocusable);\n  }\n  return focusableElements;\n};\nfunction isFocusable(element) {\n  if (!isHTMLElement(element) || element.closest(\"[inert]\")) return false;\n  return element.matches(focusableSelector) && isElementVisible(element);\n}\nfunction getFirstFocusable(container, options = {}) {\n  const [first] = getFocusables(container, options);\n  return first || null;\n}\nfunction getTabbables(container, options = {}) {\n  if (!container) return [];\n  const { includeContainer, getShadowRoot } = options;\n  const elements = Array.from(container.querySelectorAll(focusableSelector));\n  if (includeContainer && isTabbable(container)) {\n    elements.unshift(container);\n  }\n  const tabbableElements = [];\n  for (const element of elements) {\n    if (!isTabbable(element)) continue;\n    if (isFrame(element) && element.contentDocument) {\n      const frameBody = element.contentDocument.body;\n      tabbableElements.push(...getTabbables(frameBody, { getShadowRoot }));\n      continue;\n    }\n    tabbableElements.push(element);\n  }\n  if (getShadowRoot) {\n    const allElements = collectElementsWithShadowDOM(tabbableElements, getShadowRoot, isTabbable);\n    if (!allElements.length && includeContainer) {\n      return elements;\n    }\n    return allElements;\n  }\n  if (!tabbableElements.length && includeContainer) {\n    return elements;\n  }\n  return tabbableElements;\n}\nfunction isTabbable(el) {\n  if (isHTMLElement(el) && el.tabIndex > 0) return true;\n  return isFocusable(el) && !hasNegativeTabIndex(el);\n}\nfunction getFirstTabbable(container, options = {}) {\n  const [first] = getTabbables(container, options);\n  return first || null;\n}\nfunction getLastTabbable(container, options = {}) {\n  const elements = getTabbables(container, options);\n  return elements[elements.length - 1] || null;\n}\nfunction getTabbableEdges(container, options = {}) {\n  const elements = getTabbables(container, options);\n  const first = elements[0] || null;\n  const last = elements[elements.length - 1] || null;\n  return [first, last];\n}\nfunction getNextTabbable(container, options = {}) {\n  const { current, getShadowRoot } = options;\n  const tabbables = getTabbables(container, { getShadowRoot });\n  const doc = container?.ownerDocument || document;\n  const currentElement = current ?? getActiveElement(doc);\n  if (!currentElement) return null;\n  const index = tabbables.indexOf(currentElement);\n  return tabbables[index + 1] || null;\n}\nfunction getTabIndex(node) {\n  if (node.tabIndex < 0) {\n    if ((NATURALLY_TABBABLE_REGEX.test(node.localName) || isEditableElement(node)) && !hasTabIndex(node)) {\n      return 0;\n    }\n  }\n  return node.tabIndex;\n}\n\n// src/initial-focus.ts\nfunction getInitialFocus(options) {\n  const { root, getInitialEl, filter, enabled = true } = options;\n  if (!enabled) return;\n  let node = null;\n  node || (node = typeof getInitialEl === \"function\" ? getInitialEl() : getInitialEl);\n  node || (node = root?.querySelector(\"[data-autofocus],[autofocus]\"));\n  if (!node) {\n    const tabbables = getTabbables(root);\n    node = filter ? tabbables.filter(filter)[0] : tabbables[0];\n  }\n  return node || root || void 0;\n}\nfunction isValidTabEvent(event) {\n  const container = event.currentTarget;\n  if (!container) return false;\n  const [firstTabbable, lastTabbable] = getTabbableEdges(container);\n  if (isActiveElement(firstTabbable) && event.shiftKey) return false;\n  if (isActiveElement(lastTabbable) && !event.shiftKey) return false;\n  if (!firstTabbable && !lastTabbable) return false;\n  return true;\n}\n\n// src/raf.ts\nvar AnimationFrame = class _AnimationFrame {\n  constructor() {\n    __publicField(this, \"id\", null);\n    __publicField(this, \"fn_cleanup\");\n    __publicField(this, \"cleanup\", () => {\n      this.cancel();\n    });\n  }\n  static create() {\n    return new _AnimationFrame();\n  }\n  request(fn) {\n    this.cancel();\n    this.id = globalThis.requestAnimationFrame(() => {\n      this.id = null;\n      this.fn_cleanup = fn?.();\n    });\n  }\n  cancel() {\n    if (this.id !== null) {\n      globalThis.cancelAnimationFrame(this.id);\n      this.id = null;\n    }\n    this.fn_cleanup?.();\n    this.fn_cleanup = void 0;\n  }\n  isActive() {\n    return this.id !== null;\n  }\n};\nfunction raf(fn) {\n  const frame = AnimationFrame.create();\n  frame.request(fn);\n  return frame.cleanup;\n}\nfunction nextTick(fn) {\n  const set = /* @__PURE__ */ new Set();\n  function raf2(fn2) {\n    const id = globalThis.requestAnimationFrame(fn2);\n    set.add(() => globalThis.cancelAnimationFrame(id));\n  }\n  raf2(() => raf2(fn));\n  return function cleanup() {\n    set.forEach((fn2) => fn2());\n  };\n}\nfunction queueBeforeEvent(el, type, cb) {\n  const cancelTimer = raf(() => {\n    el.removeEventListener(type, exec, true);\n    cb();\n  });\n  const exec = () => {\n    cancelTimer();\n    cb();\n  };\n  el.addEventListener(type, exec, { once: true, capture: true });\n  return cancelTimer;\n}\n\n// src/mutation-observer.ts\nfunction observeAttributesImpl(node, options) {\n  if (!node) return;\n  const { attributes, callback: fn } = options;\n  const win = node.ownerDocument.defaultView || window;\n  const obs = new win.MutationObserver((changes) => {\n    for (const change of changes) {\n      if (change.type === \"attributes\" && change.attributeName && attributes.includes(change.attributeName)) {\n        fn(change);\n      }\n    }\n  });\n  obs.observe(node, { attributes: true, attributeFilter: attributes });\n  return () => obs.disconnect();\n}\nfunction observeAttributes(nodeOrFn, options) {\n  const { defer } = options;\n  const func = defer ? raf : (v) => v();\n  const cleanups = [];\n  cleanups.push(\n    func(() => {\n      const node = typeof nodeOrFn === \"function\" ? nodeOrFn() : nodeOrFn;\n      cleanups.push(observeAttributesImpl(node, options));\n    })\n  );\n  return () => {\n    cleanups.forEach((fn) => fn?.());\n  };\n}\nfunction observeChildrenImpl(node, options) {\n  const { callback: fn } = options;\n  if (!node) return;\n  const win = node.ownerDocument.defaultView || window;\n  const obs = new win.MutationObserver(fn);\n  obs.observe(node, { childList: true, subtree: true });\n  return () => obs.disconnect();\n}\nfunction observeChildren(nodeOrFn, options) {\n  const { defer } = options;\n  const func = defer ? raf : (v) => v();\n  const cleanups = [];\n  cleanups.push(\n    func(() => {\n      const node = typeof nodeOrFn === \"function\" ? nodeOrFn() : nodeOrFn;\n      cleanups.push(observeChildrenImpl(node, options));\n    })\n  );\n  return () => {\n    cleanups.forEach((fn) => fn?.());\n  };\n}\n\n// src/navigate.ts\nfunction navigate(items, current, options = {}) {\n  if (!current) return null;\n  const { orientation = \"both\", loop = true, dir = \"ltr\", key } = options;\n  if (!items.length || !key) return null;\n  const isVertical = key === \"ArrowUp\" || key === \"ArrowDown\";\n  const isHorizontal = key === \"ArrowLeft\" || key === \"ArrowRight\";\n  if (!isVertical && !isHorizontal && key !== \"Home\" && key !== \"End\") return null;\n  if (orientation === \"vertical\" && isHorizontal || orientation === \"horizontal\" && isVertical) return null;\n  if (key === \"Home\") return items[0] || null;\n  if (key === \"End\") return items[items.length - 1] || null;\n  const idx = items.indexOf(current);\n  if (idx === -1) return null;\n  let isForward;\n  if (orientation === \"both\") {\n    isForward = key === \"ArrowDown\" || (dir === \"ltr\" ? key === \"ArrowRight\" : key === \"ArrowLeft\");\n  } else {\n    isForward = isVertical ? key === \"ArrowDown\" : dir === \"ltr\" ? key === \"ArrowRight\" : key === \"ArrowLeft\";\n  }\n  const nextIdx = isForward ? loop ? (idx + 1) % items.length : Math.min(idx + 1, items.length - 1) : loop ? (idx - 1 + items.length) % items.length : Math.max(0, idx - 1);\n  return items[nextIdx] || null;\n}\nfunction clickIfLink(el) {\n  const click = () => {\n    const win = getWindow(el);\n    el.dispatchEvent(new win.MouseEvent(\"click\"));\n  };\n  if (isFirefox()) {\n    queueBeforeEvent(el, \"keyup\", click);\n  } else {\n    queueMicrotask(click);\n  }\n}\n\n// src/overflow.ts\nfunction getNearestOverflowAncestor(el) {\n  const parentNode = getParentNode(el);\n  if (isRootElement(parentNode)) return getDocument(parentNode).body;\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) return parentNode;\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(el, list = []) {\n  const scrollableAncestor = getNearestOverflowAncestor(el);\n  const isBody = scrollableAncestor === el.ownerDocument.body;\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, []));\n}\nvar getElementRect = (el) => {\n  if (isHTMLElement(el)) return el.getBoundingClientRect();\n  if (isVisualViewport(el)) return { top: 0, left: 0, bottom: el.height, right: el.width };\n  return { top: 0, left: 0, bottom: el.innerHeight, right: el.innerWidth };\n};\nfunction isInView(el, ancestor) {\n  if (!isHTMLElement(el)) return true;\n  const ancestorRect = getElementRect(ancestor);\n  const elRect = el.getBoundingClientRect();\n  return elRect.top >= ancestorRect.top && elRect.left >= ancestorRect.left && elRect.bottom <= ancestorRect.bottom && elRect.right <= ancestorRect.right;\n}\nvar OVERFLOW_RE = /auto|scroll|overlay|hidden|clip/;\nvar nonOverflowValues = /* @__PURE__ */ new Set([\"inline\", \"contents\"]);\nfunction isOverflowElement(el) {\n  const win = getWindow(el);\n  const { overflow, overflowX, overflowY, display } = win.getComputedStyle(el);\n  return OVERFLOW_RE.test(overflow + overflowY + overflowX) && !nonOverflowValues.has(display);\n}\nfunction isScrollable(el) {\n  return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n}\nfunction scrollIntoView(el, options) {\n  const { rootEl, ...scrollOptions } = options || {};\n  if (!el || !rootEl) return;\n  if (!isOverflowElement(rootEl) || !isScrollable(rootEl)) return;\n  el.scrollIntoView(scrollOptions);\n}\nfunction getScrollPosition(element) {\n  if (isHTMLElement(element)) {\n    return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop };\n  }\n  return { scrollLeft: element.scrollX, scrollTop: element.scrollY };\n}\n\n// src/point.ts\nfunction getRelativePoint(point, element) {\n  const { left, top, width, height } = element.getBoundingClientRect();\n  const offset = { x: point.x - left, y: point.y - top };\n  const percent = { x: clamp(offset.x / width), y: clamp(offset.y / height) };\n  function getPercentValue(options = {}) {\n    const { dir = \"ltr\", orientation = \"horizontal\", inverted } = options;\n    const invertX = typeof inverted === \"object\" ? inverted.x : inverted;\n    const invertY = typeof inverted === \"object\" ? inverted.y : inverted;\n    if (orientation === \"horizontal\") {\n      return dir === \"rtl\" || invertX ? 1 - percent.x : percent.x;\n    }\n    return invertY ? 1 - percent.y : percent.y;\n  }\n  return { offset, percent, getPercentValue };\n}\n\n// src/pointer-lock.ts\nfunction requestPointerLock(doc, fn) {\n  const body = doc.body;\n  const supported = \"pointerLockElement\" in doc || \"mozPointerLockElement\" in doc;\n  const isLocked = () => !!doc.pointerLockElement;\n  function onPointerChange() {\n    fn?.(isLocked());\n  }\n  function onPointerError(event) {\n    if (isLocked()) fn?.(false);\n    console.error(\"PointerLock error occurred:\", event);\n    doc.exitPointerLock();\n  }\n  if (!supported) return;\n  try {\n    body.requestPointerLock();\n  } catch {\n  }\n  const cleanup = [\n    addDomEvent(doc, \"pointerlockchange\", onPointerChange, false),\n    addDomEvent(doc, \"pointerlockerror\", onPointerError, false)\n  ];\n  return () => {\n    cleanup.forEach((cleanup2) => cleanup2());\n    doc.exitPointerLock();\n  };\n}\n\n// src/text-selection.ts\nvar state = \"default\";\nvar userSelect = \"\";\nvar elementMap = /* @__PURE__ */ new WeakMap();\nfunction disableTextSelectionImpl(options = {}) {\n  const { target, doc } = options;\n  const docNode = doc ?? document;\n  const rootEl = docNode.documentElement;\n  if (isIos()) {\n    if (state === \"default\") {\n      userSelect = rootEl.style.webkitUserSelect;\n      rootEl.style.webkitUserSelect = \"none\";\n    }\n    state = \"disabled\";\n  } else if (target) {\n    elementMap.set(target, target.style.userSelect);\n    target.style.userSelect = \"none\";\n  }\n  return () => restoreTextSelection({ target, doc: docNode });\n}\nfunction restoreTextSelection(options = {}) {\n  const { target, doc } = options;\n  const docNode = doc ?? document;\n  const rootEl = docNode.documentElement;\n  if (isIos()) {\n    if (state !== \"disabled\") return;\n    state = \"restoring\";\n    setTimeout(() => {\n      nextTick(() => {\n        if (state === \"restoring\") {\n          if (rootEl.style.webkitUserSelect === \"none\") {\n            rootEl.style.webkitUserSelect = userSelect || \"\";\n          }\n          userSelect = \"\";\n          state = \"default\";\n        }\n      });\n    }, 300);\n  } else {\n    if (target && elementMap.has(target)) {\n      const prevUserSelect = elementMap.get(target);\n      if (target.style.userSelect === \"none\") {\n        target.style.userSelect = prevUserSelect ?? \"\";\n      }\n      if (target.getAttribute(\"style\") === \"\") {\n        target.removeAttribute(\"style\");\n      }\n      elementMap.delete(target);\n    }\n  }\n}\nfunction disableTextSelection(options = {}) {\n  const { defer, target, ...restOptions } = options;\n  const func = defer ? raf : (v) => v();\n  const cleanups = [];\n  cleanups.push(\n    func(() => {\n      const node = typeof target === \"function\" ? target() : target;\n      cleanups.push(disableTextSelectionImpl({ ...restOptions, target: node }));\n    })\n  );\n  return () => {\n    cleanups.forEach((fn) => fn?.());\n  };\n}\n\n// src/pointer-move.ts\nfunction trackPointerMove(doc, handlers) {\n  const { onPointerMove, onPointerUp } = handlers;\n  const handleMove = (event) => {\n    const point = getEventPoint(event);\n    const distance = Math.sqrt(point.x ** 2 + point.y ** 2);\n    const moveBuffer = event.pointerType === \"touch\" ? 10 : 5;\n    if (distance < moveBuffer) return;\n    if (event.pointerType === \"mouse\" && event.buttons === 0) {\n      handleUp(event);\n      return;\n    }\n    onPointerMove({ point, event });\n  };\n  const handleUp = (event) => {\n    const point = getEventPoint(event);\n    onPointerUp({ point, event });\n  };\n  const cleanups = [\n    addDomEvent(doc, \"pointermove\", handleMove, false),\n    addDomEvent(doc, \"pointerup\", handleUp, false),\n    addDomEvent(doc, \"pointercancel\", handleUp, false),\n    addDomEvent(doc, \"contextmenu\", handleUp, false),\n    disableTextSelection({ doc })\n  ];\n  return () => {\n    cleanups.forEach((cleanup) => cleanup());\n  };\n}\n\n// src/press.ts\nfunction trackPress(options) {\n  const {\n    pointerNode,\n    keyboardNode = pointerNode,\n    onPress,\n    onPressStart,\n    onPressEnd,\n    isValidKey = (e) => e.key === \"Enter\"\n  } = options;\n  if (!pointerNode) return noop;\n  const win = getWindow(pointerNode);\n  let removeStartListeners = noop;\n  let removeEndListeners = noop;\n  let removeAccessibleListeners = noop;\n  const getInfo = (event) => ({\n    point: getEventPoint(event),\n    event\n  });\n  function startPress(event) {\n    onPressStart?.(getInfo(event));\n  }\n  function cancelPress(event) {\n    onPressEnd?.(getInfo(event));\n  }\n  const startPointerPress = (startEvent) => {\n    removeEndListeners();\n    const endPointerPress = (endEvent) => {\n      const target = getEventTarget(endEvent);\n      if (contains(pointerNode, target)) {\n        onPress?.(getInfo(endEvent));\n      } else {\n        onPressEnd?.(getInfo(endEvent));\n      }\n    };\n    const removePointerUpListener = addDomEvent(win, \"pointerup\", endPointerPress, { passive: !onPress, once: true });\n    const removePointerCancelListener = addDomEvent(win, \"pointercancel\", cancelPress, {\n      passive: !onPressEnd,\n      once: true\n    });\n    removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);\n    if (isActiveElement(keyboardNode) && startEvent.pointerType === \"mouse\") {\n      startEvent.preventDefault();\n    }\n    startPress(startEvent);\n  };\n  const removePointerListener = addDomEvent(pointerNode, \"pointerdown\", startPointerPress, { passive: !onPressStart });\n  const removeFocusListener = addDomEvent(keyboardNode, \"focus\", startAccessiblePress);\n  removeStartListeners = pipe(removePointerListener, removeFocusListener);\n  function startAccessiblePress() {\n    const handleKeydown = (keydownEvent) => {\n      if (!isValidKey(keydownEvent)) return;\n      const handleKeyup = (keyupEvent) => {\n        if (!isValidKey(keyupEvent)) return;\n        const evt2 = new win.PointerEvent(\"pointerup\");\n        const info = getInfo(evt2);\n        onPress?.(info);\n        onPressEnd?.(info);\n      };\n      removeEndListeners();\n      removeEndListeners = addDomEvent(keyboardNode, \"keyup\", handleKeyup);\n      const evt = new win.PointerEvent(\"pointerdown\");\n      startPress(evt);\n    };\n    const handleBlur = () => {\n      const evt = new win.PointerEvent(\"pointercancel\");\n      cancelPress(evt);\n    };\n    const removeKeydownListener = addDomEvent(keyboardNode, \"keydown\", handleKeydown);\n    const removeBlurListener = addDomEvent(keyboardNode, \"blur\", handleBlur);\n    removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);\n  }\n  return () => {\n    removeStartListeners();\n    removeEndListeners();\n    removeAccessibleListeners();\n  };\n}\n\n// src/proxy-tab-focus.ts\nfunction proxyTabFocusImpl(container, options = {}) {\n  const { triggerElement, onFocus, onFocusEnter, getShadowRoot } = options;\n  const doc = container?.ownerDocument || document;\n  const body = doc.body;\n  function onKeyDown(event) {\n    if (event.key !== \"Tab\") return;\n    let elementToFocus = null;\n    const [firstTabbable, lastTabbable] = getTabbableEdges(container, { includeContainer: true, getShadowRoot });\n    const nextTabbableAfterTrigger = getNextTabbable(body, { current: triggerElement, getShadowRoot });\n    const noTabbableElements = !firstTabbable && !lastTabbable;\n    if (event.shiftKey && isActiveElement(nextTabbableAfterTrigger)) {\n      onFocusEnter?.();\n      elementToFocus = lastTabbable;\n    } else if (event.shiftKey && (isActiveElement(firstTabbable) || noTabbableElements)) {\n      elementToFocus = triggerElement;\n    } else if (!event.shiftKey && isActiveElement(triggerElement)) {\n      onFocusEnter?.();\n      elementToFocus = firstTabbable;\n    } else if (!event.shiftKey && (isActiveElement(lastTabbable) || noTabbableElements)) {\n      elementToFocus = nextTabbableAfterTrigger;\n    }\n    if (!elementToFocus) return;\n    event.preventDefault();\n    if (typeof onFocus === \"function\") {\n      onFocus(elementToFocus);\n    } else {\n      elementToFocus.focus();\n    }\n  }\n  return addDomEvent(doc, \"keydown\", onKeyDown, true);\n}\nfunction proxyTabFocus(container, options) {\n  const { defer, triggerElement, ...restOptions } = options;\n  const func = defer ? raf : (v) => v();\n  const cleanups = [];\n  cleanups.push(\n    func(() => {\n      const node = typeof container === \"function\" ? container() : container;\n      const trigger = typeof triggerElement === \"function\" ? triggerElement() : triggerElement;\n      cleanups.push(proxyTabFocusImpl(node, { triggerElement: trigger, ...restOptions }));\n    })\n  );\n  return () => {\n    cleanups.forEach((fn) => fn?.());\n  };\n}\n\n// src/query.ts\nfunction queryAll(root, selector) {\n  return Array.from(root?.querySelectorAll(selector) ?? []);\n}\nfunction query(root, selector) {\n  return root?.querySelector(selector) ?? null;\n}\nvar defaultItemToId = (v) => v.id;\nfunction itemById(v, id, itemToId = defaultItemToId) {\n  return v.find((item) => itemToId(item) === id);\n}\nfunction indexOfId(v, id, itemToId = defaultItemToId) {\n  const item = itemById(v, id, itemToId);\n  return item ? v.indexOf(item) : -1;\n}\nfunction nextById(v, id, loop = true) {\n  let idx = indexOfId(v, id);\n  idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1);\n  return v[idx];\n}\nfunction prevById(v, id, loop = true) {\n  let idx = indexOfId(v, id);\n  if (idx === -1) return loop ? v[v.length - 1] : null;\n  idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1);\n  return v[idx];\n}\n\n// src/resize-observer.ts\nfunction createSharedResizeObserver(options) {\n  const listeners = /* @__PURE__ */ new WeakMap();\n  let observer;\n  const entries = /* @__PURE__ */ new WeakMap();\n  const getObserver = (win) => {\n    if (observer) return observer;\n    observer = new win.ResizeObserver((observedEntries) => {\n      for (const entry of observedEntries) {\n        entries.set(entry.target, entry);\n        const elementListeners = listeners.get(entry.target);\n        if (elementListeners) {\n          for (const listener of elementListeners) {\n            listener(entry);\n          }\n        }\n      }\n    });\n    return observer;\n  };\n  const observe = (element, listener) => {\n    let elementListeners = listeners.get(element) || /* @__PURE__ */ new Set();\n    elementListeners.add(listener);\n    listeners.set(element, elementListeners);\n    const win = getWindow(element);\n    getObserver(win).observe(element, options);\n    return () => {\n      const elementListeners2 = listeners.get(element);\n      if (!elementListeners2) return;\n      elementListeners2.delete(listener);\n      if (elementListeners2.size === 0) {\n        listeners.delete(element);\n        getObserver(win).unobserve(element);\n      }\n    };\n  };\n  const unobserve = (element) => {\n    listeners.delete(element);\n    observer?.unobserve(element);\n  };\n  return {\n    observe,\n    unobserve\n  };\n}\nvar resizeObserverContentBox = /* @__PURE__ */ createSharedResizeObserver({\n  box: \"content-box\"\n});\nvar resizeObserverBorderBox = /* @__PURE__ */ createSharedResizeObserver({\n  box: \"border-box\"\n});\nvar resizeObserverDevicePixelContentBox = /* @__PURE__ */ createSharedResizeObserver({\n  box: \"device-pixel-content-box\"\n});\n\n// src/scope.ts\nfunction createScope(methods) {\n  const dom = {\n    getRootNode: (ctx) => ctx.getRootNode?.() ?? document,\n    getDoc: (ctx) => getDocument(dom.getRootNode(ctx)),\n    getWin: (ctx) => dom.getDoc(ctx).defaultView ?? window,\n    getActiveElement: (ctx) => getActiveElement(dom.getRootNode(ctx)),\n    isActiveElement,\n    getById: (ctx, id) => dom.getRootNode(ctx).getElementById(id),\n    setValue: (elem, value) => {\n      if (elem == null || value == null) return;\n      setElementValue(elem, value.toString());\n    }\n  };\n  return { ...dom, ...methods };\n}\n\n// src/searchable.ts\nvar sanitize = (str) => str.split(\"\").map((char) => {\n  const code = char.charCodeAt(0);\n  if (code > 0 && code < 128) return char;\n  if (code >= 128 && code <= 255) return `/x${code.toString(16)}`.replace(\"/\", \"\\\\\");\n  return \"\";\n}).join(\"\").trim();\nvar getValueText = (el) => {\n  return sanitize(el.dataset?.valuetext ?? el.textContent ?? \"\");\n};\nvar match = (valueText, query2) => {\n  return valueText.trim().toLowerCase().startsWith(query2.toLowerCase());\n};\nfunction getByText(v, text, currentId, itemToId = defaultItemToId) {\n  const index = currentId ? indexOfId(v, currentId, itemToId) : -1;\n  let items = currentId ? wrap(v, index) : v;\n  const isSingleKey = text.length === 1;\n  if (isSingleKey) {\n    items = items.filter((item) => itemToId(item) !== currentId);\n  }\n  return items.find((item) => match(getValueText(item), text));\n}\n\n// src/set.ts\nfunction setAttribute(el, attr, v) {\n  const prev = el.getAttribute(attr);\n  const exists = prev != null;\n  el.setAttribute(attr, v);\n  return () => {\n    if (!exists) {\n      el.removeAttribute(attr);\n    } else {\n      el.setAttribute(attr, prev);\n    }\n  };\n}\nfunction setProperty(el, prop, v) {\n  const exists = prop in el;\n  const prev = el[prop];\n  el[prop] = v;\n  return () => {\n    if (!exists) {\n      delete el[prop];\n    } else {\n      el[prop] = prev;\n    }\n  };\n}\nfunction setStyle(el, style) {\n  if (!el) return noop;\n  const prev = Object.keys(style).reduce((acc, key) => {\n    acc[key] = el.style.getPropertyValue(key);\n    return acc;\n  }, {});\n  Object.assign(el.style, style);\n  return () => {\n    Object.assign(el.style, prev);\n    if (el.style.length === 0) {\n      el.removeAttribute(\"style\");\n    }\n  };\n}\nfunction setStyleProperty(el, prop, value) {\n  if (!el) return noop;\n  const prev = el.style.getPropertyValue(prop);\n  el.style.setProperty(prop, value);\n  return () => {\n    el.style.setProperty(prop, prev);\n    if (el.style.length === 0) {\n      el.removeAttribute(\"style\");\n    }\n  };\n}\n\n// src/typeahead.ts\nfunction getByTypeaheadImpl(baseItems, options) {\n  const { state: state2, activeId, key, timeout = 350, itemToId } = options;\n  const search = state2.keysSoFar + key;\n  const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n  const query2 = isRepeated ? search[0] : search;\n  let items = baseItems.slice();\n  const next = getByText(items, query2, activeId, itemToId);\n  function cleanup() {\n    clearTimeout(state2.timer);\n    state2.timer = -1;\n  }\n  function update(value) {\n    state2.keysSoFar = value;\n    cleanup();\n    if (value !== \"\") {\n      state2.timer = +setTimeout(() => {\n        update(\"\");\n        cleanup();\n      }, timeout);\n    }\n  }\n  update(search);\n  return next;\n}\nvar getByTypeahead = /* @__PURE__ */ Object.assign(getByTypeaheadImpl, {\n  defaultOptions: { keysSoFar: \"\", timer: -1 },\n  isValidEvent: isValidTypeaheadEvent\n});\nfunction isValidTypeaheadEvent(event) {\n  return event.key.length === 1 && !event.ctrlKey && !event.metaKey;\n}\n\n// src/visual-viewport.ts\nfunction trackVisualViewport(doc, fn) {\n  const win = doc?.defaultView || window;\n  const onResize = () => {\n    fn?.(getViewportSize(win));\n  };\n  onResize();\n  return addDomEvent(win.visualViewport ?? win, \"resize\", onResize);\n}\nfunction getViewportSize(win) {\n  return {\n    width: win.visualViewport?.width || win.innerWidth,\n    height: win.visualViewport?.height || win.innerHeight\n  };\n}\n\n// src/visually-hidden.ts\nvar visuallyHiddenStyle = {\n  border: \"0\",\n  clip: \"rect(0 0 0 0)\",\n  height: \"1px\",\n  margin: \"-1px\",\n  overflow: \"hidden\",\n  padding: \"0\",\n  position: \"absolute\",\n  width: \"1px\",\n  whiteSpace: \"nowrap\",\n  wordWrap: \"normal\"\n};\nfunction setVisuallyHidden(el) {\n  Object.assign(el.style, visuallyHiddenStyle);\n}\n\n// src/wait-for.ts\nfunction waitForPromise(promise, controller, timeout) {\n  const { signal } = controller;\n  const wrappedPromise = new Promise((resolve, reject) => {\n    const timeoutId = setTimeout(() => {\n      reject(new Error(`Timeout of ${timeout}ms exceeded`));\n    }, timeout);\n    signal.addEventListener(\"abort\", () => {\n      clearTimeout(timeoutId);\n      reject(new Error(\"Promise aborted\"));\n    });\n    promise.then((result) => {\n      if (!signal.aborted) {\n        clearTimeout(timeoutId);\n        resolve(result);\n      }\n    }).catch((error) => {\n      if (!signal.aborted) {\n        clearTimeout(timeoutId);\n        reject(error);\n      }\n    });\n  });\n  const abort = () => controller.abort();\n  return [wrappedPromise, abort];\n}\nfunction waitForElement(target, options) {\n  const { timeout, rootNode } = options;\n  const win = getWindow(rootNode);\n  const doc = getDocument(rootNode);\n  const controller = new win.AbortController();\n  return waitForPromise(\n    new Promise((resolve) => {\n      const el = target();\n      if (el) {\n        resolve(el);\n        return;\n      }\n      const observer = new win.MutationObserver(() => {\n        const el2 = target();\n        if (el2 && el2.isConnected) {\n          observer.disconnect();\n          resolve(el2);\n        }\n      });\n      observer.observe(doc.body, {\n        childList: true,\n        subtree: true\n      });\n    }),\n    controller,\n    timeout\n  );\n}\n\nexport { AnimationFrame, MAX_Z_INDEX, addDomEvent, ariaAttr, clickIfLink, contains, createScope, dataAttr, defaultItemToId, disableTextSelection, dispatchInputCheckedEvent, dispatchInputValueEvent, findControlledElements, getActiveElement, getBeforeInputValue, getByText, getByTypeahead, getComputedStyle, getControlledElements, getDataUrl, getDocument, getDocumentElement, getEventKey, getEventPoint, getEventStep, getEventTarget, getFirstFocusable, getFirstTabbable, getFocusables, getInitialFocus, getLastTabbable, getNativeEvent, getNearestOverflowAncestor, getNextTabbable, getNodeName, getOverflowAncestors, getParentNode, getPlatform, getRelativePoint, getRootNode, getScrollPosition, getTabIndex, getTabbableEdges, getTabbables, getUserAgent, getWindow, hasControllerElements, indexOfId, isActiveElement, isAnchorElement, isAndroid, isApple, isCaretAtStart, isChrome, isComposingEvent, isContextMenuEvent, isControlledByExpandedController, isControlledElement, isControllerElement, isCtrlOrMetaKey, isDocument, isDom, isDownloadingEvent, isEditableElement, isElementVisible, isFirefox, isFocusable, isHTMLElement, isIPad, isIPhone, isInView, isInputElement, isInteractiveContainerElement, isIos, isKeyboardClick, isLeftClick, isMac, isModifierKey, isNode, isOpeningInNewTab, isOverflowElement, isPrintableKey, isRootElement, isSafari, isSelfTarget, isShadowRoot, isTabbable, isTouchDevice, isTouchEvent, isValidTabEvent, isVirtualClick, isVirtualPointerEvent, isVisualViewport, isWebKit, isWindow, itemById, navigate, nextById, nextTick, observeAttributes, observeChildren, prevById, proxyTabFocus, query, queryAll, queueBeforeEvent, raf, requestPointerLock, resizeObserverBorderBox, resizeObserverContentBox, resizeObserverDevicePixelContentBox, restoreTextSelection, scrollIntoView, setAttribute, setCaretToEnd, setElementChecked, setElementValue, setProperty, setStyle, setStyleProperty, setVisuallyHidden, trackFormControl, trackPointerMove, trackPress, trackVisualViewport, visuallyHiddenStyle, waitForElement, waitForPromise };\n", "import { callAll, isEqual, isString } from '@zag-js/utils';\nimport { isActiveElement, getActiveElement, getDocument } from '@zag-js/dom-query';\n\n// src/merge-props.ts\nvar clsx = (...args) => args.map((str) => str?.trim?.()).filter(Boolean).join(\" \");\nvar CSS_REGEX = /((?:--)?(?:\\w+-?)+)\\s*:\\s*([^;]*)/g;\nvar serialize = (style) => {\n  const res = {};\n  let match;\n  while (match = CSS_REGEX.exec(style)) {\n    res[match[1]] = match[2];\n  }\n  return res;\n};\nvar css = (a, b) => {\n  if (isString(a)) {\n    if (isString(b)) return `${a};${b}`;\n    a = serialize(a);\n  } else if (isString(b)) {\n    b = serialize(b);\n  }\n  return Object.assign({}, a ?? {}, b ?? {});\n};\nfunction mergeProps(...args) {\n  let result = {};\n  for (let props of args) {\n    if (!props) continue;\n    for (let key in result) {\n      if (key.startsWith(\"on\") && typeof result[key] === \"function\" && typeof props[key] === \"function\") {\n        result[key] = callAll(props[key], result[key]);\n        continue;\n      }\n      if (key === \"className\" || key === \"class\") {\n        result[key] = clsx(result[key], props[key]);\n        continue;\n      }\n      if (key === \"style\") {\n        result[key] = css(result[key], props[key]);\n        continue;\n      }\n      result[key] = props[key] !== void 0 ? props[key] : result[key];\n    }\n    for (let key in props) {\n      if (result[key] === void 0) {\n        result[key] = props[key];\n      }\n    }\n    const symbols = Object.getOwnPropertySymbols(props);\n    for (let symbol of symbols) {\n      result[symbol] = props[symbol];\n    }\n  }\n  return result;\n}\nfunction memo(getDeps, fn, opts) {\n  let deps = [];\n  let result;\n  return (depArgs) => {\n    const newDeps = getDeps(depArgs);\n    const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => !isEqual(deps[index], dep));\n    if (!depsChanged) return result;\n    deps = newDeps;\n    result = fn(newDeps, depArgs);\n    opts?.onChange?.(result);\n    return result;\n  };\n}\n\n// src/create-machine.ts\nfunction createGuards() {\n  return {\n    and: (...guards) => {\n      return function andGuard(params) {\n        return guards.every((str) => params.guard(str));\n      };\n    },\n    or: (...guards) => {\n      return function orGuard(params) {\n        return guards.some((str) => params.guard(str));\n      };\n    },\n    not: (guard) => {\n      return function notGuard(params) {\n        return !params.guard(guard);\n      };\n    }\n  };\n}\nfunction createMachine(config) {\n  return config;\n}\nfunction setup() {\n  return {\n    guards: createGuards(),\n    createMachine: (config) => {\n      return createMachine(config);\n    },\n    choose: (transitions) => {\n      return function chooseFn({ choose }) {\n        return choose(transitions)?.actions;\n      };\n    }\n  };\n}\n\n// src/types.ts\nvar MachineStatus = /* @__PURE__ */ ((MachineStatus2) => {\n  MachineStatus2[\"NotStarted\"] = \"Not Started\";\n  MachineStatus2[\"Started\"] = \"Started\";\n  MachineStatus2[\"Stopped\"] = \"Stopped\";\n  return MachineStatus2;\n})(MachineStatus || {});\nvar INIT_STATE = \"__init__\";\nfunction createScope(props) {\n  const getRootNode = () => props.getRootNode?.() ?? document;\n  const getDoc = () => getDocument(getRootNode());\n  const getWin = () => getDoc().defaultView ?? window;\n  const getActiveElementFn = () => getActiveElement(getRootNode());\n  const getById = (id) => getRootNode().getElementById(id);\n  return {\n    ...props,\n    getRootNode,\n    getDoc,\n    getWin,\n    getActiveElement: getActiveElementFn,\n    isActiveElement,\n    getById\n  };\n}\n\nexport { INIT_STATE, MachineStatus, createGuards, createMachine, createScope, memo, mergeProps, setup };\n", "// src/prop-types.ts\nfunction createNormalizer(fn) {\n  return new Proxy({}, {\n    get(_target, key) {\n      if (key === \"style\")\n        return (props) => {\n          return fn({ style: props }).style;\n        };\n      return fn;\n    }\n  });\n}\n\n// src/create-props.ts\nvar createProps = () => (props) => Array.from(new Set(props));\n\nexport { createNormalizer, createProps };\n", "import { createAnatomy } from '@zag-js/anatomy';\nimport { TreeCollection, filePathToTree } from '@zag-js/collection';\nimport { setElementValue, getByTypeahead, raf, isComposingEvent, dataAttr, isLeftClick, ariaAttr, isAnchorElement, isModifierKey, getEventTarget, isEditableElement, getEventKey } from '@zag-js/dom-query';\nimport { addOrRemove, first, uniq, diff, isArray, toArray, remove, last, isEqual, createSplitProps, add, partition, ensure } from '@zag-js/utils';\nimport { createGuards, createMachine } from '@zag-js/core';\nimport { createProps } from '@zag-js/types';\n\n// src/tree-view.anatomy.ts\nvar anatomy = createAnatomy(\"tree-view\").parts(\n  \"branch\",\n  \"branchContent\",\n  \"branchControl\",\n  \"branchIndentGuide\",\n  \"branchIndicator\",\n  \"branchText\",\n  \"branchTrigger\",\n  \"item\",\n  \"itemIndicator\",\n  \"itemText\",\n  \"label\",\n  \"nodeCheckbox\",\n  \"nodeRenameInput\",\n  \"root\",\n  \"tree\"\n);\nvar parts = anatomy.build();\nvar collection = (options) => {\n  return new TreeCollection(options);\n};\ncollection.empty = () => {\n  return new TreeCollection({ rootNode: { children: [] } });\n};\nfunction filePathCollection(paths) {\n  return filePathToTree(paths);\n}\n\n// src/tree-view.dom.ts\nvar getRootId = (ctx) => ctx.ids?.root ?? `tree:${ctx.id}:root`;\nvar getLabelId = (ctx) => ctx.ids?.label ?? `tree:${ctx.id}:label`;\nvar getNodeId = (ctx, value) => ctx.ids?.node?.(value) ?? `tree:${ctx.id}:node:${value}`;\nvar getTreeId = (ctx) => ctx.ids?.tree ?? `tree:${ctx.id}:tree`;\nvar focusNode = (ctx, value) => {\n  if (value == null) return;\n  ctx.getById(getNodeId(ctx, value))?.focus();\n};\nvar getRenameInputId = (ctx, value) => `tree:${ctx.id}:rename-input:${value}`;\nvar getRenameInputEl = (ctx, value) => {\n  return ctx.getById(getRenameInputId(ctx, value));\n};\nfunction getCheckedState(collection2, node, checkedValue) {\n  const value = collection2.getNodeValue(node);\n  if (!collection2.isBranchNode(node)) {\n    return checkedValue.includes(value);\n  }\n  const childValues = collection2.getDescendantValues(value);\n  const allChecked = childValues.every((v) => checkedValue.includes(v));\n  const someChecked = childValues.some((v) => checkedValue.includes(v));\n  return allChecked ? true : someChecked ? \"indeterminate\" : false;\n}\nfunction toggleBranchChecked(collection2, value, checkedValue) {\n  const childValues = collection2.getDescendantValues(value);\n  const allChecked = childValues.every((child) => checkedValue.includes(child));\n  return uniq(allChecked ? remove(checkedValue, ...childValues) : add(checkedValue, ...childValues));\n}\nfunction getCheckedValueMap(collection2, checkedValue) {\n  const map = /* @__PURE__ */ new Map();\n  collection2.visit({\n    onEnter: (node) => {\n      const value = collection2.getNodeValue(node);\n      const isBranch = collection2.isBranchNode(node);\n      const checked = getCheckedState(collection2, node, checkedValue);\n      map.set(value, {\n        type: isBranch ? \"branch\" : \"leaf\",\n        checked\n      });\n    }\n  });\n  return map;\n}\n\n// src/tree-view.connect.ts\nfunction connect(service, normalize) {\n  const { context, scope, computed, prop, send } = service;\n  const collection2 = prop(\"collection\");\n  const expandedValue = Array.from(context.get(\"expandedValue\"));\n  const selectedValue = Array.from(context.get(\"selectedValue\"));\n  const checkedValue = Array.from(context.get(\"checkedValue\"));\n  const isTypingAhead = computed(\"isTypingAhead\");\n  const focusedValue = context.get(\"focusedValue\");\n  const loadingStatus = context.get(\"loadingStatus\");\n  const renamingValue = context.get(\"renamingValue\");\n  function getNodeState(props2) {\n    const { node, indexPath } = props2;\n    const value = collection2.getNodeValue(node);\n    const firstNode = collection2.getFirstNode();\n    const firstNodeValue = firstNode ? collection2.getNodeValue(firstNode) : null;\n    return {\n      id: getNodeId(scope, value),\n      value,\n      indexPath,\n      valuePath: collection2.getValuePath(indexPath),\n      disabled: Boolean(node.disabled),\n      focused: focusedValue == null ? firstNodeValue == value : focusedValue === value,\n      selected: selectedValue.includes(value),\n      expanded: expandedValue.includes(value),\n      loading: loadingStatus[value] === \"loading\",\n      depth: indexPath.length,\n      isBranch: collection2.isBranchNode(node),\n      renaming: renamingValue === value,\n      get checked() {\n        return getCheckedState(collection2, node, checkedValue);\n      }\n    };\n  }\n  return {\n    collection: collection2,\n    expandedValue,\n    selectedValue,\n    checkedValue,\n    toggleChecked(value, isBranch) {\n      send({ type: \"CHECKED.TOGGLE\", value, isBranch });\n    },\n    setChecked(value) {\n      send({ type: \"CHECKED.SET\", value });\n    },\n    clearChecked() {\n      send({ type: \"CHECKED.CLEAR\" });\n    },\n    getCheckedMap() {\n      return getCheckedValueMap(collection2, checkedValue);\n    },\n    expand(value) {\n      send({ type: value ? \"BRANCH.EXPAND\" : \"EXPANDED.ALL\", value });\n    },\n    collapse(value) {\n      send({ type: value ? \"BRANCH.COLLAPSE\" : \"EXPANDED.CLEAR\", value });\n    },\n    deselect(value) {\n      send({ type: value ? \"NODE.DESELECT\" : \"SELECTED.CLEAR\", value });\n    },\n    select(value) {\n      send({ type: value ? \"NODE.SELECT\" : \"SELECTED.ALL\", value, isTrusted: false });\n    },\n    getVisibleNodes() {\n      return computed(\"visibleNodes\");\n    },\n    focus(value) {\n      focusNode(scope, value);\n    },\n    selectParent(value) {\n      const parentNode = collection2.getParentNode(value);\n      if (!parentNode) return;\n      const _selectedValue = add(selectedValue, collection2.getNodeValue(parentNode));\n      send({ type: \"SELECTED.SET\", value: _selectedValue, src: \"select.parent\" });\n    },\n    expandParent(value) {\n      const parentNode = collection2.getParentNode(value);\n      if (!parentNode) return;\n      const _expandedValue = add(expandedValue, collection2.getNodeValue(parentNode));\n      send({ type: \"EXPANDED.SET\", value: _expandedValue, src: \"expand.parent\" });\n    },\n    setExpandedValue(value) {\n      const _expandedValue = uniq(value);\n      send({ type: \"EXPANDED.SET\", value: _expandedValue });\n    },\n    setSelectedValue(value) {\n      const _selectedValue = uniq(value);\n      send({ type: \"SELECTED.SET\", value: _selectedValue });\n    },\n    startRenaming(value) {\n      send({ type: \"NODE.RENAME\", value });\n    },\n    submitRenaming(value, label) {\n      send({ type: \"RENAME.SUBMIT\", value, label });\n    },\n    cancelRenaming() {\n      send({ type: \"RENAME.CANCEL\" });\n    },\n    getRootProps() {\n      return normalize.element({\n        ...parts.root.attrs,\n        id: getRootId(scope),\n        dir: prop(\"dir\")\n      });\n    },\n    getLabelProps() {\n      return normalize.element({\n        ...parts.label.attrs,\n        id: getLabelId(scope),\n        dir: prop(\"dir\")\n      });\n    },\n    getTreeProps() {\n      return normalize.element({\n        ...parts.tree.attrs,\n        id: getTreeId(scope),\n        dir: prop(\"dir\"),\n        role: \"tree\",\n        \"aria-label\": \"Tree View\",\n        \"aria-labelledby\": getLabelId(scope),\n        \"aria-multiselectable\": prop(\"selectionMode\") === \"multiple\" || void 0,\n        tabIndex: -1,\n        onKeyDown(event) {\n          if (event.defaultPrevented) return;\n          if (isComposingEvent(event)) return;\n          const target = getEventTarget(event);\n          if (isEditableElement(target)) return;\n          const node = target?.closest(\"[data-part=branch-control], [data-part=item]\");\n          if (!node) return;\n          const nodeId = node.dataset.value;\n          if (nodeId == null) {\n            console.warn(`[zag-js/tree-view] Node id not found for node`, node);\n            return;\n          }\n          const isBranchNode = node.matches(\"[data-part=branch-control]\");\n          const keyMap = {\n            ArrowDown(event2) {\n              if (isModifierKey(event2)) return;\n              event2.preventDefault();\n              send({ type: \"NODE.ARROW_DOWN\", id: nodeId, shiftKey: event2.shiftKey });\n            },\n            ArrowUp(event2) {\n              if (isModifierKey(event2)) return;\n              event2.preventDefault();\n              send({ type: \"NODE.ARROW_UP\", id: nodeId, shiftKey: event2.shiftKey });\n            },\n            ArrowLeft(event2) {\n              if (isModifierKey(event2) || node.dataset.disabled) return;\n              event2.preventDefault();\n              send({ type: isBranchNode ? \"BRANCH_NODE.ARROW_LEFT\" : \"NODE.ARROW_LEFT\", id: nodeId });\n            },\n            ArrowRight(event2) {\n              if (!isBranchNode || node.dataset.disabled) return;\n              event2.preventDefault();\n              send({ type: \"BRANCH_NODE.ARROW_RIGHT\", id: nodeId });\n            },\n            Home(event2) {\n              if (isModifierKey(event2)) return;\n              event2.preventDefault();\n              send({ type: \"NODE.HOME\", id: nodeId, shiftKey: event2.shiftKey });\n            },\n            End(event2) {\n              if (isModifierKey(event2)) return;\n              event2.preventDefault();\n              send({ type: \"NODE.END\", id: nodeId, shiftKey: event2.shiftKey });\n            },\n            Space(event2) {\n              if (node.dataset.disabled) return;\n              if (isTypingAhead) {\n                send({ type: \"TREE.TYPEAHEAD\", key: event2.key });\n              } else {\n                keyMap.Enter?.(event2);\n              }\n            },\n            Enter(event2) {\n              if (node.dataset.disabled) return;\n              if (isAnchorElement(target) && isModifierKey(event2)) return;\n              send({ type: isBranchNode ? \"BRANCH_NODE.CLICK\" : \"NODE.CLICK\", id: nodeId, src: \"keyboard\" });\n              if (!isAnchorElement(target)) {\n                event2.preventDefault();\n              }\n            },\n            \"*\"(event2) {\n              if (node.dataset.disabled) return;\n              event2.preventDefault();\n              send({ type: \"SIBLINGS.EXPAND\", id: nodeId });\n            },\n            a(event2) {\n              if (!event2.metaKey || node.dataset.disabled) return;\n              event2.preventDefault();\n              send({ type: \"SELECTED.ALL\", moveFocus: true });\n            },\n            F2(event2) {\n              if (node.dataset.disabled) return;\n              const canRenameFn = prop(\"canRename\");\n              if (!canRenameFn) return;\n              const indexPath = collection2.getIndexPath(nodeId);\n              if (indexPath) {\n                const node2 = collection2.at(indexPath);\n                if (node2 && !canRenameFn(node2, indexPath)) {\n                  return;\n                }\n              }\n              event2.preventDefault();\n              send({ type: \"NODE.RENAME\", value: nodeId });\n            }\n          };\n          const key = getEventKey(event, { dir: prop(\"dir\") });\n          const exec = keyMap[key];\n          if (exec) {\n            exec(event);\n            return;\n          }\n          if (!getByTypeahead.isValidEvent(event)) return;\n          send({ type: \"TREE.TYPEAHEAD\", key: event.key, id: nodeId });\n          event.preventDefault();\n        }\n      });\n    },\n    getNodeState,\n    getItemProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.item.attrs,\n        id: nodeState.id,\n        dir: prop(\"dir\"),\n        \"data-ownedby\": getTreeId(scope),\n        \"data-path\": props2.indexPath.join(\"/\"),\n        \"data-value\": nodeState.value,\n        tabIndex: nodeState.focused ? 0 : -1,\n        \"data-focus\": dataAttr(nodeState.focused),\n        role: \"treeitem\",\n        \"aria-current\": nodeState.selected ? \"true\" : void 0,\n        \"aria-selected\": nodeState.disabled ? void 0 : nodeState.selected,\n        \"data-selected\": dataAttr(nodeState.selected),\n        \"aria-disabled\": ariaAttr(nodeState.disabled),\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-renaming\": dataAttr(nodeState.renaming),\n        \"aria-level\": nodeState.depth,\n        \"data-depth\": nodeState.depth,\n        style: {\n          \"--depth\": nodeState.depth\n        },\n        onFocus(event) {\n          event.stopPropagation();\n          send({ type: \"NODE.FOCUS\", id: nodeState.value });\n        },\n        onClick(event) {\n          if (nodeState.disabled) return;\n          if (!isLeftClick(event)) return;\n          if (isAnchorElement(event.currentTarget) && isModifierKey(event)) return;\n          const isMetaKey = event.metaKey || event.ctrlKey;\n          send({ type: \"NODE.CLICK\", id: nodeState.value, shiftKey: event.shiftKey, ctrlKey: isMetaKey });\n          event.stopPropagation();\n          if (!isAnchorElement(event.currentTarget)) {\n            event.preventDefault();\n          }\n        }\n      });\n    },\n    getItemTextProps(props2) {\n      const itemState = getNodeState(props2);\n      return normalize.element({\n        ...parts.itemText.attrs,\n        \"data-disabled\": dataAttr(itemState.disabled),\n        \"data-selected\": dataAttr(itemState.selected),\n        \"data-focus\": dataAttr(itemState.focused)\n      });\n    },\n    getItemIndicatorProps(props2) {\n      const itemState = getNodeState(props2);\n      return normalize.element({\n        ...parts.itemIndicator.attrs,\n        \"aria-hidden\": true,\n        \"data-disabled\": dataAttr(itemState.disabled),\n        \"data-selected\": dataAttr(itemState.selected),\n        \"data-focus\": dataAttr(itemState.focused),\n        hidden: !itemState.selected\n      });\n    },\n    getBranchProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branch.attrs,\n        \"data-depth\": nodeState.depth,\n        dir: prop(\"dir\"),\n        \"data-branch\": nodeState.value,\n        role: \"treeitem\",\n        \"data-ownedby\": getTreeId(scope),\n        \"data-value\": nodeState.value,\n        \"aria-level\": nodeState.depth,\n        \"aria-selected\": nodeState.disabled ? void 0 : nodeState.selected,\n        \"data-path\": props2.indexPath.join(\"/\"),\n        \"data-selected\": dataAttr(nodeState.selected),\n        \"aria-expanded\": nodeState.expanded,\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"aria-disabled\": ariaAttr(nodeState.disabled),\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-loading\": dataAttr(nodeState.loading),\n        \"aria-busy\": ariaAttr(nodeState.loading),\n        style: {\n          \"--depth\": nodeState.depth\n        }\n      });\n    },\n    getBranchIndicatorProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchIndicator.attrs,\n        \"aria-hidden\": true,\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-selected\": dataAttr(nodeState.selected),\n        \"data-focus\": dataAttr(nodeState.focused),\n        \"data-loading\": dataAttr(nodeState.loading)\n      });\n    },\n    getBranchTriggerProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchTrigger.attrs,\n        role: \"button\",\n        dir: prop(\"dir\"),\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"data-value\": nodeState.value,\n        \"data-loading\": dataAttr(nodeState.loading),\n        disabled: nodeState.loading,\n        onClick(event) {\n          if (nodeState.disabled || nodeState.loading) return;\n          send({ type: \"BRANCH_TOGGLE.CLICK\", id: nodeState.value });\n          event.stopPropagation();\n        }\n      });\n    },\n    getBranchControlProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchControl.attrs,\n        role: \"button\",\n        id: nodeState.id,\n        dir: prop(\"dir\"),\n        tabIndex: nodeState.focused ? 0 : -1,\n        \"data-path\": props2.indexPath.join(\"/\"),\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-selected\": dataAttr(nodeState.selected),\n        \"data-focus\": dataAttr(nodeState.focused),\n        \"data-renaming\": dataAttr(nodeState.renaming),\n        \"data-value\": nodeState.value,\n        \"data-depth\": nodeState.depth,\n        \"data-loading\": dataAttr(nodeState.loading),\n        \"aria-busy\": ariaAttr(nodeState.loading),\n        onFocus(event) {\n          send({ type: \"NODE.FOCUS\", id: nodeState.value });\n          event.stopPropagation();\n        },\n        onClick(event) {\n          if (nodeState.disabled) return;\n          if (nodeState.loading) return;\n          if (!isLeftClick(event)) return;\n          if (isAnchorElement(event.currentTarget) && isModifierKey(event)) return;\n          const isMetaKey = event.metaKey || event.ctrlKey;\n          send({ type: \"BRANCH_NODE.CLICK\", id: nodeState.value, shiftKey: event.shiftKey, ctrlKey: isMetaKey });\n          event.stopPropagation();\n        }\n      });\n    },\n    getBranchTextProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchText.attrs,\n        dir: prop(\"dir\"),\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"data-loading\": dataAttr(nodeState.loading)\n      });\n    },\n    getBranchContentProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchContent.attrs,\n        role: \"group\",\n        dir: prop(\"dir\"),\n        \"data-state\": nodeState.expanded ? \"open\" : \"closed\",\n        \"data-depth\": nodeState.depth,\n        \"data-path\": props2.indexPath.join(\"/\"),\n        \"data-value\": nodeState.value,\n        hidden: !nodeState.expanded\n      });\n    },\n    getBranchIndentGuideProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.element({\n        ...parts.branchIndentGuide.attrs,\n        \"data-depth\": nodeState.depth\n      });\n    },\n    getNodeCheckboxProps(props2) {\n      const nodeState = getNodeState(props2);\n      const checkedState = nodeState.checked;\n      return normalize.element({\n        ...parts.nodeCheckbox.attrs,\n        tabIndex: -1,\n        role: \"checkbox\",\n        \"data-state\": checkedState === true ? \"checked\" : checkedState === false ? \"unchecked\" : \"indeterminate\",\n        \"aria-checked\": checkedState === true ? \"true\" : checkedState === false ? \"false\" : \"mixed\",\n        \"data-disabled\": dataAttr(nodeState.disabled),\n        onClick(event) {\n          if (event.defaultPrevented) return;\n          if (nodeState.disabled) return;\n          if (!isLeftClick(event)) return;\n          send({ type: \"CHECKED.TOGGLE\", value: nodeState.value, isBranch: nodeState.isBranch });\n          event.stopPropagation();\n          const node = event.currentTarget.closest(\"[role=treeitem]\");\n          node?.focus({ preventScroll: true });\n        }\n      });\n    },\n    getNodeRenameInputProps(props2) {\n      const nodeState = getNodeState(props2);\n      return normalize.input({\n        ...parts.nodeRenameInput.attrs,\n        id: getRenameInputId(scope, nodeState.value),\n        type: \"text\",\n        \"aria-label\": \"Rename tree item\",\n        hidden: !nodeState.renaming,\n        onKeyDown(event) {\n          if (isComposingEvent(event)) return;\n          if (event.key === \"Escape\") {\n            send({ type: \"RENAME.CANCEL\" });\n            event.preventDefault();\n          }\n          if (event.key === \"Enter\") {\n            send({ type: \"RENAME.SUBMIT\", label: event.currentTarget.value });\n            event.preventDefault();\n          }\n          event.stopPropagation();\n        },\n        onBlur(event) {\n          send({ type: \"RENAME.SUBMIT\", label: event.currentTarget.value });\n        }\n      });\n    }\n  };\n}\nfunction expandBranches(params, values) {\n  const { context, prop, refs } = params;\n  if (!prop(\"loadChildren\")) {\n    context.set(\"expandedValue\", (prev) => uniq(add(prev, ...values)));\n    return;\n  }\n  const loadingStatus = context.get(\"loadingStatus\");\n  const [loadedValues, loadingValues] = partition(values, (value) => loadingStatus[value] === \"loaded\");\n  if (loadedValues.length > 0) {\n    context.set(\"expandedValue\", (prev) => uniq(add(prev, ...loadedValues)));\n  }\n  if (loadingValues.length === 0) return;\n  const collection2 = prop(\"collection\");\n  const [nodeWithChildren, nodeWithoutChildren] = partition(loadingValues, (id) => {\n    const node = collection2.findNode(id);\n    return collection2.getNodeChildren(node).length > 0;\n  });\n  if (nodeWithChildren.length > 0) {\n    context.set(\"expandedValue\", (prev) => uniq(add(prev, ...nodeWithChildren)));\n  }\n  if (nodeWithoutChildren.length === 0) return;\n  context.set(\"loadingStatus\", (prev) => ({\n    ...prev,\n    ...nodeWithoutChildren.reduce((acc, id) => ({ ...acc, [id]: \"loading\" }), {})\n  }));\n  const nodesToLoad = nodeWithoutChildren.map((id) => {\n    const indexPath = collection2.getIndexPath(id);\n    const valuePath = collection2.getValuePath(indexPath);\n    const node = collection2.findNode(id);\n    return { id, indexPath, valuePath, node };\n  });\n  const pendingAborts = refs.get(\"pendingAborts\");\n  const loadChildren = prop(\"loadChildren\");\n  ensure(loadChildren, () => \"[zag-js/tree-view] `loadChildren` is required for async expansion\");\n  const proms = nodesToLoad.map(({ id, indexPath, valuePath, node }) => {\n    const existingAbort = pendingAborts.get(id);\n    if (existingAbort) {\n      existingAbort.abort();\n      pendingAborts.delete(id);\n    }\n    const abortController = new AbortController();\n    pendingAborts.set(id, abortController);\n    return loadChildren({\n      valuePath,\n      indexPath,\n      node,\n      signal: abortController.signal\n    });\n  });\n  Promise.allSettled(proms).then((results) => {\n    const loadedValues2 = [];\n    const nodeWithErrors = [];\n    const nextLoadingStatus = context.get(\"loadingStatus\");\n    let collection3 = prop(\"collection\");\n    results.forEach((result, index) => {\n      const { id, indexPath, node, valuePath } = nodesToLoad[index];\n      if (result.status === \"fulfilled\") {\n        nextLoadingStatus[id] = \"loaded\";\n        loadedValues2.push(id);\n        collection3 = collection3.replace(indexPath, { ...node, children: result.value });\n      } else {\n        pendingAborts.delete(id);\n        Reflect.deleteProperty(nextLoadingStatus, id);\n        nodeWithErrors.push({ node, error: result.reason, indexPath, valuePath });\n      }\n    });\n    context.set(\"loadingStatus\", nextLoadingStatus);\n    if (loadedValues2.length) {\n      context.set(\"expandedValue\", (prev) => uniq(add(prev, ...loadedValues2)));\n      prop(\"onLoadChildrenComplete\")?.({ collection: collection3 });\n    }\n    if (nodeWithErrors.length) {\n      prop(\"onLoadChildrenError\")?.({ nodes: nodeWithErrors });\n    }\n  });\n}\n\n// src/utils/visit-skip.ts\nfunction skipFn(params) {\n  const { prop, context } = params;\n  return function skip({ indexPath }) {\n    const paths = prop(\"collection\").getValuePath(indexPath).slice(0, -1);\n    return paths.some((value) => !context.get(\"expandedValue\").includes(value));\n  };\n}\n\n// src/tree-view.machine.ts\nvar { and } = createGuards();\nvar machine = createMachine({\n  props({ props: props2 }) {\n    return {\n      selectionMode: \"single\",\n      collection: collection.empty(),\n      typeahead: true,\n      expandOnClick: true,\n      defaultExpandedValue: [],\n      defaultSelectedValue: [],\n      ...props2\n    };\n  },\n  initialState() {\n    return \"idle\";\n  },\n  context({ prop, bindable, getContext }) {\n    return {\n      expandedValue: bindable(() => ({\n        defaultValue: prop(\"defaultExpandedValue\"),\n        value: prop(\"expandedValue\"),\n        isEqual,\n        onChange(expandedValue) {\n          const ctx = getContext();\n          const focusedValue = ctx.get(\"focusedValue\");\n          prop(\"onExpandedChange\")?.({\n            expandedValue,\n            focusedValue,\n            get expandedNodes() {\n              return prop(\"collection\").findNodes(expandedValue);\n            }\n          });\n        }\n      })),\n      selectedValue: bindable(() => ({\n        defaultValue: prop(\"defaultSelectedValue\"),\n        value: prop(\"selectedValue\"),\n        isEqual,\n        onChange(selectedValue) {\n          const ctx = getContext();\n          const focusedValue = ctx.get(\"focusedValue\");\n          prop(\"onSelectionChange\")?.({\n            selectedValue,\n            focusedValue,\n            get selectedNodes() {\n              return prop(\"collection\").findNodes(selectedValue);\n            }\n          });\n        }\n      })),\n      focusedValue: bindable(() => ({\n        defaultValue: prop(\"defaultFocusedValue\") || null,\n        value: prop(\"focusedValue\"),\n        onChange(focusedValue) {\n          prop(\"onFocusChange\")?.({\n            focusedValue,\n            get focusedNode() {\n              return focusedValue ? prop(\"collection\").findNode(focusedValue) : null;\n            }\n          });\n        }\n      })),\n      loadingStatus: bindable(() => ({\n        defaultValue: {}\n      })),\n      checkedValue: bindable(() => ({\n        defaultValue: prop(\"defaultCheckedValue\") || [],\n        value: prop(\"checkedValue\"),\n        isEqual,\n        onChange(value) {\n          prop(\"onCheckedChange\")?.({ checkedValue: value });\n        }\n      })),\n      renamingValue: bindable(() => ({\n        sync: true,\n        defaultValue: null\n      }))\n    };\n  },\n  refs() {\n    return {\n      typeaheadState: { ...getByTypeahead.defaultOptions },\n      pendingAborts: /* @__PURE__ */ new Map()\n    };\n  },\n  computed: {\n    isMultipleSelection: ({ prop }) => prop(\"selectionMode\") === \"multiple\",\n    isTypingAhead: ({ refs }) => refs.get(\"typeaheadState\").keysSoFar.length > 0,\n    visibleNodes: ({ prop, context }) => {\n      const nodes = [];\n      prop(\"collection\").visit({\n        skip: skipFn({ prop, context }),\n        onEnter: (node, indexPath) => {\n          nodes.push({ node, indexPath });\n        }\n      });\n      return nodes;\n    }\n  },\n  on: {\n    \"EXPANDED.SET\": {\n      actions: [\"setExpanded\"]\n    },\n    \"EXPANDED.CLEAR\": {\n      actions: [\"clearExpanded\"]\n    },\n    \"EXPANDED.ALL\": {\n      actions: [\"expandAllBranches\"]\n    },\n    \"BRANCH.EXPAND\": {\n      actions: [\"expandBranches\"]\n    },\n    \"BRANCH.COLLAPSE\": {\n      actions: [\"collapseBranches\"]\n    },\n    \"SELECTED.SET\": {\n      actions: [\"setSelected\"]\n    },\n    \"SELECTED.ALL\": [\n      {\n        guard: and(\"isMultipleSelection\", \"moveFocus\"),\n        actions: [\"selectAllNodes\", \"focusTreeLastNode\"]\n      },\n      {\n        guard: \"isMultipleSelection\",\n        actions: [\"selectAllNodes\"]\n      }\n    ],\n    \"SELECTED.CLEAR\": {\n      actions: [\"clearSelected\"]\n    },\n    \"NODE.SELECT\": {\n      actions: [\"selectNode\"]\n    },\n    \"NODE.DESELECT\": {\n      actions: [\"deselectNode\"]\n    },\n    \"CHECKED.TOGGLE\": {\n      actions: [\"toggleChecked\"]\n    },\n    \"CHECKED.SET\": {\n      actions: [\"setChecked\"]\n    },\n    \"CHECKED.CLEAR\": {\n      actions: [\"clearChecked\"]\n    },\n    \"NODE.FOCUS\": {\n      actions: [\"setFocusedNode\"]\n    },\n    \"NODE.ARROW_DOWN\": [\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"focusTreeNextNode\", \"extendSelectionToNextNode\"]\n      },\n      {\n        actions: [\"focusTreeNextNode\"]\n      }\n    ],\n    \"NODE.ARROW_UP\": [\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"focusTreePrevNode\", \"extendSelectionToPrevNode\"]\n      },\n      {\n        actions: [\"focusTreePrevNode\"]\n      }\n    ],\n    \"NODE.ARROW_LEFT\": {\n      actions: [\"focusBranchNode\"]\n    },\n    \"BRANCH_NODE.ARROW_LEFT\": [\n      {\n        guard: \"isBranchExpanded\",\n        actions: [\"collapseBranch\"]\n      },\n      {\n        actions: [\"focusBranchNode\"]\n      }\n    ],\n    \"BRANCH_NODE.ARROW_RIGHT\": [\n      {\n        guard: and(\"isBranchFocused\", \"isBranchExpanded\"),\n        actions: [\"focusBranchFirstNode\"]\n      },\n      {\n        actions: [\"expandBranch\"]\n      }\n    ],\n    \"SIBLINGS.EXPAND\": {\n      actions: [\"expandSiblingBranches\"]\n    },\n    \"NODE.HOME\": [\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"extendSelectionToFirstNode\", \"focusTreeFirstNode\"]\n      },\n      {\n        actions: [\"focusTreeFirstNode\"]\n      }\n    ],\n    \"NODE.END\": [\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"extendSelectionToLastNode\", \"focusTreeLastNode\"]\n      },\n      {\n        actions: [\"focusTreeLastNode\"]\n      }\n    ],\n    \"NODE.CLICK\": [\n      {\n        guard: and(\"isCtrlKey\", \"isMultipleSelection\"),\n        actions: [\"toggleNodeSelection\"]\n      },\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"extendSelectionToNode\"]\n      },\n      {\n        actions: [\"selectNode\"]\n      }\n    ],\n    \"BRANCH_NODE.CLICK\": [\n      {\n        guard: and(\"isCtrlKey\", \"isMultipleSelection\"),\n        actions: [\"toggleNodeSelection\"]\n      },\n      {\n        guard: and(\"isShiftKey\", \"isMultipleSelection\"),\n        actions: [\"extendSelectionToNode\"]\n      },\n      {\n        guard: \"expandOnClick\",\n        actions: [\"selectNode\", \"toggleBranchNode\"]\n      },\n      {\n        actions: [\"selectNode\"]\n      }\n    ],\n    \"BRANCH_TOGGLE.CLICK\": {\n      actions: [\"toggleBranchNode\"]\n    },\n    \"TREE.TYPEAHEAD\": {\n      actions: [\"focusMatchedNode\"]\n    }\n  },\n  exit: [\"clearPendingAborts\"],\n  states: {\n    idle: {\n      on: {\n        \"NODE.RENAME\": {\n          target: \"renaming\",\n          actions: [\"setRenamingValue\"]\n        }\n      }\n    },\n    renaming: {\n      entry: [\"syncRenameInput\", \"focusRenameInput\"],\n      on: {\n        \"RENAME.SUBMIT\": {\n          guard: \"isRenameLabelValid\",\n          target: \"idle\",\n          actions: [\"submitRenaming\"]\n        },\n        \"RENAME.CANCEL\": {\n          target: \"idle\",\n          actions: [\"cancelRenaming\"]\n        }\n      }\n    }\n  },\n  implementations: {\n    guards: {\n      isBranchFocused: ({ context, event }) => context.get(\"focusedValue\") === event.id,\n      isBranchExpanded: ({ context, event }) => context.get(\"expandedValue\").includes(event.id),\n      isShiftKey: ({ event }) => event.shiftKey,\n      isCtrlKey: ({ event }) => event.ctrlKey,\n      hasSelectedItems: ({ context }) => context.get(\"selectedValue\").length > 0,\n      isMultipleSelection: ({ prop }) => prop(\"selectionMode\") === \"multiple\",\n      moveFocus: ({ event }) => !!event.moveFocus,\n      expandOnClick: ({ prop }) => !!prop(\"expandOnClick\"),\n      isRenameLabelValid: ({ event }) => event.label.trim() !== \"\"\n    },\n    actions: {\n      selectNode({ context, event }) {\n        const value = event.id || event.value;\n        context.set(\"selectedValue\", (prev) => {\n          if (value == null) return prev;\n          if (!event.isTrusted && isArray(value)) return prev.concat(...value);\n          return [isArray(value) ? last(value) : value].filter(Boolean);\n        });\n      },\n      deselectNode({ context, event }) {\n        const value = toArray(event.id || event.value);\n        context.set(\"selectedValue\", (prev) => remove(prev, ...value));\n      },\n      setFocusedNode({ context, event }) {\n        context.set(\"focusedValue\", event.id);\n      },\n      clearFocusedNode({ context }) {\n        context.set(\"focusedValue\", null);\n      },\n      clearSelectedItem({ context }) {\n        context.set(\"selectedValue\", []);\n      },\n      toggleBranchNode({ context, event, action }) {\n        const isExpanded = context.get(\"expandedValue\").includes(event.id);\n        action(isExpanded ? [\"collapseBranch\"] : [\"expandBranch\"]);\n      },\n      expandBranch(params) {\n        const { event } = params;\n        expandBranches(params, [event.id]);\n      },\n      expandBranches(params) {\n        const { context, event } = params;\n        const valuesToExpand = toArray(event.value);\n        expandBranches(params, diff(valuesToExpand, context.get(\"expandedValue\")));\n      },\n      collapseBranch({ context, event }) {\n        context.set(\"expandedValue\", (prev) => remove(prev, event.id));\n      },\n      collapseBranches(params) {\n        const { context, event } = params;\n        const value = toArray(event.value);\n        context.set(\"expandedValue\", (prev) => remove(prev, ...value));\n      },\n      setExpanded({ context, event }) {\n        if (!isArray(event.value)) return;\n        context.set(\"expandedValue\", event.value);\n      },\n      clearExpanded({ context }) {\n        context.set(\"expandedValue\", []);\n      },\n      setSelected({ context, event }) {\n        if (!isArray(event.value)) return;\n        context.set(\"selectedValue\", event.value);\n      },\n      clearSelected({ context }) {\n        context.set(\"selectedValue\", []);\n      },\n      focusTreeFirstNode(params) {\n        const { prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const firstNode = collection2.getFirstNode();\n        const firstValue = collection2.getNodeValue(firstNode);\n        const scrolled = scrollToNode(params, firstValue);\n        if (scrolled) raf(() => focusNode(scope, firstValue));\n        else focusNode(scope, firstValue);\n      },\n      focusTreeLastNode(params) {\n        const { prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const lastNode = collection2.getLastNode(void 0, { skip: skipFn(params) });\n        const lastValue = collection2.getNodeValue(lastNode);\n        const scrolled = scrollToNode(params, lastValue);\n        if (scrolled) raf(() => focusNode(scope, lastValue));\n        else focusNode(scope, lastValue);\n      },\n      focusBranchFirstNode(params) {\n        const { event, prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const branchNode = collection2.findNode(event.id);\n        const firstNode = collection2.getFirstNode(branchNode);\n        const firstValue = collection2.getNodeValue(firstNode);\n        const scrolled = scrollToNode(params, firstValue);\n        if (scrolled) raf(() => focusNode(scope, firstValue));\n        else focusNode(scope, firstValue);\n      },\n      focusTreeNextNode(params) {\n        const { event, prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const nextNode = collection2.getNextNode(event.id, { skip: skipFn(params) });\n        if (!nextNode) return;\n        const nextValue = collection2.getNodeValue(nextNode);\n        const scrolled = scrollToNode(params, nextValue);\n        if (scrolled) raf(() => focusNode(scope, nextValue));\n        else focusNode(scope, nextValue);\n      },\n      focusTreePrevNode(params) {\n        const { event, prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const prevNode = collection2.getPreviousNode(event.id, { skip: skipFn(params) });\n        if (!prevNode) return;\n        const prevValue = collection2.getNodeValue(prevNode);\n        const scrolled = scrollToNode(params, prevValue);\n        if (scrolled) raf(() => focusNode(scope, prevValue));\n        else focusNode(scope, prevValue);\n      },\n      focusBranchNode(params) {\n        const { event, prop, scope } = params;\n        const collection2 = prop(\"collection\");\n        const parentNode = collection2.getParentNode(event.id);\n        const parentValue = parentNode ? collection2.getNodeValue(parentNode) : void 0;\n        if (!parentValue) return;\n        const scrolled = scrollToNode(params, parentValue);\n        if (scrolled) raf(() => focusNode(scope, parentValue));\n        else focusNode(scope, parentValue);\n      },\n      selectAllNodes({ context, prop }) {\n        context.set(\"selectedValue\", prop(\"collection\").getValues());\n      },\n      focusMatchedNode(params) {\n        const { context, prop, refs, event, scope, computed } = params;\n        const nodes = computed(\"visibleNodes\");\n        const elements = nodes.map(({ node: node2 }) => ({\n          textContent: prop(\"collection\").stringifyNode(node2),\n          id: prop(\"collection\").getNodeValue(node2)\n        }));\n        const node = getByTypeahead(elements, {\n          state: refs.get(\"typeaheadState\"),\n          activeId: context.get(\"focusedValue\"),\n          key: event.key\n        });\n        if (!node?.id) return;\n        const scrolled = scrollToNode(params, node.id);\n        if (scrolled) raf(() => focusNode(scope, node.id));\n        else focusNode(scope, node.id);\n      },\n      toggleNodeSelection({ context, event }) {\n        const selectedValue = addOrRemove(context.get(\"selectedValue\"), event.id);\n        context.set(\"selectedValue\", selectedValue);\n      },\n      expandAllBranches(params) {\n        const { context, prop } = params;\n        const branchValues = prop(\"collection\").getBranchValues();\n        const valuesToExpand = diff(branchValues, context.get(\"expandedValue\"));\n        expandBranches(params, valuesToExpand);\n      },\n      expandSiblingBranches(params) {\n        const { context, event, prop } = params;\n        const collection2 = prop(\"collection\");\n        const indexPath = collection2.getIndexPath(event.id);\n        if (!indexPath) return;\n        const nodes = collection2.getSiblingNodes(indexPath);\n        const values = nodes.map((node) => collection2.getNodeValue(node));\n        const valuesToExpand = diff(values, context.get(\"expandedValue\"));\n        expandBranches(params, valuesToExpand);\n      },\n      extendSelectionToNode(params) {\n        const { context, event, prop, computed } = params;\n        const collection2 = prop(\"collection\");\n        const anchorValue = first(context.get(\"selectedValue\")) || collection2.getNodeValue(collection2.getFirstNode());\n        const targetValue = event.id;\n        let values = [anchorValue, targetValue];\n        let hits = 0;\n        const visibleNodes = computed(\"visibleNodes\");\n        visibleNodes.forEach(({ node }) => {\n          const nodeValue = collection2.getNodeValue(node);\n          if (hits === 1) values.push(nodeValue);\n          if (nodeValue === anchorValue || nodeValue === targetValue) hits++;\n        });\n        context.set(\"selectedValue\", uniq(values));\n      },\n      extendSelectionToNextNode(params) {\n        const { context, event, prop } = params;\n        const collection2 = prop(\"collection\");\n        const nextNode = collection2.getNextNode(event.id, { skip: skipFn(params) });\n        if (!nextNode) return;\n        const values = new Set(context.get(\"selectedValue\"));\n        const nextValue = collection2.getNodeValue(nextNode);\n        if (nextValue == null) return;\n        if (values.has(event.id) && values.has(nextValue)) {\n          values.delete(event.id);\n        } else if (!values.has(nextValue)) {\n          values.add(nextValue);\n        }\n        context.set(\"selectedValue\", Array.from(values));\n      },\n      extendSelectionToPrevNode(params) {\n        const { context, event, prop } = params;\n        const collection2 = prop(\"collection\");\n        const prevNode = collection2.getPreviousNode(event.id, { skip: skipFn(params) });\n        if (!prevNode) return;\n        const values = new Set(context.get(\"selectedValue\"));\n        const prevValue = collection2.getNodeValue(prevNode);\n        if (prevValue == null) return;\n        if (values.has(event.id) && values.has(prevValue)) {\n          values.delete(event.id);\n        } else if (!values.has(prevValue)) {\n          values.add(prevValue);\n        }\n        context.set(\"selectedValue\", Array.from(values));\n      },\n      extendSelectionToFirstNode(params) {\n        const { context, prop } = params;\n        const collection2 = prop(\"collection\");\n        const currentSelection = first(context.get(\"selectedValue\"));\n        const values = [];\n        collection2.visit({\n          skip: skipFn(params),\n          onEnter: (node) => {\n            const nodeValue = collection2.getNodeValue(node);\n            values.push(nodeValue);\n            if (nodeValue === currentSelection) {\n              return \"stop\";\n            }\n          }\n        });\n        context.set(\"selectedValue\", values);\n      },\n      extendSelectionToLastNode(params) {\n        const { context, prop } = params;\n        const collection2 = prop(\"collection\");\n        const currentSelection = first(context.get(\"selectedValue\"));\n        const values = [];\n        let current = false;\n        collection2.visit({\n          skip: skipFn(params),\n          onEnter: (node) => {\n            const nodeValue = collection2.getNodeValue(node);\n            if (nodeValue === currentSelection) current = true;\n            if (current) values.push(nodeValue);\n          }\n        });\n        context.set(\"selectedValue\", values);\n      },\n      clearPendingAborts({ refs }) {\n        const aborts = refs.get(\"pendingAborts\");\n        aborts.forEach((abort) => abort.abort());\n        aborts.clear();\n      },\n      toggleChecked({ context, event, prop }) {\n        const collection2 = prop(\"collection\");\n        context.set(\n          \"checkedValue\",\n          (prev) => event.isBranch ? toggleBranchChecked(collection2, event.value, prev) : addOrRemove(prev, event.value)\n        );\n      },\n      setChecked({ context, event }) {\n        context.set(\"checkedValue\", event.value);\n      },\n      clearChecked({ context }) {\n        context.set(\"checkedValue\", []);\n      },\n      setRenamingValue({ context, event, prop }) {\n        context.set(\"renamingValue\", event.value);\n        const onRenameStartFn = prop(\"onRenameStart\");\n        if (onRenameStartFn) {\n          const collection2 = prop(\"collection\");\n          const indexPath = collection2.getIndexPath(event.value);\n          if (indexPath) {\n            const node = collection2.at(indexPath);\n            if (node) {\n              onRenameStartFn({\n                value: event.value,\n                node,\n                indexPath\n              });\n            }\n          }\n        }\n      },\n      submitRenaming({ context, event, prop, scope }) {\n        const renamingValue = context.get(\"renamingValue\");\n        if (!renamingValue) return;\n        const collection2 = prop(\"collection\");\n        const indexPath = collection2.getIndexPath(renamingValue);\n        if (!indexPath) return;\n        const trimmedLabel = event.label.trim();\n        const onBeforeRenameFn = prop(\"onBeforeRename\");\n        if (onBeforeRenameFn) {\n          const details = {\n            value: renamingValue,\n            label: trimmedLabel,\n            indexPath\n          };\n          const shouldRename = onBeforeRenameFn(details);\n          if (!shouldRename) {\n            context.set(\"renamingValue\", null);\n            focusNode(scope, renamingValue);\n            return;\n          }\n        }\n        prop(\"onRenameComplete\")?.({\n          value: renamingValue,\n          label: trimmedLabel,\n          indexPath\n        });\n        context.set(\"renamingValue\", null);\n        focusNode(scope, renamingValue);\n      },\n      cancelRenaming({ context, scope }) {\n        const renamingValue = context.get(\"renamingValue\");\n        context.set(\"renamingValue\", null);\n        if (renamingValue) {\n          focusNode(scope, renamingValue);\n        }\n      },\n      syncRenameInput({ context, scope, prop }) {\n        const renamingValue = context.get(\"renamingValue\");\n        if (!renamingValue) return;\n        const collection2 = prop(\"collection\");\n        const node = collection2.findNode(renamingValue);\n        if (!node) return;\n        const label = collection2.stringifyNode(node);\n        const inputEl = getRenameInputEl(scope, renamingValue);\n        setElementValue(inputEl, label);\n      },\n      focusRenameInput({ context, scope }) {\n        const renamingValue = context.get(\"renamingValue\");\n        if (!renamingValue) return;\n        const inputEl = getRenameInputEl(scope, renamingValue);\n        if (!inputEl) return;\n        inputEl.focus();\n        inputEl.select();\n      }\n    }\n  }\n});\nfunction scrollToNode(params, value) {\n  const { prop, scope, computed } = params;\n  const scrollToIndexFn = prop(\"scrollToIndexFn\");\n  if (!scrollToIndexFn) return false;\n  const collection2 = prop(\"collection\");\n  const visibleNodes = computed(\"visibleNodes\");\n  for (let i = 0; i < visibleNodes.length; i++) {\n    const { node, indexPath } = visibleNodes[i];\n    if (collection2.getNodeValue(node) !== value) continue;\n    scrollToIndexFn({\n      index: i,\n      node,\n      indexPath,\n      getElement: () => scope.getById(getNodeId(scope, value))\n    });\n    return true;\n  }\n  return false;\n}\nvar props = createProps()([\n  \"ids\",\n  \"collection\",\n  \"dir\",\n  \"expandedValue\",\n  \"expandOnClick\",\n  \"defaultFocusedValue\",\n  \"focusedValue\",\n  \"getRootNode\",\n  \"id\",\n  \"onExpandedChange\",\n  \"onFocusChange\",\n  \"onSelectionChange\",\n  \"checkedValue\",\n  \"selectedValue\",\n  \"selectionMode\",\n  \"typeahead\",\n  \"defaultExpandedValue\",\n  \"defaultSelectedValue\",\n  \"defaultCheckedValue\",\n  \"onCheckedChange\",\n  \"onLoadChildrenComplete\",\n  \"onLoadChildrenError\",\n  \"loadChildren\",\n  \"canRename\",\n  \"onRenameStart\",\n  \"onBeforeRename\",\n  \"onRenameComplete\",\n  \"scrollToIndexFn\"\n]);\nvar splitProps = createSplitProps(props);\nvar itemProps = createProps()([\"node\", \"indexPath\"]);\nvar splitItemProps = createSplitProps(itemProps);\n\nexport { anatomy, collection, connect, filePathCollection, itemProps, machine, props, splitItemProps, splitProps };\n", "/* eslint @typescript-eslint/no-explicit-any: off */\n// symbols\nconst TRACK_MEMO_SYMBOL = Symbol();\nconst GET_ORIGINAL_SYMBOL = Symbol();\n// properties\nconst AFFECTED_PROPERTY = 'a';\nconst IS_TARGET_COPIED_PROPERTY = 'f';\nconst PROXY_PROPERTY = 'p';\nconst PROXY_CACHE_PROPERTY = 'c';\nconst TARGET_CACHE_PROPERTY = 't';\nconst HAS_KEY_PROPERTY = 'h';\nconst ALL_OWN_KEYS_PROPERTY = 'w';\nconst HAS_OWN_KEY_PROPERTY = 'o';\nconst KEYS_PROPERTY = 'k';\n// function to create a new bare proxy\nlet newProxy = (target, handler) => new Proxy(target, handler);\n// get object prototype\nconst getProto = Object.getPrototypeOf;\nconst objectsToTrack = new WeakMap();\n// check if obj is a plain object or an array\nconst isObjectToTrack = (obj) => obj &&\n    (objectsToTrack.has(obj)\n        ? objectsToTrack.get(obj)\n        : getProto(obj) === Object.prototype || getProto(obj) === Array.prototype);\n// check if it is object\nconst isObject = (x) => typeof x === 'object' && x !== null;\n// Properties that are both non-configurable and non-writable will break\n// the proxy get trap when we try to return a recursive/child compare proxy\n// from them. We can avoid this by making a copy of the target object with\n// all descriptors marked as configurable, see `copyTargetObject`.\n// See: https://github.com/dai-shi/proxy-compare/pull/8\nconst needsToCopyTargetObject = (obj) => Object.values(Object.getOwnPropertyDescriptors(obj)).some((descriptor) => !descriptor.configurable && !descriptor.writable);\n// Make a copy with all descriptors marked as configurable.\nconst copyTargetObject = (obj) => {\n    if (Array.isArray(obj)) {\n        // Arrays need a special way to copy\n        return Array.from(obj);\n    }\n    // For non-array objects, we create a new object keeping the prototype\n    // with changing all configurable options (otherwise, proxies will complain)\n    const descriptors = Object.getOwnPropertyDescriptors(obj);\n    Object.values(descriptors).forEach((desc) => {\n        desc.configurable = true;\n    });\n    return Object.create(getProto(obj), descriptors);\n};\nconst createProxyHandler = (origObj, isTargetCopied) => {\n    const state = {\n        [IS_TARGET_COPIED_PROPERTY]: isTargetCopied,\n    };\n    let trackObject = false; // for trackMemo\n    const recordUsage = (type, key) => {\n        if (!trackObject) {\n            let used = state[AFFECTED_PROPERTY].get(origObj);\n            if (!used) {\n                used = {};\n                state[AFFECTED_PROPERTY].set(origObj, used);\n            }\n            if (type === ALL_OWN_KEYS_PROPERTY) {\n                used[ALL_OWN_KEYS_PROPERTY] = true;\n            }\n            else {\n                let set = used[type];\n                if (!set) {\n                    set = new Set();\n                    used[type] = set;\n                }\n                set.add(key);\n            }\n        }\n    };\n    const recordObjectAsUsed = () => {\n        trackObject = true;\n        state[AFFECTED_PROPERTY].delete(origObj);\n    };\n    const handler = {\n        get(target, key) {\n            if (key === GET_ORIGINAL_SYMBOL) {\n                return origObj;\n            }\n            recordUsage(KEYS_PROPERTY, key);\n            return createProxy(Reflect.get(target, key), state[AFFECTED_PROPERTY], state[PROXY_CACHE_PROPERTY], state[TARGET_CACHE_PROPERTY]);\n        },\n        has(target, key) {\n            if (key === TRACK_MEMO_SYMBOL) {\n                recordObjectAsUsed();\n                return true;\n            }\n            recordUsage(HAS_KEY_PROPERTY, key);\n            return Reflect.has(target, key);\n        },\n        getOwnPropertyDescriptor(target, key) {\n            recordUsage(HAS_OWN_KEY_PROPERTY, key);\n            return Reflect.getOwnPropertyDescriptor(target, key);\n        },\n        ownKeys(target) {\n            recordUsage(ALL_OWN_KEYS_PROPERTY);\n            return Reflect.ownKeys(target);\n        },\n    };\n    if (isTargetCopied) {\n        handler.set = handler.deleteProperty = () => false;\n    }\n    return [handler, state];\n};\nconst getOriginalObject = (obj) => \n// unwrap proxy\nobj[GET_ORIGINAL_SYMBOL] ||\n    // otherwise\n    obj;\n/**\n * Create a proxy.\n *\n * This function will create a proxy at top level and proxy nested objects as you access them,\n * in order to keep track of which properties were accessed via get/has proxy handlers:\n *\n * NOTE: Printing of WeakMap is hard to inspect and not very readable\n * for this purpose you can use the `affectedToPathList` helper.\n *\n * @param {object} obj - Object that will be wrapped on the proxy.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that will hold the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [proxyCache] -\n * WeakMap that will help keep referential identity for proxies.\n * @returns {Proxy<object>} - Object wrapped in a proxy.\n *\n * @example\n * import { createProxy } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n * const proxy = createProxy(original, affected);\n *\n * proxy.a // Will mark as used and track its value.\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"a\"\n *\n * proxy.d // Will mark \"d\" as accessed to track and proxy itself ({ e: \"3\" }).\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"d\"\n */\nexport const createProxy = (obj, affected, proxyCache, targetCache) => {\n    if (!isObjectToTrack(obj))\n        return obj;\n    let targetAndCopied = targetCache && targetCache.get(obj);\n    if (!targetAndCopied) {\n        const target = getOriginalObject(obj);\n        if (needsToCopyTargetObject(target)) {\n            targetAndCopied = [target, copyTargetObject(target)];\n        }\n        else {\n            targetAndCopied = [target];\n        }\n        targetCache === null || targetCache === void 0 ? void 0 : targetCache.set(obj, targetAndCopied);\n    }\n    const [target, copiedTarget] = targetAndCopied;\n    let handlerAndState = proxyCache && proxyCache.get(target);\n    if (!handlerAndState ||\n        handlerAndState[1][IS_TARGET_COPIED_PROPERTY] !== !!copiedTarget) {\n        handlerAndState = createProxyHandler(target, !!copiedTarget);\n        handlerAndState[1][PROXY_PROPERTY] = newProxy(copiedTarget || target, handlerAndState[0]);\n        if (proxyCache) {\n            proxyCache.set(target, handlerAndState);\n        }\n    }\n    handlerAndState[1][AFFECTED_PROPERTY] = affected;\n    handlerAndState[1][PROXY_CACHE_PROPERTY] = proxyCache;\n    handlerAndState[1][TARGET_CACHE_PROPERTY] = targetCache;\n    return handlerAndState[1][PROXY_PROPERTY];\n};\nconst isAllOwnKeysChanged = (prevObj, nextObj) => {\n    const prevKeys = Reflect.ownKeys(prevObj);\n    const nextKeys = Reflect.ownKeys(nextObj);\n    return (prevKeys.length !== nextKeys.length ||\n        prevKeys.some((k, i) => k !== nextKeys[i]));\n};\n/**\n * Compare changes on objects.\n *\n * This will compare the affected properties on tracked objects inside the proxy\n * to check if there were any changes made to it,\n * by default if no property was accessed on the proxy it will attempt to do a\n * reference equality check for the objects provided (Object.is(a, b)). If you access a property\n * on the proxy, then isChanged will only compare the affected properties.\n *\n * @param {object} prevObj - The previous object to compare.\n * @param {object} nextObj - Object to compare with the previous one.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that holds the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [cache] -\n * WeakMap that holds a cache of the comparisons for better performance with repetitive comparisons,\n * and to avoid infinite loop with circular structures.\n * @returns {boolean} - Boolean indicating if the affected property on the object has changed.\n *\n * @example\n * import { createProxy, isChanged } from 'proxy-compare';\n *\n * const obj = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(obj, affected);\n *\n * proxy.a\n *\n * isChanged(obj, { a: \"1\" }, affected) // false\n *\n * proxy.a = \"2\"\n *\n * isChanged(obj, { a: \"1\" }, affected) // true\n */\nexport const isChanged = (prevObj, nextObj, affected, cache, // for object with cycles\nisEqual = Object.is) => {\n    if (isEqual(prevObj, nextObj)) {\n        return false;\n    }\n    if (!isObject(prevObj) || !isObject(nextObj))\n        return true;\n    const used = affected.get(getOriginalObject(prevObj));\n    if (!used)\n        return true;\n    if (cache) {\n        const hit = cache.get(prevObj);\n        if (hit === nextObj) {\n            return false;\n        }\n        // for object with cycles\n        cache.set(prevObj, nextObj);\n    }\n    let changed = null;\n    for (const key of used[HAS_KEY_PROPERTY] || []) {\n        changed = Reflect.has(prevObj, key) !== Reflect.has(nextObj, key);\n        if (changed)\n            return changed;\n    }\n    if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n        changed = isAllOwnKeysChanged(prevObj, nextObj);\n        if (changed)\n            return changed;\n    }\n    else {\n        for (const key of used[HAS_OWN_KEY_PROPERTY] || []) {\n            const hasPrev = !!Reflect.getOwnPropertyDescriptor(prevObj, key);\n            const hasNext = !!Reflect.getOwnPropertyDescriptor(nextObj, key);\n            changed = hasPrev !== hasNext;\n            if (changed)\n                return changed;\n        }\n    }\n    for (const key of used[KEYS_PROPERTY] || []) {\n        changed = isChanged(prevObj[key], nextObj[key], affected, cache, isEqual);\n        if (changed)\n            return changed;\n    }\n    if (changed === null)\n        throw new Error('invalid used');\n    return changed;\n};\n// explicitly track object with memo\nexport const trackMemo = (obj) => {\n    if (isObjectToTrack(obj)) {\n        return TRACK_MEMO_SYMBOL in obj;\n    }\n    return false;\n};\n/**\n * Unwrap proxy to get the original object.\n *\n * Used to retrieve the original object used to create the proxy instance with `createProxy`.\n *\n * @param {Proxy<object>} obj -  The proxy wrapper of the originial object.\n * @returns {object | null} - Return either the unwrapped object if exists.\n *\n * @example\n * import { createProxy, getUntracked } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n * const originalFromProxy = getUntracked(proxy)\n *\n * Object.is(original, originalFromProxy) // true\n * isChanged(original, originalFromProxy, affected) // false\n */\nexport const getUntracked = (obj) => {\n    if (isObjectToTrack(obj)) {\n        return obj[GET_ORIGINAL_SYMBOL] || null;\n    }\n    return null;\n};\n/**\n * Mark object to be tracked.\n *\n * This function marks an object that will be passed into `createProxy`\n * as marked to track or not. By default only Array and Object are marked to track,\n * so this is useful for example to mark a class instance to track or to mark a object\n * to be untracked when creating your proxy.\n *\n * @param obj - Object to mark as tracked or not.\n * @param mark - Boolean indicating whether you want to track this object or not.\n * @returns - No return.\n *\n * @example\n * import { createProxy, markToTrack, isChanged } from 'proxy-compare';\n *\n * const nested = { e: \"3\" }\n *\n * markToTrack(nested, false)\n *\n * const original = { a: \"1\", c: \"2\", d: nested };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n *\n * proxy.d.e\n *\n * isChanged(original, { d: { e: \"3\" } }, affected) // true\n */\nexport const markToTrack = (obj, mark = true) => {\n    objectsToTrack.set(obj, mark);\n};\n/**\n * Convert `affected` to path list\n *\n * `affected` is a weak map which is not printable.\n * This function is can convert it to printable path list.\n * It's for debugging purpose.\n *\n * @param obj - An object that is used with `createProxy`.\n * @param affected - A weak map that is used with `createProxy`.\n * @param onlyWithValues - An optional boolean to exclude object getters.\n * @returns - An array of paths.\n */\nexport const affectedToPathList = (obj, affected, onlyWithValues) => {\n    const list = [];\n    const seen = new WeakSet();\n    const walk = (x, path) => {\n        var _a, _b, _c;\n        if (seen.has(x)) {\n            // for object with cycles\n            return;\n        }\n        if (isObject(x)) {\n            seen.add(x);\n        }\n        const used = isObject(x) && affected.get(getOriginalObject(x));\n        if (used) {\n            (_a = used[HAS_KEY_PROPERTY]) === null || _a === void 0 ? void 0 : _a.forEach((key) => {\n                const segment = `:has(${String(key)})`;\n                list.push(path ? [...path, segment] : [segment]);\n            });\n            if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n                const segment = ':ownKeys';\n                list.push(path ? [...path, segment] : [segment]);\n            }\n            else {\n                (_b = used[HAS_OWN_KEY_PROPERTY]) === null || _b === void 0 ? void 0 : _b.forEach((key) => {\n                    const segment = `:hasOwn(${String(key)})`;\n                    list.push(path ? [...path, segment] : [segment]);\n                });\n            }\n            (_c = used[KEYS_PROPERTY]) === null || _c === void 0 ? void 0 : _c.forEach((key) => {\n                if (!onlyWithValues ||\n                    'value' in (Object.getOwnPropertyDescriptor(x, key) || {})) {\n                    walk(x[key], path ? [...path, key] : [key]);\n                }\n            });\n        }\n        else if (path) {\n            list.push(path);\n        }\n    };\n    walk(obj);\n    return list;\n};\n/**\n * replace newProxy function.\n *\n * This can be used if you want to use proxy-polyfill.\n * Note that proxy-polyfill can't polyfill everything.\n * Use it at your own risk.\n */\nexport const replaceNewProxy = (fn) => {\n    newProxy = fn;\n};\n", "import { markToTrack, getUntracked } from 'proxy-compare';\n\n// src/global.ts\nfunction glob() {\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  if (typeof self !== \"undefined\") return self;\n  if (typeof window !== \"undefined\") return window;\n  if (typeof global !== \"undefined\") return global;\n}\nfunction globalRef(key, value) {\n  const g = glob();\n  if (!g) return value();\n  g[key] || (g[key] = value());\n  return g[key];\n}\nvar refSet = globalRef(\"__zag__refSet\", () => /* @__PURE__ */ new WeakSet());\n\n// src/utils.ts\nvar isReactElement = (x) => typeof x === \"object\" && x !== null && \"$$typeof\" in x && \"props\" in x;\nvar isVueElement = (x) => typeof x === \"object\" && x !== null && \"__v_isVNode\" in x;\nvar isDOMElement = (x) => typeof x === \"object\" && x !== null && \"nodeType\" in x && typeof x.nodeName === \"string\";\nvar isElement = (x) => isReactElement(x) || isVueElement(x) || isDOMElement(x);\nvar isObject = (x) => x !== null && typeof x === \"object\";\nvar canProxy = (x) => isObject(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !isElement(x) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer) && !(x instanceof Promise) && !(x instanceof File) && !(x instanceof Blob) && !(x instanceof AbortController);\nvar isDev = () => process.env.NODE_ENV !== \"production\";\n\n// src/clone.ts\nfunction set(obj, key, val) {\n  if (typeof val.value === \"object\" && !canProxy(val.value)) val.value = clone(val.value);\n  if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === \"__proto__\") {\n    Object.defineProperty(obj, key, val);\n  } else obj[key] = val.value;\n}\nfunction clone(x) {\n  if (typeof x !== \"object\") return x;\n  var i = 0, k, list, tmp, str = Object.prototype.toString.call(x);\n  if (str === \"[object Object]\") {\n    tmp = Object.create(Object.getPrototypeOf(x) || null);\n  } else if (str === \"[object Array]\") {\n    tmp = Array(x.length);\n  } else if (str === \"[object Set]\") {\n    tmp = /* @__PURE__ */ new Set();\n    x.forEach(function(val) {\n      tmp.add(clone(val));\n    });\n  } else if (str === \"[object Map]\") {\n    tmp = /* @__PURE__ */ new Map();\n    x.forEach(function(val, key) {\n      tmp.set(clone(key), clone(val));\n    });\n  } else if (str === \"[object Date]\") {\n    tmp = /* @__PURE__ */ new Date(+x);\n  } else if (str === \"[object RegExp]\") {\n    tmp = new RegExp(x.source, x.flags);\n  } else if (str === \"[object DataView]\") {\n    tmp = new x.constructor(clone(x.buffer));\n  } else if (str === \"[object ArrayBuffer]\") {\n    tmp = x.slice(0);\n  } else if (str === \"[object Blob]\") {\n    tmp = x.slice();\n  } else if (str.slice(-6) === \"Array]\") {\n    tmp = new x.constructor(x);\n  }\n  if (tmp) {\n    for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n      set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n    }\n    for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n      if (Object.hasOwnProperty.call(tmp, k = list[i]) && tmp[k] === x[k]) continue;\n      set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n    }\n  }\n  return tmp || x;\n}\nvar proxyStateMap = globalRef(\"__zag__proxyStateMap\", () => /* @__PURE__ */ new WeakMap());\nvar buildProxyFunction = (objectIs = Object.is, newProxy = (target, handler) => new Proxy(target, handler), snapCache = /* @__PURE__ */ new WeakMap(), createSnapshot = (target, version) => {\n  const cache = snapCache.get(target);\n  if (cache?.[0] === version) {\n    return cache[1];\n  }\n  const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));\n  markToTrack(snap, true);\n  snapCache.set(target, [version, snap]);\n  Reflect.ownKeys(target).forEach((key) => {\n    const value = Reflect.get(target, key);\n    if (refSet.has(value)) {\n      markToTrack(value, false);\n      snap[key] = value;\n    } else if (proxyStateMap.has(value)) {\n      snap[key] = snapshot(value);\n    } else {\n      snap[key] = value;\n    }\n  });\n  return Object.freeze(snap);\n}, proxyCache = /* @__PURE__ */ new WeakMap(), versionHolder = [1, 1], proxyFunction2 = (initialObject) => {\n  if (!isObject(initialObject)) {\n    throw new Error(\"object required\");\n  }\n  const found = proxyCache.get(initialObject);\n  if (found) {\n    return found;\n  }\n  let version = versionHolder[0];\n  const listeners = /* @__PURE__ */ new Set();\n  const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {\n    if (version !== nextVersion) {\n      version = nextVersion;\n      listeners.forEach((listener) => listener(op, nextVersion));\n    }\n  };\n  let checkVersion = versionHolder[1];\n  const ensureVersion = (nextCheckVersion = ++versionHolder[1]) => {\n    if (checkVersion !== nextCheckVersion && !listeners.size) {\n      checkVersion = nextCheckVersion;\n      propProxyStates.forEach(([propProxyState]) => {\n        const propVersion = propProxyState[1](nextCheckVersion);\n        if (propVersion > version) {\n          version = propVersion;\n        }\n      });\n    }\n    return version;\n  };\n  const createPropListener = (prop) => (op, nextVersion) => {\n    const newOp = [...op];\n    newOp[1] = [prop, ...newOp[1]];\n    notifyUpdate(newOp, nextVersion);\n  };\n  const propProxyStates = /* @__PURE__ */ new Map();\n  const addPropListener = (prop, propProxyState) => {\n    if (isDev() && propProxyStates.has(prop)) {\n      throw new Error(\"prop listener already exists\");\n    }\n    if (listeners.size) {\n      const remove = propProxyState[3](createPropListener(prop));\n      propProxyStates.set(prop, [propProxyState, remove]);\n    } else {\n      propProxyStates.set(prop, [propProxyState]);\n    }\n  };\n  const removePropListener = (prop) => {\n    const entry = propProxyStates.get(prop);\n    if (entry) {\n      propProxyStates.delete(prop);\n      entry[1]?.();\n    }\n  };\n  const addListener = (listener) => {\n    listeners.add(listener);\n    if (listeners.size === 1) {\n      propProxyStates.forEach(([propProxyState, prevRemove], prop) => {\n        if (isDev() && prevRemove) {\n          throw new Error(\"remove already exists\");\n        }\n        const remove = propProxyState[3](createPropListener(prop));\n        propProxyStates.set(prop, [propProxyState, remove]);\n      });\n    }\n    const removeListener = () => {\n      listeners.delete(listener);\n      if (listeners.size === 0) {\n        propProxyStates.forEach(([propProxyState, remove], prop) => {\n          if (remove) {\n            remove();\n            propProxyStates.set(prop, [propProxyState]);\n          }\n        });\n      }\n    };\n    return removeListener;\n  };\n  const baseObject = Array.isArray(initialObject) ? [] : Object.create(Object.getPrototypeOf(initialObject));\n  const handler = {\n    deleteProperty(target, prop) {\n      const prevValue = Reflect.get(target, prop);\n      removePropListener(prop);\n      const deleted = Reflect.deleteProperty(target, prop);\n      if (deleted) {\n        notifyUpdate([\"delete\", [prop], prevValue]);\n      }\n      return deleted;\n    },\n    set(target, prop, value, receiver) {\n      const hasPrevValue = Reflect.has(target, prop);\n      const prevValue = Reflect.get(target, prop, receiver);\n      if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {\n        return true;\n      }\n      removePropListener(prop);\n      if (isObject(value)) {\n        value = getUntracked(value) || value;\n      }\n      let nextValue = value;\n      if (Object.getOwnPropertyDescriptor(target, prop)?.set) ; else {\n        if (!proxyStateMap.has(value) && canProxy(value)) {\n          nextValue = proxy(value);\n        }\n        const childProxyState = !refSet.has(nextValue) && proxyStateMap.get(nextValue);\n        if (childProxyState) {\n          addPropListener(prop, childProxyState);\n        }\n      }\n      Reflect.set(target, prop, nextValue, receiver);\n      notifyUpdate([\"set\", [prop], value, prevValue]);\n      return true;\n    }\n  };\n  const proxyObject = newProxy(baseObject, handler);\n  proxyCache.set(initialObject, proxyObject);\n  const proxyState = [baseObject, ensureVersion, createSnapshot, addListener];\n  proxyStateMap.set(proxyObject, proxyState);\n  Reflect.ownKeys(initialObject).forEach((key) => {\n    const desc = Object.getOwnPropertyDescriptor(initialObject, key);\n    if (desc.get || desc.set) {\n      Object.defineProperty(baseObject, key, desc);\n    } else {\n      proxyObject[key] = initialObject[key];\n    }\n  });\n  return proxyObject;\n}) => [\n  // public functions\n  proxyFunction2,\n  // shared state\n  proxyStateMap,\n  refSet,\n  // internal things\n  objectIs,\n  newProxy,\n  canProxy,\n  snapCache,\n  createSnapshot,\n  proxyCache,\n  versionHolder\n];\nvar [proxyFunction] = buildProxyFunction();\nfunction proxy(initialObject = {}) {\n  return proxyFunction(initialObject);\n}\nfunction subscribe(proxyObject, callback, notifyInSync) {\n  const proxyState = proxyStateMap.get(proxyObject);\n  if (isDev() && !proxyState) {\n    console.warn(\"Please use proxy object\");\n  }\n  let promise;\n  const ops = [];\n  const addListener = proxyState[3];\n  let isListenerActive = false;\n  const listener = (op) => {\n    ops.push(op);\n    if (notifyInSync) {\n      callback(ops.splice(0));\n      return;\n    }\n    if (!promise) {\n      promise = Promise.resolve().then(() => {\n        promise = void 0;\n        if (isListenerActive) {\n          callback(ops.splice(0));\n        }\n      });\n    }\n  };\n  const removeListener = addListener(listener);\n  isListenerActive = true;\n  return () => {\n    isListenerActive = false;\n    removeListener();\n  };\n}\nfunction snapshot(proxyObject) {\n  const proxyState = proxyStateMap.get(proxyObject);\n  if (isDev() && !proxyState) {\n    console.warn(\"Please use proxy object\");\n  }\n  const [target, ensureVersion, createSnapshot] = proxyState;\n  return createSnapshot(target, ensureVersion());\n}\nfunction ref(obj) {\n  refSet.add(obj);\n  return obj;\n}\n\n// src/proxy-computed.ts\nfunction proxyWithComputed(initialObject, computedFns) {\n  const keys = Object.keys(computedFns);\n  keys.forEach((key) => {\n    if (Object.getOwnPropertyDescriptor(initialObject, key)) {\n      throw new Error(\"object property already defined\");\n    }\n    const computedFn = computedFns[key];\n    const { get, set: set2 } = typeof computedFn === \"function\" ? { get: computedFn } : computedFn;\n    const desc = {};\n    desc.get = () => get(snapshot(proxyObject));\n    if (set2) {\n      desc.set = (newValue) => set2(proxyObject, newValue);\n    }\n    Object.defineProperty(initialObject, key, desc);\n  });\n  const proxyObject = proxy(initialObject);\n  return proxyObject;\n}\n\nexport { clone, globalRef, proxy, proxyWithComputed, ref, snapshot, subscribe };\n", "import { createScope, MachineStatus, INIT_STATE } from '@zag-js/core';\nexport { mergeProps } from '@zag-js/core';\nimport { createNormalizer } from '@zag-js/types';\nimport { subscribe, proxy } from '@zag-js/store';\nimport { runIfFn, compact, isFunction, warn, toArray, isString, isEqual, identity } from '@zag-js/utils';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar propMap = {\n  onFocus: \"onFocusin\",\n  onBlur: \"onFocusout\",\n  onChange: \"onInput\",\n  onDoubleClick: \"onDblclick\",\n  htmlFor: \"for\",\n  className: \"class\",\n  defaultValue: \"value\",\n  defaultChecked: \"checked\"\n};\nvar caseSensitiveSvgAttrs = /* @__PURE__ */ new Set([\"viewBox\", \"preserveAspectRatio\"]);\nvar toStyleString = (style) => {\n  let string = \"\";\n  for (let key in style) {\n    const value = style[key];\n    if (value === null || value === void 0) continue;\n    if (!key.startsWith(\"--\")) key = key.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n    string += `${key}:${value};`;\n  }\n  return string;\n};\nvar normalizeProps = createNormalizer((props) => {\n  return Object.entries(props).reduce((acc, [key, value]) => {\n    if (value === void 0) return acc;\n    if (key in propMap) {\n      key = propMap[key];\n    }\n    if (key === \"style\" && typeof value === \"object\") {\n      acc.style = toStyleString(value);\n      return acc;\n    }\n    const normalizedKey = caseSensitiveSvgAttrs.has(key) ? key : key.toLowerCase();\n    acc[normalizedKey] = value;\n    return acc;\n  }, {});\n});\n\n// src/spread-props.ts\nvar prevAttrsMap = /* @__PURE__ */ new WeakMap();\nvar assignableProps = /* @__PURE__ */ new Set([\"value\", \"checked\", \"selected\"]);\nvar caseSensitiveSvgAttrs2 = /* @__PURE__ */ new Set([\n  \"viewBox\",\n  \"preserveAspectRatio\",\n  \"clipPath\",\n  \"clipRule\",\n  \"fillRule\",\n  \"strokeWidth\",\n  \"strokeLinecap\",\n  \"strokeLinejoin\",\n  \"strokeDasharray\",\n  \"strokeDashoffset\",\n  \"strokeMiterlimit\"\n]);\nvar isSvgElement = (node) => {\n  return node.tagName === \"svg\" || node.namespaceURI === \"http://www.w3.org/2000/svg\";\n};\nvar getAttributeName = (node, attrName) => {\n  const shouldPreserveCase = isSvgElement(node) && caseSensitiveSvgAttrs2.has(attrName);\n  return shouldPreserveCase ? attrName : attrName.toLowerCase();\n};\nfunction spreadProps(node, attrs) {\n  const oldAttrs = prevAttrsMap.get(node) || {};\n  const attrKeys = Object.keys(attrs);\n  const addEvt = (e, f) => {\n    node.addEventListener(e.toLowerCase(), f);\n  };\n  const remEvt = (e, f) => {\n    node.removeEventListener(e.toLowerCase(), f);\n  };\n  const onEvents = (attr) => attr.startsWith(\"on\");\n  const others = (attr) => !attr.startsWith(\"on\");\n  const setup = (attr) => addEvt(attr.substring(2), attrs[attr]);\n  const teardown = (attr) => remEvt(attr.substring(2), attrs[attr]);\n  const apply = (attrName) => {\n    const value = attrs[attrName];\n    const oldValue = oldAttrs[attrName];\n    if (value === oldValue) return;\n    if (attrName === \"class\") {\n      node.className = value ?? \"\";\n      return;\n    }\n    if (assignableProps.has(attrName)) {\n      node[attrName] = value ?? \"\";\n      return;\n    }\n    if (typeof value === \"boolean\") {\n      node.toggleAttribute(getAttributeName(node, attrName), value);\n      return;\n    }\n    if (value != null) {\n      node.setAttribute(getAttributeName(node, attrName), value);\n      return;\n    }\n    node.removeAttribute(getAttributeName(node, attrName));\n  };\n  for (const key in oldAttrs) {\n    if (attrs[key] == null) {\n      if (key === \"class\") {\n        node.className = \"\";\n      } else if (assignableProps.has(key)) {\n        node[key] = \"\";\n      } else {\n        node.removeAttribute(getAttributeName(node, key));\n      }\n    }\n  }\n  const oldEvents = Object.keys(oldAttrs).filter(onEvents);\n  oldEvents.forEach((evt) => {\n    remEvt(evt.substring(2), oldAttrs[evt]);\n  });\n  attrKeys.filter(onEvents).forEach(setup);\n  attrKeys.filter(others).forEach(apply);\n  prevAttrsMap.set(node, attrs);\n  return function cleanup() {\n    attrKeys.filter(onEvents).forEach(teardown);\n  };\n}\nfunction bindable(props) {\n  const initial = props().value ?? props().defaultValue;\n  if (props().debug) {\n    console.log(`[bindable > ${props().debug}] initial`, initial);\n  }\n  const eq = props().isEqual ?? Object.is;\n  const store = proxy({ value: initial });\n  const controlled = () => props().value !== void 0;\n  return {\n    initial,\n    ref: store,\n    get() {\n      return controlled() ? props().value : store.value;\n    },\n    set(nextValue) {\n      const prev = store.value;\n      const next = isFunction(nextValue) ? nextValue(prev) : nextValue;\n      if (props().debug) {\n        console.log(`[bindable > ${props().debug}] setValue`, { next, prev });\n      }\n      if (!controlled()) store.value = next;\n      if (!eq(next, prev)) {\n        props().onChange?.(next, prev);\n      }\n    },\n    invoke(nextValue, prevValue) {\n      props().onChange?.(nextValue, prevValue);\n    },\n    hash(value) {\n      return props().hash?.(value) ?? String(value);\n    }\n  };\n}\nbindable.cleanup = (_fn) => {\n};\nbindable.ref = (defaultValue) => {\n  let value = defaultValue;\n  return {\n    get: () => value,\n    set: (next) => {\n      value = next;\n    }\n  };\n};\n\n// src/refs.ts\nfunction createRefs(refs) {\n  const ref = { current: refs };\n  return {\n    get(key) {\n      return ref.current[key];\n    },\n    set(key, value) {\n      ref.current[key] = value;\n    }\n  };\n}\n\n// src/machine.ts\nvar VanillaMachine = class {\n  constructor(machine, userProps = {}) {\n    this.machine = machine;\n    __publicField(this, \"scope\");\n    __publicField(this, \"context\");\n    __publicField(this, \"prop\");\n    __publicField(this, \"state\");\n    __publicField(this, \"refs\");\n    __publicField(this, \"computed\");\n    __publicField(this, \"event\", { type: \"\" });\n    __publicField(this, \"previousEvent\", { type: \"\" });\n    __publicField(this, \"effects\", /* @__PURE__ */ new Map());\n    __publicField(this, \"transition\", null);\n    __publicField(this, \"cleanups\", []);\n    __publicField(this, \"subscriptions\", []);\n    __publicField(this, \"getEvent\", () => ({\n      ...this.event,\n      current: () => this.event,\n      previous: () => this.previousEvent\n    }));\n    __publicField(this, \"getStateConfig\", (state) => {\n      return this.machine.states[state];\n    });\n    __publicField(this, \"getState\", () => ({\n      ...this.state,\n      matches: (...values) => values.includes(this.state.get()),\n      hasTag: (tag) => !!this.getStateConfig(this.state.get())?.tags?.includes(tag)\n    }));\n    __publicField(this, \"debug\", (...args) => {\n      if (this.machine.debug) console.log(...args);\n    });\n    __publicField(this, \"notify\", () => {\n      this.publish();\n    });\n    __publicField(this, \"send\", (event) => {\n      if (this.status !== MachineStatus.Started) return;\n      queueMicrotask(() => {\n        if (!event) return;\n        this.previousEvent = this.event;\n        this.event = event;\n        this.debug(\"send\", event);\n        let currentState = this.state.get();\n        const eventType = event.type;\n        const transitions = this.getStateConfig(currentState)?.on?.[eventType] ?? this.machine.on?.[eventType];\n        const transition = this.choose(transitions);\n        if (!transition) return;\n        this.transition = transition;\n        const target = transition.target ?? currentState;\n        this.debug(\"transition\", transition);\n        const changed = target !== currentState;\n        if (changed) {\n          this.state.set(target);\n        } else if (transition.reenter && !changed) {\n          this.state.invoke(currentState, currentState);\n        } else {\n          this.action(transition.actions);\n        }\n      });\n    });\n    __publicField(this, \"action\", (keys) => {\n      const strs = isFunction(keys) ? keys(this.getParams()) : keys;\n      if (!strs) return;\n      const fns = strs.map((s) => {\n        const fn = this.machine.implementations?.actions?.[s];\n        if (!fn) warn(`[zag-js] No implementation found for action \"${JSON.stringify(s)}\"`);\n        return fn;\n      });\n      for (const fn of fns) {\n        fn?.(this.getParams());\n      }\n    });\n    __publicField(this, \"guard\", (str) => {\n      if (isFunction(str)) return str(this.getParams());\n      return this.machine.implementations?.guards?.[str](this.getParams());\n    });\n    __publicField(this, \"effect\", (keys) => {\n      const strs = isFunction(keys) ? keys(this.getParams()) : keys;\n      if (!strs) return;\n      const fns = strs.map((s) => {\n        const fn = this.machine.implementations?.effects?.[s];\n        if (!fn) warn(`[zag-js] No implementation found for effect \"${JSON.stringify(s)}\"`);\n        return fn;\n      });\n      const cleanups = [];\n      for (const fn of fns) {\n        const cleanup = fn?.(this.getParams());\n        if (cleanup) cleanups.push(cleanup);\n      }\n      return () => cleanups.forEach((fn) => fn?.());\n    });\n    __publicField(this, \"choose\", (transitions) => {\n      return toArray(transitions).find((t) => {\n        let result = !t.guard;\n        if (isString(t.guard)) result = !!this.guard(t.guard);\n        else if (isFunction(t.guard)) result = t.guard(this.getParams());\n        return result;\n      });\n    });\n    __publicField(this, \"subscribe\", (fn) => {\n      this.subscriptions.push(fn);\n      return () => {\n        const index = this.subscriptions.indexOf(fn);\n        if (index > -1) this.subscriptions.splice(index, 1);\n      };\n    });\n    __publicField(this, \"status\", MachineStatus.NotStarted);\n    __publicField(this, \"publish\", () => {\n      this.callTrackers();\n      this.subscriptions.forEach((fn) => fn(this.service));\n    });\n    __publicField(this, \"trackers\", []);\n    __publicField(this, \"setupTrackers\", () => {\n      this.machine.watch?.(this.getParams());\n    });\n    __publicField(this, \"callTrackers\", () => {\n      this.trackers.forEach(({ deps, fn }) => {\n        const next = deps.map((dep) => dep());\n        if (!isEqual(fn.prev, next)) {\n          fn();\n          fn.prev = next;\n        }\n      });\n    });\n    __publicField(this, \"getParams\", () => ({\n      state: this.getState(),\n      context: this.context,\n      event: this.getEvent(),\n      prop: this.prop,\n      send: this.send,\n      action: this.action,\n      guard: this.guard,\n      track: (deps, fn) => {\n        fn.prev = deps.map((dep) => dep());\n        this.trackers.push({ deps, fn });\n      },\n      refs: this.refs,\n      computed: this.computed,\n      flush: identity,\n      scope: this.scope,\n      choose: this.choose\n    }));\n    const { id, ids, getRootNode } = runIfFn(userProps);\n    this.scope = createScope({ id, ids, getRootNode });\n    const prop = (key) => {\n      const __props = runIfFn(userProps);\n      const props = machine.props?.({ props: compact(__props), scope: this.scope }) ?? __props;\n      return props[key];\n    };\n    this.prop = prop;\n    const context = machine.context?.({\n      prop,\n      bindable,\n      scope: this.scope,\n      flush(fn) {\n        queueMicrotask(fn);\n      },\n      getContext() {\n        return ctx;\n      },\n      getComputed() {\n        return computed;\n      },\n      getRefs() {\n        return refs;\n      },\n      getEvent: this.getEvent.bind(this)\n    });\n    if (context) {\n      Object.values(context).forEach((item) => {\n        const unsub = subscribe(item.ref, () => this.notify());\n        this.cleanups.push(unsub);\n      });\n    }\n    const ctx = {\n      get(key) {\n        return context?.[key].get();\n      },\n      set(key, value) {\n        context?.[key].set(value);\n      },\n      initial(key) {\n        return context?.[key].initial;\n      },\n      hash(key) {\n        const current = context?.[key].get();\n        return context?.[key].hash(current);\n      }\n    };\n    this.context = ctx;\n    const computed = (key) => {\n      return machine.computed?.[key]({\n        context: ctx,\n        event: this.getEvent(),\n        prop,\n        refs: this.refs,\n        scope: this.scope,\n        computed\n      }) ?? {};\n    };\n    this.computed = computed;\n    const refs = createRefs(machine.refs?.({ prop, context: ctx }) ?? {});\n    this.refs = refs;\n    const state = bindable(() => ({\n      defaultValue: machine.initialState({ prop }),\n      onChange: (nextState, prevState) => {\n        if (prevState) {\n          const exitEffects = this.effects.get(prevState);\n          exitEffects?.();\n          this.effects.delete(prevState);\n        }\n        if (prevState) {\n          this.action(this.getStateConfig(prevState)?.exit);\n        }\n        this.action(this.transition?.actions);\n        const cleanup = this.effect(this.getStateConfig(nextState)?.effects);\n        if (cleanup) this.effects.set(nextState, cleanup);\n        if (prevState === INIT_STATE) {\n          this.action(machine.entry);\n          const cleanup2 = this.effect(machine.effects);\n          if (cleanup2) this.effects.set(INIT_STATE, cleanup2);\n        }\n        this.action(this.getStateConfig(nextState)?.entry);\n      }\n    }));\n    this.state = state;\n    this.cleanups.push(subscribe(this.state.ref, () => this.notify()));\n  }\n  start() {\n    this.status = MachineStatus.Started;\n    this.debug(\"initializing...\");\n    this.state.invoke(this.state.initial, INIT_STATE);\n    this.setupTrackers();\n  }\n  stop() {\n    this.effects.forEach((fn) => fn?.());\n    this.effects.clear();\n    this.transition = null;\n    this.action(this.machine.exit);\n    this.cleanups.forEach((unsub) => unsub());\n    this.cleanups = [];\n    this.subscriptions = [];\n    this.status = MachineStatus.Stopped;\n    this.debug(\"unmounting...\");\n  }\n  get service() {\n    return {\n      state: this.getState(),\n      send: this.send,\n      context: this.context,\n      prop: this.prop,\n      scope: this.scope,\n      refs: this.refs,\n      computed: this.computed,\n      event: this.getEvent(),\n      getStatus: () => this.status\n    };\n  }\n};\n\nexport { VanillaMachine, normalizeProps, spreadProps };\n", "import { VanillaMachine } from \"@zag-js/vanilla\";\n\ninterface ComponentInterface<Api> {\n  el: HTMLElement;\n  machine: VanillaMachine<any>;\n  api: Api;\n\n  init(): void;\n  destroy(): void;\n  render(): void;\n}\n\nexport abstract class Component<Props, Api> implements ComponentInterface<Api> {\n  el: HTMLElement;\n  machine: VanillaMachine<any>;\n  api: Api;\n\n  constructor(el: HTMLElement | null, props: Props) {\n    if (!el) throw new Error(\"Root element not found\");\n    this.el = el;\n    this.machine = this.initMachine(props);\n    this.api = this.initApi();\n  }\n\n  abstract initMachine(props: Props): VanillaMachine<any>;\n  abstract initApi(): Api;\n  abstract render(): void;\n\n  init = () => {\n    this.render();\n    this.machine.subscribe(() => {\n      this.api = this.initApi();\n      this.render();\n    });\n    this.machine.start();\n  };\n\n  destroy = () => {\n    this.machine.stop();\n  };\n}\n", "/**\n * Corex utility functions for working with Zag.js components.\n *\n * Note: `normalizeProps` is provided by @zag-js/vanilla and is imported from there.\n * `spreadProps` is wrapped to ensure ARIA boolean attributes are converted to strings\n * for accessibility compliance.\n */\nimport { spreadProps as zagSpreadProps } from \"@zag-js/vanilla\";\n\n/**\n * Wrapper around zag's spreadProps that converts boolean ARIA attributes to strings\n * (\"true\" or \"false\") for accessibility compliance. All other attributes are passed\n * through unchanged.\n *\n * The vanilla spreadProps removes boolean false attributes, but ARIA attributes\n * should always be present as strings when provided by the API.\n *\n * Exception: `aria-readonly` is omitted when false as it's invalid on certain roles\n * (e.g., role=\"button\").\n */\nexport function spreadProps(\n  node: Element,\n  attrs: Record<string, any>,\n): () => void {\n  const normalizedAttrs: Record<string, any> = {};\n\n  for (const [attrName, value] of Object.entries(attrs)) {\n    if (typeof value === \"boolean\") {\n      const lowerAttrName = attrName.toLowerCase();\n      if (lowerAttrName.startsWith(\"aria-\")) {\n        if (lowerAttrName === \"aria-readonly\" && !value) continue;\n        normalizedAttrs[attrName] = String(value);\n      } else {\n        normalizedAttrs[attrName] = value;\n      }\n    } else {\n      normalizedAttrs[attrName] = value;\n    }\n  }\n\n  return zagSpreadProps(node, normalizedAttrs);\n}\n\ntype PropertyType = \"string\" | \"boolean\" | \"number\" | \"string[]\";\ntype PropMap = Record<string, PropertyType>;\n/**\n * Renders a specific part of the UI based on the component's props.\n * If `propsToSend` is a PropMap, attributes are read from the DOM.\n * If `propsToSend` is a plain object, it is passed directly to the API.\n *\n * NOTE: This version treats the passed `root` element itself as a candidate\n * part (so you can call renderPart(li, 'item', api, { item }) for a single li).\n */\nexport const renderPart = (\n  root: HTMLElement,\n  name: string,\n  api: any,\n  propsToSend?: PropMap | Record<string, any | ((el: HTMLElement) => any)>,\n) => {\n  const camelizedName = name\n    .split(\"-\")\n    .map((word, index) =>\n      index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1),\n    )\n    .join(\"\");\n  const getterName = `get${camelizedName.charAt(0).toUpperCase()}${camelizedName.slice(1)}Props`;\n  if (typeof api[getterName] !== \"function\") return;\n\n  // Collect parts: include root itself if it matches, plus any descendants\n  const parts: HTMLElement[] = [];\n  try {\n    if (\n      (root as Element).matches &&\n      (root as Element).matches(`[data-part='${name}']`)\n    ) {\n      parts.push(root);\n    }\n  } catch (e) {\n    console.log(e);\n  }\n  parts.push(\n    ...Array.from(root.querySelectorAll<HTMLElement>(`[data-part='${name}']`)),\n  );\n\n  // Find the component root (closest ancestor with class containing \"-js\")\n  const componentRoot = root.closest('[class*=\"-js\"]') as HTMLElement | null;\n\n  const scopedParts = componentRoot\n    ? parts.filter((part) => part.closest('[class*=\"-js\"]') === componentRoot)\n    : parts;\n\n  scopedParts.forEach((part) => {\n    let props: Record<string, any> | undefined;\n    if (propsToSend) {\n      if (isPropMap(propsToSend)) {\n        props = {};\n        for (const [prop, type] of Object.entries(propsToSend)) {\n          const getter =\n            type === \"string\"\n              ? getString\n              : type === \"boolean\"\n                ? getBoolean\n                : type === \"number\"\n                  ? getNumber\n                  : type === \"string[]\"\n                    ? getStringList\n                    : getString;\n          props[prop] = getter(part, prop);\n        }\n      } else {\n        props = {};\n        for (const [key, value] of Object.entries(propsToSend)) {\n          props[key] = typeof value === \"function\" ? value(part) : value;\n        }\n      }\n    }\n    const result = props ? api[getterName](props) : api[getterName]();\n    spreadProps(part, result);\n    if (name === \"preview\") {\n      const childrenValue = part.getAttribute(\"children\");\n      if (childrenValue !== null) part.textContent = childrenValue;\n    }\n  });\n};\nfunction isPropMap(value: any): value is PropMap {\n  if (typeof value !== \"object\" || value === null) return false;\n  return Object.values(value).every(\n    (v) =>\n      v === \"string\" || v === \"boolean\" || v === \"number\" || v === \"string[]\",\n  );\n}\n\n/**\n * Renders a list of items inside the root element. Each item is identified by the `name`, and the\n * properties for each item are retrieved from the API based on its `data-value`, `data-disabled`, and `data-index` attributes.\n * @param root - The root HTML element containing the items.\n * @param name - The name of the item part to render.\n * @param api - The API object used to retrieve the properties for each item.\n * ```\n */\nexport function renderList<T extends { value: string; label?: string }>(\n  root: HTMLElement,\n  name: string,\n  api: any,\n  items: T[],\n) {\n  const parts = root.querySelectorAll<HTMLElement>(`[data-part='${name}']`);\n  const getter = api[`get${capitalize(name)}Props`];\n  parts.forEach((el, index) => {\n    const value = el.getAttribute(\"data-value\") || items[index]?.value;\n    const item = items.find((item) => item.value === value);\n    if (!item) return;\n    const props = getter({ item });\n    spreadProps(el, props);\n  });\n}\n\nfunction capitalize(str: string): string {\n  return str.replace(/(^|-)([a-z])/g, (_m, _p, l) => l.toUpperCase());\n}\ninterface Node {\n  id: string;\n  name: string;\n  children?: Node[];\n}\n/**\n * Recursively searches for a node in a hierarchical structure based on its `id`.\n * @param tree - The tree structure to search through.\n * @param id - The ID of the node to find.\n * @returns The node if found, or `null` if no node with the specified ID exists.\n * ```\n */\nexport function findNodeById(tree: Node, id: string): Node | null {\n  if (tree.id === id) return tree;\n  if (!tree.children) return null;\n  for (const child of tree.children) {\n    const found = findNodeById(child, id);\n    if (found) return found;\n  }\n  return null;\n}\n/**\n * Tree View Component: Renders a node from the provided hierarchical tree view into the specified part in the UI.\n * The part is identified by the `name`, and the node is retrieved from the tree using its `id` attribute.\n * @param root - The root HTML element in which the node resides.\n * @param name - The name of the node part to render.\n * @param api - The API object used to retrieve the properties for the node.\n * @param tree - The hierarchical tree structure containing the nodes.\n *\n * Example:\n * ```ts\n * const root = document.getElementById('root');\n * const tree = { id: '1', name: 'root', children: [{ id: '2', name: 'child' }] };\n * renderNode(root, 'node', api, tree); // Renders the node with properties from the tree\n * ```\n */\nexport const renderNode = (\n  root: HTMLElement,\n  name: string,\n  api: any,\n  tree: Node,\n) => {\n  const parts = root.querySelectorAll<HTMLElement>(`[data-part='${name}']`);\n  // Convert part name to API method name, e.g., \"branch-control\" \u2192 \"getBranchControlProps\"\n  const camelizedName = name.replace(\n    /(^|-)([a-z])/g,\n    (_match, _prefix, letter) => letter.toUpperCase(),\n  );\n  const getterName = `get${camelizedName}Props`;\n  // Helper to recursively find node and index path\n  const findNodeById = (\n    node: Node,\n    id: string,\n    path: number[] = [],\n  ): { node: Node; indexPath: number[] } | null => {\n    if (node.id === id) return { node, indexPath: path };\n    if (node.children) {\n      for (let i = 0; i < node.children.length; i++) {\n        const found = findNodeById(node.children[i], id, [...path, i]);\n        if (found) return found;\n      }\n    }\n    return null;\n  };\n  parts.forEach((part) => {\n    const id = part.getAttribute(\"data-id\");\n    if (!id) return;\n    const found = findNodeById(tree, id);\n    if (!found) return;\n    const { node, indexPath } = found;\n    const getPropsFn =\n      typeof api[getterName] === \"function\" ? api[getterName] : api.getProps;\n    const props = getPropsFn({ indexPath, node });\n    spreadProps(part, props);\n    const label = part.getAttribute(\"children\");\n    if (label != null) {\n      part.textContent = label;\n    }\n  });\n};\n/**\n * Extract a string data attribute with validation for specific type\n * @param element - The HTML element to extract from\n * @param attrName - The data attribute name (without 'data-' prefix)\n * @param validValues - Optional array of allowed values\n * @returns Validated string value or undefined\n */\nexport const getString = <T extends string>(\n  element: HTMLElement,\n  attrName: string,\n  validValues?: readonly T[],\n): T | undefined => {\n  const value = element.dataset[attrName];\n  if (\n    value !== undefined &&\n    (!validValues || (validValues as readonly string[]).includes(value))\n  ) {\n    return value as T;\n  }\n  return undefined;\n};\n/**\n * Extract a list of string values from a data attribute\n * @param element - The HTML element to extract from\n * @param attrName - The data attribute name (without 'data-' prefix)\n * @returns Array of strings or undefined\n */\nexport const getStringList = (\n  element: HTMLElement,\n  attrName: string,\n): string[] | undefined => {\n  const value = element.dataset[attrName];\n  if (typeof value === \"string\") {\n    return value\n      .split(\",\")\n      .map((v) => v.trim())\n      .filter((v) => v.length > 0);\n  }\n  return undefined;\n};\n/**\n * Extract a number data attribute with optional validation\n * @param element - The HTML element to extract from\n * @param attrName - The data attribute name (without 'data-' prefix)\n * @param validValues - Optional array of allowed numeric values\n * @returns Parsed number value or undefined\n */\nexport const getNumber = (\n  element: HTMLElement,\n  attrName: string,\n  validValues?: readonly number[],\n): number | undefined => {\n  const raw = element.dataset[attrName];\n  if (raw === undefined) return undefined;\n  const parsed = Number(raw);\n  if (Number.isNaN(parsed)) return undefined;\n  if (validValues && !validValues.includes(parsed)) return 0;\n  return parsed;\n};\n/**\n * Extract a boolean data attribute\n * @param element - The HTML element to extract from\n * @param attrName - The data attribute name (without 'data-' prefix)\n * @returns Boolean value or undefined\n */\nexport const getBoolean = (\n  element: HTMLElement,\n  attrName: string,\n): boolean | undefined => {\n  const value = element.dataset[attrName];\n  if (value === \"\") return true;\n  if (value === \"true\") return true;\n  if (value === \"false\") return false;\n  if (element.hasAttribute(attrName)) return true;\n  if (element.hasAttribute(`data-${attrName}`)) return true;\n\n  return undefined;\n};\n/**\n * Generate a random ID if none is provided\n * @param element - Optional HTML element to get an existing id\n * @param fallbackId - Optional fallback base string (e.g. \"checkbox\")\n * @returns ID string (existing or generated)\n */\nexport const generateId = (\n  element?: HTMLElement,\n  fallbackId: string = \"element\",\n): string => {\n  if (element?.id) return element.id;\n  return `${fallbackId}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\nexport function valuesEqual<T>(a: T, b: T): boolean {\n  return a === b;\n}\n\nexport function arraysEqualUnordered(\n  a: string[] = [],\n  b: string[] = [],\n): boolean {\n  if (a === b) return true;\n  if (!Array.isArray(a) || !Array.isArray(b)) return false;\n  if (a.length !== b.length) return false;\n  return a.every((v) => b.includes(v));\n}\n\n/**\n * Parse element IDs from child parts with data-part and data-id attributes\n * @param root - The root element containing the parts\n * @param partNames - Array of part names to look for (e.g., ['root', 'control', 'label'])\n * @returns Object with parsed IDs or undefined if no IDs found\n *\n * Example:\n * ```html\n * <div class=\"checkbox-js\">\n *   <div data-part=\"root\" data-id=\"my-root\"></div>\n *   <div data-part=\"control\" data-id=\"my-control\"></div>\n * </div>\n * ```\n * ```ts\n * const ids = getPartIds(element, ['root', 'control', 'label']);\n * // Returns: { root: 'my-root', control: 'my-control' }\n * ```\n */\nexport const getPartIds = (\n  root: HTMLElement,\n  partNames: readonly string[],\n): Record<string, string> | undefined => {\n  const ids: Record<string, string> = {};\n  let hasAnyId = false;\n\n  for (const partName of partNames) {\n    const part = root.querySelector<HTMLElement>(`[data-part=\"${partName}\"]`);\n    const id = part?.dataset.id;\n\n    if (id) {\n      // Convert kebab-case to camelCase: hidden-input -> hiddenInput\n      const camelKey = partName.replace(/-([a-z])/g, (_, letter) =>\n        letter.toUpperCase(),\n      );\n      ids[camelKey] = id;\n      hasAnyId = true;\n    }\n  }\n\n  return hasAnyId ? ids : undefined;\n};\n", "import * as treeView from \"@zag-js/tree-view\";\nimport type { Direction } from \"@zag-js/types\";\nimport { VanillaMachine, normalizeProps } from \"@zag-js/vanilla\";\n\nimport {\n  Component,\n  generateId,\n  getString,\n  getStringList,\n  arraysEqualUnordered,\n  renderPart,\n  renderNode,\n  getBoolean,\n} from \"../lib\";\ninterface Node {\n  id: string;\n  name: string;\n  children?: Node[];\n}\nfunction loadJsonTreeNodes(path: string): Node {\n  try {\n    const script = document.querySelector(\n      `script[type=\"application/json\"][data-tree-view=\"${path}\"]`,\n    );\n    if (!script) throw new Error(`No inline JSON script found for ${path}`);\n    return JSON.parse(script.textContent || \"{}\");\n  } catch (e) {\n    console.error(\"Failed to load JSON tree nodes:\", e);\n    return { id: \"root\", name: \"Root\" };\n  }\n}\nfunction buildNodeTreeFromDOM(container: HTMLElement): Node {\n  const rootEl = container.querySelector<HTMLElement>('[data-part=\"tree\"]');\n  if (!rootEl) {\n    return { id: \"root\", name: \"Root\" };\n  }\n  function processElement(element: HTMLElement): Node | null {\n    const part = element.getAttribute(\"data-part\");\n    const id = element.getAttribute(\"data-id\");\n    const name = element.getAttribute(\"data-name\");\n    if (!id || !name) {\n      return null;\n    }\n    if (part === \"branch\") {\n      const branchContent = element.querySelector(\n        `[data-part=\"branch-content\"][data-id=\"${id}\"]`,\n      );\n      if (branchContent) {\n        const childElements = Array.from(branchContent.children).filter(\n          (child) => {\n            const childPart = child.getAttribute(\"data-part\");\n            return childPart === \"item\" || childPart === \"branch\";\n          },\n        );\n        const childNodes = childElements\n          .map((childEl) => processElement(childEl as HTMLElement))\n          .filter(Boolean) as Node[];\n        return {\n          id,\n          name,\n          children: childNodes.length > 0 ? childNodes : undefined,\n        };\n      }\n      return { id, name };\n    } else if (part === \"item\") {\n      return {\n        id,\n        name,\n      };\n    }\n    return null;\n  }\n  const topElements = Array.from(rootEl.children).filter((child) => {\n    const childPart = child.getAttribute(\"data-part\");\n    return childPart === \"item\" || childPart === \"branch\";\n  });\n  const children = topElements\n    .map((el) => processElement(el as HTMLElement))\n    .filter(Boolean) as Node[];\n  return {\n    id: getString(rootEl, \"nodeRootId\") || \"root\",\n    name: getString(rootEl, \"nodeRootName\") || \"Root\",\n    children,\n  };\n}\nexport class TreeView extends Component<treeView.Props, treeView.Api> {\n  collection!: ReturnType<typeof treeView.collection<Node>>;\n  private domInitialized = false;\n  initMachine(props: treeView.Props): VanillaMachine<any> {\n    return new VanillaMachine(treeView.machine, props);\n  }\n  initApi(): treeView.Api {\n    return treeView.connect(this.machine.service, normalizeProps);\n  }\n  renderNodes() {\n    const treeEl = this.el.querySelector('[data-part=\"tree\"]');\n    if (!treeEl || !(treeEl instanceof HTMLElement)) return;\n    const noIcon = getBoolean(this.el, \"noIcon\");\n    const noIndicator = getBoolean(this.el, \"noIndicator\");\n    treeEl.innerHTML = \"\";\n    const folderIconSvg = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z\" />\n    </svg>\n`;\n    const docIconSvg = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" />\n    </svg>\n`;\n    const chevronIconSvg = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\"></path>\n    </svg>`;\n    const renderNodeRecursive = (node: Node, parentEl: HTMLElement) => {\n      const isBranch = !!node.children?.length;\n      if (isBranch) {\n        const branchEl = document.createElement(\"div\");\n        branchEl.setAttribute(\"data-part\", \"branch\");\n        branchEl.setAttribute(\"data-id\", node.id);\n        branchEl.setAttribute(\"data-name\", node.name);\n        const branchControl = document.createElement(\"div\");\n        branchControl.setAttribute(\"data-part\", \"branch-control\");\n        branchControl.setAttribute(\"data-id\", node.id);\n        branchControl.setAttribute(\"data-name\", node.name);\n        if (!noIcon)\n          branchControl.insertAdjacentHTML(\"beforeend\", folderIconSvg);\n        const branchText = document.createElement(\"span\");\n        branchText.setAttribute(\"data-part\", \"branch-text\");\n        branchText.setAttribute(\"data-id\", node.id);\n        branchText.setAttribute(\"data-name\", node.name);\n        branchText.textContent = node.name;\n        branchControl.appendChild(branchText);\n\n        if (!noIndicator) {\n          const branchIndicator = document.createElement(\"span\");\n          branchIndicator.setAttribute(\"data-part\", \"branch-indicator\");\n          branchIndicator.setAttribute(\"data-id\", node.id);\n          branchIndicator.setAttribute(\"data-name\", node.name);\n          branchIndicator.insertAdjacentHTML(\"beforeend\", chevronIconSvg);\n          branchControl.appendChild(branchIndicator);\n        }\n        branchEl.appendChild(branchControl);\n        const branchContent = document.createElement(\"div\");\n        branchContent.setAttribute(\"data-part\", \"branch-content\");\n        branchContent.setAttribute(\"data-id\", node.id);\n        branchContent.setAttribute(\"data-name\", node.name);\n        const branchIndentGuide = document.createElement(\"div\");\n        branchIndentGuide.setAttribute(\"data-part\", \"branch-indent-guide\");\n        branchIndentGuide.setAttribute(\"data-id\", node.id);\n        branchIndentGuide.setAttribute(\"data-name\", node.name);\n        branchContent.appendChild(branchIndentGuide);\n        node.children!.forEach((child) =>\n          renderNodeRecursive(child, branchContent),\n        );\n        branchEl.appendChild(branchContent);\n        parentEl.appendChild(branchEl);\n      } else {\n        const itemEl = document.createElement(\"div\");\n        itemEl.setAttribute(\"data-part\", \"item\");\n        itemEl.setAttribute(\"data-id\", node.id);\n        itemEl.setAttribute(\"data-name\", node.name);\n        itemEl.textContent = node.name;\n        if (!noIcon) itemEl.insertAdjacentHTML(\"afterbegin\", docIconSvg);\n        parentEl.appendChild(itemEl);\n      }\n    };\n    if (this.collection.rootNode.children) {\n      this.collection.rootNode.children.forEach((childNode) => {\n        renderNodeRecursive(childNode, treeEl);\n      });\n    }\n  }\n  render() {\n    const isJson = getString(this.el, \"json\") !== undefined;\n    if (isJson && !this.domInitialized) {\n      this.renderNodes();\n      this.domInitialized = true;\n    }\n    const parts = [\"root\", \"label\", \"tree\"];\n    for (const part of parts) {\n      renderPart(this.el, part, this.api);\n    }\n    const items = [\n      \"item\",\n      \"branch\",\n      \"branch-content\",\n      \"branch-text\",\n      \"branch-control\",\n      \"branch-indicator\",\n      \"branch-indent-guide\",\n    ];\n    for (const item of items) {\n      renderNode(this.el, item, this.api, this.collection.rootNode);\n    }\n  }\n}\nexport function initTreeView(\n  doc: HTMLElement | Document = document,\n  selector = \".tree-view-js\",\n): void {\n  doc.querySelectorAll<HTMLElement>(selector).forEach((rootEl) => {\n    const directions = [\"ltr\", \"rtl\"] as const;\n    const selectionModes = [\"single\", \"multiple\"] as const;\n    const jsonPath = getString(rootEl, \"json\");\n    let rootNode: Node;\n    if (jsonPath !== undefined) {\n      rootNode = loadJsonTreeNodes(jsonPath);\n    } else {\n      rootNode = buildNodeTreeFromDOM(rootEl);\n    }\n    const collection = treeView.collection<Node>({\n      nodeToValue: (node: Node) => node.id,\n      nodeToString: (node: Node) => node.name,\n      rootNode,\n    });\n    const treeViewComponent = new TreeView(rootEl, {\n      id: generateId(rootEl, \"treeView\"),\n      defaultExpandedValue: getStringList(rootEl, \"defaultExpandedValue\"),\n      defaultSelectedValue: getStringList(rootEl, \"defaultSelectedValue\"),\n      dir: getString<Direction>(rootEl, \"dir\", directions),\n      expandedValue: getStringList(rootEl, \"expandedValue\"),\n      expandOnClick: getBoolean(rootEl, \"expandOnClick\"),\n      focusedValue: getString(rootEl, \"focusedValue\"),\n      defaultFocusedValue: getString(rootEl, \"defaultFocusedValue\"),\n      selectionMode: getString(rootEl, \"selectionMode\", selectionModes),\n      selectedValue: getStringList(rootEl, \"selectedValue\"),\n      typeahead: getBoolean(rootEl, \"typeahead\"),\n      collection,\n      onCheckedChange(details) {\n        const eventName = getString(rootEl, \"onCheckedChange\");\n        if (eventName) {\n          rootEl.dispatchEvent(new CustomEvent(eventName, { detail: details }));\n        }\n      },\n      onExpandedChange(details) {\n        const eventName = getString(rootEl, \"onExpandedChange\");\n        if (eventName) {\n          rootEl.dispatchEvent(new CustomEvent(eventName, { detail: details }));\n        }\n      },\n      onFocusChange(details) {\n        const eventName = getString(rootEl, \"onFocusChange\");\n        if (eventName) {\n          rootEl.dispatchEvent(new CustomEvent(eventName, { detail: details }));\n        }\n      },\n      onSelectionChange(details) {\n        const eventName = getString(rootEl, \"onSelectionChange\");\n        if (eventName) {\n          rootEl.dispatchEvent(new CustomEvent(eventName, { detail: details }));\n        }\n      },\n    });\n    treeViewComponent.collection = collection;\n    treeViewComponent.init();\n    treeViewComponent.el.addEventListener(\"tree-view:set-value\", (event) => {\n      const { value } = (event as CustomEvent<{ value: string[] }>).detail;\n      const current = treeViewComponent.api.selectedValue;\n      if (!arraysEqualUnordered(current, value)) {\n        treeViewComponent.api.setSelectedValue(value);\n      }\n    });\n  });\n}\n"],
  "mappings": "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",
  "names": ["createAnatomy", "name", "parts", "values", "isEmpty", "part", "newName", "prev", "toKebabCase", "value", "v", "toArray", "v", "first", "v", "last", "has", "v", "t", "add", "items", "remove", "uniq", "v", "diff", "a", "b", "set", "t", "addOrRemove", "item", "has", "remove", "add", "partition", "arr", "fn", "pass", "fail", "value", "isArrayLike", "isArrayEqual", "a", "b", "i", "isEqual", "keys", "length", "key", "isArray", "v", "isObjectLike", "v", "isObject", "isArray", "isString", "v", "isFunction", "hasProp", "obj", "prop", "baseGetTag", "v", "fnToString", "objectCtorString", "isPlainObject", "isObjectLike", "isFrameworkElement", "proto", "Ctor", "isReactElement", "x", "isVueElement", "runIfFn", "a", "identity", "v", "floor", "abs", "round", "min", "max", "pow", "sign", "compact", "obj", "isPlainObject", "keys", "key", "filtered", "value", "splitProps", "props", "keys", "rest", "result", "keySet", "ownKeys", "key", "createSplitProps", "_tick", "_tick", "warn", "a", "m", "c", "ensure", "c", "m", "__defProp", "__defNormalProp", "obj", "key", "value", "__publicField", "access", "node", "indexPath", "options", "i", "ancestorIndexPaths", "indexPaths", "sortedPaths", "sortIndexPaths", "result", "seen", "key", "compareIndexPaths", "a", "b", "find", "found", "visit", "child", "findAll", "findIndexPath", "reduce", "flatMap", "filter", "predicate", "create", "getChildren", "filterRecursive", "node2", "children", "filteredChildren", "index", "childIndexPath", "filteredChild", "isRoot", "nodeMatches", "hasFilteredChildren", "flatten", "rootNode", "nodes", "idx", "idxMap", "parentMap", "_children", "parent", "_parent", "_index", "insertOperation", "removeOperation", "indexes", "replaceOperation", "splitIndexPath", "getInsertionOperations", "operations", "parentIndexPath", "parentKey", "operation", "getRemovalOperations", "indexesToRemove", "value", "getReplaceOperations", "mutate", "map", "_", "updatedChildren", "adjustedIndex", "removedIndex", "splice", "array", "start", "deleteCount", "items", "childrenMap", "keyIndexPath", "transformed", "parentChildren", "insert2", "at", "state", "replace", "remove", "move2", "_ancestorIndexPaths", "nodesToInsert", "onEnter", "onLeave", "stack", "getIndexPath", "wrapper", "enterResult", "currentIndex", "TreeCollection", "_TreeCollection", "__publicField", "other", "isEqual", "fallbackMethods", "valueOrIndexPath", "firstChild", "opts", "lastChild", "values", "v", "v2", "acc", "valuePath", "currentPath", "valueIndexPath", "nextNode", "nodeValue", "previousNode", "parentNode", "nodeIndexPath", "skip", "rest", "siblings", "sibling", "depth", "to", "nextIndex2", "fromIndexPaths", "toIndexPath", "filteredRoot", "fallbackMethods", "node", "isObject", "hasProp", "__defProp", "__defNormalProp", "obj", "key", "value", "__publicField", "wrap", "v", "idx", "_", "index", "isObject", "v", "dataAttr", "guard", "ariaAttr", "ELEMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "isHTMLElement", "el", "isObject", "isDocument", "isWindow", "isNode", "el", "isObject", "isShadowRoot", "DOCUMENT_FRAGMENT_NODE", "isInputElement", "isHTMLElement", "isAnchorElement", "isActiveElement", "element", "rootNode", "getActiveElement", "TEXTAREA_SELECT_REGEX", "isEditableElement", "el", "isHTMLElement", "isInputElement", "getDocument", "el", "isDocument", "isWindow", "getWindow", "el", "isShadowRoot", "isDocument", "isHTMLElement", "getActiveElement", "rootNode", "activeElement", "getComposedPath", "event", "getEventTarget", "isComposingEvent", "event", "getNativeEvent", "isLeftClick", "isModifierKey", "keyMap", "rtlKeyMap", "getEventKey", "event", "options", "dir", "orientation", "key", "getNativeEvent", "getDescriptor", "el", "options", "type", "property", "proto", "getWindow", "getElementType", "setElementValue", "value", "AnimationFrame", "_AnimationFrame", "__publicField", "fn", "raf", "frame", "defaultItemToId", "v", "itemById", "id", "itemToId", "item", "indexOfId", "sanitize", "str", "char", "code", "getValueText", "el", "match", "valueText", "query2", "getByText", "v", "text", "currentId", "itemToId", "defaultItemToId", "index", "indexOfId", "items", "wrap", "item", "getByTypeaheadImpl", "baseItems", "options", "state2", "activeId", "key", "timeout", "itemToId", "search", "query2", "char", "items", "next", "getByText", "cleanup", "update", "value", "getByTypeahead", "isValidTypeaheadEvent", "event", "createGuards", "guards", "params", "str", "guard", "MachineStatus", "MachineStatus2", "INIT_STATE", "createScope", "props", "getRootNode", "getDoc", "getDocument", "getActiveElement", "isActiveElement", "id", "createNormalizer", "fn", "_target", "key", "props", "createProps", "anatomy", "createAnatomy", "parts", "collection", "options", "TreeCollection", "getRootId", "ctx", "getLabelId", "getNodeId", "value", "getTreeId", "focusNode", "getRenameInputId", "getRenameInputEl", "getCheckedState", "collection2", "node", "checkedValue", "childValues", "allChecked", "v", "someChecked", "toggleBranchChecked", "child", "uniq", "remove", "add", "getCheckedValueMap", "map", "isBranch", "checked", "connect", "service", "normalize", "context", "scope", "computed", "prop", "send", "expandedValue", "selectedValue", "isTypingAhead", "focusedValue", "loadingStatus", "renamingValue", "getNodeState", "props2", "indexPath", "firstNode", "firstNodeValue", "parentNode", "_selectedValue", "_expandedValue", "label", "parts", "event", "isComposingEvent", "target", "getEventTarget", "isEditableElement", "nodeId", "isBranchNode", "keyMap", "event2", "isModifierKey", "isAnchorElement", "canRenameFn", "node2", "key", "getEventKey", "exec", "getByTypeahead", "nodeState", "dataAttr", "ariaAttr", "isLeftClick", "isMetaKey", "itemState", "checkedState", "expandBranches", "params", "values", "refs", "prev", "loadedValues", "loadingValues", "partition", "nodeWithChildren", "nodeWithoutChildren", "id", "acc", "nodesToLoad", "valuePath", "pendingAborts", "loadChildren", "ensure", "proms", "existingAbort", "abortController", "results", "loadedValues2", "nodeWithErrors", "nextLoadingStatus", "collection3", "result", "index", "skipFn", "and", "createGuards", "machine", "collection", "bindable", "getContext", "isEqual", "nodes", "isArray", "last", "toArray", "action", "isExpanded", "valuesToExpand", "diff", "firstValue", "scrollToNode", "raf", "lastNode", "lastValue", "branchNode", "nextNode", "nextValue", "prevNode", "prevValue", "parentValue", "elements", "addOrRemove", "branchValues", "anchorValue", "first", "targetValue", "hits", "nodeValue", "currentSelection", "current", "aborts", "abort", "onRenameStartFn", "trimmedLabel", "onBeforeRenameFn", "inputEl", "setElementValue", "scrollToIndexFn", "visibleNodes", "i", "props", "createProps", "splitProps", "createSplitProps", "itemProps", "splitItemProps", "TRACK_MEMO_SYMBOL", "GET_ORIGINAL_SYMBOL", "getProto", "objectsToTrack", "isObjectToTrack", "obj", "getUntracked", "obj", "isObjectToTrack", "GET_ORIGINAL_SYMBOL", "markToTrack", "mark", "objectsToTrack", "glob", "globalRef", "key", "value", "g", "refSet", "isReactElement", "x", "isVueElement", "isDOMElement", "isElement", "isObject", "canProxy", "isDev", "proxyStateMap", "globalRef", "buildProxyFunction", "objectIs", "newProxy", "target", "handler", "snapCache", "createSnapshot", "version", "cache", "snap", "markToTrack", "key", "value", "refSet", "snapshot", "proxyCache", "versionHolder", "proxyFunction2", "initialObject", "isObject", "found", "listeners", "notifyUpdate", "op", "nextVersion", "listener", "checkVersion", "ensureVersion", "nextCheckVersion", "propProxyStates", "propProxyState", "propVersion", "createPropListener", "prop", "newOp", "addPropListener", "isDev", "remove", "removePropListener", "entry", "addListener", "prevRemove", "baseObject", "proxyObject", "prevValue", "deleted", "receiver", "hasPrevValue", "getUntracked", "nextValue", "canProxy", "proxy", "childProxyState", "proxyState", "desc", "proxyFunction", "subscribe", "callback", "notifyInSync", "promise", "ops", "isListenerActive", "removeListener", "__defProp", "__defNormalProp", "obj", "key", "value", "__publicField", "propMap", "caseSensitiveSvgAttrs", "toStyleString", "style", "string", "match", "normalizeProps", "createNormalizer", "props", "acc", "normalizedKey", "prevAttrsMap", "assignableProps", "caseSensitiveSvgAttrs2", "isSvgElement", "node", "getAttributeName", "attrName", "spreadProps", "attrs", "oldAttrs", "attrKeys", "addEvt", "e", "f", "remEvt", "onEvents", "attr", "others", "setup", "teardown", "apply", "oldValue", "evt", "bindable", "initial", "eq", "store", "proxy", "controlled", "nextValue", "prev", "next", "isFunction", "prevValue", "_fn", "defaultValue", "createRefs", "refs", "ref", "VanillaMachine", "machine", "userProps", "state", "values", "tag", "args", "event", "MachineStatus", "currentState", "eventType", "transitions", "transition", "target", "changed", "keys", "strs", "fns", "s", "fn", "warn", "str", "cleanups", "cleanup", "toArray", "t", "result", "isString", "index", "deps", "dep", "isEqual", "identity", "id", "ids", "getRootNode", "runIfFn", "createScope", "prop", "__props", "compact", "context", "ctx", "computed", "item", "unsub", "subscribe", "current", "nextState", "prevState", "INIT_STATE", "cleanup2", "Component", "el", "props", "spreadProps", "node", "attrs", "normalizedAttrs", "attrName", "value", "lowerAttrName", "renderPart", "root", "name", "api", "propsToSend", "camelizedName", "word", "index", "getterName", "parts", "e", "componentRoot", "part", "props", "isPropMap", "prop", "type", "getter", "getString", "getBoolean", "getNumber", "getStringList", "key", "result", "childrenValue", "v", "renderNode", "root", "name", "api", "tree", "parts", "getterName", "_match", "_prefix", "letter", "findNodeById", "node", "id", "path", "i", "found", "part", "indexPath", "props", "spreadProps", "label", "getString", "element", "attrName", "validValues", "value", "getStringList", "v", "getNumber", "raw", "parsed", "getBoolean", "generateId", "fallbackId", "arraysEqualUnordered", "a", "b", "v", "loadJsonTreeNodes", "path", "script", "e", "buildNodeTreeFromDOM", "container", "rootEl", "processElement", "element", "part", "id", "name", "branchContent", "childNodes", "child", "childPart", "childEl", "children", "el", "getString", "TreeView", "Component", "props", "VanillaMachine", "machine", "connect", "normalizeProps", "treeEl", "noIcon", "getBoolean", "noIndicator", "folderIconSvg", "docIconSvg", "chevronIconSvg", "renderNodeRecursive", "node", "parentEl", "branchEl", "branchControl", "branchText", "branchIndicator", "branchIndentGuide", "itemEl", "childNode", "parts", "renderPart", "items", "item", "renderNode", "initTreeView", "doc", "selector", "directions", "selectionModes", "jsonPath", "rootNode", "collection", "treeViewComponent", "generateId", "getStringList", "details", "eventName", "event", "value", "current", "arraysEqualUnordered"]
}
