{"version":3,"file":"app.js","names":["isObject","getAnimatableNone","mixNumber","mixNumber","mixNumber","mixNumber","getValueTransition","getValueTransition","mixNumber","bound","bound","bound","bound","Alpine"],"sources":["../../../../../node_modules/.pnpm/@alpinejs+csp@3.17.4/node_modules/@alpinejs/csp/dist/module.esm.js","../../../../../node_modules/.pnpm/htmx.org@2.0.10/node_modules/htmx.org/dist/htmx.esm.js","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/array.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/clamp.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/errors.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/global-config.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/is-numerical-string.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/is-object.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/is-zero-value-string.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/memo.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/noop.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/pipe.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/progress.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/subscription-manager.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/time-conversion.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/velocity-per-second.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/wrap.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/modifiers/mirror.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/modifiers/reverse.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/back.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/anticipate.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/circ.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/ease.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/utils/get-easing-for-segment.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.mjs","../../../../../node_modules/.pnpm/motion-utils@13.3.0/node_modules/motion-utils/dist/es/easing/utils/map.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/frameloop/order.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/frameloop/render-step.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/frameloop/batcher.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/frameloop/frame.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/sanitize.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/numbers/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/float-regex.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/utils.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/hex.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/numbers/units.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/color-regex.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/complex/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/immediate.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/number.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/color.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/visibility.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/complex.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/mix/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/spring.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/interpolate.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/notify-inspector.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/complex/filter.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/int.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/maps/transform.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/maps/number.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/maps/defaults.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/dom/is-css-var.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/dom/style-set.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/is-animatable.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/GroupAnimation.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/GroupAnimationWithThen.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/utils/keys-position.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/utils/is-motion-value.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/auto.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/test.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/dimensions.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/animate/effects.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/is-html-element.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/is-svg-element.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/MotionValueState.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/utils/create-effect.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/style/transform.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/style/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/attr/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/svg/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/projection/geometry/conversion.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/projection/utils/measure.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/animate/element.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/effects/prop/index.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/utils/stagger.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/render/store.mjs","../../../../../node_modules/.pnpm/motion-dom@13.3.0/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/animate/resolve-subjects.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/utils/calc-repeat-duration.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/utils/edit.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/utils/normalize-times.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/utils/sort.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/sequence/create.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/animate/subject.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/animate/sequence.mjs","../../../../../node_modules/.pnpm/framer-motion@13.4.0/node_modules/framer-motion/dist/es/animation/animate/index.mjs","../../../../../frontend/scripts/ui-dates.js","../../../../../frontend/scripts/auctions.js","../../../../../frontend/scripts/payment-window.js","../../../../../frontend/scripts/offer-window.js","../../../../../frontend/scripts/form-busy.js","../../../../../frontend/scripts/payment-extension.js","../../../../../frontend/scripts/characters.js","../../../../../frontend/scripts/support.js","../../../../../frontend/scripts/home-gallery.js","../../../../../frontend/scripts/motion-preference.js","../../../../../frontend/scripts/form-accessibility.js","../../../../../frontend/scripts/search.js","../../../../../frontend/scripts/app.js"],"sourcesContent":["// packages/alpinejs/src/scheduler.js\nvar flushPending = false;\nvar flushing = false;\nvar queue = [];\nvar lastFlushedIndex = -1;\nvar queueNeedsSort = false;\nvar transactionActive = false;\nfunction scheduler(callback) {\n  queueJob(callback);\n}\nfunction startTransaction() {\n  transactionActive = true;\n}\nfunction commitTransaction() {\n  transactionActive = false;\n  queueFlush();\n}\nfunction queueJob(job) {\n  if (!queue.includes(job)) {\n    queue.push(job);\n    if (job._x_schedulerPriority !== void 0)\n      queueNeedsSort = true;\n  }\n  queueFlush();\n}\nfunction dequeueJob(job) {\n  let index = queue.indexOf(job);\n  if (index !== -1 && index > lastFlushedIndex)\n    queue.splice(index, 1);\n}\nfunction queueFlush() {\n  if (!flushing && !flushPending) {\n    if (transactionActive)\n      return;\n    flushPending = true;\n    queueMicrotask(flushJobs);\n  }\n}\nfunction flushJobs() {\n  flushPending = false;\n  flushing = true;\n  for (let i = 0; i < queue.length; i++) {\n    if (queueNeedsSort)\n      sortPendingJobs(i);\n    queue[i]();\n    lastFlushedIndex = i;\n  }\n  queue.length = 0;\n  lastFlushedIndex = -1;\n  queueNeedsSort = false;\n  flushing = false;\n}\nfunction sortPendingJobs(start2) {\n  let depths = /* @__PURE__ */ new Map();\n  let sorted = queue.slice(start2).sort((a, b) => compareJobs(a, b, depths));\n  for (let i = 0; i < sorted.length; i++) {\n    queue[start2 + i] = sorted[i];\n  }\n  queueNeedsSort = false;\n}\nfunction compareJobs(a, b, depths) {\n  if (!isStructural(a))\n    return isStructural(b) ? 1 : 0;\n  if (!isStructural(b))\n    return -1;\n  let depthDifference = getElementDepth(a._x_schedulerPriority.el, depths) - getElementDepth(b._x_schedulerPriority.el, depths);\n  return depthDifference || a._x_schedulerPriority.order - b._x_schedulerPriority.order;\n}\nfunction isStructural(job) {\n  return job._x_schedulerPriority !== void 0;\n}\nfunction getElementDepth(el, depths) {\n  if (depths.has(el))\n    return depths.get(el);\n  let depth = 0;\n  let owner = el;\n  while (el) {\n    depth++;\n    if (el._x_teleportBack) {\n      el = el._x_teleportBack;\n    } else if (typeof ShadowRoot === \"function\" && el.parentNode instanceof ShadowRoot) {\n      el = el.parentNode.host;\n    } else {\n      el = el.parentElement;\n    }\n  }\n  depths.set(owner, depth);\n  return depth;\n}\n\n// packages/alpinejs/src/reactivity.js\nvar reactive;\nvar effect;\nvar release;\nvar raw;\nvar nextStructuralEffectOrder = 0;\nvar shouldSchedule = true;\nfunction disableEffectScheduling(callback) {\n  shouldSchedule = false;\n  callback();\n  shouldSchedule = true;\n}\nfunction setReactivityEngine(engine) {\n  reactive = engine.reactive;\n  release = engine.release;\n  effect = (callback) => engine.effect(callback, { scheduler: (task) => {\n    if (shouldSchedule) {\n      scheduler(task);\n    } else {\n      task();\n    }\n  } });\n  raw = engine.raw;\n}\nfunction overrideEffect(override) {\n  effect = override;\n}\nfunction elementBoundEffect(el) {\n  let cleanup = () => {\n  };\n  let wrappedEffect = (callback, options) => {\n    let priority = options?.priority === \"structural\" ? nextStructuralEffectOrder++ : void 0;\n    let effectReference = effect(callback);\n    if (priority !== void 0 && effectReference !== void 0) {\n      effectReference._x_schedulerPriority = { el, order: priority };\n    }\n    if (!el._x_effects) {\n      el._x_effects = /* @__PURE__ */ new Set();\n      el._x_runEffects = () => {\n        el._x_effects.forEach((i) => i());\n      };\n    }\n    el._x_effects.add(effectReference);\n    cleanup = () => {\n      if (effectReference === void 0)\n        return;\n      el._x_effects.delete(effectReference);\n      release(effectReference);\n    };\n    return effectReference;\n  };\n  return [wrappedEffect, () => {\n    cleanup();\n  }];\n}\nfunction watch(getter, callback) {\n  let firstTime = true;\n  let oldValue;\n  let oldValueJSON;\n  let effectReference = effect(() => {\n    let value = getter();\n    let newJSON = JSON.stringify(value);\n    if (!firstTime) {\n      if (typeof value === \"object\" || value !== oldValue) {\n        let previousValue = typeof oldValue === \"object\" ? JSON.parse(oldValueJSON) : oldValue;\n        queueMicrotask(() => {\n          callback(value, previousValue);\n        });\n      }\n    }\n    oldValue = value;\n    oldValueJSON = newJSON;\n    firstTime = false;\n  });\n  return () => {\n    dequeueJob(effectReference);\n    release(effectReference);\n  };\n}\nasync function transaction(callback) {\n  startTransaction();\n  try {\n    await callback();\n    await Promise.resolve();\n  } finally {\n    commitTransaction();\n  }\n}\n\n// packages/alpinejs/src/mutation.js\nvar onAttributeAddeds = [];\nvar onElRemoveds = [];\nvar onElAddeds = [];\nfunction onElAdded(callback) {\n  onElAddeds.push(callback);\n}\nfunction onElRemoved(el, callback) {\n  if (typeof callback === \"function\") {\n    if (!el._x_cleanups)\n      el._x_cleanups = [];\n    el._x_cleanups.push(callback);\n  } else {\n    callback = el;\n    onElRemoveds.push(callback);\n  }\n}\nfunction onAttributesAdded(callback) {\n  onAttributeAddeds.push(callback);\n}\nfunction onAttributeRemoved(el, name, callback) {\n  if (!el._x_attributeCleanups)\n    el._x_attributeCleanups = {};\n  if (!el._x_attributeCleanups[name])\n    el._x_attributeCleanups[name] = [];\n  el._x_attributeCleanups[name].push(callback);\n}\nfunction cleanupAttributes(el, names) {\n  if (!el._x_attributeCleanups)\n    return;\n  Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {\n    if (names === void 0 || names.includes(name)) {\n      value.forEach((i) => i());\n      delete el._x_attributeCleanups[name];\n    }\n  });\n}\nfunction cleanupElement(el) {\n  el._x_effects?.forEach(dequeueJob);\n  while (el._x_cleanups?.length)\n    el._x_cleanups.pop()();\n}\nvar observer = new MutationObserver(onMutate);\nvar currentlyObserving = false;\nfunction startObservingMutations() {\n  observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true });\n  currentlyObserving = true;\n}\nfunction stopObservingMutations() {\n  flushObserver();\n  observer.disconnect();\n  currentlyObserving = false;\n}\nvar queuedMutations = [];\nfunction flushObserver() {\n  let records = observer.takeRecords();\n  queuedMutations.push(() => records.length > 0 && onMutate(records));\n  let queueLengthWhenTriggered = queuedMutations.length;\n  queueMicrotask(() => {\n    if (queuedMutations.length === queueLengthWhenTriggered) {\n      while (queuedMutations.length > 0)\n        queuedMutations.shift()();\n    }\n  });\n}\nfunction flushPendingMutations() {\n  while (queuedMutations.length > 0)\n    queuedMutations.shift()();\n  let records = observer.takeRecords();\n  if (records.length > 0)\n    onMutate(records);\n}\nfunction mutateDom(callback) {\n  if (!currentlyObserving)\n    return callback();\n  stopObservingMutations();\n  try {\n    return callback();\n  } finally {\n    startObservingMutations();\n  }\n}\nvar isCollecting = false;\nvar deferredMutations = [];\nfunction deferMutations() {\n  isCollecting = true;\n}\nfunction flushAndStopDeferringMutations() {\n  isCollecting = false;\n  onMutate(deferredMutations);\n  deferredMutations = [];\n}\nfunction onMutate(mutations) {\n  if (isCollecting) {\n    deferredMutations = deferredMutations.concat(mutations);\n    return;\n  }\n  let addedNodes = [];\n  let removedNodes = /* @__PURE__ */ new Set();\n  let addedAttributes = /* @__PURE__ */ new Map();\n  let removedAttributes = /* @__PURE__ */ new Map();\n  for (let i = 0; i < mutations.length; i++) {\n    if (mutations[i].target._x_ignoreMutationObserver)\n      continue;\n    if (mutations[i].type === \"childList\") {\n      mutations[i].removedNodes.forEach((node) => {\n        if (node.nodeType !== 1)\n          return;\n        if (!node._x_marker)\n          return;\n        removedNodes.add(node);\n      });\n      mutations[i].addedNodes.forEach((node) => {\n        if (node.nodeType !== 1)\n          return;\n        if (removedNodes.has(node)) {\n          removedNodes.delete(node);\n          return;\n        }\n        if (node._x_marker)\n          return;\n        addedNodes.push(node);\n      });\n    }\n    if (mutations[i].type === \"attributes\") {\n      let el = mutations[i].target;\n      let name = mutations[i].attributeName;\n      let oldValue = mutations[i].oldValue;\n      let add = () => {\n        if (!addedAttributes.has(el))\n          addedAttributes.set(el, []);\n        addedAttributes.get(el).push({ name, value: el.getAttribute(name) });\n      };\n      let remove2 = () => {\n        if (!removedAttributes.has(el))\n          removedAttributes.set(el, []);\n        removedAttributes.get(el).push(name);\n      };\n      if (el.hasAttribute(name) && oldValue === null) {\n        add();\n      } else if (el.hasAttribute(name)) {\n        remove2();\n        add();\n      } else {\n        remove2();\n      }\n    }\n  }\n  removedAttributes.forEach((attrs, el) => {\n    cleanupAttributes(el, attrs);\n  });\n  addedAttributes.forEach((attrs, el) => {\n    onAttributeAddeds.forEach((i) => i(el, attrs));\n  });\n  for (let node of removedNodes) {\n    if (addedNodes.some((i) => i.contains(node)))\n      continue;\n    onElRemoveds.forEach((i) => i(node));\n  }\n  for (let node of addedNodes) {\n    if (!node.isConnected)\n      continue;\n    onElAddeds.forEach((i) => i(node));\n  }\n  addedNodes = null;\n  removedNodes = null;\n  addedAttributes = null;\n  removedAttributes = null;\n}\n\n// packages/alpinejs/src/scope.js\nfunction scope(node) {\n  return mergeProxies(closestDataStack(node));\n}\nfunction addScopeToNode(node, data2, referenceNode) {\n  node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];\n  return () => {\n    node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);\n  };\n}\nfunction closestDataStack(node) {\n  if (node._x_dataStack)\n    return node._x_dataStack;\n  if (typeof ShadowRoot === \"function\" && node instanceof ShadowRoot) {\n    return closestDataStack(node.host);\n  }\n  if (!node.parentNode) {\n    return [];\n  }\n  return closestDataStack(node.parentNode);\n}\nfunction mergeProxies(objects) {\n  return new Proxy({ objects }, mergeProxyTrap);\n}\nfunction keyInPrototypeChain(obj, key) {\n  if (obj === null || obj === Object.prototype)\n    return null;\n  if (Object.prototype.hasOwnProperty.call(obj, key))\n    return obj;\n  return keyInPrototypeChain(Object.getPrototypeOf(obj), key);\n}\nvar mergeProxyTrap = {\n  ownKeys({ objects }) {\n    return Array.from(\n      new Set(objects.flatMap((i) => Object.keys(i)))\n    );\n  },\n  has({ objects }, name) {\n    if (name == Symbol.unscopables)\n      return false;\n    return objects.some(\n      (obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name)\n    );\n  },\n  get({ objects }, name, thisProxy) {\n    if (name == \"toJSON\")\n      return collapseProxies;\n    return Reflect.get(\n      objects.find(\n        (obj) => Reflect.has(obj, name)\n      ) || {},\n      name,\n      thisProxy\n    );\n  },\n  set({ objects }, name, value, thisProxy) {\n    let target;\n    for (const obj of objects) {\n      target = keyInPrototypeChain(obj, name);\n      if (target)\n        break;\n    }\n    if (!target)\n      target = objects[objects.length - 1];\n    const descriptor = Object.getOwnPropertyDescriptor(target, name);\n    if (descriptor?.set && descriptor?.get)\n      return descriptor.set.call(thisProxy, value) || true;\n    return Reflect.set(target, name, value);\n  }\n};\nfunction collapseProxies() {\n  let keys = Reflect.ownKeys(this);\n  return keys.reduce((acc, key) => {\n    acc[key] = Reflect.get(this, key);\n    return acc;\n  }, {});\n}\n\n// packages/alpinejs/src/interceptor.js\nfunction initInterceptors(data2, cleanup = () => {\n}) {\n  let isObject3 = (val) => typeof val === \"object\" && !Array.isArray(val) && val !== null;\n  let recurse = (obj, basePath = \"\") => {\n    Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {\n      if (enumerable === false || value === void 0)\n        return;\n      if (typeof value === \"object\" && value !== null && value.__v_skip)\n        return;\n      let path = basePath === \"\" ? key : `${basePath}.${key}`;\n      if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n        obj[key] = value.initialize(data2, path, key, cleanup);\n      } else {\n        if (isObject3(value) && value !== obj && !(value instanceof Element)) {\n          recurse(value, path);\n        }\n      }\n    });\n  };\n  return recurse(data2);\n}\nfunction interceptor(callback, mutateObj = () => {\n}) {\n  let obj = {\n    initialValue: void 0,\n    _x_interceptor: true,\n    initialize(data2, path, key, cleanup) {\n      return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key, cleanup);\n    }\n  };\n  mutateObj(obj);\n  return (initialValue) => {\n    if (typeof initialValue === \"object\" && initialValue !== null && initialValue._x_interceptor) {\n      let initialize = obj.initialize.bind(obj);\n      obj.initialize = (data2, path, key, cleanup) => {\n        let innerValue = initialValue.initialize(data2, path, key, cleanup);\n        obj.initialValue = innerValue;\n        return initialize(data2, path, key, cleanup);\n      };\n    } else {\n      obj.initialValue = initialValue;\n    }\n    return obj;\n  };\n}\nfunction get(obj, path) {\n  return path.split(\".\").reduce((carry, segment) => carry[segment], obj);\n}\nfunction set(obj, path, value) {\n  if (typeof path === \"string\")\n    path = path.split(\".\");\n  if (path.length === 1)\n    obj[path[0]] = value;\n  else if (path.length === 0)\n    throw error;\n  else {\n    if (obj[path[0]])\n      return set(obj[path[0]], path.slice(1), value);\n    else {\n      obj[path[0]] = {};\n      return set(obj[path[0]], path.slice(1), value);\n    }\n  }\n}\n\n// packages/alpinejs/src/magics.js\nvar magics = {};\nfunction magic(name, callback) {\n  magics[name] = callback;\n}\nfunction injectMagics(obj, el) {\n  let memoizedUtilities = getUtilities(el);\n  Object.entries(magics).forEach(([name, callback]) => {\n    Object.defineProperty(obj, `$${name}`, {\n      get() {\n        return callback(el, memoizedUtilities);\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\nfunction getUtilities(el) {\n  let [utilities, cleanup] = getElementBoundUtilities(el);\n  let utils = { interceptor, ...utilities };\n  onElRemoved(el, cleanup);\n  return utils;\n}\n\n// packages/alpinejs/src/utils/error.js\nfunction tryCatch(el, expression, callback, ...args) {\n  try {\n    return callback(...args);\n  } catch (e) {\n    handleError(e, el, expression);\n  }\n}\nfunction handleError(...args) {\n  return errorHandler(...args);\n}\nvar errorHandler = normalErrorHandler;\nfunction setErrorHandler(handler4) {\n  errorHandler = handler4;\n}\nfunction normalErrorHandler(error2, el, expression = void 0) {\n  error2 = Object.assign(\n    error2 ?? { message: \"No error message given.\" },\n    { el, expression }\n  );\n  console.warn(`Alpine Expression Error: ${error2.message}\n\n${expression ? 'Expression: \"' + expression + '\"\\n\\n' : \"\"}`, el);\n  setTimeout(() => {\n    throw error2;\n  }, 0);\n}\n\n// packages/alpinejs/src/evaluator.js\nvar shouldAutoEvaluateFunctions = true;\nfunction dontAutoEvaluateFunctions(callback) {\n  let cache = shouldAutoEvaluateFunctions;\n  shouldAutoEvaluateFunctions = false;\n  let result = callback();\n  shouldAutoEvaluateFunctions = cache;\n  return result;\n}\nfunction evaluate(el, expression, extras = {}) {\n  let result;\n  evaluateLater(el, expression)((value) => result = value, extras);\n  return result;\n}\nfunction evaluateLater(...args) {\n  return theEvaluatorFunction(...args);\n}\nvar theEvaluatorFunction = () => {\n};\nfunction setEvaluator(newEvaluator) {\n  theEvaluatorFunction = newEvaluator;\n}\nvar theRawEvaluatorFunction;\nfunction setRawEvaluator(newEvaluator) {\n  theRawEvaluatorFunction = newEvaluator;\n}\nfunction generateEvaluatorFromFunction(dataStack, func) {\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [], context } = {}) => {\n    if (!shouldAutoEvaluateFunctions) {\n      runIfTypeOfFunction(receiver, func, mergeProxies([scope2, ...dataStack]), params);\n      return;\n    }\n    let result = func.apply(mergeProxies([scope2, ...dataStack]), params);\n    runIfTypeOfFunction(receiver, result);\n  };\n}\nfunction runIfTypeOfFunction(receiver, value, scope2, params, el) {\n  if (shouldAutoEvaluateFunctions && typeof value === \"function\") {\n    let result = value.apply(scope2, params);\n    if (result instanceof Promise) {\n      result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));\n    } else {\n      receiver(result);\n    }\n  } else if (typeof value === \"object\" && value instanceof Promise) {\n    value.then((i) => receiver(i));\n  } else {\n    receiver(value);\n  }\n}\nfunction evaluateRaw(...args) {\n  return theRawEvaluatorFunction(...args);\n}\n\n// packages/alpinejs/src/directives.js\nvar prefixAsString = \"x-\";\nfunction prefix(subject = \"\") {\n  return prefixAsString + subject;\n}\nfunction setPrefix(newPrefix) {\n  prefixAsString = newPrefix;\n}\nvar directiveHandlers = {};\nfunction directive(name, callback) {\n  directiveHandlers[name] = callback;\n  return {\n    before(directive2) {\n      if (!directiveHandlers[directive2]) {\n        console.warn(String.raw`Cannot find directive \\`${directive2}\\`. \\`${name}\\` will use the default order of execution`);\n        return;\n      }\n      const pos = directiveOrder.indexOf(directive2);\n      directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf(\"DEFAULT\"), 0, name);\n    }\n  };\n}\nfunction directiveExists(name) {\n  return Object.keys(directiveHandlers).includes(name);\n}\nfunction directives(el, attributes, originalAttributeOverride) {\n  attributes = Array.from(attributes);\n  if (el._x_virtualDirectives) {\n    let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value }));\n    let staticAttributes = attributesOnly(vAttributes);\n    vAttributes = vAttributes.map((attribute) => {\n      if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n        return {\n          name: `x-bind:${attribute.name}`,\n          value: `\"${attribute.value}\"`\n        };\n      }\n      return attribute;\n    });\n    attributes = attributes.concat(vAttributes);\n  }\n  let transformedAttributeMap = {};\n  let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);\n  return directives2.map((directive2) => {\n    return getDirectiveHandler(el, directive2);\n  });\n}\nfunction attributesOnly(attributes) {\n  return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));\n}\nvar isDeferringHandlers = false;\nvar directiveHandlerStacks = /* @__PURE__ */ new Map();\nvar currentHandlerStackKey = Symbol();\nfunction deferHandlingDirectives(callback) {\n  isDeferringHandlers = true;\n  let key = Symbol();\n  currentHandlerStackKey = key;\n  directiveHandlerStacks.set(key, []);\n  let flushHandlers = () => {\n    while (directiveHandlerStacks.get(key).length)\n      directiveHandlerStacks.get(key).shift()();\n    directiveHandlerStacks.delete(key);\n  };\n  let stopDeferring = () => {\n    isDeferringHandlers = false;\n    flushHandlers();\n  };\n  callback(flushHandlers);\n  stopDeferring();\n}\nfunction getElementBoundUtilities(el) {\n  let cleanups = [];\n  let cleanup = (callback) => cleanups.push(callback);\n  let [effect3, cleanupEffect2] = elementBoundEffect(el);\n  cleanups.push(cleanupEffect2);\n  let utilities = {\n    Alpine: alpine_default,\n    effect: effect3,\n    cleanup,\n    evaluateLater: evaluateLater.bind(evaluateLater, el),\n    evaluate: evaluate.bind(evaluate, el)\n  };\n  let doCleanup = () => cleanups.forEach((i) => i());\n  return [utilities, doCleanup];\n}\nfunction getDirectiveHandler(el, directive2) {\n  let noop = () => {\n  };\n  let handler4 = directiveHandlers[directive2.type] || noop;\n  let [utilities, cleanup] = getElementBoundUtilities(el);\n  onAttributeRemoved(el, directive2.original, cleanup);\n  let fullHandler = () => {\n    if (el._x_ignore || el._x_ignoreSelf)\n      return;\n    handler4.inline && handler4.inline(el, directive2, utilities);\n    handler4 = handler4.bind(handler4, el, directive2, utilities);\n    isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4();\n  };\n  fullHandler.runCleanups = cleanup;\n  return fullHandler;\n}\nvar startingWith = (subject, replacement) => ({ name, value }) => {\n  if (name.startsWith(subject))\n    name = name.replace(subject, replacement);\n  return { name, value };\n};\nvar into = (i) => i;\nfunction toTransformedAttributes(callback = () => {\n}) {\n  return ({ name, value }) => {\n    let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {\n      return transform(carry);\n    }, { name, value });\n    if (newName !== name)\n      callback(newName, name);\n    return { name: newName, value: newValue };\n  };\n}\nvar attributeTransformers = [];\nfunction mapAttributes(callback) {\n  attributeTransformers.push(callback);\n}\nfunction outNonAlpineAttributes({ name }) {\n  return alpineAttributeRegex().test(name);\n}\nvar alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\\\b`);\nfunction toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {\n  return ({ name, value }) => {\n    if (name === value)\n      value = \"\";\n    let typeMatch = name.match(alpineAttributeRegex());\n    let valueMatch = name.match(/:([a-zA-Z0-9\\-_:]+)/);\n    let modifiers = name.match(/\\.[^.\\]]+(?=[^\\]]*$)/g) || [];\n    let original = originalAttributeOverride || transformedAttributeMap[name] || name;\n    return {\n      type: typeMatch ? typeMatch[1] : null,\n      value: valueMatch ? valueMatch[1] : null,\n      modifiers: modifiers.map((i) => i.replace(\".\", \"\")),\n      expression: value,\n      original\n    };\n  };\n}\nvar DEFAULT = \"DEFAULT\";\nvar directiveOrder = [\n  \"ignore\",\n  \"ref\",\n  \"id\",\n  \"data\",\n  \"anchor\",\n  \"bind\",\n  \"init\",\n  \"for\",\n  \"model\",\n  \"modelable\",\n  \"transition\",\n  \"show\",\n  \"if\",\n  DEFAULT,\n  \"teleport\"\n];\nfunction byPriority(a, b) {\n  let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;\n  let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;\n  return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);\n}\n\n// packages/alpinejs/src/utils/walk.js\nfunction walk(el, callback) {\n  if (typeof ShadowRoot === \"function\" && el instanceof ShadowRoot) {\n    Array.from(el.children).forEach((el2) => walk(el2, callback));\n    return;\n  }\n  let skip = false;\n  callback(el, () => skip = true);\n  if (skip)\n    return;\n  let node = el.firstElementChild;\n  while (node) {\n    walk(node, callback, false);\n    node = node.nextElementSibling;\n  }\n}\n\n// packages/alpinejs/src/clone.js\nvar isCloning = false;\nfunction skipDuringClone(callback, fallback = () => {\n}) {\n  return (...args) => isCloning ? fallback(...args) : callback(...args);\n}\nfunction onlyDuringClone(callback) {\n  return (...args) => isCloning && callback(...args);\n}\nvar interceptors = [];\nfunction interceptClone(callback) {\n  interceptors.push(callback);\n}\nfunction cloneNode(from, to) {\n  interceptors.forEach((i) => i(from, to));\n  isCloning = true;\n  dontRegisterReactiveSideEffects(() => {\n    initTree(to, (el, callback) => {\n      callback(el, () => {\n      });\n    });\n  });\n  isCloning = false;\n}\nvar isCloningLegacy = false;\nfunction clone(oldEl, newEl) {\n  if (!newEl._x_dataStack)\n    newEl._x_dataStack = oldEl._x_dataStack;\n  isCloning = true;\n  isCloningLegacy = true;\n  dontRegisterReactiveSideEffects(() => {\n    cloneTree(newEl);\n  });\n  isCloning = false;\n  isCloningLegacy = false;\n}\nfunction cloneTree(el) {\n  let hasRunThroughFirstEl = false;\n  let shallowWalker = (el2, callback) => {\n    walk(el2, (el3, skip) => {\n      if (hasRunThroughFirstEl && isRoot(el3))\n        return skip();\n      hasRunThroughFirstEl = true;\n      callback(el3, skip);\n    });\n  };\n  initTree(el, shallowWalker);\n}\nfunction dontRegisterReactiveSideEffects(callback) {\n  let cache = effect;\n  overrideEffect((callback2, el) => {\n    let storedEffect = cache(callback2);\n    release(storedEffect);\n    return () => {\n    };\n  });\n  callback();\n  overrideEffect(cache);\n}\n\n// packages/alpinejs/src/deferInit.js\nvar activeDefers = 0;\nfunction deferInit(el, promise) {\n  let record = el._x_deferInit;\n  if (!record) {\n    record = el._x_deferInit = {\n      pending: 0,\n      ownsIgnore: !el._x_ignore,\n      queuedAttributes: /* @__PURE__ */ new Map()\n    };\n    if (record.ownsIgnore)\n      el._x_ignore = true;\n    activeDefers++;\n  }\n  record.pending++;\n  Promise.resolve(promise).catch((error2) => {\n    try {\n      handleError(error2, el);\n    } catch (error3) {\n      setTimeout(() => {\n        throw error3;\n      }, 0);\n    }\n  }).then(() => settle(el, record));\n}\nfunction settle(el, record) {\n  record.pending--;\n  if (record.pending > 0)\n    return;\n  flushPendingMutations();\n  if (record.pending > 0)\n    return;\n  if (el._x_deferInit !== record)\n    return;\n  delete el._x_deferInit;\n  if (record.ownsIgnore)\n    delete el._x_ignore;\n  activeDefers--;\n  if (!el.isConnected)\n    return;\n  replayQueuedAttributes(record);\n  initTree(el);\n}\nfunction queueAttributesForDeferredTree(el, attrs) {\n  if (activeDefers === 0)\n    return false;\n  let root = findClosest(el, (i) => i._x_deferInit);\n  if (!root)\n    return false;\n  queueInto(root._x_deferInit, el, attrs.map(({ name }) => name));\n  return true;\n}\nfunction queueInto(record, el, names) {\n  let entry = record.queuedAttributes.get(el);\n  if (!entry || entry.marker !== el._x_marker) {\n    entry = { marker: el._x_marker, names: /* @__PURE__ */ new Set() };\n    record.queuedAttributes.set(el, entry);\n  }\n  names.forEach((name) => entry.names.add(name));\n}\nfunction replayQueuedAttributes(record) {\n  record.queuedAttributes.forEach((entry, el) => {\n    if (!el.isConnected)\n      return;\n    if (!el._x_marker)\n      return;\n    if (el._x_marker !== entry.marker)\n      return;\n    let suspendedAncestor = findClosest(el, (i) => i._x_deferInit);\n    if (suspendedAncestor) {\n      queueInto(suspendedAncestor._x_deferInit, el, Array.from(entry.names));\n      return;\n    }\n    let attrs = Array.from(entry.names).filter((name) => el.hasAttribute(name)).map((name) => ({ name, value: el.getAttribute(name) }));\n    if (attrs.length === 0)\n      return;\n    directives(el, attrs).forEach((handle) => handle());\n  });\n}\ninterceptClone((from, to) => {\n  if (activeDefers === 0)\n    return;\n  if (!from || from.nodeType !== 1 || !to || to.nodeType !== 1)\n    return;\n  if (findClosest(from, (i) => i._x_deferInit))\n    to._x_ignore = true;\n});\n\n// packages/alpinejs/src/utils/dispatch.js\nfunction dispatch(el, name, detail = {}, options = {}) {\n  return el.dispatchEvent(\n    new CustomEvent(name, {\n      detail,\n      bubbles: true,\n      // Allows events to pass the shadow DOM barrier.\n      composed: true,\n      cancelable: true,\n      // Allows overriding the default event options.\n      ...options\n    })\n  );\n}\n\n// packages/alpinejs/src/utils/warn.js\nfunction warn(message, ...args) {\n  console.warn(`Alpine Warning: ${message}`, ...args);\n}\n\n// packages/alpinejs/src/lifecycle.js\nvar started = false;\nfunction start() {\n  if (started)\n    warn(\"Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.\");\n  started = true;\n  if (!document.body)\n    warn(\"Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?\");\n  dispatch(document, \"alpine:init\");\n  dispatch(document, \"alpine:initializing\");\n  startObservingMutations();\n  onElAdded((el) => initTree(el, walk));\n  onElRemoved((el) => destroyTree(el));\n  onAttributesAdded((el, attrs) => {\n    if (queueAttributesForDeferredTree(el, attrs))\n      return;\n    directives(el, attrs).forEach((handle) => handle());\n  });\n  let outNestedComponents = (el) => !closestRoot(el.parentElement, true);\n  Array.from(document.querySelectorAll(allSelectors().join(\",\"))).filter(outNestedComponents).forEach((el) => {\n    initTree(el);\n  });\n  dispatch(document, \"alpine:initialized\");\n  setTimeout(() => {\n    warnAboutMissingPlugins();\n  });\n}\nvar rootSelectorCallbacks = [];\nvar initSelectorCallbacks = [];\nfunction rootSelectors() {\n  return rootSelectorCallbacks.map((fn) => fn());\n}\nfunction allSelectors() {\n  return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());\n}\nfunction addRootSelector(selectorCallback) {\n  rootSelectorCallbacks.push(selectorCallback);\n}\nfunction addInitSelector(selectorCallback) {\n  initSelectorCallbacks.push(selectorCallback);\n}\nfunction closestRoot(el, includeInitSelectors = false) {\n  return findClosest(el, (element) => {\n    const selectors = includeInitSelectors ? allSelectors() : rootSelectors();\n    if (selectors.some((selector) => element.matches(selector)))\n      return true;\n  });\n}\nfunction findClosest(el, callback) {\n  if (!el)\n    return;\n  if (callback(el))\n    return el;\n  if (el._x_teleportBack)\n    return findClosest(el._x_teleportBack, callback);\n  if (el.parentNode instanceof ShadowRoot) {\n    return findClosest(el.parentNode.host, callback);\n  }\n  if (!el.parentElement)\n    return;\n  return findClosest(el.parentElement, callback);\n}\nfunction isRoot(el) {\n  return rootSelectors().some((selector) => el.matches(selector));\n}\nvar initInterceptors2 = [];\nfunction interceptInit(callback) {\n  initInterceptors2.push(callback);\n}\nvar markerDispenser = 1;\nfunction initTree(el, walker = walk, intercept = () => {\n}) {\n  if (findClosest(el, (i) => i._x_ignore))\n    return;\n  deferHandlingDirectives(() => {\n    walker(el, (el2, skip) => {\n      if (el2._x_marker)\n        return;\n      intercept(el2, skip);\n      initInterceptors2.forEach((i) => i(el2, skip));\n      directives(el2, el2.attributes).forEach((handle) => handle());\n      if (!el2._x_ignore)\n        el2._x_marker = markerDispenser++;\n      el2._x_ignore && skip();\n    });\n  });\n}\nfunction destroyTree(root, walker = walk) {\n  walker(root, (el) => {\n    cleanupElement(el);\n    cleanupAttributes(el);\n    delete el._x_marker;\n  });\n}\nfunction warnAboutMissingPlugins() {\n  let pluginDirectives = [\n    [\"ui\", \"dialog\", [\"[x-dialog], [x-popover]\"]],\n    [\"anchor\", \"anchor\", [\"[x-anchor]\"]],\n    [\"sort\", \"sort\", [\"[x-sort]\"]]\n  ];\n  pluginDirectives.forEach(([plugin2, directive2, selectors]) => {\n    if (directiveExists(directive2))\n      return;\n    selectors.some((selector) => {\n      if (document.querySelector(selector)) {\n        warn(`found \"${selector}\", but missing ${plugin2} plugin`);\n        return true;\n      }\n    });\n  });\n}\n\n// packages/alpinejs/src/nextTick.js\nvar tickStack = [];\nvar isHolding = false;\nfunction nextTick(callback = () => {\n}) {\n  queueMicrotask(() => {\n    isHolding || setTimeout(() => {\n      releaseNextTicks();\n    });\n  });\n  return new Promise((res) => {\n    tickStack.push(() => {\n      callback();\n      res();\n    });\n  });\n}\nfunction releaseNextTicks() {\n  isHolding = false;\n  while (tickStack.length)\n    tickStack.shift()();\n}\nfunction holdNextTicks() {\n  isHolding = true;\n}\n\n// packages/alpinejs/src/utils/classes.js\nfunction setClasses(el, value) {\n  if (Array.isArray(value)) {\n    return setClassesFromString(el, value.join(\" \"));\n  } else if (typeof value === \"object\" && value !== null) {\n    return setClassesFromObject(el, value);\n  } else if (typeof value === \"function\") {\n    return setClasses(el, value());\n  }\n  return setClassesFromString(el, value);\n}\nfunction splitClasses(classString) {\n  return classString.split(/\\s/).filter(Boolean);\n}\nfunction setClassesFromString(el, classString) {\n  let missingClasses = (classString2) => splitClasses(classString2).filter((i) => !el.classList.contains(i)).filter(Boolean);\n  let addClassesAndReturnUndo = (classes) => {\n    el.classList.add(...classes);\n    return () => {\n      el.classList.remove(...classes);\n    };\n  };\n  classString = classString === true ? classString = \"\" : classString || \"\";\n  return addClassesAndReturnUndo(missingClasses(classString));\n}\nfunction setClassesFromObject(el, classObject) {\n  let forAdd = Object.entries(classObject).flatMap(([classString, bool]) => bool ? splitClasses(classString) : false).filter(Boolean);\n  let forRemove = Object.entries(classObject).flatMap(([classString, bool]) => !bool ? splitClasses(classString) : false).filter(Boolean);\n  let added = [];\n  let removed = [];\n  forRemove.forEach((i) => {\n    if (el.classList.contains(i)) {\n      el.classList.remove(i);\n      removed.push(i);\n    }\n  });\n  forAdd.forEach((i) => {\n    if (!el.classList.contains(i)) {\n      el.classList.add(i);\n      added.push(i);\n    }\n  });\n  return () => {\n    removed.forEach((i) => el.classList.add(i));\n    added.forEach((i) => el.classList.remove(i));\n  };\n}\n\n// packages/alpinejs/src/utils/styles.js\nfunction setStyles(el, value) {\n  if (typeof value === \"object\" && value !== null) {\n    return setStylesFromObject(el, value);\n  }\n  return setStylesFromString(el, value);\n}\nfunction setStylesFromObject(el, value) {\n  let previousStyles = {};\n  Object.entries(value).forEach(([key, value2]) => {\n    previousStyles[key] = el.style[key];\n    if (!key.startsWith(\"--\")) {\n      key = kebabCase(key);\n    }\n    el.style.setProperty(key, value2);\n  });\n  setTimeout(() => {\n    if (el.style.length === 0) {\n      el.removeAttribute(\"style\");\n    }\n  });\n  return () => {\n    setStyles(el, previousStyles);\n  };\n}\nfunction setStylesFromString(el, value) {\n  let cache = el.getAttribute(\"style\", value);\n  el.setAttribute(\"style\", value);\n  return () => {\n    el.setAttribute(\"style\", cache || \"\");\n  };\n}\nfunction kebabCase(subject) {\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n// packages/alpinejs/src/utils/once.js\nfunction once(callback, fallback = () => {\n}) {\n  let called = false;\n  return function() {\n    if (!called) {\n      called = true;\n      callback.apply(this, arguments);\n    } else {\n      fallback.apply(this, arguments);\n    }\n  };\n}\n\n// packages/alpinejs/src/directives/x-transition.js\ndirective(\"transition\", (el, { value, modifiers, expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"function\")\n    expression = evaluate2(expression);\n  if (expression === false)\n    return;\n  if (!expression || typeof expression === \"boolean\") {\n    registerTransitionsFromHelper(el, modifiers, value);\n  } else {\n    registerTransitionsFromClassString(el, expression, value);\n  }\n});\nfunction registerTransitionsFromClassString(el, classString, stage) {\n  registerTransitionObject(el, setClasses, \"\");\n  let directiveStorageMap = {\n    \"enter\": (classes) => {\n      el._x_transition.enter.during = classes;\n    },\n    \"enter-start\": (classes) => {\n      el._x_transition.enter.start = classes;\n    },\n    \"enter-end\": (classes) => {\n      el._x_transition.enter.end = classes;\n    },\n    \"leave\": (classes) => {\n      el._x_transition.leave.during = classes;\n    },\n    \"leave-start\": (classes) => {\n      el._x_transition.leave.start = classes;\n    },\n    \"leave-end\": (classes) => {\n      el._x_transition.leave.end = classes;\n    }\n  };\n  directiveStorageMap[stage](classString);\n}\nfunction registerTransitionsFromHelper(el, modifiers, stage) {\n  registerTransitionObject(el, setStyles);\n  let doesntSpecify = !modifiers.includes(\"in\") && !modifiers.includes(\"out\") && !stage;\n  let transitioningIn = doesntSpecify || modifiers.includes(\"in\") || [\"enter\"].includes(stage);\n  let transitioningOut = doesntSpecify || modifiers.includes(\"out\") || [\"leave\"].includes(stage);\n  if (modifiers.includes(\"in\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index < modifiers.indexOf(\"out\"));\n  }\n  if (modifiers.includes(\"out\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index > modifiers.indexOf(\"out\"));\n  }\n  let wantsAll = !modifiers.includes(\"opacity\") && !modifiers.includes(\"scale\");\n  let wantsOpacity = wantsAll || modifiers.includes(\"opacity\");\n  let wantsScale = wantsAll || modifiers.includes(\"scale\");\n  let opacityValue = wantsOpacity ? 0 : 1;\n  let scaleValue = wantsScale ? modifierValue(modifiers, \"scale\", 95) / 100 : 1;\n  let delay = modifierValue(modifiers, \"delay\", 0) / 1e3;\n  let origin = modifierValue(modifiers, \"origin\", \"center\");\n  let property = \"opacity, transform\";\n  let durationIn = modifierValue(modifiers, \"duration\", 150) / 1e3;\n  let durationOut = modifierValue(modifiers, \"duration\", 75) / 1e3;\n  let easing = `cubic-bezier(0.4, 0.0, 0.2, 1)`;\n  if (transitioningIn) {\n    el._x_transition.enter.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationIn}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.enter.start = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n    el._x_transition.enter.end = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n  }\n  if (transitioningOut) {\n    el._x_transition.leave.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationOut}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.leave.start = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n    el._x_transition.leave.end = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n  }\n}\nfunction registerTransitionObject(el, setFunction, defaultValue = {}) {\n  if (!el._x_transition)\n    el._x_transition = {\n      enter: { during: defaultValue, start: defaultValue, end: defaultValue },\n      leave: { during: defaultValue, start: defaultValue, end: defaultValue },\n      in(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.enter.during,\n          start: this.enter.start,\n          end: this.enter.end\n        }, before, after);\n      },\n      out(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.leave.during,\n          start: this.leave.start,\n          end: this.leave.end\n        }, before, after);\n      }\n    };\n}\nwindow.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {\n  const nextTick2 = document.visibilityState === \"visible\" ? requestAnimationFrame : setTimeout;\n  let clickAwayCompatibleShow = () => nextTick2(show);\n  if (value) {\n    if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) {\n      el._x_transition.enter && (Object.entries(el._x_transition.enter.during).length || Object.entries(el._x_transition.enter.start).length || Object.entries(el._x_transition.enter.end).length) ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    } else {\n      el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    }\n    return;\n  }\n  el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => {\n    el._x_transition.out(() => {\n    }, () => resolve(hide));\n    el._x_transitioning && el._x_transitioning.beforeCancel(() => reject({ isFromCancelledTransition: true }));\n  }) : Promise.resolve(hide);\n  queueMicrotask(() => {\n    let closest = closestHide(el);\n    if (closest) {\n      if (!closest._x_hideChildren)\n        closest._x_hideChildren = [];\n      closest._x_hideChildren.push(el);\n    } else {\n      nextTick2(() => {\n        let hideAfterChildren = (el2) => {\n          let carry = Promise.all([\n            el2._x_hidePromise,\n            ...(el2._x_hideChildren || []).map(hideAfterChildren)\n          ]).then(([i]) => i?.());\n          delete el2._x_hidePromise;\n          delete el2._x_hideChildren;\n          return carry;\n        };\n        hideAfterChildren(el).catch((e) => {\n          if (!e.isFromCancelledTransition)\n            throw e;\n        });\n      });\n    }\n  });\n};\nfunction closestHide(el) {\n  let parent = el.parentNode;\n  if (!parent)\n    return;\n  return parent._x_hidePromise ? parent : closestHide(parent);\n}\nfunction transition(el, setFunction, { during, start: start2, end } = {}, before = () => {\n}, after = () => {\n}) {\n  if (el._x_transitioning)\n    el._x_transitioning.cancel();\n  if (Object.keys(during).length === 0 && Object.keys(start2).length === 0 && Object.keys(end).length === 0) {\n    before();\n    after();\n    return;\n  }\n  let undoStart, undoDuring, undoEnd;\n  performTransition(el, {\n    start() {\n      undoStart = setFunction(el, start2);\n    },\n    during() {\n      undoDuring = setFunction(el, during);\n    },\n    before,\n    end() {\n      undoStart();\n      undoEnd = setFunction(el, end);\n    },\n    after,\n    cleanup() {\n      undoDuring();\n      undoEnd();\n    }\n  });\n}\nfunction performTransition(el, stages) {\n  let interrupted, reachedBefore, reachedEnd;\n  let finish = once(() => {\n    mutateDom(() => {\n      interrupted = true;\n      if (!reachedBefore)\n        stages.before();\n      if (!reachedEnd) {\n        stages.end();\n        releaseNextTicks();\n      }\n      stages.after();\n      if (el.isConnected)\n        stages.cleanup();\n      delete el._x_transitioning;\n    });\n  });\n  el._x_transitioning = {\n    beforeCancels: [],\n    beforeCancel(callback) {\n      this.beforeCancels.push(callback);\n    },\n    cancel: once(function() {\n      while (this.beforeCancels.length) {\n        this.beforeCancels.shift()();\n      }\n      ;\n      finish();\n    }),\n    finish\n  };\n  mutateDom(() => {\n    stages.start();\n    stages.during();\n  });\n  holdNextTicks();\n  requestAnimationFrame(() => {\n    if (interrupted)\n      return;\n    let duration = Number(getComputedStyle(el).transitionDuration.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    let delay = Number(getComputedStyle(el).transitionDelay.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    if (duration === 0)\n      duration = Number(getComputedStyle(el).animationDuration.replace(\"s\", \"\")) * 1e3;\n    mutateDom(() => {\n      stages.before();\n    });\n    reachedBefore = true;\n    requestAnimationFrame(() => {\n      if (interrupted)\n        return;\n      mutateDom(() => {\n        stages.end();\n      });\n      releaseNextTicks();\n      setTimeout(el._x_transitioning.finish, duration + delay);\n      reachedEnd = true;\n    });\n  });\n}\nfunction modifierValue(modifiers, key, fallback) {\n  if (modifiers.indexOf(key) === -1)\n    return fallback;\n  const rawValue = modifiers[modifiers.indexOf(key) + 1];\n  if (!rawValue)\n    return fallback;\n  if (key === \"scale\") {\n    if (isNaN(rawValue))\n      return fallback;\n  }\n  if (key === \"duration\" || key === \"delay\") {\n    let match = rawValue.match(/([0-9]+)ms/);\n    if (match)\n      return match[1];\n  }\n  if (key === \"origin\") {\n    if ([\"top\", \"right\", \"left\", \"center\", \"bottom\"].includes(modifiers[modifiers.indexOf(key) + 2])) {\n      return [rawValue, modifiers[modifiers.indexOf(key) + 2]].join(\" \");\n    }\n  }\n  return rawValue;\n}\n\n// packages/alpinejs/src/utils/bind.js\nfunction bind(el, name, value, modifiers = []) {\n  if (!el._x_bindings)\n    el._x_bindings = reactive({});\n  el._x_bindings[name] = value;\n  name = modifiers.includes(\"camel\") ? camelCase(name) : name;\n  switch (name) {\n    case \"value\":\n      bindInputValue(el, value);\n      break;\n    case \"style\":\n      bindStyles(el, value);\n      break;\n    case \"class\":\n      bindClasses(el, value);\n      break;\n    case \"selected\":\n    case \"checked\":\n      bindAttributeAndProperty(el, name, value);\n      break;\n    default:\n      bindAttribute(el, name, value);\n      break;\n  }\n}\nfunction bindInputValue(el, value) {\n  if (isRadio(el)) {\n    if (el.attributes.value === void 0) {\n      el.value = value;\n    }\n  } else if (isCheckbox(el)) {\n    if (Number.isInteger(value)) {\n      el.value = value;\n    } else if (!Array.isArray(value) && typeof value !== \"boolean\" && ![null, void 0].includes(value)) {\n      el.value = String(value);\n    } else {\n      if (Array.isArray(value)) {\n        el.checked = value.some((val) => checkedAttrLooseCompare(val, el.value));\n      } else {\n        el.checked = !!value;\n      }\n    }\n  } else if (el.tagName === \"SELECT\") {\n    updateSelect(el, value);\n  } else if (el.tagName === \"OPTION\") {\n    bindAttribute(el, \"value\", value);\n  } else {\n    if (el.value === value && (typeof value !== \"object\" || value === null))\n      return;\n    el.value = value === void 0 ? \"\" : value;\n  }\n}\nfunction bindClasses(el, value) {\n  if (el._x_undoAddedClasses)\n    el._x_undoAddedClasses();\n  el._x_undoAddedClasses = setClasses(el, value);\n}\nfunction bindStyles(el, value) {\n  if (el._x_undoAddedStyles)\n    el._x_undoAddedStyles();\n  el._x_undoAddedStyles = setStyles(el, value);\n}\nfunction bindAttributeAndProperty(el, name, value) {\n  bindAttribute(el, name, value);\n  setPropertyIfChanged(el, name, value);\n}\nfunction bindAttribute(el, name, value) {\n  if ([null, void 0, false].includes(value) && attributeShouldntBePreservedIfFalsy(name)) {\n    el.removeAttribute(name);\n  } else {\n    if (isBooleanAttr(name))\n      value = name;\n    if (isObjectAttr(value))\n      value = JSON.stringify(value);\n    setIfChanged(el, name, value);\n  }\n}\nfunction setIfChanged(el, attrName, value) {\n  if (el.getAttribute(attrName) != value) {\n    el.setAttribute(attrName, value);\n  }\n}\nfunction setPropertyIfChanged(el, propName, value) {\n  if (el[propName] !== value) {\n    el[propName] = value;\n  }\n}\nfunction updateSelect(el, value) {\n  const arrayWrappedValue = [].concat(value).map((value2) => {\n    return value2 + \"\";\n  });\n  Array.from(el.options).forEach((option) => {\n    option.selected = arrayWrappedValue.includes(option.value);\n  });\n}\nfunction camelCase(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction checkedAttrLooseCompare(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction safeParseBoolean(rawValue) {\n  if ([1, \"1\", \"true\", \"on\", \"yes\", true].includes(rawValue)) {\n    return true;\n  }\n  if ([0, \"0\", \"false\", \"off\", \"no\", false].includes(rawValue)) {\n    return false;\n  }\n  return rawValue ? Boolean(rawValue) : null;\n}\nvar booleanAttributes = /* @__PURE__ */ new Set([\n  \"allowfullscreen\",\n  \"async\",\n  \"autofocus\",\n  \"autoplay\",\n  \"checked\",\n  \"controls\",\n  \"default\",\n  \"defer\",\n  \"disabled\",\n  \"formnovalidate\",\n  \"inert\",\n  \"ismap\",\n  \"itemscope\",\n  \"loop\",\n  \"multiple\",\n  \"muted\",\n  \"nomodule\",\n  \"novalidate\",\n  \"open\",\n  \"playsinline\",\n  \"readonly\",\n  \"required\",\n  \"reversed\",\n  \"selected\",\n  \"shadowrootclonable\",\n  \"shadowrootdelegatesfocus\",\n  \"shadowrootserializable\"\n]);\nfunction isBooleanAttr(attrName) {\n  return booleanAttributes.has(attrName);\n}\nfunction attributeShouldntBePreservedIfFalsy(name) {\n  return ![\"aria-pressed\", \"aria-checked\", \"aria-expanded\", \"aria-selected\"].includes(name);\n}\nfunction isObjectAttr(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction getBinding(el, name, fallback) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  return getAttributeBinding(el, name, fallback);\n}\nfunction extractProp(el, name, fallback, extract = true) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  if (el._x_inlineBindings && el._x_inlineBindings[name] !== void 0) {\n    let binding = el._x_inlineBindings[name];\n    binding.extract = extract;\n    return dontAutoEvaluateFunctions(() => {\n      return evaluate(el, binding.expression);\n    });\n  }\n  return getAttributeBinding(el, name, fallback);\n}\nfunction getAttributeBinding(el, name, fallback) {\n  let attr = el.getAttribute(name);\n  if (attr === null)\n    return typeof fallback === \"function\" ? fallback() : fallback;\n  if (attr === \"\")\n    return true;\n  if (isBooleanAttr(name)) {\n    return !![name, \"true\"].includes(attr);\n  }\n  return attr;\n}\nfunction isCheckbox(el) {\n  return el.type === \"checkbox\" || el.localName === \"ui-checkbox\" || el.localName === \"ui-switch\";\n}\nfunction isRadio(el) {\n  return el.type === \"radio\" || el.localName === \"ui-radio\";\n}\n\n// packages/alpinejs/src/utils/debounce.js\nfunction debounce(func, wait) {\n  let timeout;\n  return function() {\n    const context = this, args = arguments;\n    const later = function() {\n      timeout = null;\n      func.apply(context, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n}\n\n// packages/alpinejs/src/utils/throttle.js\nfunction throttle(func, limit) {\n  let inThrottle;\n  return function() {\n    let context = this, args = arguments;\n    if (!inThrottle) {\n      func.apply(context, args);\n      inThrottle = true;\n      setTimeout(() => inThrottle = false, limit);\n    }\n  };\n}\n\n// packages/alpinejs/src/entangle.js\nfunction entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {\n  let firstRun = true;\n  let outerHash;\n  let innerHash;\n  let reference = effect(() => {\n    let outer = outerGet();\n    let inner = innerGet();\n    if (firstRun) {\n      innerSet(cloneIfObject(outer));\n      firstRun = false;\n    } else {\n      let outerHashLatest = JSON.stringify(outer);\n      let innerHashLatest = JSON.stringify(inner);\n      if (outerHashLatest !== outerHash) {\n        innerSet(cloneIfObject(outer));\n      } else if (outerHashLatest !== innerHashLatest) {\n        outerSet(cloneIfObject(inner));\n      } else {\n      }\n    }\n    outerHash = JSON.stringify(outerGet());\n    innerHash = JSON.stringify(innerGet());\n  });\n  return () => {\n    dequeueJob(reference);\n    release(reference);\n  };\n}\nfunction cloneIfObject(value) {\n  return typeof value === \"object\" ? JSON.parse(JSON.stringify(value)) : value;\n}\n\n// packages/alpinejs/src/plugin.js\nfunction plugin(callback) {\n  let callbacks = Array.isArray(callback) ? callback : [callback];\n  callbacks.forEach((i) => i(alpine_default));\n}\n\n// packages/alpinejs/src/store.js\nvar stores = {};\nvar isReactive = false;\nfunction store(name, value) {\n  if (!isReactive) {\n    stores = reactive(stores);\n    isReactive = true;\n  }\n  if (value === void 0) {\n    return stores[name];\n  }\n  stores[name] = value;\n  if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n    stores[name] = value.initialize(stores, name, name, () => {\n    });\n  } else {\n    initInterceptors(stores[name]);\n  }\n  if (typeof value === \"object\" && value !== null && value.hasOwnProperty(\"init\") && typeof value.init === \"function\") {\n    stores[name].init();\n  }\n}\nfunction getStores() {\n  return stores;\n}\n\n// packages/alpinejs/src/binds.js\nvar binds = {};\nfunction bind2(name, bindings) {\n  let getBindings = typeof bindings !== \"function\" ? () => bindings : bindings;\n  if (name instanceof Element) {\n    return applyBindingsObject(name, getBindings());\n  } else {\n    binds[name] = getBindings;\n  }\n  return () => {\n  };\n}\nfunction injectBindingProviders(obj) {\n  Object.entries(binds).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback(...args);\n        };\n      }\n    });\n  });\n  return obj;\n}\nfunction applyBindingsObject(el, obj, original) {\n  let cleanupRunners = [];\n  while (cleanupRunners.length)\n    cleanupRunners.pop()();\n  let attributes = Object.entries(obj).map(([name, value]) => ({ name, value }));\n  let staticAttributes = attributesOnly(attributes);\n  attributes = attributes.map((attribute) => {\n    if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n      return {\n        name: `x-bind:${attribute.name}`,\n        value: `\"${attribute.value}\"`\n      };\n    }\n    return attribute;\n  });\n  directives(el, attributes, original).map((handle) => {\n    cleanupRunners.push(handle.runCleanups);\n    handle();\n  });\n  return () => {\n    while (cleanupRunners.length)\n      cleanupRunners.pop()();\n  };\n}\n\n// packages/alpinejs/src/datas.js\nvar datas = {};\nfunction data(name, callback) {\n  datas[name] = callback;\n}\nfunction injectDataProviders(obj, context) {\n  Object.entries(datas).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback.bind(context)(...args);\n        };\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\n\n// packages/alpinejs/src/alpine.js\nvar Alpine = {\n  get reactive() {\n    return reactive;\n  },\n  get release() {\n    return release;\n  },\n  get effect() {\n    return effect;\n  },\n  get raw() {\n    return raw;\n  },\n  get transaction() {\n    return transaction;\n  },\n  version: \"3.17.4\",\n  flushAndStopDeferringMutations,\n  dontAutoEvaluateFunctions,\n  disableEffectScheduling,\n  startObservingMutations,\n  stopObservingMutations,\n  setReactivityEngine,\n  onAttributeRemoved,\n  onAttributesAdded,\n  closestDataStack,\n  skipDuringClone,\n  onlyDuringClone,\n  addRootSelector,\n  addInitSelector,\n  setErrorHandler,\n  interceptClone,\n  addScopeToNode,\n  deferMutations,\n  mapAttributes,\n  evaluateLater,\n  interceptInit,\n  initInterceptors,\n  injectMagics,\n  setEvaluator,\n  setRawEvaluator,\n  mergeProxies,\n  extractProp,\n  findClosest,\n  onElRemoved,\n  closestRoot,\n  destroyTree,\n  interceptor,\n  // INTERNAL: not public API and is subject to change without major release.\n  transition,\n  // INTERNAL\n  setStyles,\n  // INTERNAL\n  mutateDom,\n  deferInit,\n  directive,\n  entangle,\n  throttle,\n  debounce,\n  evaluate,\n  evaluateRaw,\n  initTree,\n  nextTick,\n  prefixed: prefix,\n  prefix: setPrefix,\n  plugin,\n  magic,\n  store,\n  start,\n  clone,\n  // INTERNAL\n  cloneNode,\n  // INTERNAL\n  bound: getBinding,\n  $data: scope,\n  watch,\n  walk,\n  data,\n  bind: bind2\n};\nvar alpine_default = Alpine;\n\n// packages/csp/src/parser.js\nvar safemap = /* @__PURE__ */ new WeakMap();\nvar globals = /* @__PURE__ */ new Set();\nObject.getOwnPropertyNames(globalThis).forEach((key) => {\n  if (key === \"styleMedia\" || key === \"sharedStorage\")\n    return;\n  let value;\n  try {\n    value = globalThis[key];\n  } catch {\n    return;\n  }\n  globals.add(value);\n});\nvar Token = class {\n  constructor(type, value, start2, end) {\n    this.type = type;\n    this.value = value;\n    this.start = start2;\n    this.end = end;\n  }\n};\nvar IDENTIFIER_NAME_TYPES = [\"IDENTIFIER\", \"KEYWORD\", \"BOOLEAN\", \"NULL\", \"UNDEFINED\"];\nvar Tokenizer = class {\n  constructor(input) {\n    this.input = input;\n    this.position = 0;\n    this.tokens = [];\n  }\n  tokenize() {\n    while (this.position < this.input.length) {\n      this.skipWhitespace();\n      if (this.position >= this.input.length)\n        break;\n      const char = this.input[this.position];\n      if (this.isDigit(char)) {\n        this.readNumber();\n      } else if (this.isAlpha(char) || char === \"_\" || char === \"$\") {\n        this.readIdentifierOrKeyword();\n      } else if (char === '\"' || char === \"'\") {\n        this.readString();\n      } else if (char === \"/\" && this.peek() === \"/\") {\n        this.skipLineComment();\n      } else {\n        this.readOperatorOrPunctuation();\n      }\n    }\n    this.tokens.push(new Token(\"EOF\", null, this.position, this.position));\n    return this.tokens;\n  }\n  skipWhitespace() {\n    while (this.position < this.input.length && /\\s/.test(this.input[this.position])) {\n      this.position++;\n    }\n  }\n  skipLineComment() {\n    while (this.position < this.input.length && this.input[this.position] !== \"\\n\") {\n      this.position++;\n    }\n  }\n  isDigit(char) {\n    return /[0-9]/.test(char);\n  }\n  isAlpha(char) {\n    return /[a-zA-Z]/.test(char);\n  }\n  isAlphaNumeric(char) {\n    return /[a-zA-Z0-9_$]/.test(char);\n  }\n  peek(offset = 1) {\n    return this.input[this.position + offset] || \"\";\n  }\n  readNumber() {\n    const start2 = this.position;\n    let hasDecimal = false;\n    while (this.position < this.input.length) {\n      const char = this.input[this.position];\n      if (this.isDigit(char)) {\n        this.position++;\n      } else if (char === \".\" && !hasDecimal) {\n        hasDecimal = true;\n        this.position++;\n      } else {\n        break;\n      }\n    }\n    const value = this.input.slice(start2, this.position);\n    this.tokens.push(new Token(\"NUMBER\", parseFloat(value), start2, this.position));\n  }\n  readIdentifierOrKeyword() {\n    const start2 = this.position;\n    while (this.position < this.input.length && this.isAlphaNumeric(this.input[this.position])) {\n      this.position++;\n    }\n    const value = this.input.slice(start2, this.position);\n    const keywords = [\"true\", \"false\", \"null\", \"undefined\", \"new\", \"typeof\", \"void\", \"delete\", \"in\", \"instanceof\"];\n    if (keywords.includes(value)) {\n      if (value === \"true\" || value === \"false\") {\n        this.tokens.push(new Token(\"BOOLEAN\", value === \"true\", start2, this.position));\n      } else if (value === \"null\") {\n        this.tokens.push(new Token(\"NULL\", null, start2, this.position));\n      } else if (value === \"undefined\") {\n        this.tokens.push(new Token(\"UNDEFINED\", void 0, start2, this.position));\n      } else {\n        this.tokens.push(new Token(\"KEYWORD\", value, start2, this.position));\n      }\n    } else {\n      this.tokens.push(new Token(\"IDENTIFIER\", value, start2, this.position));\n    }\n  }\n  readString() {\n    const start2 = this.position;\n    const quote = this.input[this.position];\n    this.position++;\n    let value = \"\";\n    let escaped = false;\n    while (this.position < this.input.length) {\n      const char = this.input[this.position];\n      if (escaped) {\n        switch (char) {\n          case \"n\":\n            value += \"\\n\";\n            break;\n          case \"t\":\n            value += \"\t\";\n            break;\n          case \"r\":\n            value += \"\\r\";\n            break;\n          case \"\\\\\":\n            value += \"\\\\\";\n            break;\n          case quote:\n            value += quote;\n            break;\n          case \"u\": {\n            const codeUnit = this.input.slice(this.position + 1, this.position + 5);\n            if (/^[0-9a-fA-F]{4}$/.test(codeUnit)) {\n              value += String.fromCharCode(parseInt(codeUnit, 16));\n              this.position += 4;\n            } else {\n              value += char;\n            }\n            break;\n          }\n          default:\n            value += char;\n        }\n        escaped = false;\n      } else if (char === \"\\\\\") {\n        escaped = true;\n      } else if (char === quote) {\n        this.position++;\n        this.tokens.push(new Token(\"STRING\", value, start2, this.position));\n        return;\n      } else {\n        value += char;\n      }\n      this.position++;\n    }\n    throw new Error(`Unterminated string starting at position ${start2}`);\n  }\n  readOperatorOrPunctuation() {\n    const start2 = this.position;\n    const char = this.input[this.position];\n    const next = this.peek();\n    const nextNext = this.peek(2);\n    if (char === \"=\" && next === \"=\" && nextNext === \"=\") {\n      this.position += 3;\n      this.tokens.push(new Token(\"OPERATOR\", \"===\", start2, this.position));\n    } else if (char === \"!\" && next === \"=\" && nextNext === \"=\") {\n      this.position += 3;\n      this.tokens.push(new Token(\"OPERATOR\", \"!==\", start2, this.position));\n    } else if (char === \"=\" && next === \"=\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"==\", start2, this.position));\n    } else if (char === \"!\" && next === \"=\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"!=\", start2, this.position));\n    } else if (char === \"<\" && next === \"=\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"<=\", start2, this.position));\n    } else if (char === \">\" && next === \"=\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \">=\", start2, this.position));\n    } else if (char === \"&\" && next === \"&\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"&&\", start2, this.position));\n    } else if (char === \"|\" && next === \"|\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"||\", start2, this.position));\n    } else if (char === \"+\" && next === \"+\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"++\", start2, this.position));\n    } else if (char === \"-\" && next === \"-\") {\n      this.position += 2;\n      this.tokens.push(new Token(\"OPERATOR\", \"--\", start2, this.position));\n    } else {\n      this.position++;\n      const type = \"()[]{},.;:?\".includes(char) ? \"PUNCTUATION\" : \"OPERATOR\";\n      this.tokens.push(new Token(type, char, start2, this.position));\n    }\n  }\n};\nvar Parser = class {\n  constructor(tokens) {\n    this.tokens = tokens;\n    this.position = 0;\n  }\n  parse() {\n    if (this.isAtEnd()) {\n      throw new Error(\"Empty expression\");\n    }\n    const expr = this.parseExpression();\n    this.match(\"PUNCTUATION\", \";\");\n    if (!this.isAtEnd()) {\n      throw new Error(`Unexpected token: ${this.current().value}`);\n    }\n    return expr;\n  }\n  parseExpression() {\n    return this.parseAssignment();\n  }\n  parseAssignment() {\n    const expr = this.parseTernary();\n    if (this.match(\"OPERATOR\", \"=\")) {\n      const value = this.parseAssignment();\n      if (expr.type === \"Identifier\" || expr.type === \"MemberExpression\") {\n        return {\n          type: \"AssignmentExpression\",\n          left: expr,\n          operator: \"=\",\n          right: value\n        };\n      }\n      throw new Error(\"Invalid assignment target\");\n    }\n    return expr;\n  }\n  parseTernary() {\n    const expr = this.parseLogicalOr();\n    if (this.match(\"PUNCTUATION\", \"?\")) {\n      const consequent = this.parseExpression();\n      this.consume(\"PUNCTUATION\", \":\");\n      const alternate = this.parseExpression();\n      return {\n        type: \"ConditionalExpression\",\n        test: expr,\n        consequent,\n        alternate\n      };\n    }\n    return expr;\n  }\n  parseLogicalOr() {\n    let expr = this.parseLogicalAnd();\n    while (this.match(\"OPERATOR\", \"||\")) {\n      const operator = this.previous().value;\n      const right = this.parseLogicalAnd();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseLogicalAnd() {\n    let expr = this.parseEquality();\n    while (this.match(\"OPERATOR\", \"&&\")) {\n      const operator = this.previous().value;\n      const right = this.parseEquality();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseEquality() {\n    let expr = this.parseRelational();\n    while (this.match(\"OPERATOR\", \"==\", \"!=\", \"===\", \"!==\")) {\n      const operator = this.previous().value;\n      const right = this.parseRelational();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseRelational() {\n    let expr = this.parseAdditive();\n    while (this.match(\"OPERATOR\", \"<\", \">\", \"<=\", \">=\")) {\n      const operator = this.previous().value;\n      const right = this.parseAdditive();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseAdditive() {\n    let expr = this.parseMultiplicative();\n    while (this.match(\"OPERATOR\", \"+\", \"-\")) {\n      const operator = this.previous().value;\n      const right = this.parseMultiplicative();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseMultiplicative() {\n    let expr = this.parseUnary();\n    while (this.match(\"OPERATOR\", \"*\", \"/\", \"%\")) {\n      const operator = this.previous().value;\n      const right = this.parseUnary();\n      expr = {\n        type: \"BinaryExpression\",\n        operator,\n        left: expr,\n        right\n      };\n    }\n    return expr;\n  }\n  parseUnary() {\n    if (this.match(\"OPERATOR\", \"++\", \"--\")) {\n      const operator = this.previous().value;\n      const argument = this.parseUnary();\n      return {\n        type: \"UpdateExpression\",\n        operator,\n        argument,\n        prefix: true\n      };\n    }\n    if (this.match(\"OPERATOR\", \"!\", \"-\", \"+\")) {\n      const operator = this.previous().value;\n      const argument = this.parseUnary();\n      return {\n        type: \"UnaryExpression\",\n        operator,\n        argument,\n        prefix: true\n      };\n    }\n    return this.parsePostfix();\n  }\n  parsePostfix() {\n    let expr = this.parseMember();\n    if (this.match(\"OPERATOR\", \"++\", \"--\")) {\n      const operator = this.previous().value;\n      return {\n        type: \"UpdateExpression\",\n        operator,\n        argument: expr,\n        prefix: false\n      };\n    }\n    return expr;\n  }\n  parseMember() {\n    let expr = this.parsePrimary();\n    while (true) {\n      if (this.match(\"PUNCTUATION\", \".\")) {\n        const name = this.consumeIdentifierName();\n        expr = {\n          type: \"MemberExpression\",\n          object: expr,\n          property: { type: \"Identifier\", name },\n          computed: false\n        };\n      } else if (this.match(\"PUNCTUATION\", \"[\")) {\n        const property = this.parseExpression();\n        this.consume(\"PUNCTUATION\", \"]\");\n        expr = {\n          type: \"MemberExpression\",\n          object: expr,\n          property,\n          computed: true\n        };\n      } else if (this.match(\"PUNCTUATION\", \"(\")) {\n        const args = this.parseArguments();\n        expr = {\n          type: \"CallExpression\",\n          callee: expr,\n          arguments: args\n        };\n      } else {\n        break;\n      }\n    }\n    return expr;\n  }\n  parseArguments() {\n    const args = [];\n    if (!this.check(\"PUNCTUATION\", \")\")) {\n      do {\n        args.push(this.parseExpression());\n      } while (this.match(\"PUNCTUATION\", \",\"));\n    }\n    this.consume(\"PUNCTUATION\", \")\");\n    return args;\n  }\n  parsePrimary() {\n    if (this.match(\"NUMBER\")) {\n      return { type: \"Literal\", value: this.previous().value };\n    }\n    if (this.match(\"STRING\")) {\n      return { type: \"Literal\", value: this.previous().value };\n    }\n    if (this.match(\"BOOLEAN\")) {\n      return { type: \"Literal\", value: this.previous().value };\n    }\n    if (this.match(\"NULL\")) {\n      return { type: \"Literal\", value: null };\n    }\n    if (this.match(\"UNDEFINED\")) {\n      return { type: \"Literal\", value: void 0 };\n    }\n    if (this.match(\"IDENTIFIER\")) {\n      return { type: \"Identifier\", name: this.previous().value };\n    }\n    if (this.match(\"PUNCTUATION\", \"(\")) {\n      const expr = this.parseExpression();\n      this.consume(\"PUNCTUATION\", \")\");\n      return expr;\n    }\n    if (this.match(\"PUNCTUATION\", \"[\")) {\n      return this.parseArrayLiteral();\n    }\n    if (this.match(\"PUNCTUATION\", \"{\")) {\n      return this.parseObjectLiteral();\n    }\n    throw new Error(`Unexpected token: ${this.current().type} \"${this.current().value}\"`);\n  }\n  parseArrayLiteral() {\n    const elements = [];\n    while (!this.check(\"PUNCTUATION\", \"]\") && !this.isAtEnd()) {\n      elements.push(this.parseExpression());\n      if (this.match(\"PUNCTUATION\", \",\")) {\n        if (this.check(\"PUNCTUATION\", \"]\")) {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    this.consume(\"PUNCTUATION\", \"]\");\n    return {\n      type: \"ArrayExpression\",\n      elements\n    };\n  }\n  parseObjectLiteral() {\n    const properties = [];\n    while (!this.check(\"PUNCTUATION\", \"}\") && !this.isAtEnd()) {\n      let key;\n      let computed = false;\n      if (this.match(\"STRING\")) {\n        key = { type: \"Literal\", value: this.previous().value };\n      } else if (this.checkIdentifierName()) {\n        const name = this.consumeIdentifierName();\n        key = { type: \"Identifier\", name };\n      } else if (this.match(\"PUNCTUATION\", \"[\")) {\n        key = this.parseExpression();\n        computed = true;\n        this.consume(\"PUNCTUATION\", \"]\");\n      } else {\n        throw new Error(\"Expected property key\");\n      }\n      this.consume(\"PUNCTUATION\", \":\");\n      const value = this.parseExpression();\n      properties.push({\n        type: \"Property\",\n        key,\n        value,\n        computed,\n        shorthand: false\n      });\n      if (this.match(\"PUNCTUATION\", \",\")) {\n        if (this.check(\"PUNCTUATION\", \"}\")) {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    this.consume(\"PUNCTUATION\", \"}\");\n    return {\n      type: \"ObjectExpression\",\n      properties\n    };\n  }\n  match(...args) {\n    for (let i = 0; i < args.length; i++) {\n      const arg = args[i];\n      if (i === 0 && args.length > 1) {\n        const type = arg;\n        for (let j = 1; j < args.length; j++) {\n          if (this.check(type, args[j])) {\n            this.advance();\n            return true;\n          }\n        }\n        return false;\n      } else if (args.length === 1) {\n        if (this.checkType(arg)) {\n          this.advance();\n          return true;\n        }\n        return false;\n      }\n    }\n    return false;\n  }\n  check(type, value) {\n    if (this.isAtEnd())\n      return false;\n    if (value !== void 0) {\n      return this.current().type === type && this.current().value === value;\n    }\n    return this.current().type === type;\n  }\n  checkType(type) {\n    if (this.isAtEnd())\n      return false;\n    return this.current().type === type;\n  }\n  advance() {\n    if (!this.isAtEnd())\n      this.position++;\n    return this.previous();\n  }\n  isAtEnd() {\n    return this.current().type === \"EOF\";\n  }\n  current() {\n    return this.tokens[this.position];\n  }\n  previous() {\n    return this.tokens[this.position - 1];\n  }\n  consume(type, value) {\n    if (value !== void 0) {\n      if (this.check(type, value))\n        return this.advance();\n      throw new Error(`Expected ${type} \"${value}\" but got ${this.current().type} \"${this.current().value}\"`);\n    }\n    if (this.check(type))\n      return this.advance();\n    throw new Error(`Expected ${type} but got ${this.current().type} \"${this.current().value}\"`);\n  }\n  checkIdentifierName() {\n    if (this.isAtEnd())\n      return false;\n    return IDENTIFIER_NAME_TYPES.includes(this.current().type);\n  }\n  consumeIdentifierName() {\n    if (!this.checkIdentifierName()) {\n      throw new Error(`Expected an identifier name but got ${this.current().type} \"${this.current().value}\"`);\n    }\n    const token = this.advance();\n    switch (token.type) {\n      case \"BOOLEAN\":\n        return token.value ? \"true\" : \"false\";\n      case \"NULL\":\n        return \"null\";\n      case \"UNDEFINED\":\n        return \"undefined\";\n      default:\n        return token.value;\n    }\n  }\n};\nvar Evaluator = class {\n  evaluate({ node, scope: scope2 = {}, context = null, forceBindingRootScopeToFunctions = true }) {\n    switch (node.type) {\n      case \"Literal\":\n        return node.value;\n      case \"Identifier\":\n        if (node.name in scope2) {\n          const value2 = scope2[node.name];\n          this.checkForDangerousValues(value2);\n          if (typeof value2 === \"function\") {\n            return value2.bind(scope2);\n          }\n          return value2;\n        }\n        throw new Error(`Undefined variable: ${node.name}`);\n      case \"MemberExpression\":\n        const object = this.evaluate({ node: node.object, scope: scope2, context, forceBindingRootScopeToFunctions });\n        if (object == null) {\n          throw new Error(\"Cannot read property of null or undefined\");\n        }\n        let property;\n        if (node.computed) {\n          property = this.evaluate({ node: node.property, scope: scope2, context, forceBindingRootScopeToFunctions });\n        } else {\n          property = node.property.name;\n        }\n        this.checkForDangerousKeywords(property);\n        let memberValue = object[property];\n        this.checkForDangerousValues(memberValue);\n        if (typeof memberValue === \"function\") {\n          if (forceBindingRootScopeToFunctions) {\n            return memberValue.bind(scope2);\n          } else {\n            return memberValue.bind(object);\n          }\n        }\n        return memberValue;\n      case \"CallExpression\":\n        const args = node.arguments.map((arg) => this.evaluate({ node: arg, scope: scope2, context, forceBindingRootScopeToFunctions }));\n        let returnValue;\n        if (node.callee.type === \"MemberExpression\") {\n          const obj = this.evaluate({ node: node.callee.object, scope: scope2, context, forceBindingRootScopeToFunctions });\n          let prop;\n          if (node.callee.computed) {\n            prop = this.evaluate({ node: node.callee.property, scope: scope2, context, forceBindingRootScopeToFunctions });\n          } else {\n            prop = node.callee.property.name;\n          }\n          this.checkForDangerousKeywords(prop);\n          let func = obj[prop];\n          if (typeof func !== \"function\") {\n            throw new Error(\"Value is not a function\");\n          }\n          returnValue = func.apply(obj, args);\n        } else {\n          if (node.callee.type === \"Identifier\") {\n            const name = node.callee.name;\n            let func;\n            if (name in scope2) {\n              func = scope2[name];\n            } else {\n              throw new Error(`Undefined variable: ${name}`);\n            }\n            if (typeof func !== \"function\") {\n              throw new Error(\"Value is not a function\");\n            }\n            const thisContext = context !== null ? context : scope2;\n            returnValue = func.apply(thisContext, args);\n          } else {\n            const callee = this.evaluate({ node: node.callee, scope: scope2, context, forceBindingRootScopeToFunctions });\n            if (typeof callee !== \"function\") {\n              throw new Error(\"Value is not a function\");\n            }\n            returnValue = callee.apply(context, args);\n          }\n        }\n        this.checkForDangerousValues(returnValue);\n        return returnValue;\n      case \"UnaryExpression\":\n        const argument = this.evaluate({ node: node.argument, scope: scope2, context, forceBindingRootScopeToFunctions });\n        switch (node.operator) {\n          case \"!\":\n            return !argument;\n          case \"-\":\n            return -argument;\n          case \"+\":\n            return +argument;\n          default:\n            throw new Error(`Unknown unary operator: ${node.operator}`);\n        }\n      case \"UpdateExpression\":\n        if (node.argument.type === \"Identifier\") {\n          const name = node.argument.name;\n          if (!(name in scope2)) {\n            throw new Error(`Undefined variable: ${name}`);\n          }\n          const oldValue = scope2[name];\n          if (node.operator === \"++\") {\n            scope2[name] = oldValue + 1;\n          } else if (node.operator === \"--\") {\n            scope2[name] = oldValue - 1;\n          }\n          return node.prefix ? scope2[name] : oldValue;\n        } else if (node.argument.type === \"MemberExpression\") {\n          const obj = this.evaluate({ node: node.argument.object, scope: scope2, context, forceBindingRootScopeToFunctions });\n          const prop = node.argument.computed ? this.evaluate({ node: node.argument.property, scope: scope2, context, forceBindingRootScopeToFunctions }) : node.argument.property.name;\n          if (this.isDOMObject(obj)) {\n            throw new Error(\"Property assignments on DOM objects are prohibited in the CSP build\");\n          }\n          this.checkForDangerousKeywords(prop);\n          const oldValue = obj[prop];\n          if (node.operator === \"++\") {\n            obj[prop] = oldValue + 1;\n          } else if (node.operator === \"--\") {\n            obj[prop] = oldValue - 1;\n          }\n          return node.prefix ? obj[prop] : oldValue;\n        }\n        throw new Error(\"Invalid update expression target\");\n      case \"BinaryExpression\":\n        const left = this.evaluate({ node: node.left, scope: scope2, context, forceBindingRootScopeToFunctions });\n        const evalRight = () => this.evaluate({ node: node.right, scope: scope2, context, forceBindingRootScopeToFunctions });\n        if (node.operator === \"&&\")\n          return left && evalRight();\n        if (node.operator === \"||\")\n          return left || evalRight();\n        const right = evalRight();\n        switch (node.operator) {\n          case \"+\":\n            return left + right;\n          case \"-\":\n            return left - right;\n          case \"*\":\n            return left * right;\n          case \"/\":\n            return left / right;\n          case \"%\":\n            return left % right;\n          case \"==\":\n            return left == right;\n          case \"!=\":\n            return left != right;\n          case \"===\":\n            return left === right;\n          case \"!==\":\n            return left !== right;\n          case \"<\":\n            return left < right;\n          case \">\":\n            return left > right;\n          case \"<=\":\n            return left <= right;\n          case \">=\":\n            return left >= right;\n          default:\n            throw new Error(`Unknown binary operator: ${node.operator}`);\n        }\n      case \"ConditionalExpression\":\n        const test = this.evaluate({ node: node.test, scope: scope2, context, forceBindingRootScopeToFunctions });\n        return test ? this.evaluate({ node: node.consequent, scope: scope2, context, forceBindingRootScopeToFunctions }) : this.evaluate({ node: node.alternate, scope: scope2, context, forceBindingRootScopeToFunctions });\n      case \"AssignmentExpression\":\n        const value = this.evaluate({ node: node.right, scope: scope2, context, forceBindingRootScopeToFunctions });\n        if (node.left.type === \"Identifier\") {\n          scope2[node.left.name] = value;\n          return value;\n        } else if (node.left.type === \"MemberExpression\") {\n          const obj = this.evaluate({ node: node.left.object, scope: scope2, context, forceBindingRootScopeToFunctions });\n          const prop = node.left.computed ? this.evaluate({ node: node.left.property, scope: scope2, context, forceBindingRootScopeToFunctions }) : node.left.property.name;\n          if (this.isDOMObject(obj)) {\n            throw new Error(\"Property assignments on DOM objects are prohibited in the CSP build\");\n          }\n          this.checkForDangerousKeywords(prop);\n          obj[prop] = value;\n          return value;\n        }\n        throw new Error(\"Invalid assignment target\");\n      case \"ArrayExpression\":\n        return node.elements.map((el) => this.evaluate({ node: el, scope: scope2, context, forceBindingRootScopeToFunctions }));\n      case \"ObjectExpression\":\n        const result = {};\n        for (const prop of node.properties) {\n          const key = prop.computed ? this.evaluate({ node: prop.key, scope: scope2, context, forceBindingRootScopeToFunctions }) : prop.key.type === \"Identifier\" ? prop.key.name : this.evaluate({ node: prop.key, scope: scope2, context, forceBindingRootScopeToFunctions });\n          const value2 = this.evaluate({ node: prop.value, scope: scope2, context, forceBindingRootScopeToFunctions });\n          result[key] = value2;\n        }\n        return result;\n      default:\n        throw new Error(`Unknown node type: ${node.type}`);\n    }\n  }\n  isDOMObject(obj) {\n    if (obj instanceof Node)\n      return true;\n    if (typeof CSSStyleDeclaration !== \"undefined\" && obj instanceof CSSStyleDeclaration)\n      return true;\n    if (typeof DOMStringMap !== \"undefined\" && obj instanceof DOMStringMap)\n      return true;\n    if (typeof DOMTokenList !== \"undefined\" && obj instanceof DOMTokenList)\n      return true;\n    if (typeof NamedNodeMap !== \"undefined\" && obj instanceof NamedNodeMap)\n      return true;\n    let ctor = obj != null && obj.constructor;\n    if (ctor && typeof ctor.name === \"string\" && /^(SVG|CSS|DOM)[A-Z]/.test(ctor.name))\n      return true;\n    return false;\n  }\n  checkForDangerousKeywords(keyword) {\n    let blacklist = [\n      \"constructor\",\n      \"prototype\",\n      \"__proto__\",\n      \"__defineGetter__\",\n      \"__defineSetter__\",\n      \"insertAdjacentHTML\",\n      \"insertAdjacentElement\",\n      \"insertAdjacentText\",\n      \"setAttribute\",\n      \"setAttributeNS\",\n      \"setAttributeNode\",\n      \"setAttributeNodeNS\",\n      \"createElement\",\n      \"createElementNS\",\n      \"createDocumentFragment\",\n      \"createContextualFragment\",\n      \"appendChild\",\n      \"insertBefore\",\n      \"replaceChild\"\n    ];\n    if (blacklist.includes(keyword)) {\n      throw new Error(`Accessing \"${keyword}\" is prohibited in the CSP build`);\n    }\n  }\n  checkForDangerousValues(prop) {\n    if (prop === null) {\n      return;\n    }\n    if (typeof prop !== \"object\" && typeof prop !== \"function\") {\n      return;\n    }\n    if (safemap.has(prop)) {\n      return;\n    }\n    if (prop instanceof HTMLIFrameElement || prop instanceof HTMLScriptElement || typeof SVGScriptElement !== \"undefined\" && prop instanceof SVGScriptElement) {\n      throw new Error(\"Accessing iframes and scripts is prohibited in the CSP build\");\n    }\n    if (typeof Document !== \"undefined\" && prop instanceof Document) {\n      throw new Error(\"Accessing document objects is prohibited in the CSP build\");\n    }\n    if (globals.has(prop)) {\n      throw new Error(\"Accessing global variables is prohibited in the CSP build\");\n    }\n    safemap.set(prop, true);\n    return true;\n  }\n};\nfunction generateRuntimeFunction(expression) {\n  try {\n    const tokenizer = new Tokenizer(expression);\n    const tokens = tokenizer.tokenize();\n    const parser = new Parser(tokens);\n    const ast = parser.parse();\n    const evaluator = new Evaluator();\n    return function(options = {}) {\n      const { scope: scope2 = {}, context = null, forceBindingRootScopeToFunctions = false } = options;\n      return evaluator.evaluate({ node: ast, scope: scope2, context, forceBindingRootScopeToFunctions });\n    };\n  } catch (error2) {\n    throw new Error(`CSP Parser Error: ${error2.message}`);\n  }\n}\n\n// packages/csp/src/evaluator.js\nfunction cspRawEvaluator(el, expression, extras = {}) {\n  let dataStack = generateDataStack(el);\n  let scope2 = mergeProxies([extras.scope ?? {}, ...dataStack]);\n  let params = extras.params ?? [];\n  let evaluate2 = generateRuntimeFunction(expression);\n  let result = evaluate2({\n    scope: scope2,\n    forceBindingRootScopeToFunctions: true\n  });\n  if (typeof result === \"function\" && shouldAutoEvaluateFunctions) {\n    return result.apply(scope2, params);\n  }\n  return result;\n}\nfunction cspEvaluator(el, expression) {\n  let dataStack = generateDataStack(el);\n  if (typeof expression === \"function\") {\n    return generateEvaluatorFromFunction(dataStack, expression);\n  }\n  let evaluator = generateEvaluator(el, expression, dataStack);\n  return tryCatch.bind(null, el, expression, evaluator);\n}\nfunction generateDataStack(el) {\n  let overriddenMagics = {};\n  injectMagics(overriddenMagics, el);\n  return [overriddenMagics, ...closestDataStack(el)];\n}\nfunction generateEvaluator(el, expression, dataStack) {\n  if (el instanceof HTMLIFrameElement) {\n    throw new Error(\"Evaluating expressions on an iframe is prohibited in the CSP build\");\n  }\n  if (el instanceof HTMLScriptElement) {\n    throw new Error(\"Evaluating expressions on a script is prohibited in the CSP build\");\n  }\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [] } = {}) => {\n    let completeScope = mergeProxies([scope2, ...dataStack]);\n    let evaluate2 = generateRuntimeFunction(expression);\n    let returnValue = evaluate2({\n      scope: completeScope,\n      forceBindingRootScopeToFunctions: true\n    });\n    if (shouldAutoEvaluateFunctions && typeof returnValue === \"function\") {\n      let nextReturnValue = returnValue.apply(returnValue, params);\n      if (nextReturnValue instanceof Promise) {\n        nextReturnValue.then((i) => receiver(i));\n      } else {\n        receiver(nextReturnValue);\n      }\n    } else if (typeof returnValue === \"object\" && returnValue instanceof Promise) {\n      returnValue.then((i) => receiver(i));\n    } else {\n      receiver(returnValue);\n    }\n  };\n}\n\n// node_modules/@vue/shared/dist/shared.esm-bundler.js\nfunction makeMap(str) {\n  const map = /* @__PURE__ */ Object.create(null);\n  for (const key of str.split(\",\"))\n    map[key] = 1;\n  return (val) => val in map;\n}\nvar EMPTY_OBJ = true ? Object.freeze({}) : {};\nvar EMPTY_ARR = true ? Object.freeze([]) : [];\nvar extend = Object.assign;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hasOwn = (val, key) => hasOwnProperty.call(val, key);\nvar isArray = Array.isArray;\nvar isMap = (val) => toTypeString(val) === \"[object Map]\";\nvar isString = (val) => typeof val === \"string\";\nvar isSymbol = (val) => typeof val === \"symbol\";\nvar isObject = (val) => val !== null && typeof val === \"object\";\nvar objectToString = Object.prototype.toString;\nvar toTypeString = (value) => objectToString.call(value);\nvar toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nvar isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nvar cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nvar camelizeRE = /-\\w/g;\nvar camelize = cacheStringFunction(\n  (str) => {\n    return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n  }\n);\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nvar capitalize = cacheStringFunction((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nvar toHandlerKey = cacheStringFunction(\n  (str) => {\n    const s = str ? `on${capitalize(str)}` : ``;\n    return s;\n  }\n);\nvar hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nvar specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nvar isBooleanAttr2 = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\n\n// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js\nfunction warn2(msg, ...args) {\n  console.warn(`[Vue warn] ${msg}`, ...args);\n}\nvar activeEffectScope;\nvar activeSub;\nvar pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nvar ReactiveEffect = class {\n  constructor(fn) {\n    this.fn = fn;\n    this.deps = void 0;\n    this.depsTail = void 0;\n    this.flags = 1 | 4;\n    this.next = void 0;\n    this.cleanup = void 0;\n    this.scheduler = void 0;\n    if (activeEffectScope) {\n      if (activeEffectScope.active) {\n        activeEffectScope.effects.push(this);\n      } else {\n        this.flags &= -2;\n      }\n    }\n  }\n  pause() {\n    this.flags |= 64;\n  }\n  resume() {\n    if (this.flags & 64) {\n      this.flags &= -65;\n      if (pausedQueueEffects.has(this)) {\n        pausedQueueEffects.delete(this);\n        this.trigger();\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  notify() {\n    if (this.flags & 2 && !(this.flags & 32)) {\n      return;\n    }\n    if (!(this.flags & 8)) {\n      batch(this);\n    }\n  }\n  run() {\n    if (!(this.flags & 1)) {\n      return this.fn();\n    }\n    this.flags |= 2;\n    cleanupEffect(this);\n    prepareDeps(this);\n    const prevEffect = activeSub;\n    const prevShouldTrack = shouldTrack;\n    activeSub = this;\n    shouldTrack = true;\n    try {\n      return this.fn();\n    } finally {\n      if (activeSub !== this) {\n        warn2(\n          \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n        );\n      }\n      cleanupDeps(this);\n      activeSub = prevEffect;\n      shouldTrack = prevShouldTrack;\n      this.flags &= -3;\n    }\n  }\n  stop() {\n    if (this.flags & 1) {\n      for (let link = this.deps; link; link = link.nextDep) {\n        removeSub(link);\n      }\n      this.deps = this.depsTail = void 0;\n      cleanupEffect(this);\n      this.onStop && this.onStop();\n      this.flags &= -2;\n    }\n  }\n  trigger() {\n    if (this.flags & 64) {\n      pausedQueueEffects.add(this);\n    } else if (this.scheduler) {\n      this.scheduler();\n    } else {\n      this.runIfDirty();\n    }\n  }\n  /**\n   * @internal\n   */\n  runIfDirty() {\n    if (isDirty(this)) {\n      this.run();\n    }\n  }\n  get dirty() {\n    return isDirty(this);\n  }\n};\nvar batchDepth = 0;\nvar batchedSub;\nvar batchedComputed;\nfunction batch(sub, isComputed = false) {\n  sub.flags |= 8;\n  if (isComputed) {\n    sub.next = batchedComputed;\n    batchedComputed = sub;\n    return;\n  }\n  sub.next = batchedSub;\n  batchedSub = sub;\n}\nfunction startBatch() {\n  batchDepth++;\n}\nfunction endBatch() {\n  if (--batchDepth > 0) {\n    return;\n  }\n  if (batchedComputed) {\n    let e = batchedComputed;\n    batchedComputed = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      e = next;\n    }\n  }\n  let error2;\n  while (batchedSub) {\n    let e = batchedSub;\n    batchedSub = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      if (e.flags & 1) {\n        try {\n          ;\n          e.trigger();\n        } catch (err) {\n          if (!error2)\n            error2 = err;\n        }\n      }\n      e = next;\n    }\n  }\n  if (error2)\n    throw error2;\n}\nfunction prepareDeps(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    link.version = -1;\n    link.prevActiveLink = link.dep.activeLink;\n    link.dep.activeLink = link;\n  }\n}\nfunction cleanupDeps(sub) {\n  let head;\n  let tail = sub.depsTail;\n  let link = tail;\n  while (link) {\n    const prev = link.prevDep;\n    if (link.version === -1) {\n      if (link === tail)\n        tail = prev;\n      removeSub(link);\n      removeDep(link);\n    } else {\n      head = link;\n    }\n    link.dep.activeLink = link.prevActiveLink;\n    link.prevActiveLink = void 0;\n    link = prev;\n  }\n  sub.deps = head;\n  sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n      return true;\n    }\n  }\n  if (sub._dirty) {\n    return true;\n  }\n  return false;\n}\nfunction refreshComputed(computed) {\n  if (computed.flags & 4 && !(computed.flags & 16)) {\n    return;\n  }\n  computed.flags &= -17;\n  if (computed.globalVersion === globalVersion) {\n    return;\n  }\n  computed.globalVersion = globalVersion;\n  if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n    return;\n  }\n  computed.flags |= 2;\n  const dep = computed.dep;\n  const prevSub = activeSub;\n  const prevShouldTrack = shouldTrack;\n  activeSub = computed;\n  shouldTrack = true;\n  try {\n    prepareDeps(computed);\n    const value = computed.fn(computed._value);\n    if (dep.version === 0 || hasChanged(value, computed._value)) {\n      computed.flags |= 128;\n      computed._value = value;\n      dep.version++;\n    }\n  } catch (err) {\n    dep.version++;\n    throw err;\n  } finally {\n    activeSub = prevSub;\n    shouldTrack = prevShouldTrack;\n    cleanupDeps(computed);\n    computed.flags &= -3;\n  }\n}\nfunction removeSub(link, soft = false) {\n  const { dep, prevSub, nextSub } = link;\n  if (prevSub) {\n    prevSub.nextSub = nextSub;\n    link.prevSub = void 0;\n  }\n  if (nextSub) {\n    nextSub.prevSub = prevSub;\n    link.nextSub = void 0;\n  }\n  if (dep.subsHead === link) {\n    dep.subsHead = nextSub;\n  }\n  if (dep.subs === link) {\n    dep.subs = prevSub;\n    if (!prevSub && dep.computed) {\n      dep.computed.flags &= -5;\n      for (let l = dep.computed.deps; l; l = l.nextDep) {\n        removeSub(l, true);\n      }\n    }\n  }\n  if (!soft && !--dep.sc && dep.map) {\n    dep.map.delete(dep.key);\n  }\n}\nfunction removeDep(link) {\n  const { prevDep, nextDep } = link;\n  if (prevDep) {\n    prevDep.nextDep = nextDep;\n    link.prevDep = void 0;\n  }\n  if (nextDep) {\n    nextDep.prevDep = prevDep;\n    link.nextDep = void 0;\n  }\n}\nfunction effect2(fn, options) {\n  if (fn.effect instanceof ReactiveEffect) {\n    fn = fn.effect.fn;\n  }\n  const e = new ReactiveEffect(fn);\n  if (options) {\n    extend(e, options);\n  }\n  try {\n    e.run();\n  } catch (err) {\n    e.stop();\n    throw err;\n  }\n  const runner = e.run.bind(e);\n  runner.effect = e;\n  return runner;\n}\nfunction stop(runner) {\n  runner.effect.stop();\n}\nvar shouldTrack = true;\nvar trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction cleanupEffect(e) {\n  const { cleanup } = e;\n  e.cleanup = void 0;\n  if (cleanup) {\n    const prevSub = activeSub;\n    activeSub = void 0;\n    try {\n      cleanup();\n    } finally {\n      activeSub = prevSub;\n    }\n  }\n}\nvar globalVersion = 0;\nvar Link = class {\n  constructor(sub, dep) {\n    this.sub = sub;\n    this.dep = dep;\n    this.version = dep.version;\n    this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n  }\n};\nvar Dep = class {\n  // TODO isolatedDeclarations \"__v_skip\"\n  constructor(computed) {\n    this.computed = computed;\n    this.version = 0;\n    this.activeLink = void 0;\n    this.subs = void 0;\n    this.map = void 0;\n    this.key = void 0;\n    this.sc = 0;\n    this.__v_skip = true;\n    if (true) {\n      this.subsHead = void 0;\n    }\n  }\n  track(debugInfo) {\n    if (!activeSub || !shouldTrack || activeSub === this.computed) {\n      return;\n    }\n    let link = this.activeLink;\n    if (link === void 0 || link.sub !== activeSub) {\n      link = this.activeLink = new Link(activeSub, this);\n      if (!activeSub.deps) {\n        activeSub.deps = activeSub.depsTail = link;\n      } else {\n        link.prevDep = activeSub.depsTail;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n      }\n      addSub(link);\n    } else if (link.version === -1) {\n      link.version = this.version;\n      if (link.nextDep) {\n        const next = link.nextDep;\n        next.prevDep = link.prevDep;\n        if (link.prevDep) {\n          link.prevDep.nextDep = next;\n        }\n        link.prevDep = activeSub.depsTail;\n        link.nextDep = void 0;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n        if (activeSub.deps === link) {\n          activeSub.deps = next;\n        }\n      }\n    }\n    if (activeSub.onTrack) {\n      activeSub.onTrack(\n        extend(\n          {\n            effect: activeSub\n          },\n          debugInfo\n        )\n      );\n    }\n    return link;\n  }\n  trigger(debugInfo) {\n    this.version++;\n    globalVersion++;\n    this.notify(debugInfo);\n  }\n  notify(debugInfo) {\n    startBatch();\n    try {\n      if (true) {\n        for (let head = this.subsHead; head; head = head.nextSub) {\n          if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n            head.sub.onTrigger(\n              extend(\n                {\n                  effect: head.sub\n                },\n                debugInfo\n              )\n            );\n          }\n        }\n      }\n      for (let link = this.subs; link; link = link.prevSub) {\n        if (link.sub.notify()) {\n          ;\n          link.sub.dep.notify();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n  }\n};\nfunction addSub(link) {\n  link.dep.sc++;\n  if (link.sub.flags & 4) {\n    const computed = link.dep.computed;\n    if (computed && !link.dep.subs) {\n      computed.flags |= 4 | 16;\n      for (let l = computed.deps; l; l = l.nextDep) {\n        addSub(l);\n      }\n    }\n    const currentTail = link.dep.subs;\n    if (currentTail !== link) {\n      link.prevSub = currentTail;\n      if (currentTail)\n        currentTail.nextSub = link;\n    }\n    if (link.dep.subsHead === void 0) {\n      link.dep.subsHead = link;\n    }\n    link.dep.subs = link;\n  }\n}\nvar targetMap = /* @__PURE__ */ new WeakMap();\nvar ITERATE_KEY = /* @__PURE__ */ Symbol(\n  true ? \"Object iterate\" : \"\"\n);\nvar MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n  true ? \"Map keys iterate\" : \"\"\n);\nvar ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n  true ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n  if (shouldTrack && activeSub) {\n    let depsMap = targetMap.get(target);\n    if (!depsMap) {\n      targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n    }\n    let dep = depsMap.get(key);\n    if (!dep) {\n      depsMap.set(key, dep = new Dep());\n      dep.map = depsMap;\n      dep.key = key;\n    }\n    if (true) {\n      dep.track({\n        target,\n        type,\n        key\n      });\n    } else {\n      dep.track();\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    globalVersion++;\n    return;\n  }\n  const run = (dep) => {\n    if (dep) {\n      if (true) {\n        dep.trigger({\n          target,\n          type,\n          key,\n          newValue,\n          oldValue,\n          oldTarget\n        });\n      } else {\n        dep.trigger();\n      }\n    }\n  };\n  startBatch();\n  if (type === \"clear\") {\n    depsMap.forEach(run);\n  } else {\n    const targetIsArray = isArray(target);\n    const isArrayIndex = targetIsArray && isIntegerKey(key);\n    if (targetIsArray && key === \"length\") {\n      const newLength = Number(newValue);\n      depsMap.forEach((dep, key2) => {\n        if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n          run(dep);\n        }\n      });\n    } else {\n      if (key !== void 0 || depsMap.has(void 0)) {\n        run(depsMap.get(key));\n      }\n      if (isArrayIndex) {\n        run(depsMap.get(ARRAY_ITERATE_KEY));\n      }\n      switch (type) {\n        case \"add\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          } else if (isArrayIndex) {\n            run(depsMap.get(\"length\"));\n          }\n          break;\n        case \"delete\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          }\n          break;\n        case \"set\":\n          if (isMap(target)) {\n            run(depsMap.get(ITERATE_KEY));\n          }\n          break;\n      }\n    }\n  }\n  endBatch();\n}\nfunction reactiveReadArray(array) {\n  const raw2 = toRaw(array);\n  if (raw2 === array)\n    return raw2;\n  track(raw2, \"iterate\", ARRAY_ITERATE_KEY);\n  return isShallow(array) ? raw2 : raw2.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n  track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n  return arr;\n}\nfunction toWrapped(target, item) {\n  if (isReadonly(target)) {\n    return isReactive2(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n  }\n  return toReactive(item);\n}\nvar arrayInstrumentations = {\n  __proto__: null,\n  [Symbol.iterator]() {\n    return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n  },\n  concat(...args) {\n    return reactiveReadArray(this).concat(\n      ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n    );\n  },\n  entries() {\n    return iterator(this, \"entries\", (value) => {\n      value[1] = toWrapped(this, value[1]);\n      return value;\n    });\n  },\n  every(fn, thisArg) {\n    return apply(this, \"every\", fn, thisArg, void 0, arguments);\n  },\n  filter(fn, thisArg) {\n    return apply(\n      this,\n      \"filter\",\n      fn,\n      thisArg,\n      (v) => v.map((item) => toWrapped(this, item)),\n      arguments\n    );\n  },\n  find(fn, thisArg) {\n    return apply(\n      this,\n      \"find\",\n      fn,\n      thisArg,\n      (item) => toWrapped(this, item),\n      arguments\n    );\n  },\n  findIndex(fn, thisArg) {\n    return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n  },\n  findLast(fn, thisArg) {\n    return apply(\n      this,\n      \"findLast\",\n      fn,\n      thisArg,\n      (item) => toWrapped(this, item),\n      arguments\n    );\n  },\n  findLastIndex(fn, thisArg) {\n    return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n  },\n  // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n  forEach(fn, thisArg) {\n    return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n  },\n  includes(...args) {\n    return searchProxy(this, \"includes\", args);\n  },\n  indexOf(...args) {\n    return searchProxy(this, \"indexOf\", args);\n  },\n  join(separator) {\n    return reactiveReadArray(this).join(separator);\n  },\n  // keys() iterator only reads `length`, no optimization required\n  lastIndexOf(...args) {\n    return searchProxy(this, \"lastIndexOf\", args);\n  },\n  map(fn, thisArg) {\n    return apply(this, \"map\", fn, thisArg, void 0, arguments);\n  },\n  pop() {\n    return noTracking(this, \"pop\");\n  },\n  push(...args) {\n    return noTracking(this, \"push\", args);\n  },\n  reduce(fn, ...args) {\n    return reduce(this, \"reduce\", fn, args);\n  },\n  reduceRight(fn, ...args) {\n    return reduce(this, \"reduceRight\", fn, args);\n  },\n  shift() {\n    return noTracking(this, \"shift\");\n  },\n  // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n  some(fn, thisArg) {\n    return apply(this, \"some\", fn, thisArg, void 0, arguments);\n  },\n  splice(...args) {\n    return noTracking(this, \"splice\", args);\n  },\n  toReversed() {\n    return reactiveReadArray(this).toReversed();\n  },\n  toSorted(comparer) {\n    return reactiveReadArray(this).toSorted(comparer);\n  },\n  toSpliced(...args) {\n    return reactiveReadArray(this).toSpliced(...args);\n  },\n  unshift(...args) {\n    return noTracking(this, \"unshift\", args);\n  },\n  values() {\n    return iterator(this, \"values\", (item) => toWrapped(this, item));\n  }\n};\nfunction iterator(self2, method, wrapValue) {\n  const arr = shallowReadArray(self2);\n  const iter = arr[method]();\n  if (arr !== self2 && !isShallow(self2)) {\n    iter._next = iter.next;\n    iter.next = () => {\n      const result = iter._next();\n      if (!result.done) {\n        result.value = wrapValue(result.value);\n      }\n      return result;\n    };\n  }\n  return iter;\n}\nvar arrayProto = Array.prototype;\nfunction apply(self2, method, fn, thisArg, wrappedRetFn, args) {\n  const arr = shallowReadArray(self2);\n  const needsWrap = arr !== self2 && !isShallow(self2);\n  const methodFn = arr[method];\n  if (methodFn !== arrayProto[method]) {\n    const result2 = methodFn.apply(self2, args);\n    return needsWrap ? toReactive(result2) : result2;\n  }\n  let wrappedFn = fn;\n  if (arr !== self2) {\n    if (needsWrap) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, toWrapped(self2, item), index, self2);\n      };\n    } else if (fn.length > 2) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, item, index, self2);\n      };\n    }\n  }\n  const result = methodFn.call(arr, wrappedFn, thisArg);\n  return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self2, method, fn, args) {\n  const arr = shallowReadArray(self2);\n  const needsWrap = arr !== self2 && !isShallow(self2);\n  let wrappedFn = fn;\n  let wrapInitialAccumulator = false;\n  if (arr !== self2) {\n    if (needsWrap) {\n      wrapInitialAccumulator = args.length === 0;\n      wrappedFn = function(acc, item, index) {\n        if (wrapInitialAccumulator) {\n          wrapInitialAccumulator = false;\n          acc = toWrapped(self2, acc);\n        }\n        return fn.call(this, acc, toWrapped(self2, item), index, self2);\n      };\n    } else if (fn.length > 3) {\n      wrappedFn = function(acc, item, index) {\n        return fn.call(this, acc, item, index, self2);\n      };\n    }\n  }\n  const result = arr[method](wrappedFn, ...args);\n  return wrapInitialAccumulator ? toWrapped(self2, result) : result;\n}\nfunction searchProxy(self2, method, args) {\n  const arr = toRaw(self2);\n  track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n  const res = arr[method](...args);\n  if ((res === -1 || res === false) && isProxy(args[0])) {\n    args[0] = toRaw(args[0]);\n    return arr[method](...args);\n  }\n  return res;\n}\nfunction noTracking(self2, method, args = []) {\n  pauseTracking();\n  startBatch();\n  const res = toRaw(self2)[method].apply(self2, args);\n  endBatch();\n  resetTracking();\n  return res;\n}\nvar isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nvar builtInSymbols = new Set(\n  /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty2(key) {\n  if (!isSymbol(key))\n    key = String(key);\n  const obj = toRaw(this);\n  track(obj, \"has\", key);\n  return obj.hasOwnProperty(key);\n}\nvar BaseReactiveHandler = class {\n  constructor(_isReadonly = false, _isShallow = false) {\n    this._isReadonly = _isReadonly;\n    this._isShallow = _isShallow;\n  }\n  get(target, key, receiver) {\n    if (key === \"__v_skip\")\n      return target[\"__v_skip\"];\n    const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_isShallow\") {\n      return isShallow2;\n    } else if (key === \"__v_raw\") {\n      if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n      // this means the receiver is a user proxy of the reactive proxy\n      Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n        return target;\n      }\n      return;\n    }\n    const targetIsArray = isArray(target);\n    if (!isReadonly2) {\n      let fn;\n      if (targetIsArray && (fn = arrayInstrumentations[key])) {\n        return fn;\n      }\n      if (key === \"hasOwnProperty\") {\n        return hasOwnProperty2;\n      }\n    }\n    const res = Reflect.get(\n      target,\n      key,\n      // if this is a proxy wrapping a ref, return methods using the raw ref\n      // as receiver so that we don't have to call `toRaw` on the ref in all\n      // its class methods\n      isRef(target) ? target : receiver\n    );\n    if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly2) {\n      track(target, \"get\", key);\n    }\n    if (isShallow2) {\n      return res;\n    }\n    if (isRef(res)) {\n      const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n      return isReadonly2 && isObject(value) ? readonly(value) : value;\n    }\n    if (isObject(res)) {\n      return isReadonly2 ? readonly(res) : reactive2(res);\n    }\n    return res;\n  }\n};\nvar MutableReactiveHandler = class extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(false, isShallow2);\n  }\n  set(target, key, value, receiver) {\n    let oldValue = target[key];\n    const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n    if (!this._isShallow) {\n      const isOldValueReadonly = isReadonly(oldValue);\n      if (!isShallow(value) && !isReadonly(value)) {\n        oldValue = toRaw(oldValue);\n        value = toRaw(value);\n      }\n      if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n        if (isOldValueReadonly) {\n          if (true) {\n            warn2(\n              `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n              target[key]\n            );\n          }\n          return true;\n        } else {\n          oldValue.value = value;\n          return true;\n        }\n      }\n    }\n    const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n    const result = Reflect.set(\n      target,\n      key,\n      value,\n      isRef(target) ? target : receiver\n    );\n    if (target === toRaw(receiver) && result) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value, oldValue);\n      }\n    }\n    return result;\n  }\n  deleteProperty(target, key) {\n    const hadKey = hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n      trigger(target, \"delete\", key, void 0, oldValue);\n    }\n    return result;\n  }\n  has(target, key) {\n    const result = Reflect.has(target, key);\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\n      track(target, \"has\", key);\n    }\n    return result;\n  }\n  ownKeys(target) {\n    track(\n      target,\n      \"iterate\",\n      isArray(target) ? \"length\" : ITERATE_KEY\n    );\n    return Reflect.ownKeys(target);\n  }\n};\nvar ReadonlyReactiveHandler = class extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(true, isShallow2);\n  }\n  set(target, key) {\n    if (true) {\n      warn2(\n        `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n        target\n      );\n    }\n    return true;\n  }\n  deleteProperty(target, key) {\n    if (true) {\n      warn2(\n        `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n        target\n      );\n    }\n    return true;\n  }\n};\nvar mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nvar readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nvar toShallow = (value) => value;\nvar getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n  return function(...args) {\n    const target = this[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const targetIsMap = isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n    !isReadonly2 && track(\n      rawTarget,\n      \"iterate\",\n      isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n    );\n    return extend(\n      // inheriting all iterator properties\n      Object.create(innerIterator),\n      {\n        // iterator protocol\n        next() {\n          const { value, done } = innerIterator.next();\n          return done ? { value, done } : {\n            value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n            done\n          };\n        }\n      }\n    );\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    if (true) {\n      const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n      warn2(\n        `${capitalize(type)} operation ${key}failed: target is readonly.`,\n        toRaw(this)\n      );\n    }\n    return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n  };\n}\nfunction createInstrumentations(readonly2, shallow) {\n  const instrumentations = {\n    get(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly2) {\n        if (hasChanged(key, rawKey)) {\n          track(rawTarget, \"get\", key);\n        }\n        track(rawTarget, \"get\", rawKey);\n      }\n      const { has } = getProto(rawTarget);\n      const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive;\n      if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n      } else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n      } else if (target !== rawTarget) {\n        target.get(key);\n      }\n    },\n    get size() {\n      const target = this[\"__v_raw\"];\n      !readonly2 && track(toRaw(target), \"iterate\", ITERATE_KEY);\n      return target.size;\n    },\n    has(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly2) {\n        if (hasChanged(key, rawKey)) {\n          track(rawTarget, \"has\", key);\n        }\n        track(rawTarget, \"has\", rawKey);\n      }\n      return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n    },\n    forEach(callback, thisArg) {\n      const observed = this;\n      const target = observed[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive;\n      !readonly2 && track(rawTarget, \"iterate\", ITERATE_KEY);\n      return target.forEach((value, key) => {\n        return callback.call(thisArg, wrap(value), wrap(key), observed);\n      });\n    }\n  };\n  extend(\n    instrumentations,\n    readonly2 ? {\n      add: createReadonlyMethod(\"add\"),\n      set: createReadonlyMethod(\"set\"),\n      delete: createReadonlyMethod(\"delete\"),\n      clear: createReadonlyMethod(\"clear\")\n    } : {\n      add(value) {\n        const target = toRaw(this);\n        const proto = getProto(target);\n        const rawValue = toRaw(value);\n        const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value;\n        const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue);\n        if (!hadKey) {\n          target.add(valueToAdd);\n          trigger(target, \"add\", valueToAdd, valueToAdd);\n        }\n        return this;\n      },\n      set(key, value) {\n        if (!shallow && !isShallow(value) && !isReadonly(value)) {\n          value = toRaw(value);\n        }\n        const target = toRaw(this);\n        const { has, get: get2 } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        } else if (true) {\n          checkIdentityKeys(target, has, key);\n        }\n        const oldValue = get2.call(target, key);\n        target.set(key, value);\n        if (!hadKey) {\n          trigger(target, \"add\", key, value);\n        } else if (hasChanged(value, oldValue)) {\n          trigger(target, \"set\", key, value, oldValue);\n        }\n        return this;\n      },\n      delete(key) {\n        const target = toRaw(this);\n        const { has, get: get2 } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        } else if (true) {\n          checkIdentityKeys(target, has, key);\n        }\n        const oldValue = get2 ? get2.call(target, key) : void 0;\n        const result = target.delete(key);\n        if (hadKey) {\n          trigger(target, \"delete\", key, void 0, oldValue);\n        }\n        return result;\n      },\n      clear() {\n        const target = toRaw(this);\n        const hadItems = target.size !== 0;\n        const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n        const result = target.clear();\n        if (hadItems) {\n          trigger(\n            target,\n            \"clear\",\n            void 0,\n            void 0,\n            oldTarget\n          );\n        }\n        return result;\n      }\n    }\n  );\n  const iteratorMethods = [\n    \"keys\",\n    \"values\",\n    \"entries\",\n    Symbol.iterator\n  ];\n  iteratorMethods.forEach((method) => {\n    instrumentations[method] = createIterableMethod(method, readonly2, shallow);\n  });\n  return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n  const instrumentations = createInstrumentations(isReadonly2, shallow);\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(\n      hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n      key,\n      receiver\n    );\n  };\n}\nvar mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nvar readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nfunction checkIdentityKeys(target, has, key) {\n  const rawKey = toRaw(key);\n  if (rawKey !== key && has.call(target, rawKey)) {\n    const type = toRawType(target);\n    warn2(\n      `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n    );\n  }\n}\nvar reactiveMap = /* @__PURE__ */ new WeakMap();\nvar shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nvar readonlyMap = /* @__PURE__ */ new WeakMap();\nvar shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction reactive2(target) {\n  if (/* @__PURE__ */ isReadonly(target)) {\n    return target;\n  }\n  return createReactiveObject(\n    target,\n    false,\n    mutableHandlers,\n    mutableCollectionHandlers,\n    reactiveMap\n  );\n}\nfunction readonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    readonlyHandlers,\n    readonlyCollectionHandlers,\n    readonlyMap\n  );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n  if (!isObject(target)) {\n    if (true) {\n      warn2(\n        `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n          target\n        )}`\n      );\n    }\n    return target;\n  }\n  if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n    return target;\n  }\n  if (target[\"__v_skip\"] || !Object.isExtensible(target)) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const targetType = targetTypeMap(toRawType(target));\n  if (targetType === 0) {\n    return target;\n  }\n  const proxy = new Proxy(\n    target,\n    targetType === 2 ? collectionHandlers : baseHandlers\n  );\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction isReactive2(value) {\n  if (/* @__PURE__ */ isReadonly(value)) {\n    return /* @__PURE__ */ isReactive2(value[\"__v_raw\"]);\n  }\n  return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n  return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n  return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n  return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n  const raw2 = observed && observed[\"__v_raw\"];\n  return raw2 ? /* @__PURE__ */ toRaw(raw2) : observed;\n}\nvar toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive2(value) : value;\nvar toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\nfunction isRef(r) {\n  return r ? r[\"__v_isRef\"] === true : false;\n}\n\n// packages/alpinejs/src/magics/$nextTick.js\nmagic(\"nextTick\", () => nextTick);\n\n// packages/alpinejs/src/magics/$dispatch.js\nmagic(\"dispatch\", (el) => dispatch.bind(dispatch, el));\n\n// packages/alpinejs/src/magics/$watch.js\nmagic(\"watch\", (el, { evaluateLater: evaluateLater2, cleanup }) => (key, callback) => {\n  let evaluate2 = evaluateLater2(key);\n  let getter = () => {\n    let value;\n    evaluate2((i) => value = i);\n    return value;\n  };\n  let unwatch = watch(getter, callback);\n  cleanup(unwatch);\n});\n\n// packages/alpinejs/src/magics/$store.js\nmagic(\"store\", getStores);\n\n// packages/alpinejs/src/magics/$data.js\nmagic(\"data\", (el) => scope(el));\n\n// packages/alpinejs/src/magics/$root.js\nmagic(\"root\", (el) => closestRoot(el));\n\n// packages/alpinejs/src/magics/$refs.js\nmagic(\"refs\", (el) => {\n  if (el._x_refs_proxy)\n    return el._x_refs_proxy;\n  el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));\n  return el._x_refs_proxy;\n});\nfunction getArrayOfRefObject(el) {\n  let refObjects = [];\n  findClosest(el, (i) => {\n    if (i._x_refs)\n      refObjects.push(i._x_refs);\n  });\n  return refObjects;\n}\n\n// packages/alpinejs/src/ids.js\nvar globalIdMemo = {};\nfunction findAndIncrementId(name) {\n  if (!globalIdMemo[name])\n    globalIdMemo[name] = 0;\n  return ++globalIdMemo[name];\n}\nfunction closestIdRoot(el, name) {\n  return findClosest(el, (element) => {\n    if (element._x_ids && element._x_ids[name])\n      return true;\n  });\n}\nfunction setIdRoot(el, name) {\n  if (!el._x_ids)\n    el._x_ids = {};\n  if (!el._x_ids[name])\n    el._x_ids[name] = findAndIncrementId(name);\n}\n\n// packages/alpinejs/src/magics/$id.js\nmagic(\"id\", (el, { cleanup }) => (name, key = null) => {\n  let cacheKey = `${name}${key ? `-${key}` : \"\"}`;\n  return cacheIdByNameOnElement(el, cacheKey, cleanup, () => {\n    let root = closestIdRoot(el, name);\n    let id = root ? root._x_ids[name] : findAndIncrementId(name);\n    return key ? `${name}-${id}-${key}` : `${name}-${id}`;\n  });\n});\ninterceptClone((from, to) => {\n  if (from._x_id) {\n    to._x_id = from._x_id;\n  }\n});\nfunction cacheIdByNameOnElement(el, cacheKey, cleanup, callback) {\n  if (!el._x_id)\n    el._x_id = {};\n  if (el._x_id[cacheKey])\n    return el._x_id[cacheKey];\n  let output = callback();\n  el._x_id[cacheKey] = output;\n  cleanup(() => {\n    delete el._x_id[cacheKey];\n  });\n  return output;\n}\n\n// packages/alpinejs/src/magics/$el.js\nmagic(\"el\", (el) => el);\n\n// packages/alpinejs/src/magics/index.js\nwarnMissingPluginMagic(\"Focus\", \"focus\", \"focus\");\nwarnMissingPluginMagic(\"Persist\", \"persist\", \"persist\");\nfunction warnMissingPluginMagic(name, magicName, slug) {\n  magic(magicName, (el) => warn(`You can't use [$${magicName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/directives/x-modelable.js\ndirective(\"modelable\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup }) => {\n  let func = evaluateLater2(expression);\n  let innerGet = () => {\n    let result;\n    func((i) => result = i);\n    return result;\n  };\n  let evaluateInnerSet = evaluateLater2(`${expression} = __placeholder`);\n  let innerSet = (val) => evaluateInnerSet(() => {\n  }, { scope: { \"__placeholder\": val } });\n  let initialValue = innerGet();\n  innerSet(initialValue);\n  queueMicrotask(() => {\n    if (!el._x_model)\n      return;\n    el._x_removeModelListeners[\"default\"]();\n    let outerGet = el._x_model.get;\n    let outerSet = el._x_model.setWithModifiers;\n    let releaseEntanglement = entangle(\n      {\n        get() {\n          return outerGet();\n        },\n        set(value) {\n          outerSet(value);\n        }\n      },\n      {\n        get() {\n          return innerGet();\n        },\n        set(value) {\n          innerSet(value);\n        }\n      }\n    );\n    cleanup(releaseEntanglement);\n  });\n});\n\n// packages/alpinejs/src/directives/x-teleport.js\ndirective(\"teleport\", (el, { modifiers, expression }, { cleanup }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-teleport can only be used on a <template> tag\", el);\n  let target = getTarget(expression);\n  let clone2 = el.content.cloneNode(true).firstElementChild;\n  el._x_teleport = clone2;\n  clone2._x_teleportBack = el;\n  el.setAttribute(\"data-teleport-template\", true);\n  clone2.setAttribute(\"data-teleport-target\", true);\n  if (el._x_forwardEvents) {\n    el._x_forwardEvents.forEach((eventName) => {\n      clone2.addEventListener(eventName, (e) => {\n        e.stopPropagation();\n        el.dispatchEvent(new e.constructor(e.type, e));\n      });\n    });\n  }\n  addScopeToNode(clone2, {}, el);\n  let placeInDom = (clone3, target2, modifiers2) => {\n    if (modifiers2.includes(\"prepend\")) {\n      target2.parentNode.insertBefore(clone3, target2);\n    } else if (modifiers2.includes(\"append\")) {\n      target2.parentNode.insertBefore(clone3, target2.nextSibling);\n    } else {\n      target2.appendChild(clone3);\n    }\n  };\n  mutateDom(() => {\n    skipDuringClone(() => {\n      placeInDom(clone2, target, modifiers);\n      initTree(clone2);\n    })();\n  });\n  el._x_teleportPutBack = () => {\n    let target2 = getTarget(expression);\n    mutateDom(() => {\n      placeInDom(el._x_teleport, target2, modifiers);\n    });\n  };\n  cleanup(\n    () => mutateDom(() => {\n      clone2.remove();\n      destroyTree(clone2);\n    })\n  );\n});\nvar teleportContainerDuringClone = document.createElement(\"div\");\nfunction getTarget(expression) {\n  let target = skipDuringClone(() => {\n    return document.querySelector(expression);\n  }, () => {\n    return teleportContainerDuringClone;\n  })();\n  if (!target)\n    warn(`Cannot find x-teleport element for selector: \"${expression}\"`);\n  return target;\n}\n\n// packages/alpinejs/src/directives/x-ignore.js\nvar handler = () => {\n};\nhandler.inline = (el, { modifiers }, { cleanup }) => {\n  modifiers.includes(\"self\") ? el._x_ignoreSelf = true : el._x_ignore = true;\n  cleanup(() => {\n    modifiers.includes(\"self\") ? delete el._x_ignoreSelf : delete el._x_ignore;\n  });\n};\ndirective(\"ignore\", handler);\n\n// packages/alpinejs/src/directives/x-effect.js\ndirective(\"effect\", skipDuringClone((el, { expression }, { effect: effect3 }) => {\n  effect3(evaluateLater(el, expression));\n}));\n\n// packages/alpinejs/src/utils/on.js\nfunction on(el, event, modifiers, callback) {\n  let listenerTarget = el;\n  let handler4 = (e) => callback(e);\n  let options = {};\n  let wrapHandler = (callback2, wrapper) => (e) => wrapper(callback2, e);\n  if (modifiers.includes(\"dot\"))\n    event = dotSyntax(event);\n  if (modifiers.includes(\"camel\"))\n    event = camelCase2(event);\n  if (modifiers.includes(\"capture\"))\n    options.capture = true;\n  if (modifiers.includes(\"window\"))\n    listenerTarget = window;\n  if (modifiers.includes(\"document\"))\n    listenerTarget = document;\n  if (modifiers.includes(\"passive\")) {\n    options.passive = modifiers[modifiers.indexOf(\"passive\") + 1] !== \"false\";\n  }\n  handler4 = addDebounceOrThrottle(modifiers, handler4);\n  if (modifiers.includes(\"prevent\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.preventDefault();\n      next(e);\n    });\n  if (modifiers.includes(\"stop\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.stopPropagation();\n      next(e);\n    });\n  if (modifiers.includes(\"once\")) {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      next(e);\n      listenerTarget.removeEventListener(event, handler4, options);\n    });\n  }\n  if (modifiers.includes(\"away\") || modifiers.includes(\"outside\")) {\n    listenerTarget = document;\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (el.contains(e.target))\n        return;\n      if (e.target.isConnected === false)\n        return;\n      if (el.offsetWidth < 1 && el.offsetHeight < 1)\n        return;\n      if (el._x_isShown === false)\n        return;\n      next(e);\n    });\n  }\n  if (modifiers.includes(\"self\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.target === el && next(e);\n    });\n  if (event === \"submit\") {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (e.target._x_pendingModelUpdates) {\n        e.target._x_pendingModelUpdates.forEach((fn) => fn());\n      }\n      next(e);\n    });\n  }\n  if (isKeyEvent(event) || isClickEvent(event)) {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers)) {\n        return;\n      }\n      next(e);\n    });\n  }\n  listenerTarget.addEventListener(event, handler4, options);\n  return () => {\n    listenerTarget.removeEventListener(event, handler4, options);\n  };\n}\nfunction addDebounceOrThrottle(modifiers, handler4) {\n  if (modifiers.includes(\"debounce\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"debounce\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = debounce(handler4, wait);\n  }\n  if (modifiers.includes(\"throttle\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"throttle\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = throttle(handler4, wait);\n  }\n  return handler4;\n}\nfunction dotSyntax(subject) {\n  return subject.replace(/-/g, \".\");\n}\nfunction camelCase2(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction isNumeric(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction kebabCase2(subject) {\n  if ([\" \", \"_\"].includes(\n    subject\n  ))\n    return subject;\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[_\\s]/, \"-\").toLowerCase();\n}\nfunction isKeyEvent(event) {\n  return [\"keydown\", \"keyup\"].includes(event);\n}\nfunction isClickEvent(event) {\n  return [\"contextmenu\", \"click\", \"mouse\"].some((i) => event.includes(i));\n}\nvar nonKeyModifiers = [\n  // x-on's own modifiers:\n  \"window\",\n  \"document\",\n  \"prevent\",\n  \"stop\",\n  \"once\",\n  \"capture\",\n  \"self\",\n  \"away\",\n  \"outside\",\n  \"passive\",\n  \"dot\",\n  \"camel\",\n  \"preserve-scroll\",\n  // x-model's own modifiers:\n  \"blur\",\n  \"change\",\n  \"lazy\",\n  \"number\",\n  \"boolean\",\n  \"trim\",\n  \"fill\",\n  \"unintrusive\",\n  \"parent\"\n];\nfunction isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {\n  let keyModifiers = modifiers.filter((modifier, index) => {\n    if (modifier === \"false\" && modifiers[index - 1] === \"passive\")\n      return false;\n    return !nonKeyModifiers.includes(modifier);\n  });\n  if (keyModifiers.includes(\"debounce\")) {\n    let debounceIndex = keyModifiers.indexOf(\"debounce\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.includes(\"throttle\")) {\n    let debounceIndex = keyModifiers.indexOf(\"throttle\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.length === 0)\n    return false;\n  if (keyModifiers.length === 1 && keyToModifiers(e.key).includes(keyModifiers[0]))\n    return false;\n  const systemKeyModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\", \"super\"];\n  const selectedSystemKeyModifiers = systemKeyModifiers.filter((modifier) => keyModifiers.includes(modifier));\n  keyModifiers = keyModifiers.filter((i) => !selectedSystemKeyModifiers.includes(i));\n  if (selectedSystemKeyModifiers.length > 0) {\n    const activelyPressedKeyModifiers = selectedSystemKeyModifiers.filter((modifier) => {\n      if (modifier === \"cmd\" || modifier === \"super\")\n        modifier = \"meta\";\n      return e[`${modifier}Key`];\n    });\n    if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {\n      if (isClickEvent(e.type))\n        return false;\n      if (keyToModifiers(e.key).includes(keyModifiers[0]))\n        return false;\n    }\n  }\n  return true;\n}\nfunction keyToModifiers(key) {\n  if (!key)\n    return [];\n  key = kebabCase2(key);\n  let modifierToKeyMap = {\n    \"ctrl\": \"control\",\n    \"slash\": \"/\",\n    \"space\": \" \",\n    \"spacebar\": \" \",\n    \"cmd\": \"meta\",\n    \"esc\": \"escape\",\n    \"up\": \"arrow-up\",\n    \"down\": \"arrow-down\",\n    \"left\": \"arrow-left\",\n    \"right\": \"arrow-right\",\n    \"period\": \".\",\n    \"comma\": \",\",\n    \"equal\": \"=\",\n    \"minus\": \"-\",\n    \"underscore\": \"_\"\n  };\n  modifierToKeyMap[key] = key;\n  return Object.keys(modifierToKeyMap).map((modifier) => {\n    if (modifierToKeyMap[modifier] === key)\n      return modifier;\n  }).filter((modifier) => modifier);\n}\n\n// packages/alpinejs/src/directives/x-model.js\ndirective(\"model\", (el, { modifiers, expression }, { effect: effect3, cleanup }) => {\n  let scopeTarget = el;\n  if (modifiers.includes(\"parent\")) {\n    scopeTarget = findClosest(el, (element) => element !== el);\n  }\n  let evaluateGet = evaluateLater(scopeTarget, expression);\n  let evaluateSet;\n  if (typeof expression === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression} = __placeholder`);\n  } else if (typeof expression === \"function\" && typeof expression() === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression()} = __placeholder`);\n  } else {\n    evaluateSet = () => {\n    };\n  }\n  let getValue = () => {\n    let result;\n    evaluateGet((value) => result = value);\n    return isGetterSetter(result) ? result.get() : result;\n  };\n  let setValue = (value) => {\n    let result;\n    evaluateGet((value2) => result = value2);\n    if (isGetterSetter(result)) {\n      result.set(value);\n    } else {\n      evaluateSet(() => {\n      }, {\n        scope: { \"__placeholder\": value }\n      });\n    }\n  };\n  if (typeof expression === \"string\" && el.type === \"radio\") {\n    mutateDom(() => {\n      if (!el.hasAttribute(\"name\"))\n        el.setAttribute(\"name\", expression);\n    });\n  }\n  let hasChangeModifier = modifiers.includes(\"change\") || modifiers.includes(\"lazy\");\n  let hasBlurModifier = modifiers.includes(\"blur\");\n  let hasEnterModifier = modifiers.includes(\"enter\");\n  let hasExplicitEventModifiers = hasChangeModifier || hasBlurModifier || hasEnterModifier;\n  let removeListener;\n  if (isCloning) {\n    removeListener = () => {\n    };\n  } else if (hasExplicitEventModifiers) {\n    let listeners = [];\n    let syncValue = (e) => setValue(getInputValue(el, modifiers, e, getValue()));\n    if (hasChangeModifier) {\n      listeners.push(on(el, \"change\", modifiers, syncValue));\n    }\n    if (hasBlurModifier) {\n      listeners.push(on(el, \"blur\", modifiers, syncValue));\n      if (el.form) {\n        let form = el.form;\n        let syncCallback = () => syncValue({ target: el });\n        if (!form._x_pendingModelUpdates)\n          form._x_pendingModelUpdates = [];\n        form._x_pendingModelUpdates.push(syncCallback);\n        cleanup(() => {\n          if (form._x_pendingModelUpdates) {\n            form._x_pendingModelUpdates.splice(form._x_pendingModelUpdates.indexOf(syncCallback), 1);\n          }\n        });\n      }\n    }\n    if (hasEnterModifier) {\n      listeners.push(on(el, \"keydown\", modifiers, (e) => {\n        if (e.key === \"Enter\")\n          syncValue(e);\n      }));\n    }\n    removeListener = () => listeners.forEach((remove2) => remove2());\n  } else {\n    let event = el.tagName.toLowerCase() === \"select\" || [\"checkbox\", \"radio\"].includes(el.type) ? \"change\" : \"input\";\n    removeListener = on(el, event, modifiers, (e) => {\n      setValue(getInputValue(el, modifiers, e, getValue()));\n    });\n  }\n  if (modifiers.includes(\"fill\")) {\n    if ([void 0, null, \"\"].includes(getValue()) || isCheckbox(el) && Array.isArray(getValue()) || el.tagName.toLowerCase() === \"select\" && el.multiple) {\n      setValue(\n        getInputValue(el, modifiers, { target: el }, getValue())\n      );\n    }\n  }\n  if (!el._x_removeModelListeners)\n    el._x_removeModelListeners = {};\n  el._x_removeModelListeners[\"default\"] = removeListener;\n  cleanup(() => el._x_removeModelListeners[\"default\"]());\n  if (el.form) {\n    let removeResetListener = on(el.form, \"reset\", [], (e) => {\n      nextTick(() => el._x_model && el._x_model.set(getInputValue(el, modifiers, { target: el }, getValue())));\n    });\n    cleanup(() => removeResetListener());\n  }\n  el._x_model = {\n    get() {\n      return getValue();\n    },\n    set(value) {\n      setValue(value);\n    },\n    setWithModifiers: addDebounceOrThrottle(modifiers, setValue)\n  };\n  el._x_forceModelUpdate = (value) => {\n    if (value === void 0 && typeof expression === \"string\" && expression.match(/\\./))\n      value = \"\";\n    mutateDom(() => {\n      if (isCheckbox(el)) {\n        if (Array.isArray(value)) {\n          el.checked = value.some((val) => val == el.value);\n        } else {\n          el.checked = !!value;\n        }\n      } else if (isRadio(el)) {\n        if (typeof value === \"boolean\") {\n          el.checked = safeParseBoolean(el.value) === value;\n        } else {\n          el.checked = el.value == value;\n        }\n      } else {\n        bind(el, \"value\", value);\n      }\n    });\n  };\n  if (el.tagName === \"SELECT\") {\n    let observer2 = new MutationObserver(() => {\n      el._x_forceModelUpdate(getValue());\n    });\n    observer2.observe(el, { childList: true });\n    cleanup(() => observer2.disconnect());\n  }\n  effect3(() => {\n    let value = getValue();\n    if (modifiers.includes(\"unintrusive\") && document.activeElement.isSameNode(el))\n      return;\n    el._x_forceModelUpdate(value);\n  });\n});\nfunction getInputValue(el, modifiers, event, currentValue) {\n  return mutateDom(() => {\n    if (event instanceof CustomEvent && event.detail !== void 0)\n      return event.detail !== null && event.detail !== void 0 ? event.detail : event.target.value;\n    else if (isCheckbox(el)) {\n      if (Array.isArray(currentValue)) {\n        let newValue = null;\n        if (modifiers.includes(\"number\")) {\n          newValue = safeParseNumber(event.target.value);\n        } else if (modifiers.includes(\"boolean\")) {\n          newValue = safeParseBoolean(event.target.value);\n        } else {\n          newValue = event.target.value;\n        }\n        return event.target.checked ? currentValue.includes(newValue) ? currentValue : currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));\n      } else {\n        return event.target.checked;\n      }\n    } else if (el.tagName.toLowerCase() === \"select\" && el.multiple) {\n      if (modifiers.includes(\"number\")) {\n        return Array.from(event.target.selectedOptions).map((option) => {\n          let rawValue = option.value || option.text;\n          return safeParseNumber(rawValue);\n        });\n      } else if (modifiers.includes(\"boolean\")) {\n        return Array.from(event.target.selectedOptions).map((option) => {\n          let rawValue = option.value || option.text;\n          return safeParseBoolean(rawValue);\n        });\n      }\n      return Array.from(event.target.selectedOptions).map((option) => {\n        return option.value || option.text;\n      });\n    } else {\n      let newValue;\n      if (isRadio(el)) {\n        if (event.target.checked) {\n          newValue = event.target.value;\n        } else {\n          newValue = currentValue;\n        }\n      } else {\n        newValue = event.target.value;\n      }\n      if (modifiers.includes(\"number\")) {\n        return safeParseNumber(newValue);\n      } else if (modifiers.includes(\"boolean\")) {\n        return safeParseBoolean(newValue);\n      } else if (modifiers.includes(\"trim\")) {\n        return newValue.trim();\n      } else {\n        return newValue;\n      }\n    }\n  });\n}\nfunction safeParseNumber(rawValue) {\n  let number = rawValue ? parseFloat(rawValue) : null;\n  return isNumeric2(number) ? number : rawValue;\n}\nfunction checkedAttrLooseCompare2(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction isNumeric2(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction isGetterSetter(value) {\n  return value !== null && typeof value === \"object\" && typeof value.get === \"function\" && typeof value.set === \"function\";\n}\n\n// packages/alpinejs/src/directives/x-cloak.js\ndirective(\"cloak\", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix(\"cloak\")))));\n\n// packages/alpinejs/src/directives/x-init.js\naddInitSelector(() => `[${prefix(\"init\")}]`);\ndirective(\"init\", skipDuringClone((el, { expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"string\") {\n    return !!expression.trim() && evaluate2(expression, {}, false);\n  }\n  return evaluate2(expression, {}, false);\n}));\n\n// packages/alpinejs/src/directives/x-text.js\ndirective(\"text\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        el.textContent = value;\n      });\n    });\n  });\n});\n\n// packages/alpinejs/src/directives/x-html.js\ndirective(\"html\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        Array.from(el.children).forEach((child) => destroyTree(child));\n        el.innerHTML = value ?? \"\";\n        el._x_ignoreSelf = true;\n        initTree(el);\n        delete el._x_ignoreSelf;\n      });\n    });\n  }, { priority: \"structural\" });\n});\n\n// packages/alpinejs/src/directives/x-bind.js\nmapAttributes(startingWith(\":\", into(prefix(\"bind:\"))));\nvar handler2 = (el, { value, modifiers, expression, original }, { effect: effect3, cleanup }) => {\n  if (!value) {\n    let bindingProviders = {};\n    injectBindingProviders(bindingProviders);\n    let getBindings = evaluateLater(el, expression);\n    getBindings((bindings) => {\n      applyBindingsObject(el, bindings, original);\n    }, { scope: bindingProviders });\n    return;\n  }\n  if (value === \"key\")\n    return storeKeyForXFor(el, expression);\n  if (el._x_inlineBindings && el._x_inlineBindings[value] && el._x_inlineBindings[value].extract) {\n    return;\n  }\n  let evaluate2 = evaluateLater(el, expression);\n  effect3(() => evaluate2((result) => {\n    if (result === void 0 && typeof expression === \"string\" && expression.match(/\\./)) {\n      result = \"\";\n    }\n    mutateDom(() => bind(el, value, result, modifiers));\n  }));\n  cleanup(() => {\n    el._x_undoAddedClasses && el._x_undoAddedClasses();\n    el._x_undoAddedStyles && el._x_undoAddedStyles();\n  });\n};\nhandler2.inline = (el, { value, modifiers, expression }) => {\n  if (!value)\n    return;\n  if (!el._x_inlineBindings)\n    el._x_inlineBindings = {};\n  el._x_inlineBindings[value] = { expression, extract: false };\n};\ndirective(\"bind\", handler2);\nfunction storeKeyForXFor(el, expression) {\n  el._x_keyExpression = expression;\n}\n\n// packages/alpinejs/src/directives/x-data.js\naddRootSelector(() => `[${prefix(\"data\")}]`);\nvar dataForReconciliation = Symbol();\ndirective(\"data\", (el, { expression }, { cleanup }) => {\n  if (shouldSkipRegisteringDataDuringClone(el))\n    return;\n  let dataToReconcile = el[dataForReconciliation];\n  if (dataToReconcile?.expression === expression)\n    return;\n  expression = expression === \"\" ? \"{}\" : expression;\n  let magicContext = {};\n  injectMagics(magicContext, el);\n  let dataProviderContext = {};\n  injectDataProviders(dataProviderContext, magicContext);\n  let data2 = evaluate(el, expression, { scope: dataProviderContext });\n  if (data2 === void 0 || data2 === true)\n    data2 = {};\n  injectMagics(data2, el);\n  let reactiveData;\n  if (dataToReconcile?.reactiveData) {\n    reactiveData = dataToReconcile.reactiveData;\n    reconcileData(reactiveData, data2);\n    let initialized = { expression };\n    el[dataForReconciliation] = initialized;\n    queueMicrotask(() => {\n      if (el[dataForReconciliation] === initialized) {\n        delete el[dataForReconciliation];\n      }\n    });\n  } else {\n    reactiveData = reactive(data2);\n  }\n  initInterceptors(reactiveData, cleanup);\n  let undo = addScopeToNode(el, reactiveData);\n  skipDuringClone(() => {\n    reactiveData[\"init\"] && evaluate(el, reactiveData[\"init\"]);\n  })();\n  cleanup(() => {\n    reactiveData[\"destroy\"] && evaluate(el, reactiveData[\"destroy\"]);\n    undo();\n    let removed = { reactiveData };\n    el[dataForReconciliation] = removed;\n    queueMicrotask(() => {\n      if (el[dataForReconciliation] === removed) {\n        delete el[dataForReconciliation];\n      }\n    });\n  });\n});\nfunction reconcileData(target, source) {\n  Object.keys(source).forEach((key) => {\n    let descriptor = Object.getOwnPropertyDescriptor(source, key);\n    let existingDescriptor = Object.getOwnPropertyDescriptor(target, key);\n    if (descriptor.get || descriptor.set || existingDescriptor?.get || existingDescriptor?.set) {\n      if (existingDescriptor)\n        delete target[key];\n      if (!existingDescriptor)\n        target[key] = void 0;\n      descriptor.get || descriptor.set ? Object.defineProperty(target, key, descriptor) : target[key] = source[key];\n    } else {\n      target[key] = source[key];\n    }\n  });\n  Object.keys(target).filter((key) => !Object.prototype.hasOwnProperty.call(source, key)).forEach((key) => delete target[key]);\n}\ninterceptClone((from, to) => {\n  if (from._x_dataStack) {\n    to._x_dataStack = from._x_dataStack;\n    to.setAttribute(\"data-has-alpine-state\", true);\n  }\n});\nfunction shouldSkipRegisteringDataDuringClone(el) {\n  if (!isCloning)\n    return false;\n  if (isCloningLegacy)\n    return true;\n  return el.hasAttribute(\"data-has-alpine-state\");\n}\n\n// packages/alpinejs/src/directives/x-show.js\ndirective(\"show\", (el, { modifiers, expression }, { effect: effect3 }) => {\n  let evaluate2 = evaluateLater(el, expression);\n  if (!el._x_doHide)\n    el._x_doHide = () => {\n      mutateDom(() => {\n        el.style.setProperty(\"display\", \"none\", modifiers.includes(\"important\") ? \"important\" : void 0);\n      });\n    };\n  if (!el._x_doShow)\n    el._x_doShow = () => {\n      mutateDom(() => {\n        if (el.style.length === 1 && el.style.display === \"none\") {\n          el.removeAttribute(\"style\");\n        } else {\n          el.style.removeProperty(\"display\");\n        }\n      });\n    };\n  let hide = () => {\n    el._x_doHide();\n    el._x_isShown = false;\n  };\n  let show = () => {\n    el._x_doShow();\n    el._x_isShown = true;\n  };\n  let clickAwayCompatibleShow = () => setTimeout(show);\n  let toggle = once(\n    (value) => value ? show() : hide(),\n    (value) => {\n      if (typeof el._x_toggleAndCascadeWithTransitions === \"function\") {\n        el._x_toggleAndCascadeWithTransitions(el, value, show, hide);\n      } else {\n        value ? clickAwayCompatibleShow() : hide();\n      }\n    }\n  );\n  let oldValue;\n  let firstTime = true;\n  effect3(() => evaluate2((value) => {\n    if (!firstTime && value === oldValue)\n      return;\n    if (modifiers.includes(\"immediate\"))\n      value ? clickAwayCompatibleShow() : hide();\n    toggle(value);\n    oldValue = value;\n    firstTime = false;\n  }));\n});\n\n// packages/alpinejs/src/directives/x-for.js\ndirective(\"for\", skipDuringClone((el, { expression }, { effect: effect3, cleanup }) => {\n  let iteratorNames = parseForExpression(expression);\n  let evaluateItems = evaluateLater(el, iteratorNames.items);\n  let evaluateKey = evaluateLater(\n    el,\n    // the x-bind:key expression is stored for our use instead of evaluated.\n    el._x_keyExpression || \"index\"\n  );\n  el._x_lookup = /* @__PURE__ */ new Map();\n  effect3(() => loop(el, iteratorNames, evaluateItems, evaluateKey), { priority: \"structural\" });\n  cleanup(() => {\n    el._x_lookup.forEach(\n      (el2) => mutateDom(() => {\n        destroyTree(el2);\n        el2.remove();\n      })\n    );\n    delete el._x_lookup;\n    delete el._x_lastRenderedEl;\n  });\n}));\nfunction refreshScope(scope2) {\n  return (newScope) => {\n    Object.entries(newScope).forEach(([key, value]) => {\n      scope2[key] = value;\n    });\n  };\n}\nfunction loop(templateEl, iteratorNames, evaluateItems, evaluateKey) {\n  evaluateItems((items) => {\n    if (isNumeric3(items))\n      items = Array.from({ length: items }, (_, i) => i + 1);\n    if (items === void 0 || items === null)\n      items = [];\n    if (items instanceof Set)\n      items = Array.from(items);\n    if (items instanceof Map)\n      items = Array.from(items);\n    let oldLookup = templateEl._x_lookup;\n    let lookup = /* @__PURE__ */ new Map();\n    templateEl._x_lookup = lookup;\n    let hasStringKeys = isObject2(items);\n    let scopeEntries = Object.entries(items).map(([index, item]) => {\n      if (!hasStringKeys)\n        index = parseInt(index);\n      let scope2 = getIterationScopeVariables(iteratorNames, item, index, items);\n      let key;\n      evaluateKey((innerKey) => {\n        if (typeof innerKey === \"object\")\n          warn(\"x-for key cannot be an object, it must be a string or an integer\", templateEl);\n        if (oldLookup.has(innerKey)) {\n          lookup.set(innerKey, oldLookup.get(innerKey));\n          oldLookup.delete(innerKey);\n        }\n        key = innerKey;\n      }, { scope: { index, ...scope2 } });\n      return [key, scope2];\n    });\n    mutateDom(() => {\n      oldLookup.forEach((el) => {\n        destroyTree(el);\n        el.remove();\n      });\n      let added = /* @__PURE__ */ new Set();\n      let prev = templateEl;\n      scopeEntries.forEach(([key, scope2]) => {\n        if (lookup.has(key)) {\n          let el = lookup.get(key);\n          el._x_refreshXForScope(scope2);\n          if (prev.nextElementSibling !== el) {\n            if (prev.nextElementSibling)\n              el.replaceWith(prev.nextElementSibling);\n            prev.after(el);\n          }\n          prev = el;\n          if (el._x_currentIfEl) {\n            if (el.nextElementSibling !== el._x_currentIfEl)\n              prev.after(el._x_currentIfEl);\n            prev = el._x_currentIfEl;\n          }\n          return;\n        }\n        if (templateEl.content.children.length > 1)\n          warn(\"x-for templates require a single root element, additional elements will be ignored.\", templateEl);\n        let clone2 = document.importNode(templateEl.content, true).firstElementChild;\n        let reactiveScope = reactive(scope2);\n        addScopeToNode(clone2, reactiveScope, templateEl);\n        clone2._x_refreshXForScope = refreshScope(reactiveScope);\n        lookup.set(key, clone2);\n        added.add(clone2);\n        prev.after(clone2);\n        prev = clone2;\n      });\n      added.forEach((clone2) => initTree(clone2));\n      if (prev !== templateEl) {\n        templateEl._x_lastRenderedEl = prev;\n      } else {\n        delete templateEl._x_lastRenderedEl;\n      }\n    });\n  });\n}\nfunction parseForExpression(expression) {\n  let forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\n  let stripParensRE = /^\\s*\\(|\\)\\s*$/g;\n  let forAliasRE = /([\\s\\S]*?)\\b(?:in|of)\\b([\\s\\S]*)/;\n  let inMatch = expression.match(forAliasRE);\n  if (!inMatch)\n    return;\n  let res = {};\n  res.items = inMatch[2].trim();\n  let item = inMatch[1].replace(stripParensRE, \"\").trim();\n  let iteratorMatch = item.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.item = item.replace(forIteratorRE, \"\").trim();\n    res.index = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.collection = iteratorMatch[2].trim();\n    }\n  } else {\n    res.item = item;\n  }\n  return res;\n}\nfunction getIterationScopeVariables(iteratorNames, item, index, items) {\n  let scopeVariables = {};\n  if (/^\\[.*\\]$/.test(iteratorNames.item) && Array.isArray(item)) {\n    let names = iteratorNames.item.replace(\"[\", \"\").replace(\"]\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name, i) => {\n      scopeVariables[name] = item[i];\n    });\n  } else if (/^\\{.*\\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === \"object\") {\n    let names = iteratorNames.item.replace(\"{\", \"\").replace(\"}\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name) => {\n      scopeVariables[name] = item[name];\n    });\n  } else {\n    scopeVariables[iteratorNames.item] = item;\n  }\n  if (iteratorNames.index)\n    scopeVariables[iteratorNames.index] = index;\n  if (iteratorNames.collection)\n    scopeVariables[iteratorNames.collection] = items;\n  return scopeVariables;\n}\nfunction isNumeric3(subject) {\n  return typeof subject !== \"object\" && !isNaN(subject);\n}\nfunction isObject2(subject) {\n  return typeof subject === \"object\" && !Array.isArray(subject);\n}\n\n// packages/alpinejs/src/directives/x-ref.js\nfunction handler3() {\n}\nhandler3.inline = (el, { expression }, { cleanup }) => {\n  let root = closestRoot(el);\n  if (!root)\n    return;\n  if (!root._x_refs)\n    root._x_refs = {};\n  root._x_refs[expression] = el;\n  cleanup(() => delete root._x_refs[expression]);\n};\ndirective(\"ref\", handler3);\n\n// packages/alpinejs/src/directives/x-if.js\ndirective(\"if\", skipDuringClone((el, { expression }, { effect: effect3, cleanup }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-if can only be used on a <template> tag\", el);\n  let evaluate2 = evaluateLater(el, expression);\n  let show = () => {\n    if (el._x_currentIfEl)\n      return el._x_currentIfEl;\n    let clone2 = el.content.cloneNode(true).firstElementChild;\n    addScopeToNode(clone2, {}, el);\n    mutateDom(() => {\n      el.after(clone2);\n      initTree(clone2);\n    });\n    el._x_currentIfEl = clone2;\n    el._x_lastRenderedEl = clone2;\n    el._x_undoIf = () => {\n      mutateDom(() => {\n        destroyTree(clone2);\n        clone2.remove();\n      });\n      delete el._x_currentIfEl;\n      delete el._x_lastRenderedEl;\n    };\n    return clone2;\n  };\n  let hide = () => {\n    if (!el._x_undoIf)\n      return;\n    el._x_undoIf();\n    delete el._x_undoIf;\n  };\n  effect3(() => evaluate2((value) => {\n    value ? show() : hide();\n  }), { priority: \"structural\" });\n  cleanup(() => el._x_undoIf && el._x_undoIf());\n}));\n\n// packages/alpinejs/src/directives/x-id.js\ndirective(\"id\", (el, { expression }, { evaluate: evaluate2 }) => {\n  let names = evaluate2(expression);\n  names.forEach((name) => setIdRoot(el, name));\n});\ninterceptClone((from, to) => {\n  if (from._x_ids) {\n    to._x_ids = from._x_ids;\n  }\n});\n\n// packages/alpinejs/src/directives/x-on.js\nmapAttributes(startingWith(\"@\", into(prefix(\"on:\"))));\ndirective(\"on\", skipDuringClone((el, { value, modifiers, expression }, { cleanup }) => {\n  let evaluate2 = expression ? evaluateLater(el, expression) : () => {\n  };\n  if (el.tagName.toLowerCase() === \"template\") {\n    if (!el._x_forwardEvents)\n      el._x_forwardEvents = [];\n    if (!el._x_forwardEvents.includes(value))\n      el._x_forwardEvents.push(value);\n  }\n  let removeListener = on(el, value, modifiers, (e) => {\n    evaluate2(() => {\n    }, { scope: { \"$event\": e }, params: [e] });\n  });\n  cleanup(() => removeListener());\n}));\n\n// packages/alpinejs/src/directives/index.js\nwarnMissingPluginDirective(\"Collapse\", \"collapse\", \"collapse\");\nwarnMissingPluginDirective(\"Intersect\", \"intersect\", \"intersect\");\nwarnMissingPluginDirective(\"Focus\", \"trap\", \"focus\");\nwarnMissingPluginDirective(\"Mask\", \"mask\", \"mask\");\nfunction warnMissingPluginDirective(name, directiveName, slug) {\n  directive(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/csp/src/directives/x-html.js\ndirective(\"html\", (el, { expression }) => {\n  handleError(new Error(\"Using the x-html directive is prohibited in the CSP build\"), el);\n});\n\n// packages/csp/src/index.js\nalpine_default.setEvaluator(cspEvaluator);\nalpine_default.setRawEvaluator(cspRawEvaluator);\nalpine_default.setReactivityEngine({\n  reactive: reactive2,\n  // Since Vue 3.2, the scheduler is called with no arguments, so we wrap\n  // the effect to hand Alpine's scheduler the runner it expects to queue.\n  effect: (callback, options = {}) => {\n    let runner;\n    runner = effect2(callback, {\n      scheduler: () => {\n        if (!runner)\n          return;\n        options.scheduler ? options.scheduler(runner) : runner();\n      }\n    });\n    return runner;\n  },\n  release: stop,\n  raw: toRaw\n});\nvar src_default = alpine_default;\n\n// packages/csp/builds/module.js\nvar module_default = src_default;\nexport {\n  src_default as Alpine,\n  module_default as default\n};\n/*! Bundled license information:\n\n@vue/shared/dist/shared.esm-bundler.js:\n  (**\n  * @vue/shared v3.5.41\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n\n@vue/reactivity/dist/reactivity.esm-bundler.js:\n  (**\n  * @vue/reactivity v3.5.41\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n*/\n","var htmx = (function() {\n  'use strict'\n\n  // Public API\n  const htmx = {\n    // Tsc madness here, assigning the functions directly results in an invalid TypeScript output, but reassigning is fine\n    /* Event processing */\n    /** @type {typeof onLoadHelper} */\n    onLoad: null,\n    /** @type {typeof processNode} */\n    process: null,\n    /** @type {typeof addEventListenerImpl} */\n    on: null,\n    /** @type {typeof removeEventListenerImpl} */\n    off: null,\n    /** @type {typeof triggerEvent} */\n    trigger: null,\n    /** @type {typeof ajaxHelper} */\n    ajax: null,\n    /* DOM querying helpers */\n    /** @type {typeof find} */\n    find: null,\n    /** @type {typeof findAll} */\n    findAll: null,\n    /** @type {typeof closest} */\n    closest: null,\n    /**\n     * Returns the input values that would resolve for a given element via the htmx value resolution mechanism\n     *\n     * @see https://htmx.org/api/#values\n     *\n     * @param {Element} elt the element to resolve values on\n     * @param {HttpVerb} type the request type (e.g. **get** or **post**) non-GET's will include the enclosing form of the element. Defaults to **post**\n     * @returns {Object}\n     */\n    values: function(elt, type) {\n      const inputValues = getInputValues(elt, type || 'post')\n      return inputValues.values\n    },\n    /* DOM manipulation helpers */\n    /** @type {typeof removeElement} */\n    remove: null,\n    /** @type {typeof addClassToElement} */\n    addClass: null,\n    /** @type {typeof removeClassFromElement} */\n    removeClass: null,\n    /** @type {typeof toggleClassOnElement} */\n    toggleClass: null,\n    /** @type {typeof takeClassForElement} */\n    takeClass: null,\n    /** @type {typeof swap} */\n    swap: null,\n    /* Extension entrypoints */\n    /** @type {typeof defineExtension} */\n    defineExtension: null,\n    /** @type {typeof removeExtension} */\n    removeExtension: null,\n    /* Debugging */\n    /** @type {typeof logAll} */\n    logAll: null,\n    /** @type {typeof logNone} */\n    logNone: null,\n    /* Debugging */\n    /**\n     * The logger htmx uses to log with\n     *\n     * @see https://htmx.org/api/#logger\n     */\n    logger: null,\n    /**\n     * A property holding the configuration htmx uses at runtime.\n     *\n     * Note that using a [meta tag](https://htmx.org/docs/#config) is the preferred mechanism for setting these properties.\n     *\n     * @see https://htmx.org/api/#config\n     */\n    config: {\n      /**\n       * Whether to use history.\n       * @type boolean\n       * @default true\n       */\n      historyEnabled: true,\n      /**\n       * The number of pages to keep in **sessionStorage** for history support.\n       * @type number\n       * @default 10\n       */\n      historyCacheSize: 10,\n      /**\n       * @type boolean\n       * @default false\n       */\n      refreshOnHistoryMiss: false,\n      /**\n       * The default swap style to use if **[hx-swap](https://htmx.org/attributes/hx-swap)** is omitted.\n       * @type HtmxSwapStyle\n       * @default 'innerHTML'\n       */\n      defaultSwapStyle: 'innerHTML',\n      /**\n       * The default delay between receiving a response from the server and doing the swap.\n       * @type number\n       * @default 0\n       */\n      defaultSwapDelay: 0,\n      /**\n       * The default delay between completing the content swap and settling attributes.\n       * @type number\n       * @default 20\n       */\n      defaultSettleDelay: 20,\n      /**\n       * If true, htmx will inject a small amount of CSS into the page to make indicators invisible unless the **htmx-indicator** class is present.\n       * @type boolean\n       * @default true\n       */\n      includeIndicatorStyles: true,\n      /**\n       * The class to place on indicators when a request is in flight.\n       * @type string\n       * @default 'htmx-indicator'\n       */\n      indicatorClass: 'htmx-indicator',\n      /**\n       * The class to place on triggering elements when a request is in flight.\n       * @type string\n       * @default 'htmx-request'\n       */\n      requestClass: 'htmx-request',\n      /**\n       * The class to temporarily place on elements that htmx has added to the DOM.\n       * @type string\n       * @default 'htmx-added'\n       */\n      addedClass: 'htmx-added',\n      /**\n       * The class to place on target elements when htmx is in the settling phase.\n       * @type string\n       * @default 'htmx-settling'\n       */\n      settlingClass: 'htmx-settling',\n      /**\n       * The class to place on target elements when htmx is in the swapping phase.\n       * @type string\n       * @default 'htmx-swapping'\n       */\n      swappingClass: 'htmx-swapping',\n      /**\n       * Allows the use of eval-like functionality in htmx, to enable **hx-vars**, trigger conditions & script tag evaluation. Can be set to **false** for CSP compatibility.\n       * @type boolean\n       * @default true\n       */\n      allowEval: true,\n      /**\n       * If set to false, disables the interpretation of script tags.\n       * @type boolean\n       * @default true\n       */\n      allowScriptTags: true,\n      /**\n       * If set, the nonce will be added to inline scripts.\n       * @type string\n       * @default ''\n       */\n      inlineScriptNonce: '',\n      /**\n       * If set, the nonce will be added to inline styles.\n       * @type string\n       * @default ''\n       */\n      inlineStyleNonce: '',\n      /**\n       * The attributes to settle during the settling phase.\n       * @type string[]\n       * @default ['class', 'style', 'width', 'height']\n       */\n      attributesToSettle: ['class', 'style', 'width', 'height'],\n      /**\n       * Allow cross-site Access-Control requests using credentials such as cookies, authorization headers or TLS client certificates.\n       * @type boolean\n       * @default false\n       */\n      withCredentials: false,\n      /**\n       * @type number\n       * @default 0\n       */\n      timeout: 0,\n      /**\n       * The default implementation of **getWebSocketReconnectDelay** for reconnecting after unexpected connection loss by the event code **Abnormal Closure**, **Service Restart** or **Try Again Later**.\n       * @type {'full-jitter' | ((retryCount:number) => number)}\n       * @default \"full-jitter\"\n       */\n      wsReconnectDelay: 'full-jitter',\n      /**\n       * The type of binary data being received over the WebSocket connection\n       * @type BinaryType\n       * @default 'blob'\n       */\n      wsBinaryType: 'blob',\n      /**\n       * @type string\n       * @default '[hx-disable], [data-hx-disable]'\n       */\n      disableSelector: '[hx-disable], [data-hx-disable]',\n      /**\n       * @type {'auto' | 'instant' | 'smooth'}\n       * @default 'instant'\n       */\n      scrollBehavior: 'instant',\n      /**\n       * If the focused element should be scrolled into view.\n       * @type boolean\n       * @default false\n       */\n      defaultFocusScroll: false,\n      /**\n       * If set to true htmx will include a cache-busting parameter in GET requests to avoid caching partial responses by the browser\n       * @type boolean\n       * @default false\n       */\n      getCacheBusterParam: false,\n      /**\n       * If set to true, htmx will use the View Transition API when swapping in new content.\n       * @type boolean\n       * @default false\n       */\n      globalViewTransitions: false,\n      /**\n       * htmx will format requests with these methods by encoding their parameters in the URL, not the request body\n       * @type {(HttpVerb)[]}\n       * @default ['get', 'delete']\n       */\n      methodsThatUseUrlParams: ['get', 'delete'],\n      /**\n       * If set to true, disables htmx-based requests to non-origin hosts.\n       * @type boolean\n       * @default false\n       */\n      selfRequestsOnly: true,\n      /**\n       * If set to true htmx will not update the title of the document when a title tag is found in new content\n       * @type boolean\n       * @default false\n       */\n      ignoreTitle: false,\n      /**\n       * Whether the target of a boosted element is scrolled into the viewport.\n       * @type boolean\n       * @default true\n       */\n      scrollIntoViewOnBoost: true,\n      /**\n       * The cache to store evaluated trigger specifications into.\n       * You may define a simple object to use a never-clearing cache, or implement your own system using a [proxy object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Proxy)\n       * @type {Object|null}\n       * @default null\n       */\n      triggerSpecsCache: null,\n      /** @type boolean */\n      disableInheritance: false,\n      /** @type HtmxResponseHandlingConfig[] */\n      responseHandling: [\n        { code: '204', swap: false },\n        { code: '[23]..', swap: true },\n        { code: '[45]..', swap: false, error: true }\n      ],\n      /**\n       * Whether to process OOB swaps on elements that are nested within the main response element.\n       * @type boolean\n       * @default true\n       */\n      allowNestedOobSwaps: true,\n      /**\n       * Whether to treat history cache miss full page reload requests as a \"HX-Request\" by returning this response header\n       * This should always be disabled when using HX-Request header to optionally return partial responses\n       * @type boolean\n       * @default true\n       */\n      historyRestoreAsHxRequest: true,\n      /**\n       * Whether to report input validation errors to the end user and update focus to the first input that fails validation.\n       * This should always be enabled as this matches default browser form submit behaviour\n       * @type boolean\n       * @default false\n       */\n      reportValidityOfForms: false\n    },\n    /** @type {typeof parseInterval} */\n    parseInterval: null,\n    /**\n     * proxy of window.location used for page reload functions\n     * @type location\n     */\n    location,\n    /** @type {typeof internalEval} */\n    _: null,\n    version: '2.0.10'\n  }\n  // Tsc madness part 2\n  htmx.onLoad = onLoadHelper\n  htmx.process = processNode\n  htmx.on = addEventListenerImpl\n  htmx.off = removeEventListenerImpl\n  htmx.trigger = triggerEvent\n  htmx.ajax = ajaxHelper\n  htmx.find = find\n  htmx.findAll = findAll\n  htmx.closest = closest\n  htmx.remove = removeElement\n  htmx.addClass = addClassToElement\n  htmx.removeClass = removeClassFromElement\n  htmx.toggleClass = toggleClassOnElement\n  htmx.takeClass = takeClassForElement\n  htmx.swap = swap\n  htmx.defineExtension = defineExtension\n  htmx.removeExtension = removeExtension\n  htmx.logAll = logAll\n  htmx.logNone = logNone\n  htmx.parseInterval = parseInterval\n  htmx._ = internalEval\n\n  const internalAPI = {\n    addTriggerHandler,\n    bodyContains,\n    canAccessLocalStorage,\n    findThisElement,\n    filterValues,\n    swap,\n    hasAttribute,\n    getAttributeValue,\n    getClosestAttributeValue,\n    getClosestMatch,\n    getExpressionVars,\n    getHeaders,\n    getInputValues,\n    getInternalData,\n    getSwapSpecification,\n    getTriggerSpecs,\n    getTarget,\n    makeFragment,\n    mergeObjects,\n    makeSettleInfo,\n    oobSwap,\n    querySelectorExt,\n    settleImmediately,\n    shouldCancel,\n    triggerEvent,\n    triggerErrorEvent,\n    withExtensions\n  }\n\n  const VERBS = ['get', 'post', 'put', 'delete', 'patch']\n  const VERB_SELECTOR = VERBS.map(function(verb) {\n    return '[hx-' + verb + '], [data-hx-' + verb + ']'\n  }).join(', ')\n\n  //= ===================================================================\n  // Utilities\n  //= ===================================================================\n\n  /**\n   * Parses an interval string consistent with the way htmx does. Useful for plugins that have timing-related attributes.\n   *\n   * Caution: Accepts an int followed by either **s** or **ms**. All other values use **parseFloat**\n   *\n   * @see https://htmx.org/api/#parseInterval\n   *\n   * @param {string} str timing string\n   * @returns {number|undefined}\n   */\n  function parseInterval(str) {\n    if (str == undefined) {\n      return undefined\n    }\n\n    let interval = NaN\n    if (str.slice(-2) == 'ms') {\n      interval = parseFloat(str.slice(0, -2))\n    } else if (str.slice(-1) == 's') {\n      interval = parseFloat(str.slice(0, -1)) * 1000\n    } else if (str.slice(-1) == 'm') {\n      interval = parseFloat(str.slice(0, -1)) * 1000 * 60\n    } else {\n      interval = parseFloat(str)\n    }\n    return isNaN(interval) ? undefined : interval\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} name\n   * @returns {(string | null)}\n   */\n  function getRawAttribute(elt, name) {\n    return elt instanceof Element && elt.getAttribute(name)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} qualifiedName\n   * @returns {boolean}\n   */\n  // resolve with both hx and data-hx prefixes\n  function hasAttribute(elt, qualifiedName) {\n    return !!elt.hasAttribute && (elt.hasAttribute(qualifiedName) ||\n      elt.hasAttribute('data-' + qualifiedName))\n  }\n\n  /**\n   *\n   * @param {Node} elt\n   * @param {string} qualifiedName\n   * @returns {(string | null)}\n   */\n  function getAttributeValue(elt, qualifiedName) {\n    return getRawAttribute(elt, qualifiedName) || getRawAttribute(elt, 'data-' + qualifiedName)\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Node | null}\n   */\n  function parentElt(elt) {\n    const parent = elt.parentElement\n    if (!parent && elt.parentNode instanceof ShadowRoot) return elt.parentNode\n    return parent\n  }\n\n  /**\n   * @returns {Document}\n   */\n  function getDocument() {\n    return document\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {boolean} global\n   * @returns {Node|Document}\n   */\n  function getRootNode(elt, global) {\n    return elt.getRootNode ? elt.getRootNode({ composed: global }) : getDocument()\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {(e:Node) => boolean} condition\n   * @returns {Node | null}\n   */\n  function getClosestMatch(elt, condition) {\n    while (elt && !condition(elt)) {\n      elt = parentElt(elt)\n    }\n\n    return elt || null\n  }\n\n  /**\n   * @param {Element} initialElement\n   * @param {Element} ancestor\n   * @param {string} attributeName\n   * @returns {string|null}\n   */\n  function getAttributeValueWithDisinheritance(initialElement, ancestor, attributeName) {\n    const attributeValue = getAttributeValue(ancestor, attributeName)\n    const disinherit = getAttributeValue(ancestor, 'hx-disinherit')\n    var inherit = getAttributeValue(ancestor, 'hx-inherit')\n    if (initialElement !== ancestor) {\n      if (htmx.config.disableInheritance) {\n        if (inherit && (inherit === '*' || inherit.split(' ').indexOf(attributeName) >= 0)) {\n          return attributeValue\n        } else {\n          return null\n        }\n      }\n      if (disinherit && (disinherit === '*' || disinherit.split(' ').indexOf(attributeName) >= 0)) {\n        return 'unset'\n      }\n    }\n    return attributeValue\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attributeName\n   * @returns {string | null}\n   */\n  function getClosestAttributeValue(elt, attributeName) {\n    let closestAttr = null\n    getClosestMatch(elt, function(e) {\n      return !!(closestAttr = getAttributeValueWithDisinheritance(elt, asElement(e), attributeName))\n    })\n    if (closestAttr !== 'unset') {\n      return closestAttr\n    }\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} selector\n   * @returns {boolean}\n   */\n  function matches(elt, selector) {\n    return elt instanceof Element && elt.matches(selector)\n  }\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function getStartTag(str) {\n    const tagMatcher = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i\n    const match = tagMatcher.exec(str)\n    if (match) {\n      return match[1].toLowerCase()\n    } else {\n      return ''\n    }\n  }\n\n  /**\n   * @param {string} resp\n   * @returns {Document}\n   */\n  function parseHTML(resp) {\n    if ('parseHTMLUnsafe' in Document) {\n      return Document.parseHTMLUnsafe(resp)\n    }\n    const parser = new DOMParser()\n    return parser.parseFromString(resp, 'text/html')\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {Node} elt\n   */\n  function takeChildrenFor(fragment, elt) {\n    while (elt.childNodes.length > 0) {\n      fragment.append(elt.childNodes[0])\n    }\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {HTMLScriptElement}\n   */\n  function duplicateScript(script) {\n    const newScript = getDocument().createElement('script')\n    forEach(script.attributes, function(attr) {\n      newScript.setAttribute(attr.name, attr.value)\n    })\n    newScript.textContent = script.textContent\n    newScript.async = false\n    if (htmx.config.inlineScriptNonce) {\n      newScript.nonce = htmx.config.inlineScriptNonce\n    }\n    return newScript\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {boolean}\n   */\n  function isJavaScriptScriptNode(script) {\n    return script.matches('script') && (script.type === 'text/javascript' || script.type === 'module' || script.type === '')\n  }\n\n  /**\n   * we have to make new copies of script tags that we are going to insert because\n   * SOME browsers (not saying who, but it involves an element and an animal) don't\n   * execute scripts created in <template> tags when they are inserted into the DOM\n   * and all the others do lmao\n   * @param {DocumentFragment} fragment\n   */\n  function normalizeScriptTags(fragment) {\n    Array.from(fragment.querySelectorAll('script')).forEach(/** @param {HTMLScriptElement} script */ (script) => {\n      if (isJavaScriptScriptNode(script)) {\n        const newScript = duplicateScript(script)\n        const parent = script.parentNode\n        try {\n          parent.insertBefore(newScript, script)\n        } catch (e) {\n          logError(e)\n        } finally {\n          script.remove()\n        }\n      }\n    })\n  }\n\n  /**\n   * @typedef {DocumentFragment & {title?: string}} DocumentFragmentWithTitle\n   * @description  a document fragment representing the response HTML, including\n   * a `title` property for any title information found\n   */\n\n  /**\n   * @param {string} response HTML\n   * @returns {DocumentFragmentWithTitle}\n   */\n  function makeFragment(response) {\n    // strip head tag to determine shape of response we are dealing with\n    const responseWithNoHead = response.replace(/<head(\\s[^>]*)?>[\\s\\S]*?<\\/head>/i, '')\n    const startTag = getStartTag(responseWithNoHead)\n    /** @type DocumentFragmentWithTitle */\n    let fragment\n    if (startTag === 'html') {\n      // if it is a full document, parse it and return the body\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(response)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else if (startTag === 'body') {\n      // parse body w/o wrapping in template\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(responseWithNoHead)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else {\n      // otherwise we have non-body partial HTML content, so wrap it in a template to maximize parsing flexibility\n      const doc = parseHTML('<body><template class=\"internal-htmx-wrapper\">' + responseWithNoHead + '</template></body>')\n      fragment = /** @type DocumentFragmentWithTitle */ (doc.querySelector('template').content)\n      // extract title into fragment for later processing\n      fragment.title = doc.title\n\n      // for legacy reasons we support a title tag at the root level of non-body responses, so we need to handle it\n      var titleElement = fragment.querySelector('title')\n      if (titleElement && titleElement.parentNode === fragment) {\n        titleElement.remove()\n        fragment.title = titleElement.innerText\n      }\n    }\n    if (fragment) {\n      if (htmx.config.allowScriptTags) {\n        normalizeScriptTags(fragment)\n      } else {\n        // remove all script tags if scripts are disabled\n        fragment.querySelectorAll('script').forEach((script) => script.remove())\n      }\n    }\n    return fragment\n  }\n\n  /**\n   * @param {Function} func\n   */\n  function maybeCall(func) {\n    if (func) {\n      func()\n    }\n  }\n\n  /**\n   * @param {any} o\n   * @param {string} type\n   * @returns\n   */\n  function isType(o, type) {\n    return Object.prototype.toString.call(o) === '[object ' + type + ']'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Function}\n   */\n  function isFunction(o) {\n    return typeof o === 'function'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Object}\n   */\n  function isRawObject(o) {\n    return isType(o, 'Object')\n  }\n\n  /**\n   * @typedef {Object} OnHandler\n   * @property {(keyof HTMLElementEventMap)|string} event\n   * @property {EventListener} listener\n   */\n\n  /**\n   * @typedef {Object} ListenerInfo\n   * @property {string} trigger\n   * @property {EventListener} listener\n   * @property {EventTarget} on\n   */\n\n  /**\n   * @typedef {Object} HtmxNodeInternalData\n   * Element data\n   * @property {number} [initHash]\n   * @property {boolean} [boosted]\n   * @property {OnHandler[]} [onHandlers]\n   * @property {number} [timeout]\n   * @property {ListenerInfo[]} [listenerInfos]\n   * @property {boolean} [cancelled]\n   * @property {boolean} [triggeredOnce]\n   * @property {number} [delayed]\n   * @property {number|null} [throttle]\n   * @property {WeakMap<HtmxTriggerSpecification,WeakMap<EventTarget,string>>} [lastValue]\n   * @property {boolean} [loaded]\n   * @property {string} [path]\n   * @property {string} [verb]\n   * @property {boolean} [polling]\n   * @property {HTMLButtonElement|HTMLInputElement|null} [lastButtonClicked]\n   * @property {number} [requestCount]\n   * @property {XMLHttpRequest} [xhr]\n   * @property {(() => void)[]} [queuedRequests]\n   * @property {boolean} [abortable]\n   * @property {boolean} [firstInitCompleted]\n   *\n   * Event data\n   * @property {HtmxTriggerSpecification} [triggerSpec]\n   * @property {EventTarget[]} [handledFor]\n   */\n\n  /**\n   * getInternalData retrieves \"private\" data stored by htmx within an element\n   * @param {EventTarget|Event} elt\n   * @returns {HtmxNodeInternalData}\n   */\n  function getInternalData(elt) {\n    const dataProp = 'htmx-internal-data'\n    let data = elt[dataProp]\n    if (!data) {\n      data = elt[dataProp] = {}\n    }\n    return data\n  }\n\n  /**\n   * toArray converts an ArrayLike object into a real array.\n   * @template T\n   * @param {ArrayLike<T>} arr\n   * @returns {T[]}\n   */\n  function toArray(arr) {\n    const returnArr = []\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        returnArr.push(arr[i])\n      }\n    }\n    return returnArr\n  }\n\n  /**\n   * @template T\n   * @param {T[]|NamedNodeMap|HTMLCollection|HTMLFormControlsCollection|ArrayLike<T>} arr\n   * @param {(T) => void} func\n   */\n  function forEach(arr, func) {\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        func(arr[i])\n      }\n    }\n  }\n\n  /**\n   * @param {Element} el\n   * @returns {boolean}\n   */\n  function isScrolledIntoView(el) {\n    const rect = el.getBoundingClientRect()\n    const elemTop = rect.top\n    const elemBottom = rect.bottom\n    return elemTop < window.innerHeight && elemBottom >= 0\n  }\n\n  /**\n   * Checks whether the element is in the document (includes shadow roots).\n   * This function this is a slight misnomer; it will return true even for elements in the head.\n   *\n   * @param {Node} elt\n   * @returns {boolean}\n   */\n  function bodyContains(elt) {\n    return elt.getRootNode({ composed: true }) === document\n  }\n\n  /**\n   * @param {string} trigger\n   * @returns {string[]}\n   */\n  function splitOnWhitespace(trigger) {\n    return trigger.trim().split(/\\s+/)\n  }\n\n  /**\n   * mergeObjects takes all the keys from\n   * obj2 and duplicates them into obj1\n   * @template T1\n   * @template T2\n   * @param {T1} obj1\n   * @param {T2} obj2\n   * @returns {T1 & T2}\n   */\n  function mergeObjects(obj1, obj2) {\n    for (const key in obj2) {\n      if (obj2.hasOwnProperty(key)) {\n        // @ts-ignore tsc doesn't seem to properly handle types merging\n        obj1[key] = obj2[key]\n      }\n    }\n    // @ts-ignore tsc doesn't seem to properly handle types merging\n    return obj1\n  }\n\n  /**\n   * @param {string} jString\n   * @returns {any|null}\n   */\n  function parseJSON(jString) {\n    try {\n      return JSON.parse(jString)\n    } catch (error) {\n      logError(error)\n      return null\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  function canAccessLocalStorage() {\n    const test = 'htmx:sessionStorageTest'\n    try {\n      sessionStorage.setItem(test, test)\n      sessionStorage.removeItem(test)\n      return true\n    } catch (e) {\n      return false\n    }\n  }\n\n  /**\n   * @param {string} path\n   * @returns {string}\n   */\n  function normalizePath(path) {\n    try {\n      const url = new URL(path, window.location.href)\n      path = url.pathname + url.search\n    } catch (e) {\n      // fallback for malformed URLs\n    }\n    // remove trailing slash, unless index page\n    if (path != '/') {\n      path = path.replace(/\\/+$/, '')\n    }\n    return path\n  }\n\n  //= =========================================================================================\n  // public API\n  //= =========================================================================================\n\n  /**\n   * @param {string} str\n   * @returns {any}\n   */\n  function internalEval(str) {\n    return maybeEval(getDocument().body, function() {\n      return eval(str)\n    })\n  }\n\n  /**\n   * Adds a callback for the **htmx:load** event. This can be used to process new content, for example initializing the content with a javascript library\n   *\n   * @see https://htmx.org/api/#onLoad\n   *\n   * @param {(elt: Node) => void} callback the callback to call on newly loaded content\n   * @returns {EventListener}\n   */\n  function onLoadHelper(callback) {\n    const value = htmx.on('htmx:load', /** @param {CustomEvent} evt */ function(evt) {\n      callback(evt.detail.elt)\n    })\n    return value\n  }\n\n  /**\n   * Log all htmx events, useful for debugging.\n   *\n   * @see https://htmx.org/api/#logAll\n   */\n  function logAll() {\n    htmx.logger = function(elt, event, data) {\n      if (console) {\n        console.log(event, elt, data)\n      }\n    }\n  }\n\n  function logNone() {\n    htmx.logger = null\n  }\n\n  /**\n   * Finds an element matching the selector\n   *\n   * @see https://htmx.org/api/#find\n   *\n   * @param {ParentNode|string} eltOrSelector  the root element to find the matching element in, inclusive | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {Element|null}\n   */\n  function find(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelector(selector)\n    } else {\n      return find(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * Finds all elements matching the selector\n   *\n   * @see https://htmx.org/api/#findAll\n   *\n   * @param {ParentNode|string} eltOrSelector the root element to find the matching elements in, inclusive | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {NodeListOf<Element>}\n   */\n  function findAll(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelectorAll(selector)\n    } else {\n      return findAll(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * @returns Window\n   */\n  function getWindow() {\n    return window\n  }\n\n  /**\n   * Removes an element from the DOM\n   *\n   * @see https://htmx.org/api/#remove\n   *\n   * @param {Node} elt\n   * @param {number} [delay]\n   */\n  function removeElement(elt, delay) {\n    elt = resolveTarget(elt)\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeElement(elt)\n        elt = null\n      }, delay)\n    } else {\n      parentElt(elt).removeChild(elt)\n    }\n  }\n\n  /**\n   * @param {any} elt\n   * @return {Element|null}\n   */\n  function asElement(elt) {\n    return elt instanceof Element ? elt : null\n  }\n\n  /**\n   * @param {any} elt\n   * @return {HTMLElement|null}\n   */\n  function asHtmlElement(elt) {\n    return elt instanceof HTMLElement ? elt : null\n  }\n\n  /**\n   * @param {any} value\n   * @return {string|null}\n   */\n  function asString(value) {\n    return typeof value === 'string' ? value : null\n  }\n\n  /**\n   * @param {EventTarget} elt\n   * @return {ParentNode|null}\n   */\n  function asParentNode(elt) {\n    return elt instanceof Element || elt instanceof Document || elt instanceof DocumentFragment ? elt : null\n  }\n\n  /**\n   * This method adds a class to the given element.\n   *\n   * @see https://htmx.org/api/#addClass\n   *\n   * @param {Element|string} elt the element to add the class to\n   * @param {string} clazz the class to add\n   * @param {number} [delay] the delay (in milliseconds) before class is added\n   */\n  function addClassToElement(elt, clazz, delay) {\n    elt = asElement(resolveTarget(elt))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        addClassToElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      elt.classList && elt.classList.add(clazz)\n    }\n  }\n\n  /**\n   * Removes a class from the given element\n   *\n   * @see https://htmx.org/api/#removeClass\n   *\n   * @param {Node|string} node element to remove the class from\n   * @param {string} clazz the class to remove\n   * @param {number} [delay] the delay (in milliseconds before class is removed)\n   */\n  function removeClassFromElement(node, clazz, delay) {\n    let elt = asElement(resolveTarget(node))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeClassFromElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      if (elt.classList) {\n        elt.classList.remove(clazz)\n        // if there are no classes left, remove the class attribute\n        if (elt.classList.length === 0) {\n          elt.removeAttribute('class')\n        }\n      }\n    }\n  }\n\n  /**\n   * Toggles the given class on an element\n   *\n   * @see https://htmx.org/api/#toggleClass\n   *\n   * @param {Element|string} elt the element to toggle the class on\n   * @param {string} clazz the class to toggle\n   */\n  function toggleClassOnElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    elt.classList.toggle(clazz)\n  }\n\n  /**\n   * Takes the given class from its siblings, so that among its siblings, only the given element will have the class.\n   *\n   * @see https://htmx.org/api/#takeClass\n   *\n   * @param {Node|string} elt the element that will take the class\n   * @param {string} clazz the class to take\n   */\n  function takeClassForElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    forEach(elt.parentElement.children, function(child) {\n      removeClassFromElement(child, clazz)\n    })\n    addClassToElement(asElement(elt), clazz)\n  }\n\n  /**\n   * Finds the closest matching element in the given elements parentage, inclusive of the element\n   *\n   * @see https://htmx.org/api/#closest\n   *\n   * @param {Element|string} elt the element to find the selector from\n   * @param {string} selector the selector to find\n   * @returns {Element|null}\n   */\n  function closest(elt, selector) {\n    elt = asElement(resolveTarget(elt))\n    if (elt) {\n      return elt.closest(selector)\n    }\n    return null\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} prefix\n   * @returns {boolean}\n   */\n  function startsWith(str, prefix) {\n    return str.substring(0, prefix.length) === prefix\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} suffix\n   * @returns {boolean}\n   */\n  function endsWith(str, suffix) {\n    return str.substring(str.length - suffix.length) === suffix\n  }\n\n  /**\n   * @param {string} selector\n   * @returns {string}\n   */\n  function normalizeSelector(selector) {\n    const trimmedSelector = selector.trim()\n    if (startsWith(trimmedSelector, '<') && endsWith(trimmedSelector, '/>')) {\n      return trimmedSelector.substring(1, trimmedSelector.length - 2)\n    } else {\n      return trimmedSelector\n    }\n  }\n\n  /**\n   * @param {Node|Element|Document|string} elt\n   * @param {string} selector\n   * @param {boolean=} global\n   * @returns {(Node|Window)[]}\n   */\n  function querySelectorAllExt(elt, selector, global) {\n    if (selector.indexOf('global ') === 0) {\n      return querySelectorAllExt(elt, selector.slice(7), true)\n    }\n\n    elt = resolveTarget(elt)\n\n    const parts = []\n    {\n      let chevronsCount = 0\n      let offset = 0\n      for (let i = 0; i < selector.length; i++) {\n        const char = selector[i]\n        if (char === ',' && chevronsCount === 0) {\n          parts.push(selector.substring(offset, i))\n          offset = i + 1\n          continue\n        }\n        if (char === '<') {\n          chevronsCount++\n        } else if (char === '/' && i < selector.length - 1 && selector[i + 1] === '>') {\n          chevronsCount--\n        }\n      }\n      if (offset < selector.length) {\n        parts.push(selector.substring(offset))\n      }\n    }\n\n    const result = []\n    const unprocessedParts = []\n    while (parts.length > 0) {\n      const selector = normalizeSelector(parts.shift())\n      let item\n      if (selector.indexOf('closest ') === 0) {\n        item = closest(asElement(elt), normalizeSelector(selector.slice(8)))\n      } else if (selector.indexOf('find ') === 0) {\n        item = find(asParentNode(elt), normalizeSelector(selector.slice(5)))\n      } else if (selector === 'next' || selector === 'nextElementSibling') {\n        item = asElement(elt).nextElementSibling\n      } else if (selector.indexOf('next ') === 0) {\n        item = scanForwardQuery(elt, normalizeSelector(selector.slice(5)), !!global)\n      } else if (selector === 'previous' || selector === 'previousElementSibling') {\n        item = asElement(elt).previousElementSibling\n      } else if (selector.indexOf('previous ') === 0) {\n        item = scanBackwardsQuery(elt, normalizeSelector(selector.slice(9)), !!global)\n      } else if (selector === 'document') {\n        item = document\n      } else if (selector === 'window') {\n        item = window\n      } else if (selector === 'body') {\n        item = document.body\n      } else if (selector === 'root') {\n        item = getRootNode(elt, !!global)\n      } else if (selector === 'host') {\n        item = (/** @type ShadowRoot */(elt.getRootNode())).host\n      } else {\n        unprocessedParts.push(selector)\n      }\n\n      if (item) {\n        result.push(item)\n      }\n    }\n\n    if (unprocessedParts.length > 0) {\n      const standardSelector = unprocessedParts.join(',')\n      const rootNode = asParentNode(getRootNode(elt, !!global))\n      result.push(...toArray(rootNode.querySelectorAll(standardSelector)))\n    }\n\n    return result\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanForwardQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = 0; i < results.length; i++) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanBackwardsQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = results.length - 1; i >= 0; i--) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node|string} eltOrSelector\n   * @param {string=} selector\n   * @returns {Node|Window}\n   */\n  function querySelectorExt(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return querySelectorAllExt(eltOrSelector, selector)[0]\n    } else {\n      return querySelectorAllExt(getDocument().body, eltOrSelector)[0]\n    }\n  }\n\n  /**\n   * @template {EventTarget} T\n   * @param {T|string} eltOrSelector\n   * @param {T} [context]\n   * @returns {Element|T|null}\n   */\n  function resolveTarget(eltOrSelector, context) {\n    if (typeof eltOrSelector === 'string') {\n      return find(asParentNode(context) || document, eltOrSelector)\n    } else {\n      return eltOrSelector\n    }\n  }\n\n  /**\n   * @typedef {keyof HTMLElementEventMap|string} AnyEventName\n   */\n\n  /**\n   * @typedef {Object} EventArgs\n   * @property {EventTarget} target\n   * @property {AnyEventName} event\n   * @property {EventListener} listener\n   * @property {Object|boolean} options\n   */\n\n  /**\n   * @param {EventTarget|AnyEventName} arg1\n   * @param {AnyEventName|EventListener} arg2\n   * @param {EventListener|Object|boolean} [arg3]\n   * @param {Object|boolean} [arg4]\n   * @returns {EventArgs}\n   */\n  function processEventArgs(arg1, arg2, arg3, arg4) {\n    if (isFunction(arg2)) {\n      return {\n        target: getDocument().body,\n        event: asString(arg1),\n        listener: arg2,\n        options: arg3\n      }\n    } else {\n      return {\n        target: resolveTarget(arg1),\n        event: asString(arg2),\n        listener: arg3,\n        options: arg4\n      }\n    }\n  }\n\n  /**\n   * Adds an event listener to an element\n   *\n   * @see https://htmx.org/api/#on\n   *\n   * @param {EventTarget|string} arg1 the element to add the listener to | the event name to add the listener for\n   * @param {string|EventListener} arg2 the event name to add the listener for | the listener to add\n   * @param {EventListener|Object|boolean} [arg3] the listener to add | options to add\n   * @param {Object|boolean} [arg4] options to add\n   * @returns {EventListener}\n   */\n  function addEventListenerImpl(arg1, arg2, arg3, arg4) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3, arg4)\n      eventArgs.target.addEventListener(eventArgs.event, eventArgs.listener, eventArgs.options)\n    })\n    const b = isFunction(arg2)\n    return b ? arg2 : arg3\n  }\n\n  /**\n   * Removes an event listener from an element\n   *\n   * @see https://htmx.org/api/#off\n   *\n   * @param {EventTarget|string} arg1 the element to remove the listener from | the event name to remove the listener from\n   * @param {string|EventListener} arg2 the event name to remove the listener from | the listener to remove\n   * @param {EventListener} [arg3] the listener to remove\n   * @returns {EventListener}\n   */\n  function removeEventListenerImpl(arg1, arg2, arg3) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3)\n      eventArgs.target.removeEventListener(eventArgs.event, eventArgs.listener)\n    })\n    return isFunction(arg2) ? arg2 : arg3\n  }\n\n  //= ===================================================================\n  // Node processing\n  //= ===================================================================\n\n  const DUMMY_ELT = getDocument().createElement('output') // dummy element for bad selectors\n  /**\n   * @param {Element} elt\n   * @param {string} attrName\n   * @returns {(Node|Window)[]}\n   */\n  function findAttributeTargets(elt, attrName) {\n    const attrTarget = getClosestAttributeValue(elt, attrName)\n    if (attrTarget) {\n      if (attrTarget === 'this') {\n        return [findThisElement(elt, attrName)]\n      } else {\n        const result = querySelectorAllExt(elt, attrTarget)\n        // find `inherit` whole word in value, make sure it's surrounded by commas or is at the start/end of string\n        const shouldInherit = /(^|,)(\\s*)inherit(\\s*)($|,)/.test(attrTarget)\n        if (shouldInherit) {\n          const eltToInheritFrom = asElement(getClosestMatch(elt, function(parent) {\n            return parent !== elt && hasAttribute(asElement(parent), attrName)\n          }))\n          if (eltToInheritFrom) {\n            result.push(...findAttributeTargets(eltToInheritFrom, attrName))\n          }\n        }\n        if (result.length === 0) {\n          logError('The selector \"' + attrTarget + '\" on ' + attrName + ' returned no matches!')\n          return [DUMMY_ELT]\n        } else {\n          return result\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attribute\n   * @returns {Element|null}\n   */\n  function findThisElement(elt, attribute) {\n    return asElement(getClosestMatch(elt, function(elt) {\n      return getAttributeValue(asElement(elt), attribute) != null\n    }))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Node|Window|null}\n   */\n  function getTarget(elt) {\n    const targetStr = getClosestAttributeValue(elt, 'hx-target')\n    if (targetStr) {\n      if (targetStr === 'this') {\n        return findThisElement(elt, 'hx-target')\n      } else {\n        return querySelectorExt(elt, targetStr)\n      }\n    } else {\n      const data = getInternalData(elt)\n      if (data.boosted) {\n        return getDocument().body\n      } else {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @returns {boolean}\n   */\n  function shouldSettleAttribute(name) {\n    return htmx.config.attributesToSettle.includes(name)\n  }\n\n  /**\n   * @param {Element} mergeTo\n   * @param {Element} mergeFrom\n   */\n  function cloneAttributes(mergeTo, mergeFrom) {\n    forEach(Array.from(mergeTo.attributes), function(attr) {\n      if (!mergeFrom.hasAttribute(attr.name) && shouldSettleAttribute(attr.name)) {\n        mergeTo.removeAttribute(attr.name)\n      }\n    })\n    forEach(mergeFrom.attributes, function(attr) {\n      if (shouldSettleAttribute(attr.name)) {\n        mergeTo.setAttribute(attr.name, attr.value)\n      }\n    })\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} target\n   * @returns {boolean}\n   */\n  function isInlineSwap(swapStyle, target) {\n    const extensions = getExtensions(target)\n    for (let i = 0; i < extensions.length; i++) {\n      const extension = extensions[i]\n      try {\n        if (extension.isInlineSwap(swapStyle)) {\n          return true\n        }\n      } catch (e) {\n        logError(e)\n      }\n    }\n    return swapStyle === 'outerHTML'\n  }\n\n  /**\n   * @param {string} oobValue\n   * @param {Element} oobElement\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   * @returns\n   */\n  function oobSwap(oobValue, oobElement, settleInfo, rootNode) {\n    rootNode = rootNode || getDocument()\n    let selector = '#' + CSS.escape(getRawAttribute(oobElement, 'id'))\n    /** @type HtmxSwapStyle */\n    let swapStyle = 'outerHTML'\n    if (oobValue === 'true') {\n      // do nothing\n    } else if (oobValue.indexOf(':') > 0) {\n      swapStyle = oobValue.substring(0, oobValue.indexOf(':'))\n      selector = oobValue.substring(oobValue.indexOf(':') + 1)\n    } else {\n      swapStyle = oobValue\n    }\n    oobElement.removeAttribute('hx-swap-oob')\n    oobElement.removeAttribute('data-hx-swap-oob')\n\n    const targets = querySelectorAllExt(rootNode, selector, false)\n    if (targets.length) {\n      forEach(\n        targets,\n        function(target) {\n          let fragment\n          const oobElementClone = oobElement.cloneNode(true)\n          fragment = getDocument().createDocumentFragment()\n          fragment.appendChild(oobElementClone)\n          if (!isInlineSwap(swapStyle, target)) {\n            fragment = asParentNode(oobElementClone) // if this is not an inline swap, we use the content of the node, not the node itself\n          }\n\n          const beforeSwapDetails = { shouldSwap: true, target, fragment }\n          if (!triggerEvent(target, 'htmx:oobBeforeSwap', beforeSwapDetails)) return\n\n          target = beforeSwapDetails.target // allow re-targeting\n          if (beforeSwapDetails.shouldSwap) {\n            handlePreservedElements(fragment)\n            swapWithStyle(swapStyle, target, target, fragment, settleInfo)\n            restorePreservedElements()\n          }\n          forEach(settleInfo.elts, function(elt) {\n            triggerEvent(elt, 'htmx:oobAfterSwap', beforeSwapDetails)\n          })\n        }\n      )\n      oobElement.parentNode.removeChild(oobElement)\n    } else {\n      oobElement.parentNode.removeChild(oobElement)\n      triggerErrorEvent(getDocument().body, 'htmx:oobErrorNoTarget', { content: oobElement, target: selector })\n    }\n    return oobValue\n  }\n\n  function restorePreservedElements() {\n    const pantry = find('#--htmx-preserve-pantry--')\n    if (pantry) {\n      for (const preservedElt of [...pantry.children]) {\n        const existingElement = find('#' + preservedElt.id)\n        // @ts-ignore - use proposed moveBefore feature\n        existingElement.parentNode.moveBefore(preservedElt, existingElement)\n        existingElement.remove()\n      }\n      pantry.remove()\n    }\n  }\n\n  /**\n   * @param {DocumentFragment|ParentNode} fragment\n   */\n  function handlePreservedElements(fragment) {\n    forEach(findAll(fragment, '[hx-preserve], [data-hx-preserve]'), function(preservedElt) {\n      const id = getAttributeValue(preservedElt, 'id')\n      const existingElement = getDocument().getElementById(id)\n      if (existingElement != null) {\n        if (preservedElt.moveBefore) { // if the moveBefore API exists, use it\n          // get or create a storage spot for stuff\n          let pantry = find('#--htmx-preserve-pantry--')\n          if (pantry == null) {\n            getDocument().body.insertAdjacentHTML('afterend', \"<div id='--htmx-preserve-pantry--'></div>\")\n            pantry = find('#--htmx-preserve-pantry--')\n          }\n          // @ts-ignore - use proposed moveBefore feature\n          pantry.moveBefore(existingElement, null)\n        } else {\n          preservedElt.parentNode.replaceChild(existingElement, preservedElt)\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function handleAttributes(parentNode, fragment, settleInfo) {\n    forEach(fragment.querySelectorAll('[id]'), function(newNode) {\n      const id = getRawAttribute(newNode, 'id')\n      if (id && id.length > 0) {\n        const parentElt = asParentNode(parentNode)\n        const oldNode = parentElt && parentElt.querySelector(CSS.escape(newNode.tagName) + '#' + CSS.escape(id))\n        if (oldNode && oldNode !== parentElt) {\n          const newAttributes = newNode.cloneNode()\n          cloneAttributes(newNode, oldNode)\n          settleInfo.tasks.push(function() {\n            cloneAttributes(newNode, newAttributes)\n          })\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} child\n   * @returns {HtmxSettleTask}\n   */\n  function makeAjaxLoadTask(child) {\n    return function() {\n      removeClassFromElement(child, htmx.config.addedClass)\n      processNode(asElement(child))\n      processFocus(asParentNode(child))\n      triggerEvent(child, 'htmx:load')\n    }\n  }\n\n  /**\n   * @param {ParentNode} child\n   */\n  function processFocus(child) {\n    const autofocus = '[autofocus]'\n    const autoFocusedElt = asHtmlElement(matches(child, autofocus) ? child : child.querySelector(autofocus))\n    if (autoFocusedElt != null) {\n      autoFocusedElt.focus()\n    }\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {Node} insertBefore\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function insertNodesBefore(parentNode, insertBefore, fragment, settleInfo) {\n    handleAttributes(parentNode, fragment, settleInfo)\n    while (fragment.childNodes.length > 0) {\n      const child = fragment.firstChild\n      addClassToElement(asElement(child), htmx.config.addedClass)\n      parentNode.insertBefore(child, insertBefore)\n      if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n        settleInfo.tasks.push(makeAjaxLoadTask(child))\n      }\n    }\n  }\n\n  /**\n   * based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0,\n   * derived from Java's string hashcode implementation\n   * @param {string} string\n   * @param {number} hash\n   * @returns {number}\n   */\n  function stringHash(string, hash) {\n    let char = 0\n    while (char < string.length) {\n      hash = (hash << 5) - hash + string.charCodeAt(char++) | 0 // bitwise or ensures we have a 32-bit int\n    }\n    return hash\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {number}\n   */\n  function attributeHash(elt) {\n    let hash = 0\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const attribute = elt.attributes[i]\n      if (attribute.value) { // only include attributes w/ actual values (empty is same as non-existent)\n        hash = stringHash(attribute.name, hash)\n        hash = stringHash(attribute.value, hash)\n      }\n    }\n    return hash\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function deInitOnHandlers(elt) {\n    const internalData = getInternalData(elt)\n    if (internalData.onHandlers) {\n      for (let i = 0; i < internalData.onHandlers.length; i++) {\n        const handlerInfo = internalData.onHandlers[i]\n        removeEventListenerImpl(elt, handlerInfo.event, handlerInfo.listener)\n      }\n      delete internalData.onHandlers\n    }\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function deInitNode(element) {\n    const internalData = getInternalData(element)\n    if (internalData.timeout) {\n      clearTimeout(internalData.timeout)\n    }\n    if (internalData.listenerInfos) {\n      forEach(internalData.listenerInfos, function(info) {\n        if (info.on) {\n          removeEventListenerImpl(info.on, info.trigger, info.listener)\n        }\n      })\n    }\n    deInitOnHandlers(element)\n    forEach(Object.keys(internalData), function(key) { if (key !== 'firstInitCompleted') delete internalData[key] })\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function cleanUpElement(element) {\n    triggerEvent(element, 'htmx:beforeCleanupElement')\n    deInitNode(element)\n    // @ts-ignore\n    forEach(element.children, function(child) { cleanUpElement(child) })\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapOuterHTML(target, fragment, settleInfo) {\n    if (target.tagName === 'BODY') { // special case the body to innerHTML because DocumentFragments can't contain a body elt unfortunately\n      return swapInnerHTML(target, fragment, settleInfo)\n    }\n    /** @type {Node} */\n    let newElt\n    const eltBeforeNewContent = target.previousSibling\n    const parentNode = parentElt(target)\n    if (!parentNode) { // when parent node disappears, we can't do anything\n      return\n    }\n    insertNodesBefore(parentNode, target, fragment, settleInfo)\n    if (eltBeforeNewContent == null) {\n      newElt = parentNode.firstChild\n    } else {\n      newElt = eltBeforeNewContent.nextSibling\n    }\n    settleInfo.elts = settleInfo.elts.filter(function(e) { return e !== target })\n    // scan through all newly added content and add all elements to the settle info so we trigger\n    // events properly on them\n    while (newElt && newElt !== target) {\n      if (newElt instanceof Element) {\n        settleInfo.elts.push(newElt)\n      }\n      newElt = newElt.nextSibling\n    }\n    cleanUpElement(target)\n    target.remove()\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(target, target.firstChild, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(target, null, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target.nextSibling, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   */\n  function swapDelete(target) {\n    cleanUpElement(target)\n    const parent = parentElt(target)\n    if (parent) {\n      return parent.removeChild(target)\n    }\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapInnerHTML(target, fragment, settleInfo) {\n    const firstChild = target.firstChild\n    insertNodesBefore(target, firstChild, fragment, settleInfo)\n    if (firstChild) {\n      while (firstChild.nextSibling) {\n        cleanUpElement(firstChild.nextSibling)\n        target.removeChild(firstChild.nextSibling)\n      }\n      cleanUpElement(firstChild)\n      target.removeChild(firstChild)\n    }\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} elt\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapWithStyle(swapStyle, elt, target, fragment, settleInfo) {\n    switch (swapStyle) {\n      case 'none':\n        return\n      case 'outerHTML':\n        swapOuterHTML(target, fragment, settleInfo)\n        return\n      case 'afterbegin':\n        swapAfterBegin(target, fragment, settleInfo)\n        return\n      case 'beforebegin':\n        swapBeforeBegin(target, fragment, settleInfo)\n        return\n      case 'beforeend':\n        swapBeforeEnd(target, fragment, settleInfo)\n        return\n      case 'afterend':\n        swapAfterEnd(target, fragment, settleInfo)\n        return\n      case 'delete':\n        swapDelete(target)\n        return\n      default:\n        var extensions = getExtensions(elt)\n        for (let i = 0; i < extensions.length; i++) {\n          const ext = extensions[i]\n          try {\n            const newElements = ext.handleSwap(swapStyle, target, fragment, settleInfo)\n            if (newElements) {\n              if (Array.isArray(newElements)) {\n                // if handleSwap returns an array (like) of elements, we handle them\n                for (let j = 0; j < newElements.length; j++) {\n                  const child = newElements[j]\n                  if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n                    settleInfo.tasks.push(makeAjaxLoadTask(child))\n                  }\n                }\n              }\n              return\n            }\n          } catch (e) {\n            logError(e)\n          }\n        }\n        if (swapStyle === 'innerHTML') {\n          swapInnerHTML(target, fragment, settleInfo)\n        } else {\n          swapWithStyle(htmx.config.defaultSwapStyle, elt, target, fragment, settleInfo)\n        }\n    }\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   */\n  function findAndSwapOobElements(fragment, settleInfo, rootNode) {\n    var oobElts = findAll(fragment, '[hx-swap-oob], [data-hx-swap-oob]')\n    forEach(oobElts, function(oobElement) {\n      if (htmx.config.allowNestedOobSwaps || oobElement.parentElement === null) {\n        const oobValue = getAttributeValue(oobElement, 'hx-swap-oob')\n        if (oobValue != null) {\n          oobSwap(oobValue, oobElement, settleInfo, rootNode)\n        }\n      } else {\n        oobElement.removeAttribute('hx-swap-oob')\n        oobElement.removeAttribute('data-hx-swap-oob')\n      }\n    })\n    return oobElts.length > 0\n  }\n\n  /**\n   * Implements complete swapping pipeline, including: delay, view transitions, focus and selection preservation,\n   * title updates, scroll, OOB swapping, normal swapping and settling\n   * @param {string|Element} target\n   * @param {string} content\n   * @param {HtmxSwapSpecification} swapSpec\n   * @param {SwapOptions} [swapOptions]\n   */\n  function swap(target, content, swapSpec, swapOptions) {\n    if (!swapOptions) {\n      swapOptions = {}\n    }\n    // optional transition API promise callbacks\n    let settleResolve = null\n    let settleReject = null\n\n    let doSwap = function() {\n      maybeCall(swapOptions.beforeSwapCallback)\n\n      target = resolveTarget(target)\n      const rootNode = swapOptions.contextElement ? getRootNode(swapOptions.contextElement, false) : getDocument()\n\n      // preserve focus and selection\n      const activeElt = document.activeElement\n      let selectionInfo = {}\n      selectionInfo = {\n        elt: activeElt,\n        // @ts-ignore\n        start: activeElt ? activeElt.selectionStart : null,\n        // @ts-ignore\n        end: activeElt ? activeElt.selectionEnd : null\n      }\n      const settleInfo = makeSettleInfo(target)\n\n      // For text content swaps, don't parse the response as HTML, just insert it\n      if (swapSpec.swapStyle === 'textContent') {\n        target.textContent = content\n      // Otherwise, make the fragment and process it\n      } else {\n        let fragment = makeFragment(content)\n\n        settleInfo.title = swapOptions.title || fragment.title\n        if (swapOptions.historyRequest) {\n          // @ts-ignore fragment can be a parentNode Element\n          fragment = fragment.querySelector('[hx-history-elt],[data-hx-history-elt]') || fragment\n        }\n\n        // select-oob swaps\n        if (swapOptions.selectOOB) {\n          const oobSelectValues = swapOptions.selectOOB.split(',')\n          for (let i = 0; i < oobSelectValues.length; i++) {\n            const oobSelectValue = oobSelectValues[i].split(':', 2)\n            let id = oobSelectValue[0].trim()\n            if (id.indexOf('#') === 0) {\n              id = id.substring(1)\n            }\n            const oobValue = oobSelectValue[1] || 'true'\n            const oobElement = fragment.querySelector('#' + id)\n            if (oobElement) {\n              oobSwap(oobValue, oobElement, settleInfo, rootNode)\n            }\n          }\n        }\n        // oob swaps\n        findAndSwapOobElements(fragment, settleInfo, rootNode)\n        forEach(findAll(fragment, 'template'), /** @param {HTMLTemplateElement} template */function(template) {\n          if (template.content && findAndSwapOobElements(template.content, settleInfo, rootNode)) {\n            // Avoid polluting the DOM with empty templates that were only used to encapsulate oob swap\n            template.remove()\n          }\n        })\n\n        // normal swap\n        if (swapOptions.select) {\n          const newFragment = getDocument().createDocumentFragment()\n          forEach(fragment.querySelectorAll(swapOptions.select), function(node) {\n            newFragment.appendChild(node)\n          })\n          fragment = newFragment\n        }\n        handlePreservedElements(fragment)\n        swapWithStyle(swapSpec.swapStyle, swapOptions.contextElement, target, fragment, settleInfo)\n        restorePreservedElements()\n      }\n\n      // apply saved focus and selection information to swapped content\n      if (selectionInfo.elt &&\n        !bodyContains(selectionInfo.elt) &&\n        getRawAttribute(selectionInfo.elt, 'id')) {\n        const newActiveElt = document.getElementById(getRawAttribute(selectionInfo.elt, 'id'))\n        const focusOptions = { preventScroll: swapSpec.focusScroll !== undefined ? !swapSpec.focusScroll : !htmx.config.defaultFocusScroll }\n        if (newActiveElt) {\n          // @ts-ignore\n          if (selectionInfo.start && newActiveElt.setSelectionRange) {\n            try {\n              // @ts-ignore\n              newActiveElt.setSelectionRange(selectionInfo.start, selectionInfo.end)\n            } catch (e) {\n              // the setSelectionRange method is present on fields that don't support it, so just let this fail\n            }\n          }\n          newActiveElt.focus(focusOptions)\n        }\n      }\n\n      removeClassFromElement(target, htmx.config.swappingClass)\n      forEach(settleInfo.elts, function(elt) {\n        if (elt.classList) {\n          addClassToElement(elt, htmx.config.settlingClass)\n        }\n        triggerEvent(elt, 'htmx:afterSwap', swapOptions.eventInfo)\n      })\n      maybeCall(swapOptions.afterSwapCallback)\n\n      // merge in new title after swap but before settle\n      if (!swapSpec.ignoreTitle) {\n        handleTitle(settleInfo.title)\n      }\n\n      // settle\n      const doSettle = function() {\n        forEach(settleInfo.tasks, function(task) {\n          task.call()\n        })\n        forEach(settleInfo.elts, function(elt) {\n          if (elt.classList) {\n            removeClassFromElement(elt, htmx.config.settlingClass)\n          }\n          triggerEvent(elt, 'htmx:afterSettle', swapOptions.eventInfo)\n        })\n\n        if (swapOptions.anchor) {\n          const anchorTarget = asElement(resolveTarget('#' + swapOptions.anchor))\n          if (anchorTarget) {\n            anchorTarget.scrollIntoView({ block: 'start', behavior: 'auto' })\n          }\n        }\n\n        updateScrollState(settleInfo.elts, swapSpec)\n        maybeCall(swapOptions.afterSettleCallback)\n        maybeCall(settleResolve)\n      }\n\n      if (swapSpec.settleDelay > 0) {\n        getWindow().setTimeout(doSettle, swapSpec.settleDelay)\n      } else {\n        doSettle()\n      }\n    }\n    let shouldTransition = htmx.config.globalViewTransitions\n    if (swapSpec.hasOwnProperty('transition')) {\n      shouldTransition = swapSpec.transition\n    }\n\n    const elt = swapOptions.contextElement || getDocument()\n\n    if (shouldTransition &&\n            triggerEvent(elt, 'htmx:beforeTransition', swapOptions.eventInfo) &&\n            typeof Promise !== 'undefined' &&\n            // @ts-ignore experimental feature atm\n            document.startViewTransition) {\n      const settlePromise = new Promise(function(_resolve, _reject) {\n        settleResolve = _resolve\n        settleReject = _reject\n      })\n      // wrap the original doSwap() in a call to startViewTransition()\n      const innerDoSwap = doSwap\n      doSwap = function() {\n        // @ts-ignore experimental feature atm\n        document.startViewTransition(function() {\n          innerDoSwap()\n          return settlePromise\n        })\n      }\n    }\n\n    try {\n      if (swapSpec?.swapDelay && swapSpec.swapDelay > 0) {\n        getWindow().setTimeout(doSwap, swapSpec.swapDelay)\n      } else {\n        doSwap()\n      }\n    } catch (e) {\n      triggerErrorEvent(elt, 'htmx:swapError', swapOptions.eventInfo)\n      maybeCall(settleReject)\n      throw e\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {EventTarget} elt\n   */\n  function handleTriggerHeader(xhr, header, elt) {\n    const triggerBody = xhr.getResponseHeader(header)\n    if (triggerBody.indexOf('{') === 0) {\n      const triggers = parseJSON(triggerBody)\n      for (const eventName in triggers) {\n        if (triggers.hasOwnProperty(eventName)) {\n          let detail = triggers[eventName]\n          if (isRawObject(detail)) {\n            // @ts-ignore\n            elt = detail.target !== undefined ? detail.target : elt\n          } else {\n            detail = { value: detail }\n          }\n          triggerEvent(elt, eventName, detail)\n        }\n      }\n    } else {\n      const eventNames = triggerBody.split(',')\n      for (let i = 0; i < eventNames.length; i++) {\n        triggerEvent(elt, eventNames[i].trim(), [])\n      }\n    }\n  }\n\n  const WHITESPACE = /\\s/\n  const WHITESPACE_OR_COMMA = /[\\s,]/\n  const SYMBOL_START = /[_$a-zA-Z]/\n  const SYMBOL_CONT = /[_$a-zA-Z0-9]/\n  const STRINGISH_START = ['\"', \"'\", '/']\n  const NOT_WHITESPACE = /[^\\s]/\n  const COMBINED_SELECTOR_START = /[{(]/\n  const COMBINED_SELECTOR_END = /[})]/\n\n  /**\n   * @param {string} str\n   * @returns {string[]}\n   */\n  function tokenizeString(str) {\n    /** @type string[] */\n    const tokens = []\n    let position = 0\n    while (position < str.length) {\n      if (SYMBOL_START.exec(str.charAt(position))) {\n        var startPosition = position\n        while (SYMBOL_CONT.exec(str.charAt(position + 1))) {\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else if (STRINGISH_START.indexOf(str.charAt(position)) !== -1) {\n        const startChar = str.charAt(position)\n        var startPosition = position\n        position++\n        while (position < str.length && str.charAt(position) !== startChar) {\n          if (str.charAt(position) === '\\\\') {\n            position++\n          }\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else {\n        const symbol = str.charAt(position)\n        tokens.push(symbol)\n      }\n      position++\n    }\n    return tokens\n  }\n\n  /**\n   * @param {string} token\n   * @param {string|null} last\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  function isPossibleRelativeReference(token, last, paramName) {\n    return SYMBOL_START.exec(token.charAt(0)) &&\n      token !== 'true' &&\n      token !== 'false' &&\n      token !== 'this' &&\n      token !== paramName &&\n      last !== '.'\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string[]} tokens\n   * @param {string} paramName\n   * @returns {ConditionalFunction|null}\n   */\n  function maybeGenerateConditional(elt, tokens, paramName) {\n    if (tokens[0] === '[') {\n      tokens.shift()\n      let bracketCount = 1\n      let conditionalSource = ' return (function(' + paramName + '){ return ('\n      let last = null\n      while (tokens.length > 0) {\n        const token = tokens[0]\n        // @ts-ignore For some reason tsc doesn't understand the shift call, and thinks we're comparing the same value here, i.e. '[' vs ']'\n        if (token === ']') {\n          bracketCount--\n          if (bracketCount === 0) {\n            if (last === null) {\n              conditionalSource = conditionalSource + 'true'\n            }\n            tokens.shift()\n            conditionalSource += ')})'\n            try {\n              const conditionFunction = maybeEval(elt, function() {\n                return Function(conditionalSource)()\n              },\n              function() { return true })\n              conditionFunction.source = conditionalSource\n              return conditionFunction\n            } catch (e) {\n              triggerErrorEvent(getDocument().body, 'htmx:syntax:error', { error: e, source: conditionalSource })\n              return null\n            }\n          }\n        } else if (token === '[') {\n          bracketCount++\n        }\n        if (isPossibleRelativeReference(token, last, paramName)) {\n          conditionalSource += '((' + paramName + '.' + token + ') ? (' + paramName + '.' + token + ') : (window.' + token + '))'\n        } else {\n          conditionalSource = conditionalSource + token\n        }\n        last = tokens.shift()\n      }\n    }\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @param {RegExp} match\n   * @returns {string}\n   */\n  function consumeUntil(tokens, match) {\n    let result = ''\n    while (tokens.length > 0 && !match.test(tokens[0])) {\n      result += tokens.shift()\n    }\n    return result\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @returns {string}\n   */\n  function consumeCSSSelector(tokens) {\n    let result\n    if (tokens.length > 0 && COMBINED_SELECTOR_START.test(tokens[0])) {\n      tokens.shift()\n      result = consumeUntil(tokens, COMBINED_SELECTOR_END).trim()\n      tokens.shift()\n    } else {\n      result = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n    }\n    return result\n  }\n\n  const INPUT_SELECTOR = 'input, textarea, select'\n\n  /**\n   * @param {Element} elt\n   * @param {string} explicitTrigger\n   * @param {Object} cache for trigger specs\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function parseAndCacheTrigger(elt, explicitTrigger, cache) {\n    /** @type HtmxTriggerSpecification[] */\n    const triggerSpecs = []\n    const tokens = tokenizeString(explicitTrigger)\n    do {\n      consumeUntil(tokens, NOT_WHITESPACE)\n      const initialLength = tokens.length\n      const trigger = consumeUntil(tokens, /[,\\[\\s]/)\n      if (trigger !== '') {\n        if (trigger === 'every') {\n          /** @type HtmxTriggerSpecification */\n          const every = { trigger: 'every' }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          every.pollInterval = parseInterval(consumeUntil(tokens, /[,\\[\\s]/))\n          consumeUntil(tokens, NOT_WHITESPACE)\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            every.eventFilter = eventFilter\n          }\n          triggerSpecs.push(every)\n        } else {\n          /** @type HtmxTriggerSpecification */\n          const triggerSpec = { trigger }\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            triggerSpec.eventFilter = eventFilter\n          }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          while (tokens.length > 0 && tokens[0] !== ',') {\n            const token = tokens.shift()\n            if (token === 'changed') {\n              triggerSpec.changed = true\n            } else if (token === 'once') {\n              triggerSpec.once = true\n            } else if (token === 'consume') {\n              triggerSpec.consume = true\n            } else if (token === 'delay' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.delay = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'from' && tokens[0] === ':') {\n              tokens.shift()\n              if (COMBINED_SELECTOR_START.test(tokens[0])) {\n                var from_arg = consumeCSSSelector(tokens)\n              } else {\n                var from_arg = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n                if (from_arg === 'closest' || from_arg === 'find' || from_arg === 'next' || from_arg === 'previous') {\n                  tokens.shift()\n                  const selector = consumeCSSSelector(tokens)\n                  // `next` and `previous` allow a selector-less syntax\n                  if (selector.length > 0) {\n                    from_arg += ' ' + selector\n                  }\n                }\n              }\n              triggerSpec.from = from_arg\n            } else if (token === 'target' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.target = consumeCSSSelector(tokens)\n            } else if (token === 'throttle' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.throttle = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'queue' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.queue = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else if (token === 'root' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeCSSSelector(tokens)\n            } else if (token === 'threshold' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else {\n              triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n            }\n            consumeUntil(tokens, NOT_WHITESPACE)\n          }\n          triggerSpecs.push(triggerSpec)\n        }\n      }\n      if (tokens.length === initialLength) {\n        triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n      }\n      consumeUntil(tokens, NOT_WHITESPACE)\n    } while (tokens[0] === ',' && tokens.shift())\n    if (cache) {\n      cache[explicitTrigger] = triggerSpecs\n    }\n    return triggerSpecs\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function getTriggerSpecs(elt) {\n    const explicitTrigger = getAttributeValue(elt, 'hx-trigger')\n    let triggerSpecs = []\n    if (explicitTrigger) {\n      const cache = htmx.config.triggerSpecsCache\n      triggerSpecs = (cache && cache[explicitTrigger]) || parseAndCacheTrigger(elt, explicitTrigger, cache)\n    }\n\n    if (triggerSpecs.length > 0) {\n      return triggerSpecs\n    } else if (matches(elt, 'form')) {\n      return [{ trigger: 'submit' }]\n    } else if (matches(elt, 'input[type=\"button\"], input[type=\"submit\"]')) {\n      return [{ trigger: 'click' }]\n    } else if (matches(elt, INPUT_SELECTOR)) {\n      return [{ trigger: 'change' }]\n    } else {\n      return [{ trigger: 'click' }]\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function cancelPolling(elt) {\n    getInternalData(elt).cancelled = true\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxTriggerSpecification} spec\n   */\n  function processPolling(elt, handler, spec) {\n    const nodeData = getInternalData(elt)\n    nodeData.timeout = getWindow().setTimeout(function() {\n      if (bodyContains(elt) && nodeData.cancelled !== true) {\n        if (!maybeFilterEvent(spec, elt, makeEvent('hx:poll:trigger', {\n          triggerSpec: spec,\n          target: elt\n        }))) {\n          handler(elt)\n        }\n        processPolling(elt, handler, spec)\n      }\n    }, spec.pollInterval)\n  }\n\n  /**\n   * @param {HTMLAnchorElement} elt\n   * @returns {boolean}\n   */\n  function isLocalLink(elt) {\n    return location.hostname === elt.hostname &&\n      getRawAttribute(elt, 'href') &&\n      getRawAttribute(elt, 'href').indexOf('#') !== 0\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function eltIsDisabled(elt) {\n    return closest(elt, htmx.config.disableSelector)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   */\n  function boostElement(elt, nodeData, triggerSpecs) {\n    if ((elt instanceof HTMLAnchorElement && isLocalLink(elt) && (elt.target === '' || elt.target === '_self')) || (elt.tagName === 'FORM' && String(getRawAttribute(elt, 'method')).toLowerCase() !== 'dialog')) {\n      nodeData.boosted = true\n      let verb, path\n      if (elt.tagName === 'A') {\n        verb = (/** @type HttpVerb */('get'))\n        path = getRawAttribute(elt, 'href')\n      } else {\n        const rawAttribute = getRawAttribute(elt, 'method')\n        verb = (/** @type HttpVerb */(rawAttribute ? rawAttribute.toLowerCase() : 'get'))\n        path = getRawAttribute(elt, 'action')\n        if (path == null || path === '') {\n          // if there is no action attribute on the form set path to current href before the\n          // following logic to properly clear parameters on a GET (not on a POST!)\n          path = location.href\n        }\n        if (verb === 'get' && path.includes('?')) {\n          path = path.replace(/\\?[^#]+/, '')\n        }\n      }\n      triggerSpecs.forEach(function(triggerSpec) {\n        addEventListener(elt, function(node, evt) {\n          const elt = asElement(node)\n          if (eltIsDisabled(elt)) {\n            cleanUpElement(elt)\n            return\n          }\n          issueAjaxRequest(verb, path, elt, evt)\n        }, nodeData, triggerSpec, true)\n      })\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function shouldCancel(evt, elt) {\n    if (evt.type === 'submit' && elt.tagName === 'FORM') {\n      return true\n    } else if (evt.type === 'click') {\n      // find button wrapping the trigger element\n      const btn = /** @type {HTMLButtonElement|HTMLInputElement|null} */ (elt.closest('input[type=\"submit\"], button'))\n      // Do not cancel on buttons that 1) don't have a related form or 2) have a type attribute of 'reset'/'button'.\n      if (btn && btn.form && btn.type === 'submit') {\n        return true\n      }\n\n      // find link wrapping the trigger element\n      const link = elt.closest('a')\n      // Allow links with href=\"#fragment\" (anchors with content after #) to perform normal fragment navigation.\n      // Cancel default action for links with href=\"#\" (bare hash) to prevent scrolling to top and unwanted URL changes.\n      const samePageAnchor = /^#.+/\n      if (link && link.href && !samePageAnchor.test(link.getAttribute('href'))) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {Event|MouseEvent|KeyboardEvent|TouchEvent} evt\n   * @returns {boolean}\n   */\n  function ignoreBoostedAnchorCtrlClick(elt, evt) {\n    return getInternalData(elt).boosted && elt instanceof HTMLAnchorElement && evt.type === 'click' &&\n      // @ts-ignore this will resolve to undefined for events that don't define those properties, which is fine\n      (evt.ctrlKey || evt.metaKey)\n  }\n\n  /**\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {Node} elt\n   * @param {Event} evt\n   * @returns {boolean}\n   */\n  function maybeFilterEvent(triggerSpec, elt, evt) {\n    const eventFilter = triggerSpec.eventFilter\n    if (eventFilter) {\n      try {\n        return eventFilter.call(elt, evt) !== true\n      } catch (e) {\n        const source = eventFilter.source\n        triggerErrorEvent(getDocument().body, 'htmx:eventFilter:error', { error: e, source })\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {boolean} [explicitCancel]\n   */\n  function addEventListener(elt, handler, nodeData, triggerSpec, explicitCancel) {\n    const elementData = getInternalData(elt)\n    /** @type {(Node|Window)[]} */\n    let eltsToListenOn\n    if (triggerSpec.from) {\n      eltsToListenOn = querySelectorAllExt(elt, triggerSpec.from)\n    } else {\n      eltsToListenOn = [elt]\n    }\n    // store the initial values of the elements, so we can tell if they change\n    if (triggerSpec.changed) {\n      if (!('lastValue' in elementData)) {\n        elementData.lastValue = new WeakMap()\n      }\n      eltsToListenOn.forEach(function(eltToListenOn) {\n        if (!elementData.lastValue.has(triggerSpec)) {\n          elementData.lastValue.set(triggerSpec, new WeakMap())\n        }\n        // @ts-ignore value will be undefined for non-input elements, which is fine\n        elementData.lastValue.get(triggerSpec).set(eltToListenOn, eltToListenOn.value)\n      })\n    }\n    forEach(eltsToListenOn, function(eltToListenOn) {\n      /** @type EventListener */\n      const eventListener = function(evt) {\n        if (!bodyContains(elt)) {\n          eltToListenOn.removeEventListener(triggerSpec.trigger, eventListener)\n          return\n        }\n        if (ignoreBoostedAnchorCtrlClick(elt, evt)) {\n          return\n        }\n        if (explicitCancel || shouldCancel(evt, eltToListenOn)) {\n          evt.preventDefault()\n        }\n        if (maybeFilterEvent(triggerSpec, elt, evt)) {\n          return\n        }\n        const eventData = getInternalData(evt)\n        eventData.triggerSpec = triggerSpec\n        if (eventData.handledFor == null) {\n          eventData.handledFor = []\n        }\n        if (eventData.handledFor.indexOf(elt) < 0) {\n          eventData.handledFor.push(elt)\n          if (triggerSpec.consume) {\n            evt.stopPropagation()\n          }\n          if (triggerSpec.target && evt.target) {\n            if (!matches(asElement(evt.target), triggerSpec.target)) {\n              return\n            }\n          }\n          if (triggerSpec.once) {\n            if (elementData.triggeredOnce) {\n              return\n            } else {\n              elementData.triggeredOnce = true\n            }\n          }\n          if (triggerSpec.changed) {\n            const node = evt.target\n            // @ts-ignore value will be undefined for non-input elements, which is fine\n            const value = node.value\n            const lastValue = elementData.lastValue.get(triggerSpec)\n            if (lastValue.has(node) && lastValue.get(node) === value) {\n              return\n            }\n            lastValue.set(node, value)\n          }\n          if (elementData.delayed) {\n            clearTimeout(elementData.delayed)\n          }\n          if (elementData.throttle) {\n            return\n          }\n\n          if (triggerSpec.throttle > 0) {\n            if (!elementData.throttle) {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n              elementData.throttle = getWindow().setTimeout(function() {\n                elementData.throttle = null\n              }, triggerSpec.throttle)\n            }\n          } else if (triggerSpec.delay > 0) {\n            elementData.delayed = getWindow().setTimeout(function() {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n            }, triggerSpec.delay)\n          } else {\n            triggerEvent(elt, 'htmx:trigger')\n            handler(elt, evt)\n          }\n        }\n      }\n      if (nodeData.listenerInfos == null) {\n        nodeData.listenerInfos = []\n      }\n      nodeData.listenerInfos.push({\n        trigger: triggerSpec.trigger,\n        listener: eventListener,\n        on: eltToListenOn\n      })\n      eltToListenOn.addEventListener(triggerSpec.trigger, eventListener)\n    })\n  }\n\n  let windowIsScrolling = false // used by initScrollHandler\n  let scrollHandler = null\n  function initScrollHandler() {\n    if (!scrollHandler) {\n      scrollHandler = function() {\n        windowIsScrolling = true\n      }\n      window.addEventListener('scroll', scrollHandler)\n      window.addEventListener('resize', scrollHandler)\n      setInterval(function() {\n        if (windowIsScrolling) {\n          windowIsScrolling = false\n          forEach(getDocument().querySelectorAll(\"[hx-trigger*='revealed'],[data-hx-trigger*='revealed']\"), function(elt) {\n            maybeReveal(elt)\n          })\n        }\n      }, 200)\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function maybeReveal(elt) {\n    if (!hasAttribute(elt, 'data-hx-revealed') && isScrolledIntoView(elt)) {\n      elt.setAttribute('data-hx-revealed', 'true')\n      const nodeData = getInternalData(elt)\n      if (nodeData.initHash) {\n        triggerEvent(elt, 'revealed')\n      } else {\n        // if the node isn't initialized, wait for it before triggering the request\n        elt.addEventListener('htmx:afterProcessNode', function() { triggerEvent(elt, 'revealed') }, { once: true })\n      }\n    }\n  }\n\n  //= ===================================================================\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {number} delay\n   */\n  function loadImmediately(elt, handler, nodeData, delay) {\n    const load = function() {\n      if (!nodeData.loaded) {\n        nodeData.loaded = true\n        triggerEvent(elt, 'htmx:trigger')\n        handler(elt)\n      }\n    }\n    if (delay > 0) {\n      getWindow().setTimeout(load, delay)\n    } else {\n      load()\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   * @returns {boolean}\n   */\n  function processVerbs(elt, nodeData, triggerSpecs) {\n    let explicitAction = false\n    forEach(VERBS, function(verb) {\n      if (hasAttribute(elt, 'hx-' + verb)) {\n        const path = getAttributeValue(elt, 'hx-' + verb)\n        explicitAction = true\n        nodeData.path = path\n        nodeData.verb = verb\n        triggerSpecs.forEach(function(triggerSpec) {\n          addTriggerHandler(elt, triggerSpec, nodeData, function(node, evt) {\n            const elt = asElement(node)\n            if (eltIsDisabled(elt)) {\n              cleanUpElement(elt)\n              return\n            }\n            issueAjaxRequest(verb, path, elt, evt)\n          })\n        })\n      }\n    })\n    return explicitAction\n  }\n\n  /**\n   * @callback TriggerHandler\n   * @param {Element} elt\n   * @param {Event} [evt]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {TriggerHandler} handler\n   */\n  function addTriggerHandler(elt, triggerSpec, nodeData, handler) {\n    if (triggerSpec.trigger === 'revealed') {\n      initScrollHandler()\n      addEventListener(elt, handler, nodeData, triggerSpec)\n      maybeReveal(asElement(elt))\n    } else if (triggerSpec.trigger === 'intersect') {\n      const observerOptions = {}\n      if (triggerSpec.root) {\n        observerOptions.root = querySelectorExt(elt, triggerSpec.root)\n      }\n      if (triggerSpec.threshold) {\n        observerOptions.threshold = parseFloat(triggerSpec.threshold)\n      }\n      const observer = new IntersectionObserver(function(entries) {\n        for (let i = 0; i < entries.length; i++) {\n          const entry = entries[i]\n          if (entry.isIntersecting) {\n            triggerEvent(elt, 'intersect')\n            break\n          }\n        }\n      }, observerOptions)\n      observer.observe(asElement(elt))\n      addEventListener(asElement(elt), handler, nodeData, triggerSpec)\n    } else if (!nodeData.firstInitCompleted && triggerSpec.trigger === 'load') {\n      if (!maybeFilterEvent(triggerSpec, elt, makeEvent('load', { elt }))) {\n        loadImmediately(asElement(elt), handler, nodeData, triggerSpec.delay)\n      }\n    } else if (triggerSpec.pollInterval > 0) {\n      nodeData.polling = true\n      processPolling(asElement(elt), handler, triggerSpec)\n    } else {\n      addEventListener(elt, handler, nodeData, triggerSpec)\n    }\n  }\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function shouldProcessHxOn(node) {\n    const elt = asElement(node)\n    if (!elt) {\n      return false\n    }\n    const attributes = elt.attributes\n    for (let j = 0; j < attributes.length; j++) {\n      const attrName = attributes[j].name\n      if (startsWith(attrName, 'hx-on:') || startsWith(attrName, 'data-hx-on:') ||\n        startsWith(attrName, 'hx-on-') || startsWith(attrName, 'data-hx-on-')) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Element[]}\n   */\n  const HX_ON_QUERY = new XPathEvaluator()\n    .createExpression('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or' +\n      ' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]')\n\n  function processHXOnRoot(elt, elements) {\n    if (shouldProcessHxOn(elt)) {\n      elements.push(asElement(elt))\n    }\n    const iter = HX_ON_QUERY.evaluate(elt)\n    let node = null\n    while (node = iter.iterateNext()) elements.push(asElement(node))\n  }\n\n  function findHxOnWildcardElements(elt) {\n    /** @type {Element[]} */\n    const elements = []\n    if (elt instanceof DocumentFragment) {\n      for (const child of elt.childNodes) {\n        processHXOnRoot(child, elements)\n      }\n    } else {\n      processHXOnRoot(elt, elements)\n    }\n    return elements\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {NodeListOf<Element>|[]}\n   */\n  function findElementsToProcess(elt) {\n    if (elt.querySelectorAll) {\n      const boostedSelector = ', [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]'\n\n      const extensionSelectors = []\n      for (const e in extensions) {\n        const extension = extensions[e]\n        if (extension.getSelectors) {\n          var selectors = extension.getSelectors()\n          if (selectors) {\n            extensionSelectors.push(selectors)\n          }\n        }\n      }\n\n      const results = elt.querySelectorAll(VERB_SELECTOR + boostedSelector + \", form, [type='submit'],\" +\n        ' [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]' + extensionSelectors.flat().map(s => ', ' + s).join(''))\n\n      return results\n    } else {\n      return []\n    }\n  }\n\n  /**\n   * Handle submit buttons/inputs that have the form attribute set\n   * see https://developer.mozilla.org/docs/Web/HTML/Element/button\n   * @param {Event} evt\n   */\n  function maybeSetLastButtonClicked(evt) {\n    const elt = getTargetButton(evt.target)\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = elt\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   */\n  function maybeUnsetLastButtonClicked(evt) {\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = null\n    }\n  }\n\n  /**\n   * @param {EventTarget} target\n   * @returns {HTMLButtonElement|HTMLInputElement|null}\n   */\n  function getTargetButton(target) {\n    return /** @type {HTMLButtonElement|HTMLInputElement|null} */ (closest(asElement(target), \"button, input[type='submit']\"))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HTMLFormElement|null}\n   */\n  function getRelatedForm(elt) {\n    // @ts-ignore Get the related form if available, else find the closest parent form\n    return elt.form || closest(elt, 'form')\n  }\n\n  /**\n   * @param {Event} evt\n   * @returns {HtmxNodeInternalData|undefined}\n   */\n  function getRelatedFormData(evt) {\n    const elt = getTargetButton(evt.target)\n    if (!elt) {\n      return\n    }\n    const form = getRelatedForm(elt)\n    if (!form) {\n      return\n    }\n    return getInternalData(form)\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function initButtonTracking(elt) {\n    // need to handle both click and focus in:\n    //   focusin - in case someone tabs in to a button and hits the space bar\n    //   click - on OSX buttons do not focus on click see https://bugs.webkit.org/show_bug.cgi?id=13724\n    elt.addEventListener('click', maybeSetLastButtonClicked)\n    elt.addEventListener('focusin', maybeSetLastButtonClicked)\n    elt.addEventListener('focusout', maybeUnsetLastButtonClicked)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} eventName\n   * @param {string} code\n   */\n  function addHxOnEventHandler(elt, eventName, code) {\n    const nodeData = getInternalData(elt)\n    if (!Array.isArray(nodeData.onHandlers)) {\n      nodeData.onHandlers = []\n    }\n    let func\n    /** @type EventListener */\n    const listener = function(e) {\n      maybeEval(elt, function() {\n        if (eltIsDisabled(elt)) {\n          return\n        }\n        if (!func) {\n          func = new Function('event', code)\n        }\n        func.call(elt, e)\n      })\n    }\n    elt.addEventListener(eventName, listener)\n    nodeData.onHandlers.push({ event: eventName, listener })\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function processHxOnWildcard(elt) {\n    // wipe any previous on handlers so that this function takes precedence\n    deInitOnHandlers(elt)\n\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const name = elt.attributes[i].name\n      const value = elt.attributes[i].value\n      if (startsWith(name, 'hx-on') || startsWith(name, 'data-hx-on')) {\n        const afterOnPosition = name.indexOf('-on') + 3\n        const nextChar = name.slice(afterOnPosition, afterOnPosition + 1)\n        if (nextChar === '-' || nextChar === ':') {\n          let eventName = name.slice(afterOnPosition + 1)\n          // if the eventName starts with a colon or dash, prepend \"htmx\" for shorthand support\n          if (startsWith(eventName, ':')) {\n            eventName = 'htmx' + eventName\n          } else if (startsWith(eventName, '-')) {\n            eventName = 'htmx:' + eventName.slice(1)\n          } else if (startsWith(eventName, 'htmx-')) {\n            eventName = 'htmx:' + eventName.slice(5)\n          }\n\n          addHxOnEventHandler(elt, eventName, value)\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element|HTMLInputElement} elt\n   */\n  function initNode(elt) {\n    triggerEvent(elt, 'htmx:beforeProcessNode')\n\n    const nodeData = getInternalData(elt)\n    const triggerSpecs = getTriggerSpecs(elt)\n    const hasExplicitHttpAction = processVerbs(elt, nodeData, triggerSpecs)\n\n    if (!hasExplicitHttpAction) {\n      if (getClosestAttributeValue(elt, 'hx-boost') === 'true') {\n        boostElement(elt, nodeData, triggerSpecs)\n      } else if (hasAttribute(elt, 'hx-trigger')) {\n        triggerSpecs.forEach(function(triggerSpec) {\n          // For \"naked\" triggers, don't do anything at all\n          addTriggerHandler(elt, triggerSpec, nodeData, function() {\n          })\n        })\n      }\n    }\n\n    // Handle submit buttons/inputs that have the form attribute set\n    // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n    if (elt.tagName === 'FORM' || (getRawAttribute(elt, 'type') === 'submit' && hasAttribute(elt, 'form'))) {\n      initButtonTracking(elt)\n    }\n\n    nodeData.firstInitCompleted = true\n    triggerEvent(elt, 'htmx:afterProcessNode')\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function maybeDeInitAndHash(elt) {\n    // Ensure only valid Elements and not shadow DOM roots are inited\n    if (!(elt instanceof Element)) {\n      return false\n    }\n\n    const nodeData = getInternalData(elt)\n    const hash = attributeHash(elt)\n    if (nodeData.initHash !== hash) {\n      deInitNode(elt)\n      nodeData.initHash = hash\n      return true\n    }\n    return false\n  }\n\n  /**\n   * Processes new content, enabling htmx behavior. This can be useful if you have content that is added to the DOM outside of the normal htmx request cycle but still want htmx attributes to work.\n   *\n   * @see https://htmx.org/api/#process\n   *\n   * @param {Element|string} elt element to process\n   */\n  function processNode(elt) {\n    elt = resolveTarget(elt)\n    if (eltIsDisabled(elt)) {\n      cleanUpElement(elt)\n      return\n    }\n\n    const elementsToInit = []\n    if (maybeDeInitAndHash(elt)) {\n      elementsToInit.push(elt)\n    }\n    forEach(findElementsToProcess(elt), function(child) {\n      if (eltIsDisabled(child)) {\n        cleanUpElement(child)\n        return\n      }\n      if (maybeDeInitAndHash(child)) {\n        elementsToInit.push(child)\n      }\n    })\n\n    forEach(findHxOnWildcardElements(elt), processHxOnWildcard)\n    forEach(elementsToInit, initNode)\n  }\n\n  //= ===================================================================\n  // Event/Log Support\n  //= ===================================================================\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function kebabEventName(str) {\n    return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {any} detail\n   * @returns {CustomEvent}\n   */\n  function makeEvent(eventName, detail) {\n    // TODO: `composed: true` here is a hack to make global event handlers work with events in shadow DOM\n    // This breaks expected encapsulation but needs to be here until decided otherwise by core devs\n    return new CustomEvent(eventName, { bubbles: true, cancelable: true, composed: true, detail })\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string} eventName\n   * @param {any=} detail\n   */\n  function triggerErrorEvent(elt, eventName, detail) {\n    triggerEvent(elt, eventName, mergeObjects({ error: eventName }, detail))\n  }\n\n  /**\n   * @param {string} eventName\n   * @returns {boolean}\n   */\n  function ignoreEventForLogging(eventName) {\n    return eventName === 'htmx:afterProcessNode'\n  }\n\n  /**\n   * `withExtensions` locates all active extensions for a provided element, then\n   * executes the provided function using each of the active extensions. You can filter\n   * the element's extensions by giving it a list of extensions to ignore. It should\n   * be called internally at every extendable execution point in htmx.\n   *\n   * @param {Element} elt\n   * @param {(extension:HtmxExtension) => void} toDo\n   * @param {string[]=} extensionsToIgnore\n   * @returns void\n   */\n  function withExtensions(elt, toDo, extensionsToIgnore) {\n    forEach(getExtensions(elt, [], extensionsToIgnore), function(extension) {\n      try {\n        toDo(extension)\n      } catch (e) {\n        logError(e)\n      }\n    })\n  }\n\n  function logError(msg) {\n    console.error(msg)\n  }\n\n  /**\n   * Triggers a given event on an element\n   *\n   * @see https://htmx.org/api/#trigger\n   *\n   * @param {EventTarget|string} elt the element to trigger the event on\n   * @param {string} eventName the name of the event to trigger\n   * @param {any=} detail details for the event\n   * @returns {boolean}\n   */\n  function triggerEvent(elt, eventName, detail) {\n    elt = resolveTarget(elt)\n    if (detail == null) {\n      detail = {}\n    }\n    detail.elt = elt\n    const event = makeEvent(eventName, detail)\n    if (htmx.logger && !ignoreEventForLogging(eventName)) {\n      htmx.logger(elt, eventName, detail)\n    }\n    if (detail.error) {\n      logError(detail.error + (detail.target ? ', ' + detail.target : ''))\n      triggerEvent(elt, 'htmx:error', { errorInfo: detail })\n    }\n    let eventResult = elt.dispatchEvent(event)\n    const kebabName = kebabEventName(eventName)\n    if (eventResult && kebabName !== eventName) {\n      const kebabedEvent = makeEvent(kebabName, event.detail)\n      eventResult = eventResult && elt.dispatchEvent(kebabedEvent)\n    }\n    withExtensions(asElement(elt), function(extension) {\n      eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented)\n    })\n    return eventResult\n  }\n\n  //= ===================================================================\n  // History Support\n  //= ===================================================================\n  let currentPathForHistory\n\n  /**\n   * @param {string} path\n   */\n  function setCurrentPathForHistory(path) {\n    currentPathForHistory = path\n    if (canAccessLocalStorage()) {\n      sessionStorage.setItem('htmx-current-path-for-history', path)\n    }\n  }\n\n  setCurrentPathForHistory(location.pathname + location.search)\n\n  /**\n   * @returns {Element}\n   */\n  function getHistoryElement() {\n    const historyElt = getDocument().querySelector('[hx-history-elt],[data-hx-history-elt]')\n    return historyElt || getDocument().body\n  }\n\n  /**\n   * @param {string} url\n   * @param {Element} rootElt\n   */\n  function saveToHistoryCache(url, rootElt) {\n    if (!canAccessLocalStorage()) {\n      return\n    }\n\n    // get state to save\n    const innerHTML = cleanInnerHtmlForHistory(rootElt)\n    const title = getDocument().title\n    const scroll = window.scrollY\n\n    if (htmx.config.historyCacheSize <= 0) {\n      // make sure that an eventually already existing cache is purged\n      sessionStorage.removeItem('htmx-history-cache')\n      return\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        historyCache.splice(i, 1)\n        break\n      }\n    }\n\n    /** @type HtmxHistoryItem */\n    const newHistoryItem = { url, content: innerHTML, title, scroll }\n\n    triggerEvent(getDocument().body, 'htmx:historyItemCreated', { item: newHistoryItem, cache: historyCache })\n\n    historyCache.push(newHistoryItem)\n    while (historyCache.length > htmx.config.historyCacheSize) {\n      historyCache.shift()\n    }\n\n    // keep trying to save the cache until it succeeds or is empty\n    while (historyCache.length > 0) {\n      try {\n        sessionStorage.setItem('htmx-history-cache', JSON.stringify(historyCache))\n        break\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheError', { cause: e, cache: historyCache })\n        historyCache.shift() // shrink the cache and retry\n      }\n    }\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryItem\n   * @property {string} url\n   * @property {string} content\n   * @property {string} title\n   * @property {number} scroll\n   */\n\n  /**\n   * @param {string} url\n   * @returns {HtmxHistoryItem|null}\n   */\n  function getCachedHistory(url) {\n    if (!canAccessLocalStorage()) {\n      return null\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        return historyCache[i]\n      }\n    }\n    return null\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string}\n   */\n  function cleanInnerHtmlForHistory(elt) {\n    const className = htmx.config.requestClass\n    const clone = /** @type Element */ (elt.cloneNode(true))\n    forEach(findAll(clone, '.' + className), function(child) {\n      removeClassFromElement(child, className)\n    })\n    // remove the disabled attribute for any element disabled due to an htmx request\n    forEach(findAll(clone, '[data-disabled-by-htmx]'), function(child) {\n      child.removeAttribute('disabled')\n    })\n    return clone.innerHTML\n  }\n\n  function saveCurrentPageToHistory() {\n    const elt = getHistoryElement()\n    let path = currentPathForHistory\n    if (canAccessLocalStorage()) {\n      path = sessionStorage.getItem('htmx-current-path-for-history')\n    }\n    path = path || location.pathname + location.search\n\n    // Allow history snapshot feature to be disabled where hx-history=\"false\"\n    // is present *anywhere* in the current document we're about to save,\n    // so we can prevent privileged data entering the cache.\n    // The page will still be reachable as a history entry, but htmx will fetch it\n    // live from the server onpopstate rather than look in the sessionStorage cache\n    const disableHistoryCache = getDocument().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')\n    if (!disableHistoryCache) {\n      triggerEvent(getDocument().body, 'htmx:beforeHistorySave', { path, historyElt: elt })\n      saveToHistoryCache(path, elt)\n    }\n\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, getDocument().title, location.href)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function pushUrlIntoHistory(path) {\n  // remove the cache buster parameter, if any\n    if (htmx.config.getCacheBusterParam) {\n      path = path.replace(/org\\.htmx\\.cache-buster=[^&]*&?/, '')\n      if (endsWith(path, '&') || endsWith(path, '?')) {\n        path = path.slice(0, -1)\n      }\n    }\n    if (htmx.config.historyEnabled) {\n      history.pushState({ htmx: true }, '', path)\n    }\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function replaceUrlInHistory(path) {\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, '', path)\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {HtmxSettleTask[]} tasks\n   */\n  function settleImmediately(tasks) {\n    forEach(tasks, function(task) {\n      task.call(undefined)\n    })\n  }\n\n  /**\n   * @param {string} path\n   */\n  function loadHistoryFromServer(path) {\n    const request = new XMLHttpRequest()\n    const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0 }\n    const details = { path, xhr: request, historyElt: getHistoryElement(), swapSpec }\n    request.open('GET', path, true)\n    if (htmx.config.historyRestoreAsHxRequest) {\n      request.setRequestHeader('HX-Request', 'true')\n    }\n    request.setRequestHeader('HX-History-Restore-Request', 'true')\n    request.setRequestHeader('HX-Current-URL', location.href)\n    request.onload = function() {\n      if (this.status >= 200 && this.status < 400) {\n        details.response = this.response\n        triggerEvent(getDocument().body, 'htmx:historyCacheMissLoad', details)\n        swap(details.historyElt, details.response, swapSpec, {\n          contextElement: details.historyElt,\n          historyRequest: true\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', { path, cacheMiss: true, serverResponse: details.response })\n      } else {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheMissLoadError', details)\n      }\n    }\n    if (triggerEvent(getDocument().body, 'htmx:historyCacheMiss', details)) {\n      request.send() // only send request if event not prevented\n    }\n  }\n\n  /**\n   * @param {string} [path]\n   */\n  function restoreHistory(path) {\n    saveCurrentPageToHistory()\n    path = path || location.pathname + location.search\n    const cached = getCachedHistory(path)\n    if (cached) {\n      const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0, scroll: cached.scroll }\n      const details = { path, item: cached, historyElt: getHistoryElement(), swapSpec }\n      if (triggerEvent(getDocument().body, 'htmx:historyCacheHit', details)) {\n        swap(details.historyElt, cached.content, swapSpec, {\n          contextElement: details.historyElt,\n          title: cached.title\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', details)\n      }\n    } else {\n      if (htmx.config.refreshOnHistoryMiss) {\n        // @ts-ignore: optional parameter in reload() function throws error\n        // noinspection JSUnresolvedReference\n        htmx.location.reload(true)\n      } else {\n        loadHistoryFromServer(path)\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function addRequestIndicatorClasses(elt) {\n    let indicators = /** @type Element[] */ (findAttributeTargets(elt, 'hx-indicator'))\n    if (indicators == null) {\n      indicators = [elt]\n    }\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      addClassToElement(ic, htmx.config.requestClass)\n    })\n    return indicators\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function disableElements(elt) {\n    let disabledElts = /** @type Element[] */ (findAttributeTargets(elt, 'hx-disabled-elt'))\n    if (disabledElts == null) {\n      disabledElts = []\n    }\n    forEach(disabledElts, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      if (!disabledElement.hasAttribute('disabled')) {\n        disabledElement.setAttribute('disabled', '')\n        disabledElement.setAttribute('data-disabled-by-htmx', '')\n      }\n    })\n    return disabledElts\n  }\n\n  /**\n   * @param {Element[]} indicators\n   * @param {Element[]} disabled\n   */\n  function removeRequestIndicators(indicators, disabled) {\n    forEach(indicators.concat(disabled), function(ele) {\n      const internalData = getInternalData(ele)\n      internalData.requestCount = (internalData.requestCount || 1) - 1\n    })\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      if (internalData.requestCount === 0) {\n        removeClassFromElement(ic, htmx.config.requestClass)\n      }\n    })\n    forEach(disabled, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      if (internalData.requestCount === 0 && disabledElement.hasAttribute('data-disabled-by-htmx')) {\n        disabledElement.removeAttribute('disabled')\n        disabledElement.removeAttribute('data-disabled-by-htmx')\n      }\n    })\n  }\n\n  //= ===================================================================\n  // Input Value Processing\n  //= ===================================================================\n\n  /**\n   * @param {Element[]} processed\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function haveSeenNode(processed, elt) {\n    for (let i = 0; i < processed.length; i++) {\n      const node = processed[i]\n      if (node.isSameNode(elt)) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} element\n   * @return {boolean}\n   */\n  function shouldInclude(element) {\n    // Cast to trick tsc, undefined values will work fine here\n    const elt = /** @type {HTMLInputElement} */ (element)\n    if (elt.name === '' || elt.name == null || elt.disabled || closest(elt, 'fieldset[disabled]')) {\n      return false\n    }\n    // ignore \"submitter\" types (see jQuery src/serialize.js)\n    if (elt.type === 'button' || elt.type === 'submit' || elt.tagName === 'image' || elt.tagName === 'reset' || elt.tagName === 'file') {\n      return false\n    }\n    if (elt.type === 'checkbox' || elt.type === 'radio') {\n      return elt.checked\n    }\n    return true\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array|FormDataEntryValue} value\n   * @param {FormData} formData */\n  function addValueToFormData(name, value, formData) {\n    if (name != null && value != null) {\n      if (Array.isArray(value)) {\n        value.forEach(function(v) { formData.append(name, v) })\n      } else {\n        formData.append(name, value)\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array} value\n   * @param {FormData} formData */\n  function removeValueFromFormData(name, value, formData) {\n    if (name != null && value != null) {\n      let values = formData.getAll(name)\n      if (Array.isArray(value)) {\n        values = values.filter(v => value.indexOf(v) < 0)\n      } else {\n        values = values.filter(v => v !== value)\n      }\n      formData.delete(name)\n      forEach(values, v => formData.append(name, v))\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string|Array}\n   */\n  function getValueFromInput(elt) {\n    if (elt instanceof HTMLSelectElement && elt.multiple) {\n      return toArray(elt.querySelectorAll('option:checked')).map(function(e) { return (/** @type HTMLOptionElement */(e)).value })\n    }\n    // include file inputs\n    if (elt instanceof HTMLInputElement && elt.files) {\n      return toArray(elt.files)\n    }\n    // @ts-ignore value will be undefined for non-input elements, which is fine\n    return elt.value\n  }\n\n  /**\n   * @param {Element[]} processed\n   * @param {FormData} formData\n   * @param {HtmxElementValidationError[]} errors\n   * @param {Element|HTMLInputElement|HTMLSelectElement|HTMLFormElement} elt\n   * @param {boolean} validate\n   */\n  function processInputValue(processed, formData, errors, elt, validate) {\n    if (elt == null || haveSeenNode(processed, elt)) {\n      return\n    } else {\n      processed.push(elt)\n    }\n    if (shouldInclude(elt)) {\n      const name = getRawAttribute(elt, 'name')\n      addValueToFormData(name, getValueFromInput(elt), formData)\n      if (validate) {\n        validateElement(elt, errors)\n      }\n    }\n    if (elt instanceof HTMLFormElement) {\n      forEach(elt.elements, function(input) {\n        if (processed.indexOf(input) >= 0) {\n          // The input has already been processed and added to the values, but the FormData that will be\n          //  constructed right after on the form, will include it once again. So remove that input's value\n          //  now to avoid duplicates\n          removeValueFromFormData(input.name, getValueFromInput(input), formData)\n        } else {\n          processed.push(input)\n        }\n        if (validate) {\n          validateElement(input, errors)\n        }\n      })\n      new FormData(elt).forEach(function(value, name) {\n        if (value instanceof File && value.name === '') {\n          return // ignore no-name files\n        }\n        addValueToFormData(name, value, formData)\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxElementValidationError[]} errors\n   */\n  function validateElement(elt, errors) {\n    const element = /** @type {HTMLElement & ElementInternals} */ (elt)\n    if (element.willValidate) {\n      triggerEvent(element, 'htmx:validation:validate')\n      if (!element.checkValidity()) {\n        if (\n          triggerEvent(element, 'htmx:validation:failed', {\n            message: element.validationMessage,\n            validity: element.validity\n          }) &&\n          !errors.length &&\n          htmx.config.reportValidityOfForms\n        ) {\n          element.reportValidity()\n        }\n        errors.push({ elt: element, message: element.validationMessage, validity: element.validity })\n      }\n    }\n  }\n\n  /**\n   * Override values in the one FormData with those from another.\n   * @param {FormData} receiver the formdata that will be mutated\n   * @param {FormData} donor the formdata that will provide the overriding values\n   * @returns {FormData} the {@linkcode receiver}\n   */\n  function overrideFormData(receiver, donor) {\n    for (const key of donor.keys()) {\n      receiver.delete(key)\n    }\n    donor.forEach(function(value, key) {\n      receiver.append(key, value)\n    })\n    return receiver\n  }\n\n  /**\n * @param {Element|HTMLFormElement} elt\n * @param {HttpVerb} verb\n * @returns {{errors: HtmxElementValidationError[], formData: FormData, values: Object}}\n */\n  function getInputValues(elt, verb) {\n    /** @type Element[] */\n    const processed = []\n    const formData = new FormData()\n    const priorityFormData = new FormData()\n    /** @type HtmxElementValidationError[] */\n    const errors = []\n    const internalData = getInternalData(elt)\n    if (internalData.lastButtonClicked && !bodyContains(internalData.lastButtonClicked)) {\n      internalData.lastButtonClicked = null\n    }\n\n    // only validate when form is directly submitted and novalidate or formnovalidate are not set\n    // or if the element has an explicit hx-validate=\"true\" on it\n    let validate = (elt instanceof HTMLFormElement && elt.noValidate !== true) || getAttributeValue(elt, 'hx-validate') === 'true'\n    if (internalData.lastButtonClicked) {\n      validate = validate && internalData.lastButtonClicked.formNoValidate !== true\n    }\n\n    // for a non-GET include the related form, which may or may not be a parent element of elt\n    if (verb !== 'get') {\n      processInputValue(processed, priorityFormData, errors, getRelatedForm(elt), validate)\n    }\n\n    // include the element itself\n    processInputValue(processed, formData, errors, elt, validate)\n\n    // if a button or submit was clicked last, include its value\n    if (internalData.lastButtonClicked || elt.tagName === 'BUTTON' ||\n    (elt.tagName === 'INPUT' && getRawAttribute(elt, 'type') === 'submit')) {\n      const button = internalData.lastButtonClicked || (/** @type HTMLInputElement|HTMLButtonElement */(elt))\n      const name = getRawAttribute(button, 'name')\n      addValueToFormData(name, button.value, priorityFormData)\n    }\n\n    // include any explicit includes\n    const includes = findAttributeTargets(elt, 'hx-include')\n    forEach(includes, function(node) {\n      processInputValue(processed, formData, errors, asElement(node), validate)\n      // if a non-form is included, include any input values within it\n      if (!matches(node, 'form')) {\n        forEach(asParentNode(node).querySelectorAll(INPUT_SELECTOR), function(descendant) {\n          processInputValue(processed, formData, errors, descendant, validate)\n        })\n      }\n    })\n\n    // values from a <form> take precedence, overriding the regular values\n    overrideFormData(formData, priorityFormData)\n\n    return { errors, formData, values: formDataProxy(formData) }\n  }\n\n  /**\n   * @param {string} returnStr\n   * @param {string} name\n   * @param {any} realValue\n   * @returns {string}\n   */\n  function appendParam(returnStr, name, realValue) {\n    if (returnStr !== '') {\n      returnStr += '&'\n    }\n    if (String(realValue) === '[object Object]') {\n      realValue = JSON.stringify(realValue)\n    }\n    const s = encodeURIComponent(realValue)\n    returnStr += encodeURIComponent(name) + '=' + s\n    return returnStr\n  }\n\n  /**\n   * @param {FormData|Object} values\n   * @returns string\n   */\n  function urlEncode(values) {\n    values = formDataFromObject(values)\n    let returnStr = ''\n    values.forEach(function(value, key) {\n      returnStr = appendParam(returnStr, key, value)\n    })\n    return returnStr\n  }\n\n  //= ===================================================================\n  // Ajax\n  //= ===================================================================\n\n  /**\n * @param {Element} elt\n * @param {Element} target\n * @param {string} prompt\n * @returns {HtmxHeaderSpecification}\n */\n  function getHeaders(elt, target, prompt) {\n    /** @type HtmxHeaderSpecification */\n    const headers = {\n      'HX-Request': 'true',\n      'HX-Trigger': getRawAttribute(elt, 'id'),\n      'HX-Trigger-Name': getRawAttribute(elt, 'name'),\n      'HX-Target': getAttributeValue(target, 'id'),\n      'HX-Current-URL': location.href\n    }\n    getValuesForElement(elt, 'hx-headers', false, headers)\n    if (prompt !== undefined) {\n      headers['HX-Prompt'] = prompt\n    }\n    if (getInternalData(elt).boosted) {\n      headers['HX-Boosted'] = 'true'\n    }\n    return headers\n  }\n\n  /**\n * filterValues takes an object containing form input values\n * and returns a new object that only contains keys that are\n * specified by the closest \"hx-params\" attribute\n * @param {FormData} inputValues\n * @param {Element} elt\n * @returns {FormData}\n */\n  function filterValues(inputValues, elt) {\n    const paramsValue = getClosestAttributeValue(elt, 'hx-params')\n    if (paramsValue) {\n      if (paramsValue === 'none') {\n        return new FormData()\n      } else if (paramsValue === '*') {\n        return inputValues\n      } else if (paramsValue.indexOf('not ') === 0) {\n        forEach(paramsValue.slice(4).split(','), function(name) {\n          name = name.trim()\n          inputValues.delete(name)\n        })\n        return inputValues\n      } else {\n        const newValues = new FormData()\n        forEach(paramsValue.split(','), function(name) {\n          name = name.trim()\n          if (inputValues.has(name)) {\n            inputValues.getAll(name).forEach(function(value) { newValues.append(name, value) })\n          }\n        })\n        return newValues\n      }\n    } else {\n      return inputValues\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function isAnchorLink(elt) {\n    return !!getRawAttribute(elt, 'href') && getRawAttribute(elt, 'href').indexOf('#') >= 0\n  }\n\n  /**\n * @param {Element} elt\n * @param {HtmxSwapStyle} [swapInfoOverride]\n * @returns {HtmxSwapSpecification}\n */\n  function getSwapSpecification(elt, swapInfoOverride) {\n    const swapInfo = swapInfoOverride || getClosestAttributeValue(elt, 'hx-swap')\n    /** @type HtmxSwapSpecification */\n    const swapSpec = {\n      swapStyle: getInternalData(elt).boosted ? 'innerHTML' : htmx.config.defaultSwapStyle,\n      swapDelay: htmx.config.defaultSwapDelay,\n      settleDelay: htmx.config.defaultSettleDelay\n    }\n    if (htmx.config.scrollIntoViewOnBoost && getInternalData(elt).boosted && !isAnchorLink(elt)) {\n      swapSpec.show = 'top'\n    }\n    if (swapInfo) {\n      const split = splitOnWhitespace(swapInfo)\n      if (split.length > 0) {\n        for (let i = 0; i < split.length; i++) {\n          const value = split[i]\n          if (value.indexOf('swap:') === 0) {\n            swapSpec.swapDelay = parseInterval(value.slice(5))\n          } else if (value.indexOf('settle:') === 0) {\n            swapSpec.settleDelay = parseInterval(value.slice(7))\n          } else if (value.indexOf('transition:') === 0) {\n            swapSpec.transition = value.slice(11) === 'true'\n          } else if (value.indexOf('ignoreTitle:') === 0) {\n            swapSpec.ignoreTitle = value.slice(12) === 'true'\n          } else if (value.indexOf('scroll:') === 0) {\n            const scrollSpec = value.slice(7)\n            var splitSpec = scrollSpec.split(':')\n            const scrollVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            // @ts-ignore\n            swapSpec.scroll = scrollVal\n            swapSpec.scrollTarget = selectorVal\n          } else if (value.indexOf('show:') === 0) {\n            const showSpec = value.slice(5)\n            var splitSpec = showSpec.split(':')\n            const showVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            swapSpec.show = showVal\n            swapSpec.showTarget = selectorVal\n          } else if (value.indexOf('focus-scroll:') === 0) {\n            const focusScrollVal = value.slice('focus-scroll:'.length)\n            swapSpec.focusScroll = focusScrollVal == 'true'\n          } else if (i == 0) {\n            swapSpec.swapStyle = value\n          } else {\n            logError('Unknown modifier in hx-swap: ' + value)\n          }\n        }\n      }\n    }\n    return swapSpec\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function usesFormData(elt) {\n    return getClosestAttributeValue(elt, 'hx-encoding') === 'multipart/form-data' ||\n    (matches(elt, 'form') && getRawAttribute(elt, 'enctype') === 'multipart/form-data')\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {Element} elt\n   * @param {FormData} filteredParameters\n   * @returns {*|string|null}\n   */\n  function encodeParamsForBody(xhr, elt, filteredParameters) {\n    let encodedParameters = null\n    withExtensions(elt, function(extension) {\n      if (encodedParameters == null) {\n        encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt)\n      }\n    })\n    if (encodedParameters != null) {\n      return encodedParameters\n    } else {\n      if (usesFormData(elt)) {\n        // Force conversion to an actual FormData object in case filteredParameters is a formDataProxy\n        // See https://github.com/bigskysoftware/htmx/issues/2317\n        return overrideFormData(new FormData(), formDataFromObject(filteredParameters))\n      } else {\n        return urlEncode(filteredParameters)\n      }\n    }\n  }\n\n  /**\n *\n * @param {Element} target\n * @returns {HtmxSettleInfo}\n */\n  function makeSettleInfo(target) {\n    return { tasks: [], elts: [target] }\n  }\n\n  /**\n   * @param {Element[]} content\n   * @param {HtmxSwapSpecification} swapSpec\n   */\n  function updateScrollState(content, swapSpec) {\n    const first = content[0]\n    const last = content[content.length - 1]\n    if (swapSpec.scroll) {\n      var target = null\n      if (swapSpec.scrollTarget) {\n        target = asElement(querySelectorExt(first, swapSpec.scrollTarget))\n      }\n      if (swapSpec.scroll === 'top' && (first || target)) {\n        target = target || first\n        target.scrollTop = 0\n      }\n      if (swapSpec.scroll === 'bottom' && (last || target)) {\n        target = target || last\n        target.scrollTop = target.scrollHeight\n      }\n      if (typeof swapSpec.scroll === 'number') {\n        getWindow().setTimeout(function() {\n          window.scrollTo(0, /** @type number */ (swapSpec.scroll))\n        }, 0) // next 'tick', so browser has time to render layout\n      }\n    }\n    if (swapSpec.show) {\n      var target = null\n      if (swapSpec.showTarget) {\n        let targetStr = swapSpec.showTarget\n        if (swapSpec.showTarget === 'window') {\n          targetStr = 'body'\n        }\n        target = asElement(querySelectorExt(first, targetStr))\n      }\n      if (swapSpec.show === 'top' && (first || target)) {\n        target = target || first\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'start', behavior: htmx.config.scrollBehavior })\n      }\n      if (swapSpec.show === 'bottom' && (last || target)) {\n        target = target || last\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'end', behavior: htmx.config.scrollBehavior })\n      }\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {string} attr\n * @param {boolean=} evalAsDefault\n * @param {Object=} values\n * @param {Event=} event\n * @returns {Object}\n */\n  function getValuesForElement(elt, attr, evalAsDefault, values, event) {\n    if (values == null) {\n      values = {}\n    }\n    if (elt == null) {\n      return values\n    }\n    const attributeValue = getAttributeValue(elt, attr)\n    if (attributeValue) {\n      let str = attributeValue.trim()\n      let evaluateValue = evalAsDefault\n      if (str === 'unset') {\n        return null\n      }\n      if (str.indexOf('javascript:') === 0) {\n        str = str.slice(11)\n        evaluateValue = true\n      } else if (str.indexOf('js:') === 0) {\n        str = str.slice(3)\n        evaluateValue = true\n      }\n      if (str.indexOf('{') !== 0) {\n        str = '{' + str + '}'\n      }\n      let varsValues\n      if (evaluateValue) {\n        varsValues = maybeEval(elt, function() {\n          if (event) {\n            return Function('event', 'return (' + str + ')').call(elt, event)\n          } else { // allow window.event to be accessible\n            return Function('return (' + str + ')').call(elt)\n          }\n        }, {})\n      } else {\n        varsValues = parseJSON(str)\n      }\n      for (const key in varsValues) {\n        if (varsValues.hasOwnProperty(key)) {\n          if (values[key] == null) {\n            values[key] = varsValues[key]\n          }\n        }\n      }\n    }\n    return getValuesForElement(asElement(parentElt(elt)), attr, evalAsDefault, values, event)\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {() => any} toEval\n   * @param {any=} defaultVal\n   * @returns {any}\n   */\n  function maybeEval(elt, toEval, defaultVal) {\n    if (htmx.config.allowEval) {\n      return toEval()\n    } else {\n      triggerErrorEvent(elt, 'htmx:evalDisallowedError')\n      return defaultVal\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXVarsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vars', true, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXValsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vals', false, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @returns {FormData}\n */\n  function getExpressionVars(elt, event) {\n    return mergeObjects(getHXVarsForElement(elt, event), getHXValsForElement(elt, event))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {string|null} headerValue\n   */\n  function safelySetHeaderValue(xhr, header, headerValue) {\n    if (headerValue !== null) {\n      try {\n        xhr.setRequestHeader(header, headerValue)\n      } catch (e) {\n      // On an exception, try to set the header URI encoded instead\n        xhr.setRequestHeader(header, encodeURIComponent(headerValue))\n        xhr.setRequestHeader(header + '-URI-AutoEncoded', 'true')\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {string}\n   */\n  function getPathFromResponse(xhr) {\n    if (xhr.responseURL) {\n      try {\n        const url = new URL(xhr.responseURL)\n        return url.pathname + url.search\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:badResponseUrl', { url: xhr.responseURL })\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {RegExp} regexp\n   * @return {boolean}\n   */\n  function hasHeader(xhr, regexp) {\n    return regexp.test(xhr.getAllResponseHeaders())\n  }\n\n  /**\n   * Issues an htmx-style AJAX request\n   *\n   * @see https://htmx.org/api/#ajax\n   *\n   * @param {HttpVerb} verb\n   * @param {string} path the URL path to make the AJAX\n   * @param {Element|string|HtmxAjaxHelperContext} context the element to target (defaults to the **body**) | a selector for the target | a context object that contains any of the following\n   * @return {Promise<void>} Promise that resolves immediately if no request is sent, or when the request is complete\n   */\n  function ajaxHelper(verb, path, context) {\n    verb = (/** @type HttpVerb */(verb.toLowerCase()))\n    if (context) {\n      if (context instanceof Element || typeof context === 'string') {\n        return issueAjaxRequest(verb, path, null, null, {\n          targetOverride: resolveTarget(context) || DUMMY_ELT,\n          returnPromise: true\n        })\n      } else {\n        let resolvedTarget = resolveTarget(context.target)\n        // If target is supplied but can't resolve OR source is supplied but both target and source can't be resolved\n        // then use DUMMY_ELT to abort the request with htmx:targetError to avoid it replacing body by mistake\n        if ((context.target && !resolvedTarget) || (context.source && !resolvedTarget && !resolveTarget(context.source))) {\n          resolvedTarget = DUMMY_ELT\n        }\n        return issueAjaxRequest(verb, path, resolveTarget(context.source), context.event,\n          {\n            handler: context.handler,\n            headers: context.headers,\n            values: context.values,\n            targetOverride: resolvedTarget,\n            swapOverride: context.swap,\n            select: context.select,\n            returnPromise: true,\n            push: context.push,\n            replace: context.replace,\n            selectOOB: context.selectOOB\n          })\n      }\n    } else {\n      return issueAjaxRequest(verb, path, null, null, {\n        returnPromise: true\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {Element[]}\n   */\n  function hierarchyForElt(elt) {\n    const arr = []\n    while (elt) {\n      arr.push(elt)\n      elt = elt.parentElement\n    }\n    return arr\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} path\n   * @param {HtmxRequestConfig} requestConfig\n   * @return {boolean}\n   */\n  function verifyPath(elt, path, requestConfig) {\n    const url = new URL(path, location.protocol !== 'about:' ? location.href : window.origin)\n    const origin = location.protocol !== 'about:' ? location.origin : window.origin\n    const sameHost = origin === url.origin\n\n    if (htmx.config.selfRequestsOnly) {\n      if (!sameHost) {\n        return false\n      }\n    }\n    return triggerEvent(elt, 'htmx:validateUrl', mergeObjects({ url, sameHost }, requestConfig))\n  }\n\n  /**\n   * @param {Object|FormData} obj\n   * @return {FormData}\n   */\n  function formDataFromObject(obj) {\n    if (obj instanceof FormData) return obj\n    const formData = new FormData()\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        if (obj[key] && typeof obj[key].forEach === 'function') {\n          obj[key].forEach(function(v) { formData.append(key, v) })\n        } else if (typeof obj[key] === 'object' && !(obj[key] instanceof Blob)) {\n          formData.append(key, JSON.stringify(obj[key]))\n        } else {\n          formData.append(key, obj[key])\n        }\n      }\n    }\n    return formData\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {string} name\n   * @param {Array} array\n   * @returns {Array}\n   */\n  function formDataArrayProxy(formData, name, array) {\n    // mutating the array should mutate the underlying form data\n    return new Proxy(array, {\n      get: function(target, key) {\n        if (typeof key === 'number') return target[key]\n        if (key === 'length') return target.length\n        if (key === 'push') {\n          return function(value) {\n            target.push(value)\n            formData.append(name, value)\n          }\n        }\n        if (typeof target[key] === 'function') {\n          return function() {\n            target[key].apply(target, arguments)\n            formData.delete(name)\n            target.forEach(function(v) { formData.append(name, v) })\n          }\n        }\n\n        if (target[key] && target[key].length === 1) {\n          return target[key][0]\n        } else {\n          return target[key]\n        }\n      },\n      set: function(target, index, value) {\n        target[index] = value\n        formData.delete(name)\n        target.forEach(function(v) { formData.append(name, v) })\n        return true\n      }\n    })\n  }\n\n  /**\n   * @param {FormData} formData\n   * @returns {Object}\n   */\n  function formDataProxy(formData) {\n    return new Proxy(formData, {\n      get: function(target, name) {\n        if (typeof name === 'symbol') {\n          // Forward symbol calls to the FormData itself directly\n          const result = Reflect.get(target, name)\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof result === 'function') {\n            return function() {\n              return result.apply(formData, arguments)\n            }\n          } else {\n            return result\n          }\n        }\n        if (name === 'toJSON') {\n          // Support JSON.stringify call on proxy\n          return () => Object.fromEntries(formData)\n        }\n        if (name in target) {\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof target[name] === 'function') {\n            return function() {\n              return formData[name].apply(formData, arguments)\n            }\n          }\n        }\n        const array = formData.getAll(name)\n        // Those 2 undefined & single value returns are for retro-compatibility as we weren't using FormData before\n        if (array.length === 0) {\n          return undefined\n        } else if (array.length === 1) {\n          return array[0]\n        } else {\n          return formDataArrayProxy(target, name, array)\n        }\n      },\n      set: function(target, name, value) {\n        if (typeof name !== 'string') {\n          return false\n        }\n        target.delete(name)\n        if (value && typeof value.forEach === 'function') {\n          value.forEach(function(v) { target.append(name, v) })\n        } else if (typeof value === 'object' && !(value instanceof Blob)) {\n          target.append(name, JSON.stringify(value))\n        } else {\n          target.append(name, value)\n        }\n        return true\n      },\n      deleteProperty: function(target, name) {\n        if (typeof name === 'string') {\n          target.delete(name)\n        }\n        return true\n      },\n      // Support Object.assign call from proxy\n      ownKeys: function(target) {\n        return Reflect.ownKeys(Object.fromEntries(target))\n      },\n      getOwnPropertyDescriptor: function(target, prop) {\n        return Reflect.getOwnPropertyDescriptor(Object.fromEntries(target), prop)\n      }\n    })\n  }\n\n  /**\n   * @param {HttpVerb} verb\n   * @param {string} path\n   * @param {Element} elt\n   * @param {Event} event\n   * @param {HtmxAjaxEtc} [etc]\n   * @param {boolean} [confirmed]\n   * @return {Promise<void>}\n   */\n  function issueAjaxRequest(verb, path, elt, event, etc, confirmed) {\n    let resolve = null\n    let reject = null\n    etc = etc != null ? etc : {}\n    if (etc.returnPromise && typeof Promise !== 'undefined') {\n      var promise = new Promise(function(_resolve, _reject) {\n        resolve = _resolve\n        reject = _reject\n      })\n    }\n    if (elt == null) {\n      elt = getDocument().body\n    }\n    const responseHandler = etc.handler || handleAjaxResponse\n    const select = etc.select || null\n\n    if (!bodyContains(elt)) {\n    // do not issue requests for elements removed from the DOM\n      maybeCall(resolve)\n      return promise\n    }\n    const target = etc.targetOverride || asElement(getTarget(elt))\n    if (target == null || target == DUMMY_ELT) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target: getClosestAttributeValue(elt, 'hx-target') })\n      maybeCall(reject)\n      return promise\n    }\n\n    let eltData = getInternalData(elt)\n    const submitter = eltData.lastButtonClicked\n\n    if (submitter) {\n      const buttonPath = getRawAttribute(submitter, 'formaction')\n      if (buttonPath != null) {\n        path = buttonPath\n      }\n\n      const buttonVerb = getRawAttribute(submitter, 'formmethod')\n      if (buttonVerb != null) {\n        if (VERBS.includes(buttonVerb.toLowerCase())) {\n          verb = (/** @type HttpVerb */(buttonVerb))\n        } else {\n          maybeCall(resolve)\n          return promise\n        }\n      }\n    }\n\n    const confirmQuestion = getClosestAttributeValue(elt, 'hx-confirm')\n    // allow event-based confirmation w/ a callback\n    if (confirmed === undefined) {\n      const issueRequest = function(skipConfirmation) {\n        return issueAjaxRequest(verb, path, elt, event, etc, !!skipConfirmation)\n      }\n      const confirmDetails = { target, elt, path, verb, triggeringEvent: event, etc, issueRequest, question: confirmQuestion }\n      if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) {\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    let syncElt = elt\n    let syncStrategy = getClosestAttributeValue(elt, 'hx-sync')\n    let queueStrategy = null\n    let abortable = false\n    if (syncStrategy) {\n      const syncStrings = syncStrategy.split(':')\n      const selector = syncStrings[0].trim()\n      if (selector === 'this') {\n        syncElt = findThisElement(elt, 'hx-sync')\n      } else {\n        syncElt = asElement(querySelectorExt(elt, selector))\n      }\n      // default to the drop strategy\n      syncStrategy = (syncStrings[1] || 'drop').trim()\n      eltData = getInternalData(syncElt)\n      if (syncStrategy === 'drop' && eltData.xhr && eltData.abortable !== true) {\n        maybeCall(resolve)\n        return promise\n      } else if (syncStrategy === 'abort') {\n        if (eltData.xhr) {\n          maybeCall(resolve)\n          return promise\n        } else {\n          abortable = true\n        }\n      } else if (syncStrategy === 'replace') {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else if (syncStrategy.indexOf('queue') === 0) {\n        const queueStrArray = syncStrategy.split(' ')\n        queueStrategy = (queueStrArray[1] || 'last').trim()\n      }\n    }\n\n    if (eltData.xhr) {\n      if (eltData.abortable) {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else {\n        if (queueStrategy == null) {\n          if (event) {\n            const eventData = getInternalData(event)\n            if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {\n              queueStrategy = eventData.triggerSpec.queue\n            }\n          }\n          if (queueStrategy == null) {\n            queueStrategy = 'last'\n          }\n        }\n        if (eltData.queuedRequests == null) {\n          eltData.queuedRequests = []\n        }\n        if (queueStrategy === 'first' && eltData.queuedRequests.length === 0) {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'all') {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'last') {\n          eltData.queuedRequests = [] // dump existing queue\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        }\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    const xhr = new XMLHttpRequest()\n    eltData.xhr = xhr\n    eltData.abortable = abortable\n    const endRequestLock = function() {\n      eltData.xhr = null\n      eltData.abortable = false\n      if (eltData.queuedRequests != null &&\n      eltData.queuedRequests.length > 0) {\n        const queuedRequest = eltData.queuedRequests.shift()\n        queuedRequest()\n      }\n    }\n    const promptQuestion = getClosestAttributeValue(elt, 'hx-prompt')\n    if (promptQuestion) {\n      var promptResponse = prompt(promptQuestion)\n      // prompt returns null if cancelled and empty string if accepted with no entry\n      if (promptResponse === null ||\n      !triggerEvent(elt, 'htmx:prompt', { prompt: promptResponse, target })) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    if (confirmQuestion && !confirmed) {\n      if (!confirm(confirmQuestion)) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    let headers = getHeaders(elt, target, promptResponse)\n\n    if (verb !== 'get' && !usesFormData(elt)) {\n      headers['Content-Type'] = 'application/x-www-form-urlencoded'\n    }\n\n    if (etc.headers) {\n      headers = mergeObjects(headers, etc.headers)\n    }\n    const results = getInputValues(elt, verb)\n    let errors = results.errors\n    const rawFormData = results.formData\n    if (etc.values) {\n      overrideFormData(rawFormData, formDataFromObject(etc.values))\n    }\n    const expressionVars = formDataFromObject(getExpressionVars(elt, event))\n    const allFormData = overrideFormData(rawFormData, expressionVars)\n    let filteredFormData = filterValues(allFormData, elt)\n\n    if (htmx.config.getCacheBusterParam && verb === 'get') {\n      filteredFormData.set('org.htmx.cache-buster', getRawAttribute(target, 'id') || 'true')\n    }\n\n    // behavior of anchors w/ empty href is to use the current URL\n    if (path == null || path === '') {\n      path = location.href\n    }\n\n    /**\n     * @type {Object}\n     * @property {boolean} [credentials]\n     * @property {number} [timeout]\n     * @property {boolean} [noHeaders]\n     */\n    const requestAttrValues = getValuesForElement(elt, 'hx-request')\n\n    const eltIsBoosted = getInternalData(elt).boosted\n\n    let useUrlParams = htmx.config.methodsThatUseUrlParams.indexOf(verb) >= 0\n\n    /** @type HtmxRequestConfig */\n    const requestConfig = {\n      boosted: eltIsBoosted,\n      useUrlParams,\n      formData: filteredFormData,\n      parameters: formDataProxy(filteredFormData),\n      unfilteredFormData: allFormData,\n      unfilteredParameters: formDataProxy(allFormData),\n      headers,\n      elt,\n      target,\n      verb,\n      errors,\n      withCredentials: etc.credentials || requestAttrValues.credentials || htmx.config.withCredentials,\n      timeout: etc.timeout || requestAttrValues.timeout || htmx.config.timeout,\n      path,\n      triggeringEvent: event\n    }\n\n    if (!triggerEvent(elt, 'htmx:configRequest', requestConfig)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    // copy out in case the object was overwritten\n    path = requestConfig.path\n    verb = requestConfig.verb\n    headers = requestConfig.headers\n    filteredFormData = formDataFromObject(requestConfig.parameters)\n    errors = requestConfig.errors\n    useUrlParams = requestConfig.useUrlParams\n\n    if (errors && errors.length > 0) {\n      triggerEvent(elt, 'htmx:validation:halted', requestConfig)\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    const splitPath = path.split('#')\n    const pathNoAnchor = splitPath[0]\n    const anchor = splitPath[1]\n\n    let finalPath = path\n    if (useUrlParams) {\n      finalPath = pathNoAnchor\n      const hasValues = !filteredFormData.keys().next().done\n      if (hasValues) {\n        if (finalPath.indexOf('?') < 0) {\n          finalPath += '?'\n        } else {\n          finalPath += '&'\n        }\n        finalPath += urlEncode(filteredFormData)\n        if (anchor) {\n          finalPath += '#' + anchor\n        }\n      }\n    }\n\n    if (!verifyPath(elt, finalPath, requestConfig)) {\n      triggerErrorEvent(elt, 'htmx:invalidPath', requestConfig)\n      maybeCall(reject)\n      endRequestLock()\n      return promise\n    }\n\n    xhr.open(verb.toUpperCase(), finalPath, true)\n    xhr.overrideMimeType('text/html')\n    xhr.withCredentials = requestConfig.withCredentials\n    xhr.timeout = requestConfig.timeout\n\n    // request headers\n    if (requestAttrValues.noHeaders) {\n    // ignore all headers\n    } else {\n      for (const header in headers) {\n        if (headers.hasOwnProperty(header)) {\n          const headerValue = headers[header]\n          safelySetHeaderValue(xhr, header, headerValue)\n        }\n      }\n    }\n\n    /** @type {HtmxResponseInfo} */\n    const responseInfo = {\n      xhr,\n      target,\n      requestConfig,\n      etc,\n      boosted: eltIsBoosted,\n      select,\n      pathInfo: {\n        requestPath: path,\n        finalRequestPath: finalPath,\n        responsePath: null,\n        anchor\n      }\n    }\n\n    xhr.onload = function() {\n      try {\n        const hierarchy = hierarchyForElt(elt)\n        responseInfo.pathInfo.responsePath = getPathFromResponse(xhr)\n        responseHandler(elt, responseInfo)\n        if (responseInfo.keepIndicators !== true) {\n          removeRequestIndicators(indicators, disableElts)\n        }\n        triggerEvent(elt, 'htmx:afterRequest', responseInfo)\n        triggerEvent(elt, 'htmx:afterOnLoad', responseInfo)\n        // if the body no longer contains the element, trigger the event on the closest parent\n        // remaining in the DOM\n        if (!bodyContains(elt)) {\n          let secondaryTriggerElt = null\n          while (hierarchy.length > 0 && secondaryTriggerElt == null) {\n            const parentEltInHierarchy = hierarchy.shift()\n            if (bodyContains(parentEltInHierarchy)) {\n              secondaryTriggerElt = parentEltInHierarchy\n            }\n          }\n          if (secondaryTriggerElt) {\n            triggerEvent(secondaryTriggerElt, 'htmx:afterRequest', responseInfo)\n            triggerEvent(secondaryTriggerElt, 'htmx:afterOnLoad', responseInfo)\n          }\n        }\n        maybeCall(resolve)\n      } catch (e) {\n        triggerErrorEvent(elt, 'htmx:onLoadError', mergeObjects({ error: e }, responseInfo))\n        throw e\n      } finally {\n        endRequestLock()\n      }\n    }\n    xhr.onerror = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendError', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.onabort = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.ontimeout = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:timeout', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    if (!triggerEvent(elt, 'htmx:beforeRequest', responseInfo)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n    var indicators = addRequestIndicatorClasses(elt)\n    var disableElts = disableElements(elt)\n\n    forEach(['loadstart', 'loadend', 'progress', 'abort'], function(eventName) {\n      forEach([xhr, xhr.upload], function(target) {\n        target.addEventListener(eventName, function(event) {\n          triggerEvent(elt, 'htmx:xhr:' + eventName, {\n            lengthComputable: event.lengthComputable,\n            loaded: event.loaded,\n            total: event.total\n          })\n        })\n      })\n    })\n    triggerEvent(elt, 'htmx:beforeSend', responseInfo)\n    const params = useUrlParams ? null : encodeParamsForBody(xhr, elt, filteredFormData)\n    xhr.send(params)\n    return promise\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryUpdate\n   * @property {string|null} [type]\n   * @property {string|null} [path]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   * @return {HtmxHistoryUpdate}\n   */\n  function determineHistoryUpdates(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n\n    //= ==========================================\n    // First consult response headers\n    //= ==========================================\n    let pathFromHeaders = null\n    let typeFromHeaders = null\n    if (hasHeader(xhr, /HX-Push:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, /HX-Push-Url:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push-Url')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, /HX-Replace-Url:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Replace-Url')\n      typeFromHeaders = 'replace'\n    }\n\n    // if there was a response header, that has priority\n    if (pathFromHeaders) {\n      if (pathFromHeaders === 'false') {\n        return {}\n      } else {\n        return {\n          type: typeFromHeaders,\n          path: pathFromHeaders\n        }\n      }\n    }\n\n    //= ==========================================\n    // Next resolve via DOM values\n    //= ==========================================\n    const requestPath = responseInfo.pathInfo.finalRequestPath\n    const responsePath = responseInfo.pathInfo.responsePath\n\n    let pushUrl = responseInfo.etc.push || getClosestAttributeValue(elt, 'hx-push-url')\n    let replaceUrl = responseInfo.etc.replace || getClosestAttributeValue(elt, 'hx-replace-url')\n    if (pushUrl === 'false') pushUrl = null\n    if (replaceUrl === 'false') replaceUrl = null\n    const elementIsBoosted = getInternalData(elt).boosted\n\n    let saveType = null\n    let path = null\n\n    if (pushUrl) {\n      saveType = 'push'\n      path = pushUrl\n    } else if (replaceUrl) {\n      saveType = 'replace'\n      path = replaceUrl\n    } else if (elementIsBoosted) {\n      saveType = 'push'\n      path = responsePath || requestPath // if there is no response path, go with the original request path\n    }\n\n    if (path) {\n      // true indicates we want to follow wherever the server ended up sending us\n      if (path === 'true') {\n        path = responsePath || requestPath // if there is no response path, go with the original request path\n      }\n\n      // restore any anchor associated with the request\n      if (responseInfo.pathInfo.anchor && path.indexOf('#') === -1) {\n        path = path + '#' + responseInfo.pathInfo.anchor\n      }\n\n      return {\n        type: saveType,\n        path\n      }\n    } else {\n      return {}\n    }\n  }\n\n  /**\n   * @param {HtmxResponseHandlingConfig} responseHandlingConfig\n   * @param {number} status\n   * @return {boolean}\n   */\n  function codeMatches(responseHandlingConfig, status) {\n    var regExp = new RegExp(responseHandlingConfig.code)\n    return regExp.test(status.toString(10))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {HtmxResponseHandlingConfig}\n   */\n  function resolveResponseHandling(xhr) {\n    for (var i = 0; i < htmx.config.responseHandling.length; i++) {\n      /** @type HtmxResponseHandlingConfig */\n      var responseHandlingElement = htmx.config.responseHandling[i]\n      if (codeMatches(responseHandlingElement, xhr.status)) {\n        return responseHandlingElement\n      }\n    }\n    // no matches, return no swap\n    return {\n      swap: false\n    }\n  }\n\n  /**\n   * @param {string} title\n   */\n  function handleTitle(title) {\n    if (title) {\n      const titleElt = find('title')\n      if (titleElt) {\n        titleElt.textContent = title\n      } else {\n        window.document.title = title\n      }\n    }\n  }\n\n  /**\n   * Resove the Retarget selector and throw if not found\n   * @param {Element} elt\n   * @param {String} target\n   * @returns {Element}\n   */\n  function resolveRetarget(elt, target) {\n    if (target === 'this') {\n      return elt\n    }\n    const resolvedTarget = asElement(querySelectorExt(elt, target))\n    if (resolvedTarget == null) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target })\n      throw new Error(`Invalid re-target ${target}`)\n    }\n    return resolvedTarget\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   */\n  function handleAjaxResponse(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n    let target = responseInfo.target\n    const etc = responseInfo.etc\n    const responseInfoSelect = responseInfo.select\n\n    if (!triggerEvent(elt, 'htmx:beforeOnLoad', responseInfo)) return\n\n    if (hasHeader(xhr, /HX-Trigger:/i)) {\n      handleTriggerHeader(xhr, 'HX-Trigger', elt)\n    }\n\n    if (hasHeader(xhr, /HX-Location:/i)) {\n      let redirectPath = xhr.getResponseHeader('HX-Location')\n      /** @type {HtmxAjaxHelperContext&{path?:string}} */\n      var redirectSwapSpec = {}\n      if (redirectPath.indexOf('{') === 0) {\n        redirectSwapSpec = parseJSON(redirectPath)\n        // what's the best way to throw an error if the user didn't include this\n        redirectPath = redirectSwapSpec.path\n        delete redirectSwapSpec.path\n      }\n      redirectSwapSpec.push = redirectSwapSpec.push ?? 'true'\n      ajaxHelper('get', redirectPath, redirectSwapSpec)\n      return\n    }\n\n    const shouldRefresh = hasHeader(xhr, /HX-Refresh:/i) && xhr.getResponseHeader('HX-Refresh') === 'true'\n\n    if (hasHeader(xhr, /HX-Redirect:/i)) {\n      responseInfo.keepIndicators = true\n      htmx.location.href = xhr.getResponseHeader('HX-Redirect')\n      shouldRefresh && htmx.location.reload()\n      return\n    }\n\n    if (shouldRefresh) {\n      responseInfo.keepIndicators = true\n      htmx.location.reload()\n      return\n    }\n\n    const historyUpdate = determineHistoryUpdates(elt, responseInfo)\n\n    const responseHandling = resolveResponseHandling(xhr)\n    const shouldSwap = responseHandling.swap\n    let isError = !!responseHandling.error\n    let ignoreTitle = htmx.config.ignoreTitle || responseHandling.ignoreTitle\n    let selectOverride = responseHandling.select\n    if (responseHandling.target) {\n      responseInfo.target = resolveRetarget(elt, responseHandling.target)\n    }\n    var swapOverride = etc.swapOverride\n    if (swapOverride == null && responseHandling.swapOverride) {\n      swapOverride = responseHandling.swapOverride\n    }\n\n    // response headers override response handling config\n    if (hasHeader(xhr, /HX-Retarget:/i)) {\n      responseInfo.target = resolveRetarget(elt, xhr.getResponseHeader('HX-Retarget'))\n    }\n\n    if (hasHeader(xhr, /HX-Reswap:/i)) {\n      swapOverride = xhr.getResponseHeader('HX-Reswap')\n    }\n\n    var serverResponse = xhr.response\n    /** @type HtmxBeforeSwapDetails */\n    var beforeSwapDetails = mergeObjects({\n      shouldSwap,\n      serverResponse,\n      isError,\n      ignoreTitle,\n      selectOverride,\n      swapOverride\n    }, responseInfo)\n\n    if (responseHandling.event && !triggerEvent(target, responseHandling.event, beforeSwapDetails)) return\n\n    if (!triggerEvent(target, 'htmx:beforeSwap', beforeSwapDetails)) return\n\n    target = beforeSwapDetails.target // allow re-targeting\n    serverResponse = beforeSwapDetails.serverResponse // allow updating content\n    isError = beforeSwapDetails.isError // allow updating error\n    ignoreTitle = beforeSwapDetails.ignoreTitle // allow updating ignoring title\n    selectOverride = beforeSwapDetails.selectOverride // allow updating select override\n    swapOverride = beforeSwapDetails.swapOverride // allow updating swap override\n\n    responseInfo.target = target // Make updated target available to response events\n    responseInfo.failed = isError // Make failed property available to response events\n    responseInfo.successful = !isError // Make successful property available to response events\n\n    if (beforeSwapDetails.shouldSwap) {\n      if (xhr.status === 286) {\n        cancelPolling(elt)\n      }\n\n      withExtensions(elt, function(extension) {\n        serverResponse = extension.transformResponse(serverResponse, xhr, elt)\n      })\n\n      // Save current page if there will be a history update\n      if (historyUpdate.type) {\n        saveCurrentPageToHistory()\n      }\n\n      var swapSpec = getSwapSpecification(elt, swapOverride)\n\n      if (!swapSpec.hasOwnProperty('ignoreTitle')) {\n        swapSpec.ignoreTitle = ignoreTitle\n      }\n\n      addClassToElement(target, htmx.config.swappingClass)\n\n      if (responseInfoSelect) {\n        selectOverride = responseInfoSelect\n      }\n\n      if (hasHeader(xhr, /HX-Reselect:/i)) {\n        selectOverride = xhr.getResponseHeader('HX-Reselect')\n      }\n\n      const selectOOB = etc.selectOOB || getClosestAttributeValue(elt, 'hx-select-oob')\n      const select = getClosestAttributeValue(elt, 'hx-select')\n\n      swap(target, serverResponse, swapSpec, {\n        select: selectOverride === 'unset' ? null : selectOverride || select,\n        selectOOB,\n        eventInfo: responseInfo,\n        anchor: responseInfo.pathInfo.anchor,\n        contextElement: elt,\n        afterSwapCallback: function() {\n          if (hasHeader(xhr, /HX-Trigger-After-Swap:/i)) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Swap', finalElt)\n          }\n        },\n        afterSettleCallback: function() {\n          if (hasHeader(xhr, /HX-Trigger-After-Settle:/i)) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Settle', finalElt)\n          }\n        },\n        beforeSwapCallback: function() {\n          // if we need to save history, do so, before swapping so that relative resources have the correct base URL\n          if (historyUpdate.type) {\n            triggerEvent(getDocument().body, 'htmx:beforeHistoryUpdate', mergeObjects({ history: historyUpdate }, responseInfo))\n            if (historyUpdate.type === 'push') {\n              pushUrlIntoHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', { path: historyUpdate.path })\n            } else {\n              replaceUrlInHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:replacedInHistory', { path: historyUpdate.path })\n            }\n          }\n        }\n      })\n    }\n    if (isError) {\n      triggerErrorEvent(elt, 'htmx:responseError', mergeObjects({ error: 'Response Status Error Code ' + xhr.status + ' from ' + responseInfo.pathInfo.requestPath }, responseInfo))\n    }\n  }\n\n  //= ===================================================================\n  // Extensions API\n  //= ===================================================================\n\n  /** @type {Object<string, HtmxExtension>} */\n  const extensions = {}\n\n  /**\n   * extensionBase defines the default functions for all extensions.\n   * @returns {HtmxExtension}\n   */\n  function extensionBase() {\n    return {\n      init: function(api) { return null },\n      getSelectors: function() { return null },\n      onEvent: function(name, evt) { return true },\n      transformResponse: function(text, xhr, elt) { return text },\n      isInlineSwap: function(swapStyle) { return false },\n      handleSwap: function(swapStyle, target, fragment, settleInfo) { return false },\n      encodeParameters: function(xhr, parameters, elt) { return null }\n    }\n  }\n\n  /**\n   * defineExtension initializes the extension and adds it to the htmx registry\n   *\n   * @see https://htmx.org/api/#defineExtension\n   *\n   * @param {string} name the extension name\n   * @param {Partial<HtmxExtension>} extension the extension definition\n   */\n  function defineExtension(name, extension) {\n    if (extension.init) {\n      extension.init(internalAPI)\n    }\n    extensions[name] = mergeObjects(extensionBase(), extension)\n  }\n\n  /**\n   * removeExtension removes an extension from the htmx registry\n   *\n   * @see https://htmx.org/api/#removeExtension\n   *\n   * @param {string} name\n   */\n  function removeExtension(name) {\n    delete extensions[name]\n  }\n\n  /**\n   * getExtensions searches up the DOM tree to return all extensions that can be applied to a given element\n   *\n   * @param {Element} elt\n   * @param {HtmxExtension[]=} extensionsToReturn\n   * @param {string[]=} extensionsToIgnore\n   * @returns {HtmxExtension[]}\n   */\n  function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {\n    if (extensionsToReturn == undefined) {\n      extensionsToReturn = []\n    }\n    if (elt == undefined) {\n      return extensionsToReturn\n    }\n    if (extensionsToIgnore == undefined) {\n      extensionsToIgnore = []\n    }\n    const extensionsForElement = getAttributeValue(elt, 'hx-ext')\n    if (extensionsForElement) {\n      forEach(extensionsForElement.split(','), function(extensionName) {\n        extensionName = extensionName.replace(/ /g, '')\n        if (extensionName.slice(0, 7) == 'ignore:') {\n          extensionsToIgnore.push(extensionName.slice(7))\n          return\n        }\n        if (extensionsToIgnore.indexOf(extensionName) < 0) {\n          const extension = extensions[extensionName]\n          if (extension && extensionsToReturn.indexOf(extension) < 0) {\n            extensionsToReturn.push(extension)\n          }\n        }\n      })\n    }\n    return getExtensions(asElement(parentElt(elt)), extensionsToReturn, extensionsToIgnore)\n  }\n\n  //= ===================================================================\n  // Initialization\n  //= ===================================================================\n  var isReady = false\n  getDocument().addEventListener('DOMContentLoaded', function() {\n    isReady = true\n  })\n\n  /**\n   * Execute a function now if DOMContentLoaded has fired, otherwise listen for it.\n   *\n   * This function uses isReady because there is no reliable way to ask the browser whether\n   * the DOMContentLoaded event has already been fired; there's a gap between DOMContentLoaded\n   * firing and readystate=complete.\n   */\n  function ready(fn) {\n    // Checking readyState here is a failsafe in case the htmx script tag entered the DOM by\n    // some means other than the initial page load.\n    if (isReady || getDocument().readyState === 'complete') {\n      fn()\n    } else {\n      getDocument().addEventListener('DOMContentLoaded', fn)\n    }\n  }\n\n  function insertIndicatorStyles() {\n    if (htmx.config.includeIndicatorStyles !== false) {\n      const nonceAttribute = htmx.config.inlineStyleNonce ? ` nonce=\"${htmx.config.inlineStyleNonce}\"` : ''\n      const indicator = htmx.config.indicatorClass\n      const request = htmx.config.requestClass\n      getDocument().head.insertAdjacentHTML('beforeend',\n        `<style${nonceAttribute}>` +\n        `.${indicator}{opacity:0;visibility: hidden} ` +\n        `.${request} .${indicator}, .${request}.${indicator}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}` +\n        '</style>'\n      )\n    }\n  }\n\n  function getMetaConfig() {\n    /** @type HTMLMetaElement */\n    const element = getDocument().querySelector('meta[name=\"htmx-config\"]')\n    if (element) {\n      return parseJSON(element.content)\n    } else {\n      return null\n    }\n  }\n\n  function mergeMetaConfig() {\n    const metaConfig = getMetaConfig()\n    if (metaConfig) {\n      htmx.config = mergeObjects(htmx.config, metaConfig)\n    }\n  }\n\n  // initialize the document\n  ready(function() {\n    mergeMetaConfig()\n    insertIndicatorStyles()\n    let body = getDocument().body\n    processNode(body)\n    const restoredElts = getDocument().querySelectorAll(\n      \"[hx-trigger='restored'],[data-hx-trigger='restored']\"\n    )\n    body.addEventListener('htmx:abort', function(evt) {\n      const target = (/** @type {CustomEvent} */(evt)).detail.elt || evt.target\n      const internalData = getInternalData(target)\n      if (internalData && internalData.xhr) {\n        internalData.xhr.abort()\n      }\n    })\n    /** @type {(ev: PopStateEvent) => any} */\n    const originalPopstate = window.onpopstate ? window.onpopstate.bind(window) : null\n    /** @type {(ev: PopStateEvent) => any} */\n    window.onpopstate = function(event) {\n      if (event.state && event.state.htmx) {\n        restoreHistory()\n        forEach(restoredElts, function(elt) {\n          triggerEvent(elt, 'htmx:restored', {\n            document: getDocument(),\n            triggerEvent\n          })\n        })\n      } else {\n        if (originalPopstate) {\n          originalPopstate(event)\n        }\n      }\n    }\n    getWindow().setTimeout(function() {\n      triggerEvent(body, 'htmx:load', {}) // give ready handlers a chance to load up before firing this event\n      body = null // kill reference for gc\n    }, 0)\n  })\n\n  return htmx\n})()\n\n/** @typedef {'get'|'head'|'post'|'put'|'delete'|'connect'|'options'|'trace'|'patch'} HttpVerb */\n\n/**\n * @typedef {Object} SwapOptions\n * @property {string} [select]\n * @property {string} [selectOOB]\n * @property {*} [eventInfo]\n * @property {string} [anchor]\n * @property {Element} [contextElement]\n * @property {swapCallback} [afterSwapCallback]\n * @property {swapCallback} [afterSettleCallback]\n * @property {swapCallback} [beforeSwapCallback]\n * @property {string} [title]\n * @property {boolean} [historyRequest]\n */\n\n/**\n * @callback swapCallback\n */\n\n/**\n * @typedef {'innerHTML' | 'outerHTML' | 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend' | 'delete' | 'none' | string} HtmxSwapStyle\n */\n\n/**\n * @typedef HtmxSwapSpecification\n * @property {HtmxSwapStyle} swapStyle\n * @property {number} swapDelay\n * @property {number} settleDelay\n * @property {boolean} [transition]\n * @property {boolean} [ignoreTitle]\n * @property {string} [head]\n * @property {'top' | 'bottom' | number } [scroll]\n * @property {string} [scrollTarget]\n * @property {string} [show]\n * @property {string} [showTarget]\n * @property {boolean} [focusScroll]\n */\n\n/**\n * @typedef {((this:Node, evt:Event) => boolean) & {source: string}} ConditionalFunction\n */\n\n/**\n * @typedef {Object} HtmxTriggerSpecification\n * @property {string} trigger\n * @property {number} [pollInterval]\n * @property {ConditionalFunction} [eventFilter]\n * @property {boolean} [changed]\n * @property {boolean} [once]\n * @property {boolean} [consume]\n * @property {number} [delay]\n * @property {string} [from]\n * @property {string} [target]\n * @property {number} [throttle]\n * @property {string} [queue]\n * @property {string} [root]\n * @property {string} [threshold]\n */\n\n/**\n * @typedef {{elt: Element, message: string, validity: ValidityState}} HtmxElementValidationError\n */\n\n/**\n * @typedef {Record<string, string>} HtmxHeaderSpecification\n * @property {'true'} HX-Request\n * @property {string|null} HX-Trigger\n * @property {string|null} HX-Trigger-Name\n * @property {string|null} HX-Target\n * @property {string} HX-Current-URL\n * @property {string} [HX-Prompt]\n * @property {'true'} [HX-Boosted]\n * @property {string} [Content-Type]\n * @property {'true'} [HX-History-Restore-Request]\n */\n\n/**\n * @typedef HtmxAjaxHelperContext\n * @property {Element|string} [source]\n * @property {Event} [event]\n * @property {HtmxAjaxHandler} [handler]\n * @property {Element|string} [target]\n * @property {HtmxSwapStyle} [swap]\n * @property {Object|FormData} [values]\n * @property {Record<string,string>} [headers]\n * @property {string} [select]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxRequestConfig\n * @property {boolean} boosted\n * @property {boolean} useUrlParams\n * @property {FormData} formData\n * @property {Object} parameters formData proxy\n * @property {FormData} unfilteredFormData\n * @property {Object} unfilteredParameters unfilteredFormData proxy\n * @property {HtmxHeaderSpecification} headers\n * @property {Element} elt\n * @property {Element} target\n * @property {HttpVerb} verb\n * @property {HtmxElementValidationError[]} errors\n * @property {boolean} withCredentials\n * @property {number} timeout\n * @property {string} path\n * @property {Event} triggeringEvent\n */\n\n/**\n * @typedef {Object} HtmxResponseInfo\n * @property {XMLHttpRequest} xhr\n * @property {Element} target\n * @property {HtmxRequestConfig} requestConfig\n * @property {HtmxAjaxEtc} etc\n * @property {boolean} boosted\n * @property {string} select\n * @property {{requestPath: string, finalRequestPath: string, responsePath: string|null, anchor: string}} pathInfo\n * @property {boolean} [failed]\n * @property {boolean} [successful]\n * @property {boolean} [keepIndicators]\n */\n\n/**\n * @typedef {Object} HtmxAjaxEtc\n * @property {boolean} [returnPromise]\n * @property {HtmxAjaxHandler} [handler]\n * @property {string} [select]\n * @property {Element} [targetOverride]\n * @property {HtmxSwapStyle} [swapOverride]\n * @property {Record<string,string>} [headers]\n * @property {Object|FormData} [values]\n * @property {boolean} [credentials]\n * @property {number} [timeout]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxResponseHandlingConfig\n * @property {string} [code]\n * @property {boolean} swap\n * @property {boolean} [error]\n * @property {boolean} [ignoreTitle]\n * @property {string} [select]\n * @property {string} [target]\n * @property {string} [swapOverride]\n * @property {string} [event]\n */\n\n/**\n * @typedef {HtmxResponseInfo & {shouldSwap: boolean, serverResponse: any, isError: boolean, ignoreTitle: boolean, selectOverride:string, swapOverride:string}} HtmxBeforeSwapDetails\n */\n\n/**\n * @callback HtmxAjaxHandler\n * @param {Element} elt\n * @param {HtmxResponseInfo} responseInfo\n */\n\n/**\n * @typedef {(() => void)} HtmxSettleTask\n */\n\n/**\n * @typedef {Object} HtmxSettleInfo\n * @property {HtmxSettleTask[]} tasks\n * @property {Element[]} elts\n * @property {string} [title]\n */\n\n/**\n * @see https://github.com/bigskysoftware/htmx-extensions/blob/main/README.md\n * @typedef {Object} HtmxExtension\n * @property {(api: any) => void} init\n * @property {(name: string, event: CustomEvent) => boolean} onEvent\n * @property {(text: string, xhr: XMLHttpRequest, elt: Element) => string} transformResponse\n * @property {(swapStyle: HtmxSwapStyle) => boolean} isInlineSwap\n * @property {(swapStyle: HtmxSwapStyle, target: Node, fragment: Node, settleInfo: HtmxSettleInfo) => boolean|Node[]} handleSwap\n * @property {(xhr: XMLHttpRequest, parameters: FormData, elt: Node) => *|string|null} encodeParameters\n * @property {() => string[]|null} getSelectors\n */\nexport default htmx\n","function addUniqueItem(arr, item) {\n    if (arr.indexOf(item) === -1)\n        arr.push(item);\n}\nfunction removeItem(arr, item) {\n    const index = arr.indexOf(item);\n    if (index > -1)\n        arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n    const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n    if (startIndex >= 0 && startIndex < arr.length) {\n        const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n        const [item] = arr.splice(fromIndex, 1);\n        arr.splice(endIndex, 0, item);\n    }\n    return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n//# sourceMappingURL=array.mjs.map\n","const clamp = (min, max, v) => {\n    if (v > max)\n        return max;\n    if (v < min)\n        return min;\n    return v;\n};\n\nexport { clamp };\n//# sourceMappingURL=clamp.mjs.map\n","import { formatErrorMessage } from './format-error-message.mjs';\n\nlet warning = () => { };\nlet invariant = () => { };\nif (typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV !== \"production\") {\n    warning = (check, message, errorCode) => {\n        if (!check && typeof console !== \"undefined\") {\n            console.warn(formatErrorMessage(message, errorCode));\n        }\n    };\n    invariant = (check, message, errorCode) => {\n        if (!check) {\n            throw new Error(formatErrorMessage(message, errorCode));\n        }\n    };\n}\n\nexport { invariant, warning };\n//# sourceMappingURL=errors.mjs.map\n","const MotionGlobalConfig = {};\n\nexport { MotionGlobalConfig };\n//# sourceMappingURL=global-config.mjs.map\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n//# sourceMappingURL=is-numerical-string.mjs.map\n","const isObject = (value) => typeof value === \"object\" && value !== null;\n\nexport { isObject };\n//# sourceMappingURL=is-object.mjs.map\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n//# sourceMappingURL=is-zero-value-string.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n    let result;\n    return () => {\n        if (result === undefined)\n            result = callback();\n        return result;\n    };\n}\n\nexport { memo };\n//# sourceMappingURL=memo.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\n//# sourceMappingURL=noop.mjs.map\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param  {...functions} transformers\n * @return {function}\n */\nconst pipe = (...transformers) => transformers.reduce((a, b) => (v) => b(a(v)));\n\nexport { pipe };\n//# sourceMappingURL=pipe.mjs.map\n","/*\n  Progress within given range\n\n  Given a lower limit and an upper limit, we return the progress\n  (expressed as a number 0-1) represented by the given value, and\n  limit that progress to within 0-1.\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n    const range = to - from;\n    return range ? (value - from) / range : 1;\n};\n\nexport { progress };\n//# sourceMappingURL=progress.mjs.map\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n    constructor() {\n        this.subscriptions = [];\n    }\n    add(handler) {\n        addUniqueItem(this.subscriptions, handler);\n        return () => this.remove(handler);\n    }\n    remove(handler) {\n        removeItem(this.subscriptions, handler);\n    }\n    notify(a, b, c) {\n        const numSubscriptions = this.subscriptions.length;\n        if (!numSubscriptions)\n            return;\n        if (numSubscriptions === 1) {\n            /**\n             * If there's only a single handler we can just call it without invoking a loop.\n             */\n            this.subscriptions[0](a, b, c);\n        }\n        else {\n            for (let i = 0; i < numSubscriptions; i++) {\n                /**\n                 * Check whether the handler exists before firing as it's possible\n                 * the subscriptions were modified during this loop running.\n                 */\n                const handler = this.subscriptions[i];\n                handler && handler(a, b, c);\n            }\n        }\n    }\n    getSize() {\n        return this.subscriptions.length;\n    }\n    clear() {\n        this.subscriptions.length = 0;\n    }\n}\n\nexport { SubscriptionManager };\n//# sourceMappingURL=subscription-manager.mjs.map\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n//# sourceMappingURL=time-conversion.mjs.map\n","/*\n  Convert velocity into velocity per second\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst velocityPerSecond = (velocity, frameDuration) => frameDuration ? velocity * (1000 / frameDuration) : 0;\n\nexport { velocityPerSecond };\n//# sourceMappingURL=velocity-per-second.mjs.map\n","const wrap = (min, max, v) => {\n    const rangeSize = max - min;\n    return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n//# sourceMappingURL=wrap.mjs.map\n","import { noop } from '../noop.mjs';\n\n/*\n  Bezier function generator\n  This has been modified from Gaëtan Renaudeau's BezierEasing\n  https://github.com/gre/bezier-easing/blob/master/src/index.js\n  https://github.com/gre/bezier-easing/blob/master/LICENSE\n  \n  I've removed the newtonRaphsonIterate algo because in benchmarking it\n  wasn't noticeably faster than binarySubdivision, indeed removing it\n  usually improved times, depending on the curve.\n  I also removed the lookup table, as for the added bundle size and loop we're\n  only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n  to 12 to compensate and this still tended to be faster for no perceivable\n  loss in accuracy.\n  Usage\n    const easeOut = cubicBezier(.17,.67,.83,.67);\n    const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n    t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n    let currentX;\n    let currentT;\n    let i = 0;\n    do {\n        currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - x;\n        if (currentX > 0.0) {\n            upperBound = currentT;\n        }\n        else {\n            lowerBound = currentT;\n        }\n    } while (Math.abs(currentX) > subdivisionPrecision &&\n        ++i < subdivisionMaxIterations);\n    return currentT;\n}\n/*#__NO_SIDE_EFFECTS__*/\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n    // If this is a linear gradient, return linear easing\n    if (mX1 === mY1 && mX2 === mY2)\n        return noop;\n    const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n    // If animation is at start/end, return t without easing\n    return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\n/*#__NO_SIDE_EFFECTS__*/\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n//# sourceMappingURL=mirror.mjs.map\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\n/*#__NO_SIDE_EFFECTS__*/\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n//# sourceMappingURL=reverse.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n//# sourceMappingURL=back.mjs.map\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => p >= 1\n    ? 1\n    : (p *= 2) < 1\n        ? 0.5 * backIn(p)\n        : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n//# sourceMappingURL=anticipate.mjs.map\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n//# sourceMappingURL=circ.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n//# sourceMappingURL=ease.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst isEasingArray = (ease) => {\n    return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n//# sourceMappingURL=is-easing-array.mjs.map\n","import { wrap } from '../../wrap.mjs';\nimport { isEasingArray } from './is-easing-array.mjs';\n\n/*#__NO_SIDE_EFFECTS__*/\nfunction getEasingForSegment(easing, i) {\n    return isEasingArray(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n//# sourceMappingURL=get-easing-for-segment.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n//# sourceMappingURL=is-bezier-definition.mjs.map\n","import { invariant } from '../../errors.mjs';\nimport { noop } from '../../noop.mjs';\nimport { anticipate } from '../anticipate.mjs';\nimport { backOut, backInOut, backIn } from '../back.mjs';\nimport { circOut, circInOut, circIn } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeOut, easeInOut, easeIn } from '../ease.mjs';\nimport { isBezierDefinition } from './is-bezier-definition.mjs';\n\nconst easingLookup = {\n    linear: noop,\n    easeIn,\n    easeInOut,\n    easeOut,\n    circIn,\n    circInOut,\n    circOut,\n    backIn,\n    backInOut,\n    backOut,\n    anticipate,\n};\nconst isValidEasing = (easing) => {\n    return typeof easing === \"string\";\n};\nconst easingDefinitionToFunction = (definition) => {\n    if (isBezierDefinition(definition)) {\n        // If cubic bezier definition, create bezier curve\n        invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`, \"cubic-bezier-length\");\n        const [x1, y1, x2, y2] = definition;\n        return cubicBezier(x1, y1, x2, y2);\n    }\n    else if (isValidEasing(definition)) {\n        // Else lookup from table\n        invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`, \"invalid-easing-type\");\n        return easingLookup[definition];\n    }\n    return definition;\n};\n\nexport { easingDefinitionToFunction };\n//# sourceMappingURL=map.mjs.map\n","const stepsOrder = [\n    \"setup\", // Compute\n    \"read\", // Read\n    \"resolveKeyframes\", // Write/Read/Write/Read\n    \"preUpdate\", // Compute\n    \"update\", // Compute\n    \"preRender\", // Compute\n    \"render\", // Write\n    \"postRender\", // Compute\n];\n\nexport { stepsOrder };\n//# sourceMappingURL=order.mjs.map\n","function createRenderStep(runNextFrame) {\n    /**\n     * We create and reuse two queues, one to queue jobs for the current frame\n     * and one for the next. We reuse to avoid triggering GC after x frames.\n     */\n    let thisFrame = new Set();\n    let nextFrame = new Set();\n    /**\n     * Track whether we're currently processing jobs in this step. This way\n     * we can decide whether to schedule new jobs for this frame or next.\n     */\n    let isProcessing = false;\n    let flushNextFrame = false;\n    /**\n     * A set of processes which were marked keepAlive when scheduled.\n     * A keepAlive process is always also held by a frame queue until\n     * it's cancelled, so a Set has the same lifetime semantics as a\n     * WeakSet here while being considerably faster to query every frame.\n     */\n    const toKeepAlive = new Set();\n    let latestFrameData = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    function triggerCallback(callback) {\n        if (toKeepAlive.has(callback)) {\n            nextFrame.add(callback);\n            runNextFrame();\n        }\n        callback(latestFrameData);\n    }\n    const step = {\n        /**\n         * Schedule a process to run on the next frame.\n         */\n        schedule: (callback, keepAlive = false, immediate = false) => {\n            const addToCurrentFrame = immediate && isProcessing;\n            const queue = addToCurrentFrame ? thisFrame : nextFrame;\n            if (keepAlive)\n                toKeepAlive.add(callback);\n            queue.add(callback);\n            return callback;\n        },\n        /**\n         * Cancel the provided callback from running on the next frame.\n         */\n        cancel: (callback) => {\n            nextFrame.delete(callback);\n            toKeepAlive.delete(callback);\n        },\n        /**\n         * Execute all schedule callbacks.\n         */\n        process: (frameData) => {\n            latestFrameData = frameData;\n            /**\n             * If we're already processing we've probably been triggered by a flushSync\n             * inside an existing process. Instead of executing, mark flushNextFrame\n             * as true and ensure we flush the following frame at the end of this one.\n             */\n            if (isProcessing) {\n                flushNextFrame = true;\n                return;\n            }\n            isProcessing = true;\n            // Swap this frame and the next to avoid GC\n            const prevFrame = thisFrame;\n            thisFrame = nextFrame;\n            nextFrame = prevFrame;\n            // Execute this frame\n            thisFrame.forEach(triggerCallback);\n            // Clear the frame so no callbacks remain. This is to avoid\n            // memory leaks should this render step not run for a while.\n            thisFrame.clear();\n            isProcessing = false;\n            if (flushNextFrame) {\n                flushNextFrame = false;\n                step.process(frameData);\n            }\n        },\n    };\n    return step;\n}\n\nexport { createRenderStep };\n//# sourceMappingURL=render-step.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { stepsOrder } from './order.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n    let runNextFrame = false;\n    let useDefaultElapsed = true;\n    const state = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    const flagRunNextFrame = () => (runNextFrame = true);\n    const steps = stepsOrder.reduce((acc, key) => {\n        acc[key] = createRenderStep(flagRunNextFrame);\n        return acc;\n    }, {});\n    const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } = steps;\n    const processBatch = () => {\n        const useManualTiming = MotionGlobalConfig.useManualTiming;\n        const timestamp = useManualTiming\n            ? state.timestamp\n            : performance.now();\n        runNextFrame = false;\n        if (!useManualTiming) {\n            state.delta = useDefaultElapsed\n                ? 1000 / 60\n                : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n        }\n        state.timestamp = timestamp;\n        state.isProcessing = true;\n        // Unrolled render loop for better per-frame performance\n        setup.process(state);\n        read.process(state);\n        resolveKeyframes.process(state);\n        preUpdate.process(state);\n        update.process(state);\n        preRender.process(state);\n        render.process(state);\n        postRender.process(state);\n        state.isProcessing = false;\n        if (runNextFrame && allowKeepAlive) {\n            useDefaultElapsed = false;\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const wake = () => {\n        runNextFrame = true;\n        useDefaultElapsed = true;\n        if (!state.isProcessing) {\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const schedule = stepsOrder.reduce((acc, key) => {\n        const step = steps[key];\n        acc[key] = (process, keepAlive = false, immediate = false) => {\n            if (!runNextFrame)\n                wake();\n            return step.schedule(process, keepAlive, immediate);\n        };\n        return acc;\n    }, {});\n    const cancel = (process) => {\n        for (let i = 0; i < stepsOrder.length; i++) {\n            steps[stepsOrder[i]].cancel(process);\n        }\n    };\n    return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher };\n//# sourceMappingURL=batcher.mjs.map\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = /* @__PURE__ */ createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n//# sourceMappingURL=frame.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n    now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n    now: () => {\n        if (now === undefined) {\n            time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n                ? frameData.timestamp\n                : performance.now());\n        }\n        return now;\n    },\n    set: (newTime) => {\n        now = newTime;\n        queueMicrotask(clearTime);\n    },\n};\n\nexport { time };\n//# sourceMappingURL=sync-time.mjs.map\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n//# sourceMappingURL=sanitize.mjs.map\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n    const startsWithToken = startsAsVariableToken(value);\n    if (!startsWithToken)\n        return false;\n    // Ensure any comments are stripped from the value as this can harm performance of the regex.\n    return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n/**\n * Check if a value contains a CSS variable anywhere (e.g. inside calc()).\n * Unlike isCSSVariableToken which checks if the value IS a var() token,\n * this checks if the value CONTAINS var() somewhere in the string.\n */\nfunction containsCSSVariable(value) {\n    if (typeof value !== \"string\")\n        return false;\n    // Strip comments to avoid false positives\n    return value.split(\"/*\")[0].includes(\"var(--\");\n}\n\nexport { containsCSSVariable, isCSSVariableName, isCSSVariableToken };\n//# sourceMappingURL=is-css-variable.mjs.map\n","import { clamp } from 'motion-utils';\n\nconst number = {\n    test: (v) => typeof v === \"number\",\n    parse: parseFloat,\n    transform: (v) => v,\n};\nconst alpha = {\n    ...number,\n    transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n    ...number,\n    default: 1,\n};\n\nexport { alpha, number, scale };\n//# sourceMappingURL=index.mjs.map\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n//# sourceMappingURL=float-regex.mjs.map\n","function isNullish(v) {\n    return v == null;\n}\n\nexport { isNullish };\n//# sourceMappingURL=is-nullish.mjs.map\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n//# sourceMappingURL=single-color-regex.mjs.map\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n    return Boolean((typeof v === \"string\" &&\n        singleColorRegex.test(v) &&\n        v.startsWith(type)) ||\n        (testProp &&\n            !isNullish(v) &&\n            Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n    if (typeof v !== \"string\")\n        return v;\n    const [a, b, c, alpha] = v.match(floatRegex);\n    return {\n        [aName]: parseFloat(a),\n        [bName]: parseFloat(b),\n        [cName]: parseFloat(c),\n        alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n    };\n};\n\nexport { isColorString, splitColor };\n//# sourceMappingURL=utils.mjs.map\n","import { clamp } from 'motion-utils';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n    ...number,\n    transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n    test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n    parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n    transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n        rgbUnit.transform(red) +\n        \", \" +\n        rgbUnit.transform(green) +\n        \", \" +\n        rgbUnit.transform(blue) +\n        \", \" +\n        sanitize(alpha.transform(alpha$1)) +\n        \")\",\n};\n\nexport { rgbUnit, rgba };\n//# sourceMappingURL=rgba.mjs.map\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n    let r = \"\";\n    let g = \"\";\n    let b = \"\";\n    let a = \"\";\n    // If we have 6 characters, ie #FF0000\n    if (v.length > 5) {\n        r = v.substring(1, 3);\n        g = v.substring(3, 5);\n        b = v.substring(5, 7);\n        a = v.substring(7, 9);\n        // Or we have 3 characters, ie #F00\n    }\n    else {\n        r = v.substring(1, 2);\n        g = v.substring(2, 3);\n        b = v.substring(3, 4);\n        a = v.substring(4, 5);\n        r += r;\n        g += g;\n        b += b;\n        a += a;\n    }\n    return {\n        red: parseInt(r, 16),\n        green: parseInt(g, 16),\n        blue: parseInt(b, 16),\n        alpha: a ? parseInt(a, 16) / 255 : 1,\n    };\n}\nconst hex = {\n    test: /*@__PURE__*/ isColorString(\"#\"),\n    parse: parseHex,\n    transform: rgba.transform,\n};\n\nexport { hex };\n//# sourceMappingURL=hex.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst createUnitType = (unit) => ({\n    test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n    parse: parseFloat,\n    transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = /*@__PURE__*/ (() => ({\n    ...percent,\n    parse: (v) => percent.parse(v) / 100,\n    transform: (v) => percent.transform(v * 100),\n}))();\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n//# sourceMappingURL=units.mjs.map\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst hsla = {\n    test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n    parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n    transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n        return (\"hsla(\" +\n            Math.round(hue) +\n            \", \" +\n            percent.transform(sanitize(saturation)) +\n            \", \" +\n            percent.transform(sanitize(lightness)) +\n            \", \" +\n            sanitize(alpha.transform(alpha$1)) +\n            \")\");\n    },\n};\n\nexport { hsla };\n//# sourceMappingURL=hsla.mjs.map\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n    test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n    parse: (v) => {\n        if (rgba.test(v)) {\n            return rgba.parse(v);\n        }\n        else if (hsla.test(v)) {\n            return hsla.parse(v);\n        }\n        else {\n            return hex.parse(v);\n        }\n    },\n    transform: (v) => {\n        return typeof v === \"string\"\n            ? v\n            : v.hasOwnProperty(\"red\")\n                ? rgba.transform(v)\n                : hsla.transform(v);\n    },\n    getAnimatableNone: (v) => {\n        const parsed = color.parse(v);\n        parsed.alpha = 0;\n        return color.transform(parsed);\n    },\n};\n\nexport { color };\n//# sourceMappingURL=index.mjs.map\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n//# sourceMappingURL=color-regex.mjs.map\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\n/**\n * Non-global copies of the token regexes so test() can use .test()\n * (no match array, stops at the first token) without lastIndex state.\n */\nconst hasFloat = /*@__PURE__*/ new RegExp(floatRegex.source);\nconst hasColor = /*@__PURE__*/ new RegExp(colorRegex.source, \"i\");\nfunction test(v) {\n    return (isNaN(v) &&\n        typeof v === \"string\" &&\n        (hasFloat.test(v) || hasColor.test(v)));\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\n/**\n * Whether analyseComplexValue(value) would find any values, without\n * tokenising the string. CSS variables are resolved before this is\n * used, so it's enough to look for a number or a color.\n */\nfunction hasComplexValues(value) {\n    const asString = value.toString();\n    return hasFloat.test(asString) || hasColor.test(asString);\n}\nfunction analyseComplexValue(value) {\n    const originalValue = value.toString();\n    const values = [];\n    const indexes = {\n        color: [],\n        number: [],\n        var: [],\n    };\n    const types = [];\n    let i = 0;\n    const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n        if (color.test(parsedValue)) {\n            indexes.color.push(i);\n            types.push(COLOR_TOKEN);\n            values.push(color.parse(parsedValue));\n        }\n        else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n            indexes.var.push(i);\n            types.push(VAR_TOKEN);\n            values.push(parsedValue);\n        }\n        else {\n            indexes.number.push(i);\n            types.push(NUMBER_TOKEN);\n            values.push(parseFloat(parsedValue));\n        }\n        ++i;\n        return SPLIT_TOKEN;\n    });\n    const split = tokenised.split(SPLIT_TOKEN);\n    return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n    return analyseComplexValue(v).values;\n}\nfunction buildTransformer({ split, types }) {\n    const numSections = split.length;\n    return (v) => {\n        let output = \"\";\n        for (let i = 0; i < numSections; i++) {\n            output += split[i];\n            if (v[i] !== undefined) {\n                const type = types[i];\n                if (type === NUMBER_TOKEN) {\n                    output += sanitize(v[i]);\n                }\n                else if (type === COLOR_TOKEN) {\n                    output += color.transform(v[i]);\n                }\n                else {\n                    output += v[i];\n                }\n            }\n        }\n        return output;\n    };\n}\nfunction createTransformer(source) {\n    return buildTransformer(analyseComplexValue(source));\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;\n/**\n * Convert a parsed value to its zero equivalent, but preserve numbers\n * that act as divisors in CSS calc() expressions.\n *\n * analyseComplexValue extracts numbers from CSS strings and puts the\n * surrounding text into a `split` template array. For example:\n *   \"calc(var(--gap) / 5)\"  →  values: [var(--gap), 5]\n *                               split:  [\"calc(\", \" / \", \")\"]\n *\n * When building a zero-equivalent for animation, naively zeroing all\n * numbers turns the divisor into 0 → \"calc(var(--gap) / 0)\" → NaN.\n * We detect this by checking whether the text preceding a number\n * (split[i]) ends with \"/\" — the CSS calc division operator.\n */\nconst convertToZero = (value, splitBefore) => {\n    if (typeof value === \"number\") {\n        return splitBefore?.trim().endsWith(\"/\") ? value : 0;\n    }\n    return convertNumbersToZero(value);\n};\nfunction getAnimatableNone(v) {\n    const info = analyseComplexValue(v);\n    const transformer = buildTransformer(info);\n    return transformer(info.values.map((value, i) => convertToZero(value, info.split[i])));\n}\nconst complex = {\n    test,\n    parse: parseComplexValue,\n    createTransformer,\n    getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex, hasComplexValues };\n//# sourceMappingURL=index.mjs.map\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n    if (t < 0)\n        t += 1;\n    if (t > 1)\n        t -= 1;\n    if (t < 1 / 6)\n        return p + (q - p) * 6 * t;\n    if (t < 1 / 2)\n        return q;\n    if (t < 2 / 3)\n        return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n    hue /= 360;\n    saturation /= 100;\n    lightness /= 100;\n    let red = 0;\n    let green = 0;\n    let blue = 0;\n    if (!saturation) {\n        red = green = blue = lightness;\n    }\n    else {\n        const q = lightness < 0.5\n            ? lightness * (1 + saturation)\n            : lightness + saturation - lightness * saturation;\n        const p = 2 * lightness - q;\n        red = hueToRgb(p, q, hue + 1 / 3);\n        green = hueToRgb(p, q, hue);\n        blue = hueToRgb(p, q, hue - 1 / 3);\n    }\n    return {\n        red: Math.round(red * 255),\n        green: Math.round(green * 255),\n        blue: Math.round(blue * 255),\n        alpha,\n    };\n}\n\nexport { hslaToRgba };\n//# sourceMappingURL=hsla-to-rgba.mjs.map\n","function mixImmediate(a, b) {\n    return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n//# sourceMappingURL=immediate.mjs.map\n","/*\n  Value in range from progress\n\n  Given a lower limit and an upper limit, we return the value within\n  that range as expressed by progress (usually a number from 0 to 1)\n\n  So progress = 0.5 would change\n\n  from -------- to\n\n  to\n\n  from ---- to\n\n  E.g. from = 10, to = 20, progress = 0.5 => 15\n\n  @param [number]: Lower limit of range\n  @param [number]: Upper limit of range\n  @param [number]: The progress between lower and upper limits expressed 0-1\n  @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n    return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n//# sourceMappingURL=number.mjs.map\n","import { warning } from 'motion-utils';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { hslaToRgba } from '../../value/types/color/hsla-to-rgba.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber } from './number.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n    const fromExpo = from * from;\n    const expo = v * (to * to - fromExpo) + fromExpo;\n    return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n    const type = getColorType(color);\n    if (!type) {\n        warning(false, `'${color}' is not an animatable color. Use the equivalent color code instead.`, \"color-not-animatable\");\n        return false;\n    }\n    let model = type.parse(color);\n    if (type === hsla) {\n        // TODO Remove this cast - needed since Motion's stricter typing\n        model = hslaToRgba(model);\n    }\n    return model;\n}\nconst mixColor = (from, to) => {\n    const fromRGBA = asRGBA(from);\n    const toRGBA = asRGBA(to);\n    if (!fromRGBA || !toRGBA) {\n        return mixImmediate(from, to);\n    }\n    const blended = { ...fromRGBA };\n    return (v) => {\n        blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n        blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n        blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n        blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n        return rgba.transform(blended);\n    };\n};\n\nexport { mixColor, mixLinearColor };\n//# sourceMappingURL=color.mjs.map\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n    if (invisibleValues.has(origin)) {\n        return (p) => (p <= 0 ? origin : target);\n    }\n    else {\n        return (p) => (p >= 1 ? target : origin);\n    }\n}\n\nexport { invisibleValues, mixVisibility };\n//# sourceMappingURL=visibility.mjs.map\n","import { pipe, warning } from 'motion-utils';\nimport { isCSSVariableToken } from '../../animation/utils/is-css-variable.mjs';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { mixColor } from './color.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber as mixNumber$1 } from './number.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\n\nfunction mixNumber(a, b) {\n    return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n    if (typeof a === \"number\") {\n        return mixNumber;\n    }\n    else if (typeof a === \"string\") {\n        return isCSSVariableToken(a)\n            ? mixImmediate\n            : color.test(a)\n                ? mixColor\n                : mixComplex;\n    }\n    else if (Array.isArray(a)) {\n        return mixArray;\n    }\n    else if (typeof a === \"object\") {\n        return color.test(a) ? mixColor : mixObject;\n    }\n    return mixImmediate;\n}\nfunction mixArray(a, b) {\n    const output = [...a];\n    const numValues = output.length;\n    const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n    return (p) => {\n        for (let i = 0; i < numValues; i++) {\n            output[i] = blendValue[i](p);\n        }\n        return output;\n    };\n}\nfunction mixObject(a, b) {\n    const output = { ...a, ...b };\n    const blendValue = {};\n    for (const key in output) {\n        if (a[key] !== undefined && b[key] !== undefined) {\n            blendValue[key] = getMixer(a[key])(a[key], b[key]);\n        }\n    }\n    return (v) => {\n        for (const key in blendValue) {\n            output[key] = blendValue[key](v);\n        }\n        return output;\n    };\n}\nfunction matchOrder(origin, target) {\n    const orderedOrigin = [];\n    const pointers = { color: 0, var: 0, number: 0 };\n    for (let i = 0; i < target.values.length; i++) {\n        const type = target.types[i];\n        const originIndex = origin.indexes[type][pointers[type]];\n        const originValue = origin.values[originIndex] ?? 0;\n        orderedOrigin[i] = originValue;\n        pointers[type]++;\n    }\n    return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n    const template = complex.createTransformer(target);\n    const originStats = analyseComplexValue(origin);\n    const targetStats = analyseComplexValue(target);\n    const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n        originStats.indexes.color.length === targetStats.indexes.color.length &&\n        originStats.indexes.number.length >= targetStats.indexes.number.length;\n    if (canInterpolate) {\n        if ((invisibleValues.has(origin) &&\n            !targetStats.values.length) ||\n            (invisibleValues.has(target) &&\n                !originStats.values.length)) {\n            return mixVisibility(origin, target);\n        }\n        return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n    }\n    else {\n        warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`, \"complex-values-different\");\n        return mixImmediate(origin, target);\n    }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n//# sourceMappingURL=complex.mjs.map\n","import { sanitize } from '../../value/types/utils/sanitize.mjs';\nimport { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\n/**\n * A single number with an optional unit, e.g. \"50%\", \"-10px\", \".5em\".\n * Exponents don't match, so they fall through to the complex mixer.\n */\nconst unitValue = /^(-?(?:\\d+(?:\\.\\d*)?|\\.\\d+))([a-z%]*)$/iu;\n/**\n * Most CSS values Motion mixes are a single number with a unit. Mixing\n * these directly produces the same output as the complex mixer\n * (\"25%\", \"0.33333px\") without tokenising both strings.\n */\nfunction mixUnit(from, to) {\n    const a = unitValue.exec(from);\n    if (!a)\n        return;\n    const b = unitValue.exec(to);\n    if (!b || a[2] !== b[2])\n        return;\n    const unit = a[2];\n    const origin = parseFloat(a[1]);\n    const target = parseFloat(b[1]);\n    return (p) => sanitize(mixNumber(origin, target, p)) + unit;\n}\nfunction mix(from, to, p) {\n    if (typeof from === \"number\" &&\n        typeof to === \"number\" &&\n        typeof p === \"number\") {\n        return mixNumber(from, to, p);\n    }\n    if (typeof from === \"string\" && typeof to === \"string\") {\n        const mixer = mixUnit(from, to);\n        if (mixer)\n            return mixer;\n    }\n    const mixer = getMixer(from);\n    return mixer(from, to);\n}\n\nexport { mix };\n//# sourceMappingURL=index.mjs.map\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { frameData, cancelFrame, frame } from '../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n    const passTimestamp = ({ timestamp }) => update(timestamp);\n    return {\n        start: (keepAlive = true) => frame.update(passTimestamp, keepAlive),\n        stop: () => cancelFrame(passTimestamp),\n        /**\n         * If we're processing this frame we can use the\n         * framelocked timestamp to keep things in sync.\n         */\n        now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n    };\n};\n\nexport { frameloopDriver };\n//# sourceMappingURL=frame.mjs.map\n","const generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n    let points = \"\";\n    const numPoints = Math.max(Math.round(duration / resolution), 2);\n    for (let i = 0; i < numPoints; i++) {\n        points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + \", \";\n    }\n    return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n//# sourceMappingURL=linear.mjs.map\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator, timeStep = 50, maxDuration = maxGeneratorDuration, keyframes) {\n    let duration = 0;\n    let state = generator.next(duration);\n    keyframes?.push(state.value);\n    while (!state.done && duration < maxDuration) {\n        duration += timeStep;\n        state = generator.next(duration);\n        keyframes?.push(state.value);\n    }\n    return duration >= maxDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n//# sourceMappingURL=calc-duration.mjs.map\n","import { millisecondsToSeconds } from 'motion-utils';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './calc-duration.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100, createGenerator) {\n    const generator = createGenerator({ ...options, keyframes: [0, scale] });\n    const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n    return {\n        type: \"keyframes\",\n        ease: (progress) => {\n            return generator.next(duration * progress).value / scale;\n        },\n        duration: millisecondsToSeconds(duration),\n    };\n}\n\nexport { createGeneratorEasing };\n//# sourceMappingURL=create-generator-easing.mjs.map\n","import { millisecondsToSeconds, clamp, secondsToMilliseconds, warning } from 'motion-utils';\nimport { generateLinearEasing } from '../waapi/utils/linear.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './utils/calc-duration.mjs';\nimport { createGeneratorEasing } from './utils/create-generator-easing.mjs';\n\nconst springDefaults = {\n    // Default spring physics\n    stiffness: 100,\n    damping: 10,\n    mass: 1.0,\n    velocity: 0.0,\n    // Default duration/bounce-based options\n    duration: 800, // in ms\n    bounce: 0.3,\n    visualDuration: 0.3, // in seconds\n    // Rest thresholds\n    restSpeed: {\n        granular: 0.01,\n        default: 2,\n    },\n    restDelta: {\n        granular: 0.005,\n        default: 0.5,\n    },\n    // Limits\n    minDuration: 0.01, // in seconds\n    maxDuration: 10.0, // in seconds\n    minDamping: 0.05,\n    maxDamping: 1,\n};\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n    return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n    let result = initialGuess;\n    for (let i = 1; i < rootIterations; i++) {\n        result = result - envelope(result) / derivative(result);\n    }\n    return result;\n}\n/**\n * This is ported from the Framer implementation of duration-based spring resolution.\n */\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\", \"spring-duration-limit\");\n    let dampingRatio = 1 - bounce;\n    /**\n     * Restrict dampingRatio and duration to within acceptable ranges.\n     */\n    dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n    duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n    if (dampingRatio < 1) {\n        /**\n         * Underdamped spring\n         */\n        envelope = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const a = exponentialDecay - velocity;\n            const b = calcAngularFreq(undampedFreq, dampingRatio);\n            const c = Math.exp(-delta);\n            return safeMin - (a / b) * c;\n        };\n        derivative = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const d = delta * velocity + velocity;\n            const e = dampingRatio *\n                dampingRatio *\n                undampedFreq *\n                undampedFreq *\n                duration;\n            const f = Math.exp(-delta);\n            const g = calcAngularFreq(undampedFreq * undampedFreq, dampingRatio);\n            const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n            return (factor * ((d - e) * f)) / g;\n        };\n    }\n    else {\n        /**\n         * Critically-damped spring\n         */\n        envelope = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (undampedFreq - velocity) * duration + 1;\n            return -safeMin + a * b;\n        };\n        derivative = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (velocity - undampedFreq) * (duration * duration);\n            return a * b;\n        };\n    }\n    const initialGuess = 5 / duration;\n    const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n    duration = secondsToMilliseconds(duration);\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: springDefaults.stiffness,\n            damping: springDefaults.damping,\n            duration,\n        };\n    }\n    else {\n        const stiffness = undampedFreq * undampedFreq * mass;\n        return {\n            stiffness,\n            damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n            duration,\n        };\n    }\n}\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n    return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n    let springOptions = {\n        velocity: springDefaults.velocity,\n        stiffness: springDefaults.stiffness,\n        damping: springDefaults.damping,\n        mass: springDefaults.mass,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        // Time-defined springs should ignore inherited velocity.\n        // Velocity from interrupted animations can cause findSpring()\n        // to compute wildly different spring parameters, leading to\n        // massive oscillation on small-range animations.\n        springOptions.velocity = 0;\n        if (options.visualDuration) {\n            const visualDuration = options.visualDuration;\n            const root = (2 * Math.PI) / (visualDuration * 1.2);\n            const stiffness = root * root;\n            const damping = 2 *\n                clamp(0.05, 1, 1 - (options.bounce || 0)) *\n                Math.sqrt(stiffness);\n            springOptions = {\n                ...springOptions,\n                mass: springDefaults.mass,\n                stiffness,\n                damping,\n            };\n        }\n        else {\n            const derived = findSpring({ ...options, velocity: 0 });\n            springOptions = {\n                ...springOptions,\n                ...derived,\n                mass: springDefaults.mass,\n            };\n            springOptions.isResolvedFromDuration = true;\n        }\n    }\n    return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n    const options = typeof optionsOrVisualDuration !== \"object\"\n        ? {\n            visualDuration: optionsOrVisualDuration,\n            keyframes: [0, 1],\n            bounce,\n        }\n        : optionsOrVisualDuration;\n    const origin = options.keyframes[0];\n    const target = options.keyframes[options.keyframes.length - 1];\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = { done: false, value: origin };\n    const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n        ...options,\n        velocity: -millisecondsToSeconds(options.velocity || 0),\n    });\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n    const decay = dampingRatio * undampedAngularFreq;\n    /**\n     * Everything that changes when the spring is retargeted: written by\n     * retarget() and update(), read by the resolvers. Grouped on one object,\n     * like the coefficients (c) below. Writing doubles to object fields\n     * measured marginally faster than to captured let variables in optimised\n     * code; neither allocates, so this is a grouping choice, not a GC one.\n     */\n    const s = {\n        target,\n        delta: target - origin,\n        velocity: velocity || 0.0,\n        restSpeed: 0,\n        restDelta: 0,\n    };\n    /**\n     * If we're working on a granular scale, use smaller defaults for determining\n     * when the spring is finished.\n     *\n     * These defaults have been selected emprically based on what strikes a good\n     * ratio between feeling good and finishing as soon as changes are imperceptible.\n     */\n    const setRestThresholds = () => {\n        const isGranularScale = Math.abs(s.delta) < 5;\n        s.restSpeed =\n            options.restSpeed ||\n                (isGranularScale\n                    ? springDefaults.restSpeed.granular\n                    : springDefaults.restSpeed.default);\n        s.restDelta =\n            options.restDelta ||\n                (isGranularScale\n                    ? springDefaults.restDelta.granular\n                    : springDefaults.restDelta.default);\n    };\n    setRestThresholds();\n    let resolveSpring;\n    let resolveVelocity;\n    /**\n     * Derives the coefficients that depend on origin, target and initial\n     * velocity. Called once now and again whenever the spring is retargeted.\n     */\n    let update;\n    if (dampingRatio < 1) {\n        const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n        /**\n         * A is the position coefficient, sinC/cosC the coefficients of the\n         * analytical derivative (px/ms). The exp/sin/cos terms depend only\n         * on t, so they're memoized by t independently of the target: a\n         * spring retargeted every frame samples the same t each frame and\n         * skips the transcendentals entirely.\n         */\n        const c = { A: 0, sinC: 0, cosC: 0, t: -1, env: 0, sin: 0, cos: 0 };\n        update = () => {\n            c.A = (s.velocity + decay * s.delta) / angularFreq;\n            c.sinC = decay * c.A + s.delta * angularFreq;\n            c.cosC = decay * s.delta - c.A * angularFreq;\n        };\n        const sample = (t) => {\n            if (t !== c.t) {\n                c.t = t;\n                c.env = Math.exp(-decay * t);\n                c.sin = Math.sin(angularFreq * t);\n                c.cos = Math.cos(angularFreq * t);\n            }\n        };\n        // Underdamped spring\n        resolveSpring = (t) => {\n            sample(t);\n            return s.target - c.env * (c.A * c.sin + s.delta * c.cos);\n        };\n        resolveVelocity = (t) => {\n            sample(t);\n            return c.env * (c.sinC * c.sin + c.cosC * c.cos);\n        };\n    }\n    else if (dampingRatio === 1) {\n        // Critically damped spring\n        resolveSpring = (t) => s.target -\n            Math.exp(-undampedAngularFreq * t) *\n                (s.delta + (s.velocity + undampedAngularFreq * s.delta) * t);\n        // Analytical derivative of critically damped spring (px/ms)\n        const c = { C: 0 };\n        update = () => {\n            c.C = s.velocity + undampedAngularFreq * s.delta;\n        };\n        resolveVelocity = (t) => Math.exp(-undampedAngularFreq * t) *\n            (undampedAngularFreq * c.C * t - s.velocity);\n    }\n    else {\n        // Overdamped spring\n        const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-decay * t);\n            // When performing sinh or cosh values can hit Infinity so we cap them here\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (s.target -\n                (envelope *\n                    ((s.velocity + decay * s.delta) * Math.sinh(freqForT) +\n                        dampedAngularFreq * s.delta * Math.cosh(freqForT))) /\n                    dampedAngularFreq);\n        };\n        // Analytical derivative of overdamped spring (px/ms)\n        const c = { P: 0, sinh: 0, cosh: 0 };\n        update = () => {\n            c.P = (s.velocity + decay * s.delta) / dampedAngularFreq;\n            c.sinh = decay * c.P - s.delta * dampedAngularFreq;\n            c.cosh = decay * s.delta - c.P * dampedAngularFreq;\n        };\n        resolveVelocity = (t) => {\n            const envelope = Math.exp(-decay * t);\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (envelope *\n                (c.sinh * Math.sinh(freqForT) + c.cosh * Math.cosh(freqForT)));\n        };\n    }\n    update();\n    /**\n     * Time-defined springs ignore inherited velocity, see getSpringOptions.\n     */\n    const ignoreVelocity = !isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys);\n    const calculatedDuration = isResolvedFromDuration ? duration || null : null;\n    const generator = {\n        calculatedDuration,\n        /**\n         * Aim the spring at a new target from its current position and\n         * velocity, reusing the resolved physics and closures.\n         */\n        retarget: (keyframes, newVelocity) => {\n            s.target = keyframes[keyframes.length - 1];\n            s.delta = s.target - keyframes[0];\n            s.velocity = ignoreVelocity\n                ? 0\n                : -millisecondsToSeconds(newVelocity);\n            // Default thresholds depend on the scale of the new delta\n            if (!(options.restSpeed && options.restDelta))\n                setRestThresholds();\n            // Invalidate any duration lazily cached by JSAnimation\n            generator.calculatedDuration = calculatedDuration;\n            state.done = false;\n            update();\n        },\n        velocity: (t) => secondsToMilliseconds(resolveVelocity(t)),\n        next: (t) => {\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                const currentVelocity = secondsToMilliseconds(resolveVelocity(t));\n                state.done =\n                    Math.abs(currentVelocity) <= s.restSpeed &&\n                        Math.abs(s.target - current) <= s.restDelta;\n            }\n            else {\n                state.done = t >= duration;\n            }\n            state.value = state.done ? s.target : current;\n            return state;\n        },\n        toString: () => {\n            const easingDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n            const easing = generateLinearEasing((progress) => generator.next(easingDuration * progress).value, easingDuration, 30);\n            return easingDuration + \"ms \" + easing;\n        },\n        toTransition: () => { },\n    };\n    return generator;\n}\nspring.applyToOptions = (options) => {\n    const generatorOptions = createGeneratorEasing(options, 100, spring);\n    options.ease = generatorOptions.ease;\n    options.duration = secondsToMilliseconds(generatorOptions.duration);\n    options.type = \"keyframes\";\n    return options;\n};\n\nexport { spring };\n//# sourceMappingURL=spring.mjs.map\n","import { spring } from './spring.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n    const origin = keyframes[0];\n    const state = {\n        done: false,\n        value: origin,\n    };\n    const isOutOfBounds = (v) => v < min || v > max;\n    const nearestBoundary = (v) => {\n        if (min === undefined)\n            return max;\n        if (max === undefined)\n            return min;\n        return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n    };\n    let amplitude = power * velocity;\n    const ideal = origin + amplitude;\n    const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n    /**\n     * If the target has changed we need to re-calculate the amplitude, otherwise\n     * the animation will start from the wrong position.\n     */\n    if (target !== ideal)\n        amplitude = target - origin;\n    const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n    const applyFriction = (t) => {\n        const delta = calcDelta(t);\n        state.done = Math.abs(delta) <= restDelta;\n        state.value = state.done ? target : target + delta;\n    };\n    /**\n     * Ideally this would resolve for t in a stateless way, we could\n     * do that by always precalculating the animation but as we know\n     * this will be done anyway we can assume that spring will\n     * be discovered during that.\n     */\n    let timeReachedBoundary;\n    let spring$1;\n    const checkCatchBoundary = (t) => {\n        if (!isOutOfBounds(state.value))\n            return;\n        timeReachedBoundary = t;\n        spring$1 = spring({\n            keyframes: [state.value, nearestBoundary(state.value)],\n            /**\n             * The friction curve is target + calcDelta(t), so its exact\n             * derivative is -calcDelta(t) / timeConstant in units/ms,\n             * converted here to the units/second expected by spring.\n             */\n            velocity: (-calcDelta(t) / timeConstant) * 1000,\n            damping: bounceDamping,\n            stiffness: bounceStiffness,\n            restDelta,\n            restSpeed,\n        });\n    };\n    checkCatchBoundary(0);\n    return {\n        calculatedDuration: null,\n        next: (t) => {\n            /**\n             * We need to resolve the friction to figure out if we need a\n             * spring but we don't want to do this twice per frame. So here\n             * we flag if we updated for this frame and later if we did\n             * we can skip doing it again.\n             */\n            let hasUpdatedFrame = false;\n            if (!spring$1 && timeReachedBoundary === undefined) {\n                hasUpdatedFrame = true;\n                applyFriction(t);\n                checkCatchBoundary(t);\n            }\n            /**\n             * If we have a spring and the provided t is beyond the moment the friction\n             * animation crossed the min/max boundary, use the spring.\n             */\n            if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n                return spring$1.next(t - timeReachedBoundary);\n            }\n            else {\n                !hasUpdatedFrame && applyFriction(t);\n                return state;\n            }\n        },\n    };\n}\n\nexport { inertia };\n//# sourceMappingURL=inertia.mjs.map\n","import { invariant, clamp, MotionGlobalConfig, noop, pipe, progress } from 'motion-utils';\nimport { mix } from './mix/index.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n    const mixers = [];\n    const mixerFactory = customMixer || MotionGlobalConfig.mix || mix;\n    const numMixers = output.length - 1;\n    for (let i = 0; i < numMixers; i++) {\n        let mixer = mixerFactory(output[i], output[i + 1]);\n        if (ease) {\n            const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n            mixer = pipe(easingFunction, mixer);\n        }\n        mixers.push(mixer);\n    }\n    return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n *   - Numbers\n *   - Colors (hex, hsl, hsla, rgb, rgba)\n *   - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revisit this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n    const inputLength = input.length;\n    invariant(inputLength === output.length, \"Both input and output ranges must be the same length\", \"range-length\");\n    /**\n     * If we're only provided a single input, we can just make a function\n     * that returns the output.\n     */\n    if (inputLength === 1)\n        return () => output[0];\n    if (inputLength === 2 && output[0] === output[1])\n        return () => output[1];\n    const isZeroDeltaRange = input[0] === input[1];\n    // If input runs highest -> lowest, reverse both arrays\n    if (input[0] > input[inputLength - 1]) {\n        input = [...input].reverse();\n        output = [...output].reverse();\n    }\n    const mixers = createMixers(output, ease, mixer);\n    const numMixers = mixers.length;\n    const interpolator = (v) => {\n        if (isZeroDeltaRange && v < input[0])\n            return output[0];\n        let i = 0;\n        if (numMixers > 1) {\n            for (; i < input.length - 2; i++) {\n                if (v < input[i + 1])\n                    break;\n            }\n        }\n        const progressInRange = progress(input[i], input[i + 1], v);\n        return mixers[i](progressInRange);\n    };\n    return isClamp\n        ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n        : interpolator;\n}\n\nexport { interpolate };\n//# sourceMappingURL=interpolate.mjs.map\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n    const min = offset[offset.length - 1];\n    for (let i = 1; i <= remaining; i++) {\n        const offsetProgress = progress(0, remaining, i);\n        offset.push(mixNumber(min, 1, offsetProgress));\n    }\n}\n\nexport { fillOffset };\n//# sourceMappingURL=fill.mjs.map\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n    const offset = [0];\n    fillOffset(offset, arr.length - 1);\n    return offset;\n}\n\nexport { defaultOffset };\n//# sourceMappingURL=default.mjs.map\n","function convertOffsetToTimes(offset, duration) {\n    return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n//# sourceMappingURL=time.mjs.map\n","import { easeInOut, isEasingArray, easingDefinitionToFunction, MotionGlobalConfig, clamp } from 'motion-utils';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { mix } from '../../utils/mix/index.mjs';\nimport { defaultOffset } from '../keyframes/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../keyframes/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n    return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n    /**\n     * Easing functions can be externally defined as strings. Here we convert them\n     * into actual functions.\n     */\n    const easingFunctions = isEasingArray(ease)\n        ? ease.map(easingDefinitionToFunction)\n        : easingDefinitionToFunction(ease);\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = {\n        done: false,\n        value: keyframeValues[0],\n    };\n    /**\n     * Fast setup path for two keyframes one easing.\n     */\n    if (keyframeValues.length === 2 &&\n        !Array.isArray(easingFunctions) &&\n        (!times ||\n            times.length !== 2 ||\n            (times[0] === 0 && times[1] === 1))) {\n        const [origin, target] = keyframeValues;\n        const mixer = origin === target\n            ? undefined\n            : (MotionGlobalConfig.mix || mix)(origin, target);\n        return {\n            calculatedDuration: duration,\n            next: (t) => {\n                state.value = mixer\n                    ? mixer(easingFunctions(duration > 0 ? clamp(0, 1, t / duration) : 1))\n                    : target;\n                state.done = t >= duration;\n                return state;\n            },\n        };\n    }\n    /**\n     * Create a times array based on the provided 0-1 offsets\n     */\n    const absoluteTimes = convertOffsetToTimes(\n    // Only use the provided offsets if they're the correct length\n    // TODO Maybe we should warn here if there's a length mismatch\n    times && times.length === keyframeValues.length\n        ? times\n        : defaultOffset(keyframeValues), duration);\n    const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n        ease: Array.isArray(easingFunctions)\n            ? easingFunctions\n            : defaultEasing(keyframeValues, easingFunctions),\n    });\n    return {\n        calculatedDuration: duration,\n        next: (t) => {\n            state.value = mapTimeToKeyframe(t);\n            state.done = t >= duration;\n            return state;\n        },\n    };\n}\n\nexport { defaultEasing, keyframes };\n//# sourceMappingURL=keyframes.mjs.map\n","import { velocityPerSecond } from 'motion-utils';\n\nconst velocitySampleDuration = 5; // ms\nfunction getGeneratorVelocity(resolveValue, t, current) {\n    const prevT = Math.max(t - velocitySampleDuration, 0);\n    return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n/**\n * A generator's velocity at time t in units/second: analytical where the\n * generator provides it (springs), otherwise by finite difference. Before\n * the animation has started this is its initial velocity.\n */\nfunction calcGeneratorVelocity(generator, t, initialVelocity = 0) {\n    if (t <= 0)\n        return initialVelocity;\n    return generator.velocity\n        ? generator.velocity(t)\n        : getGeneratorVelocity((s) => generator.next(s).value, t, generator.next(t).value);\n}\n\nexport { calcGeneratorVelocity, getGeneratorVelocity };\n//# sourceMappingURL=velocity.mjs.map\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe, speed = 1) {\n    const resolvedKeyframes = keyframes.filter(isNotNull);\n    const useFirstKeyframe = speed < 0 || (repeat && repeatType !== \"loop\" && repeat % 2 === 1);\n    const index = useFirstKeyframe ? 0 : resolvedKeyframes.length - 1;\n    return !index || finalKeyframe === undefined\n        ? resolvedKeyframes[index]\n        : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n//# sourceMappingURL=get-final.mjs.map\n","import { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring.mjs';\n\nconst transitionTypeMap = {\n    decay: inertia,\n    inertia,\n    tween: keyframes,\n    keyframes: keyframes,\n    spring,\n};\nfunction replaceTransitionType(transition) {\n    if (typeof transition.type === \"string\") {\n        transition.type = transitionTypeMap[transition.type];\n    }\n}\n\nexport { replaceTransitionType };\n//# sourceMappingURL=replace-transition-type.mjs.map\n","import { frameData } from '../../frameloop/frame.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\n\nfunction baseRecord(kind, animation) {\n    return {\n        kind,\n        animation,\n        timestamp: time.now(),\n        frameTimestamp: frameData.timestamp,\n        frameIsProcessing: frameData.isProcessing,\n    };\n}\n/**\n * Notify an optional inspector without adding a public Motion API.\n *\n * The record is a raw firehose: the live animation handle, the concrete\n * animation's internal options object untouched (timing fields in\n * internal milliseconds, name/keyframes/element/motionValue still\n * attached), a timestamp and the raw frameloop state at notify time.\n * All interpretation belongs to the consumer behind\n * globalThis.__MOTION_INSPECT__.\n */\nfunction notifyAnimationStart(animation, options, transition) {\n    const notify = globalThis.__MOTION_INSPECT__;\n    if (!notify)\n        return;\n    try {\n        notify({\n            ...baseRecord(\"animation-start\", animation),\n            options: transition ? { ...options, ...transition } : options,\n        });\n    }\n    catch { }\n}\n/**\n * Layout animations drive a projection node's progress rather than a\n * property, so the record forwards the live node itself: it carries the\n * DOM instance, the layout options (layoutId) and the progress handle.\n * Fired inside the frame.update that starts the animation, so nodes\n * animating in the same layout commit share frameTimestamp.\n */\nfunction notifyLayoutAnimationStart(animation, node) {\n    const notify = globalThis.__MOTION_INSPECT__;\n    if (!notify)\n        return;\n    try {\n        notify({\n            ...baseRecord(\"layout-animation-start\", animation),\n            node,\n        });\n    }\n    catch { }\n}\n\nexport { notifyAnimationStart, notifyLayoutAnimationStart };\n//# sourceMappingURL=notify-inspector.mjs.map\n","class WithPromise {\n    constructor() {\n        this.isResolved = false;\n    }\n    get finished() {\n        if (!this._finished) {\n            this._finished = this.isResolved\n                ? Promise.resolve()\n                : new Promise((resolve) => {\n                    this._resolve = resolve;\n                });\n        }\n        return this._finished;\n    }\n    updateFinished() {\n        this._finished = this._resolve = undefined;\n        this.isResolved = false;\n    }\n    notifyFinished() {\n        this.isResolved = true;\n        this._resolve?.();\n    }\n    /**\n     * Allows the animation to be awaited.\n     *\n     * @deprecated Use `finished` instead.\n     */\n    then(onResolve, onReject) {\n        return this.finished.then(onResolve, onReject);\n    }\n}\n\nexport { WithPromise };\n//# sourceMappingURL=WithPromise.mjs.map\n","import { invariant, pipe, clamp, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { mix } from '../utils/mix/index.mjs';\nimport { frameloopDriver } from './drivers/frame.mjs';\nimport { inertia } from './generators/inertia.mjs';\nimport { keyframes } from './generators/keyframes.mjs';\nimport { calcGeneratorDuration } from './generators/utils/calc-duration.mjs';\nimport { calcGeneratorVelocity } from './generators/utils/velocity.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { notifyAnimationStart } from './utils/notify-inspector.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\n\nconst percentToProgress = (percent) => percent / 100;\nclass JSAnimation extends WithPromise {\n    constructor(options) {\n        super();\n        this.state = \"idle\";\n        this.startTime = null;\n        this.isStopped = false;\n        /**\n         * The current time of the animation.\n         */\n        this.currentTime = 0;\n        /**\n         * The time at which the animation was paused.\n         */\n        this.holdTime = null;\n        /**\n         * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n         */\n        this.playbackSpeed = 1;\n        /**\n         * Reusable state object for the delay phase to avoid\n         * allocating a new object every frame.\n         */\n        this.delayState = {\n            done: false,\n            value: undefined,\n        };\n        /**\n         * This method is bound to the instance to fix a pattern where\n         * animation.stop is returned as a reference from a useEffect.\n         */\n        this.stop = () => {\n            const { motionValue } = this.options;\n            if (motionValue && motionValue.updatedAt !== time.now()) {\n                this.tick(time.now());\n            }\n            this.isStopped = true;\n            if (this.state === \"idle\")\n                return;\n            this.teardown();\n            this.options.onStop?.();\n        };\n        this.options = options;\n        this.initAnimation();\n        this.play();\n        if (options.autoplay === false)\n            this.pause();\n        notifyAnimationStart(this, this.options);\n    }\n    initAnimation() {\n        const { options } = this;\n        replaceTransitionType(options);\n        const { type = keyframes, repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = options;\n        let { keyframes: keyframes$1 } = options;\n        const generatorFactory = type || keyframes;\n        if (process.env.NODE_ENV !== \"production\" &&\n            generatorFactory !== keyframes) {\n            invariant(keyframes$1.length <= 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`, \"spring-two-frames\");\n        }\n        if (generatorFactory !== keyframes &&\n            typeof keyframes$1[0] !== \"number\") {\n            this.mixKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n            keyframes$1 = [0, 100];\n        }\n        const generator = generatorFactory(keyframes$1 === options.keyframes\n            ? options\n            : { ...options, keyframes: keyframes$1 });\n        /**\n         * If we have a mirror repeat type we need to create a second generator that outputs the\n         * mirrored (not reversed) animation and later ping pong between the two generators.\n         */\n        if (repeatType === \"mirror\") {\n            this.mirroredGenerator = generatorFactory({\n                ...options,\n                keyframes: [...keyframes$1].reverse(),\n                velocity: -velocity,\n            });\n        }\n        /**\n         * If duration is undefined and we have repeat options,\n         * we need to calculate a duration from the generator.\n         *\n         * We set it to the generator itself to cache the duration.\n         * Any timeline resolver will need to have already precalculated\n         * the duration by this step.\n         */\n        if (generator.calculatedDuration === null) {\n            generator.calculatedDuration = calcGeneratorDuration(generator);\n        }\n        const { calculatedDuration } = generator;\n        this.calculatedDuration = calculatedDuration;\n        this.resolvedDuration = calculatedDuration + repeatDelay;\n        this.totalDuration = this.resolvedDuration * (repeat + 1) - repeatDelay;\n        this.generator = generator;\n    }\n    updateTime(timestamp) {\n        const animationTime = Math.round(timestamp - this.startTime) * this.playbackSpeed;\n        // Update currentTime\n        if (this.holdTime !== null) {\n            this.currentTime = this.holdTime;\n        }\n        else {\n            // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n            // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n            // example.\n            this.currentTime = animationTime;\n        }\n    }\n    tick(timestamp, sample = false) {\n        const { generator, totalDuration, mixKeyframes, mirroredGenerator, resolvedDuration, calculatedDuration, } = this;\n        if (this.startTime === null)\n            return generator.next(0);\n        const { delay = 0, keyframes, repeat, repeatType, repeatDelay, type, onUpdate, finalKeyframe, } = this.options;\n        /**\n         * requestAnimationFrame timestamps can come through as lower than\n         * the startTime as set by performance.now(). Here we prevent this,\n         * though in the future it could be possible to make setting startTime\n         * a pending operation that gets resolved here.\n         */\n        if (this.speed > 0) {\n            this.startTime = Math.min(this.startTime, timestamp);\n        }\n        else if (this.speed < 0) {\n            this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n        }\n        if (sample) {\n            this.currentTime = timestamp;\n        }\n        else {\n            this.updateTime(timestamp);\n        }\n        // Rebase on delay\n        const timeWithoutDelay = this.currentTime - delay * (this.playbackSpeed >= 0 ? 1 : -1);\n        const isInDelayPhase = this.playbackSpeed >= 0\n            ? timeWithoutDelay < 0\n            : timeWithoutDelay > totalDuration;\n        this.currentTime = Math.max(timeWithoutDelay, 0);\n        // If this animation has finished, set the current time  to the total duration.\n        if (this.state === \"finished\" && this.holdTime === null) {\n            this.currentTime = totalDuration;\n        }\n        let elapsed = this.currentTime;\n        let frameGenerator = generator;\n        if (repeat) {\n            /**\n             * Get the current progress (0-1) of the animation. If t is >\n             * than duration we'll get values like 2.5 (midway through the\n             * third iteration)\n             */\n            const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n            /**\n             * Get the current iteration (0 indexed). For instance the floor of\n             * 2.5 is 2.\n             */\n            let currentIteration = Math.floor(progress);\n            /**\n             * Get the current progress of the iteration by taking the remainder\n             * so 2.5 is 0.5 through iteration 2\n             */\n            let iterationProgress = progress % 1.0;\n            /**\n             * If iteration progress is 1 we count that as the end\n             * of the previous iteration.\n             */\n            if (!iterationProgress && progress >= 1) {\n                iterationProgress = 1;\n            }\n            iterationProgress === 1 && currentIteration--;\n            currentIteration = Math.min(currentIteration, repeat + 1);\n            /**\n             * Reverse progress if we're not running in \"normal\" direction\n             */\n            const isOddIteration = Boolean(currentIteration % 2);\n            if (isOddIteration) {\n                if (repeatType === \"reverse\") {\n                    iterationProgress = 1 - iterationProgress;\n                    if (repeatDelay) {\n                        iterationProgress -= repeatDelay / resolvedDuration;\n                    }\n                }\n                else if (repeatType === \"mirror\") {\n                    frameGenerator = mirroredGenerator;\n                }\n            }\n            elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n        }\n        /**\n         * If we're in negative time, set state as the initial keyframe.\n         * This prevents delay: x, duration: 0 animations from finishing\n         * instantly.\n         */\n        let state;\n        if (isInDelayPhase) {\n            this.delayState.value = keyframes[0];\n            state = this.delayState;\n        }\n        else {\n            state = frameGenerator.next(elapsed);\n        }\n        if (mixKeyframes && !isInDelayPhase) {\n            state.value = mixKeyframes(state.value);\n        }\n        let { done } = state;\n        if (!isInDelayPhase && calculatedDuration !== null) {\n            done =\n                this.playbackSpeed >= 0\n                    ? this.currentTime >= totalDuration\n                    : this.currentTime <= 0;\n        }\n        const isAnimationFinished = this.holdTime === null &&\n            (this.state === \"finished\" || (this.state === \"running\" && done));\n        // TODO: The exception for inertia could be cleaner here\n        if (isAnimationFinished && type !== inertia) {\n            state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n        }\n        if (onUpdate) {\n            onUpdate(state.value);\n        }\n        if (isAnimationFinished) {\n            this.finish();\n        }\n        return state;\n    }\n    /**\n     * Allows the returned animation to be awaited or promise-chained. Currently\n     * resolves when the animation finishes at all but in a future update could/should\n     * reject if its cancels.\n     */\n    then(resolve, reject) {\n        return this.finished.then(resolve, reject);\n    }\n    get duration() {\n        return millisecondsToSeconds(this.calculatedDuration);\n    }\n    get iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\n    }\n    get time() {\n        return millisecondsToSeconds(this.currentTime);\n    }\n    set time(newTime) {\n        newTime = secondsToMilliseconds(newTime);\n        this.currentTime = newTime;\n        if (this.startTime === null ||\n            this.holdTime !== null ||\n            this.playbackSpeed === 0) {\n            this.holdTime = newTime;\n        }\n        else if (this.driver) {\n            this.startTime = this.driver.now() - newTime / this.playbackSpeed;\n        }\n        if (this.driver) {\n            this.driver.start(false);\n        }\n        else {\n            this.startTime = 0;\n            this.state = \"paused\";\n            this.holdTime = newTime;\n            this.tick(newTime);\n        }\n    }\n    /**\n     * Returns the generator's velocity at the current time in units/second.\n     * Uses the analytical derivative when available (springs), avoiding\n     * the MotionValue's frame-dependent velocity estimation.\n     */\n    getGeneratorVelocity() {\n        return calcGeneratorVelocity(this.generator, this.currentTime, this.options.velocity);\n    }\n    get speed() {\n        return this.playbackSpeed;\n    }\n    set speed(newSpeed) {\n        const hasChanged = this.playbackSpeed !== newSpeed;\n        if (hasChanged && this.driver) {\n            this.updateTime(time.now());\n        }\n        this.playbackSpeed = newSpeed;\n        if (hasChanged && this.driver) {\n            this.time = millisecondsToSeconds(this.currentTime);\n        }\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        const { driver = frameloopDriver, startTime } = this.options;\n        if (!this.driver) {\n            this.driver = driver((timestamp) => this.tick(timestamp));\n        }\n        this.options.onPlay?.();\n        const now = this.driver.now();\n        if (this.state === \"finished\") {\n            this.updateFinished();\n            this.startTime = now;\n        }\n        else if (this.holdTime !== null) {\n            this.startTime = now - this.holdTime;\n        }\n        else if (!this.startTime) {\n            this.startTime = startTime ?? now;\n        }\n        if (this.state === \"finished\" && this.speed < 0) {\n            this.startTime += this.calculatedDuration;\n        }\n        this.holdTime = null;\n        /**\n         * Set playState to running only after we've used it in\n         * the previous logic.\n         */\n        this.state = \"running\";\n        this.driver.start();\n    }\n    pause() {\n        this.state = \"paused\";\n        this.updateTime(time.now());\n        this.holdTime = this.currentTime;\n    }\n    complete() {\n        if (this.state !== \"running\") {\n            this.play();\n        }\n        this.state = \"finished\";\n        this.holdTime = null;\n    }\n    finish() {\n        this.notifyFinished();\n        this.teardown();\n        this.state = \"finished\";\n        this.options.onComplete?.();\n    }\n    cancel() {\n        this.holdTime = null;\n        this.startTime = 0;\n        this.tick(0);\n        this.teardown();\n        this.options.onCancel?.();\n    }\n    teardown() {\n        this.state = \"idle\";\n        this.stopDriver();\n        this.startTime = this.holdTime = null;\n    }\n    stopDriver() {\n        if (!this.driver)\n            return;\n        this.driver.stop();\n        this.driver = undefined;\n    }\n    sample(sampleTime) {\n        this.startTime = 0;\n        return this.tick(sampleTime, true);\n    }\n    attachTimeline(timeline) {\n        if (this.options.allowFlatten) {\n            this.options.type = \"keyframes\";\n            this.options.ease = \"linear\";\n            this.initAnimation();\n        }\n        this.driver?.stop();\n        return timeline.observe(this);\n    }\n}\n// Legacy function support\nfunction animateValue(options) {\n    return new JSAnimation(options);\n}\n\nexport { JSAnimation, animateValue };\n//# sourceMappingURL=JSAnimation.mjs.map\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n    const [name, value] = v.slice(0, -1).split(\"(\");\n    if (name === \"drop-shadow\")\n        return v;\n    const [number] = value.match(floatRegex) || [];\n    if (!number)\n        return v;\n    const unit = value.replace(number, \"\");\n    let defaultValue = maxDefaults.has(name) ? 1 : 0;\n    if (number !== value)\n        defaultValue *= 100;\n    return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const functions = v.match(functionRegex);\n        return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n    },\n};\n\nexport { filter };\n//# sourceMappingURL=filter.mjs.map\n","import { complex } from './index.mjs';\n\nconst mask = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const parsed = complex.parse(v);\n        const transformer = complex.createTransformer(v);\n        return transformer(parsed.map((v) => typeof v === \"number\" ? 0 : typeof v === \"object\" ? { ...v, alpha: 1 } : v));\n    },\n};\n\nexport { mask };\n//# sourceMappingURL=mask.mjs.map\n","import { number } from './numbers/index.mjs';\n\nconst int = {\n    ...number,\n    transform: Math.round,\n};\n\nexport { int };\n//# sourceMappingURL=int.mjs.map\n","import { alpha, scale } from '../numbers/index.mjs';\nimport { px, progressPercentage, degrees } from '../numbers/units.mjs';\n\nconst transformValueTypes = {\n    rotate: degrees,\n    /**\n     * Internal channel for `transition.path` orientToPath. Composed onto\n     * `rotate` at the transform-build sites so the user's `rotate` is\n     * never read or overwritten. Not part of `transformPropOrder`.\n     */\n    pathRotation: degrees,\n    rotateX: degrees,\n    rotateY: degrees,\n    rotateZ: degrees,\n    scale,\n    scaleX: scale,\n    scaleY: scale,\n    scaleZ: scale,\n    skew: degrees,\n    skewX: degrees,\n    skewY: degrees,\n    distance: px,\n    translateX: px,\n    translateY: px,\n    translateZ: px,\n    x: px,\n    y: px,\n    z: px,\n    perspective: px,\n    transformPerspective: px,\n    opacity: alpha,\n    originX: progressPercentage,\n    originY: progressPercentage,\n    originZ: px,\n};\n\nexport { transformValueTypes };\n//# sourceMappingURL=transform.mjs.map\n","import { int } from '../int.mjs';\nimport { alpha } from '../numbers/index.mjs';\nimport { px } from '../numbers/units.mjs';\nimport { transformValueTypes } from './transform.mjs';\n\nconst numberValueTypes = {\n    // Border props\n    borderWidth: px,\n    borderTopWidth: px,\n    borderRightWidth: px,\n    borderBottomWidth: px,\n    borderLeftWidth: px,\n    borderRadius: px,\n    borderTopLeftRadius: px,\n    borderTopRightRadius: px,\n    borderBottomRightRadius: px,\n    borderBottomLeftRadius: px,\n    // Positioning props\n    width: px,\n    maxWidth: px,\n    height: px,\n    maxHeight: px,\n    top: px,\n    right: px,\n    bottom: px,\n    left: px,\n    inset: px,\n    insetBlock: px,\n    insetBlockStart: px,\n    insetBlockEnd: px,\n    insetInline: px,\n    insetInlineStart: px,\n    insetInlineEnd: px,\n    // Spacing props\n    padding: px,\n    paddingTop: px,\n    paddingRight: px,\n    paddingBottom: px,\n    paddingLeft: px,\n    paddingBlock: px,\n    paddingBlockStart: px,\n    paddingBlockEnd: px,\n    paddingInline: px,\n    paddingInlineStart: px,\n    paddingInlineEnd: px,\n    margin: px,\n    marginTop: px,\n    marginRight: px,\n    marginBottom: px,\n    marginLeft: px,\n    marginBlock: px,\n    marginBlockStart: px,\n    marginBlockEnd: px,\n    marginInline: px,\n    marginInlineStart: px,\n    marginInlineEnd: px,\n    // Typography\n    fontSize: px,\n    // Misc\n    backgroundPositionX: px,\n    backgroundPositionY: px,\n    ...transformValueTypes,\n    zIndex: int,\n    // SVG\n    fillOpacity: alpha,\n    strokeOpacity: alpha,\n    numOctaves: int,\n};\n\nexport { numberValueTypes };\n//# sourceMappingURL=number.mjs.map\n","import { color } from '../color/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n    ...numberValueTypes,\n    // Color props\n    color,\n    backgroundColor: color,\n    outlineColor: color,\n    fill: color,\n    stroke: color,\n    // Border props\n    borderColor: color,\n    borderTopColor: color,\n    borderRightColor: color,\n    borderBottomColor: color,\n    borderLeftColor: color,\n    filter,\n    WebkitFilter: filter,\n    mask,\n    WebkitMask: mask,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n//# sourceMappingURL=defaults.mjs.map\n","import { complex } from '../complex/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { getDefaultValueType } from '../maps/defaults.mjs';\n\nconst customTypes = /*@__PURE__*/ new Set([filter, mask]);\nfunction getAnimatableNone(key, value) {\n    let defaultValueType = getDefaultValueType(key);\n    if (!customTypes.has(defaultValueType))\n        defaultValueType = complex;\n    // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n    return defaultValueType.getAnimatableNone\n        ? defaultValueType.getAnimatableNone(value)\n        : undefined;\n}\n\nexport { getAnimatableNone };\n//# sourceMappingURL=animatable-none.mjs.map\n","function fillWildcards(keyframes) {\n    for (let i = 1; i < keyframes.length; i++) {\n        keyframes[i] ?? (keyframes[i] = keyframes[i - 1]);\n    }\n}\n\nexport { fillWildcards };\n//# sourceMappingURL=fill-wildcards.mjs.map\n","const radToDeg = (rad) => (rad * 180) / Math.PI;\nconst rotate = (v) => {\n    const angle = radToDeg(Math.atan2(v[1], v[0]));\n    return rebaseAngle(angle);\n};\nconst matrix2dParsers = {\n    x: 4,\n    y: 5,\n    translateX: 4,\n    translateY: 5,\n    scaleX: 0,\n    scaleY: 3,\n    scale: (v) => (Math.abs(v[0]) + Math.abs(v[3])) / 2,\n    rotate,\n    rotateZ: rotate,\n    skewX: (v) => radToDeg(Math.atan(v[1])),\n    skewY: (v) => radToDeg(Math.atan(v[2])),\n    skew: (v) => (Math.abs(v[1]) + Math.abs(v[2])) / 2,\n};\nconst rebaseAngle = (angle) => {\n    angle = angle % 360;\n    if (angle < 0)\n        angle += 360;\n    return angle;\n};\nconst rotateZ = rotate;\nconst scaleX = (v) => Math.sqrt(v[0] * v[0] + v[1] * v[1]);\nconst scaleY = (v) => Math.sqrt(v[4] * v[4] + v[5] * v[5]);\nconst matrix3dParsers = {\n    x: 12,\n    y: 13,\n    z: 14,\n    translateX: 12,\n    translateY: 13,\n    translateZ: 14,\n    scaleX,\n    scaleY,\n    scale: (v) => (scaleX(v) + scaleY(v)) / 2,\n    rotateX: (v) => rebaseAngle(radToDeg(Math.atan2(v[6], v[5]))),\n    rotateY: (v) => rebaseAngle(radToDeg(Math.atan2(-v[2], v[0]))),\n    rotateZ,\n    rotate: rotateZ,\n    skewX: (v) => radToDeg(Math.atan(v[4])),\n    skewY: (v) => radToDeg(Math.atan(v[1])),\n    skew: (v) => (Math.abs(v[1]) + Math.abs(v[4])) / 2,\n};\nfunction defaultTransformValue(name) {\n    return name.includes(\"scale\") ? 1 : 0;\n}\nfunction parseValueFromTransform(transform, name) {\n    if (!transform || transform === \"none\") {\n        return defaultTransformValue(name);\n    }\n    const matrix3dMatch = transform.match(/^matrix3d\\(([-\\d.e\\s,]+)\\)$/u);\n    let parsers;\n    let match;\n    if (matrix3dMatch) {\n        parsers = matrix3dParsers;\n        match = matrix3dMatch;\n    }\n    else {\n        const matrix2dMatch = transform.match(/^matrix\\(([-\\d.e\\s,]+)\\)$/u);\n        parsers = matrix2dParsers;\n        match = matrix2dMatch;\n    }\n    if (!match) {\n        return defaultTransformValue(name);\n    }\n    const valueParser = parsers[name];\n    const values = match[1].split(\",\").map(convertTransformToNumber);\n    return typeof valueParser === \"function\"\n        ? valueParser(values)\n        : values[valueParser];\n}\nconst readTransformValue = (instance, name) => {\n    const { transform = \"none\" } = getComputedStyle(instance);\n    return parseValueFromTransform(transform, name);\n};\nfunction convertTransformToNumber(value) {\n    return parseFloat(value.trim());\n}\n\nexport { defaultTransformValue, parseValueFromTransform, readTransformValue };\n//# sourceMappingURL=parse-transform.mjs.map\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n    \"transformPerspective\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"translateX\",\n    \"translateY\",\n    \"translateZ\",\n    \"scale\",\n    \"scaleX\",\n    \"scaleY\",\n    \"rotate\",\n    \"rotateX\",\n    \"rotateY\",\n    \"rotateZ\",\n    \"skew\",\n    \"skewX\",\n    \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n *\n * `pathRotation` is a transform for routing purposes (skipped from raw\n * style application, wired to the transform composite, flags transform\n * dirty) but is intentionally NOT in `transformPropOrder` — it is\n * composed onto `rotate` at the build sites, not serialized in its own\n * slot, and must stay out of the order-array consumers (parse-transform,\n * unit-conversion, keys-position).\n */\nconst transformProps = /*@__PURE__*/ (() => new Set([...transformPropOrder, \"pathRotation\"]))();\n\nexport { transformPropOrder, transformProps };\n//# sourceMappingURL=keys-transform.mjs.map\n","import { parseValueFromTransform } from '../../../render/dom/parse-transform.mjs';\nimport { transformPropOrder } from '../../../render/utils/keys-transform.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\n/**\n * Reset any bounding box-changing transforms so the element can be\n * measured. Returns the values to restore. Values already at their\n * default don't change the box, so they're left alone: an element with\n * only `rotate: 0` doesn't need to be re-rendered before measuring.\n */\nfunction removeNonTranslationalTransform(visualElement) {\n    const removedTransforms = [];\n    nonTranslationalTransformKeys.forEach((key) => {\n        const value = visualElement.getValue(key);\n        if (value !== undefined) {\n            const current = value.get();\n            const reset = key.startsWith(\"scale\") ? 1 : 0;\n            if (current === reset)\n                return;\n            removedTransforms.push([key, current]);\n            value.set(reset);\n        }\n    });\n    return removedTransforms;\n}\n/**\n * Values that can only be measured from the bounding box. Elements with\n * these values need bounding box-changing transforms removed first.\n */\nconst boxDependentValues = new Set([\"bottom\", \"right\"]);\n/**\n * Computed width/height is already in pixels and unaffected by\n * transforms. It's \"auto\" for elements without a layout box (e.g. inline),\n * in which case we fall back to measuring the bounding box.\n */\nfunction measureDimension(computed, measureBox, axis, paddingStart, paddingEnd, boxSizing) {\n    const px = parseFloat(computed);\n    if (!isNaN(px))\n        return px;\n    const { min, max } = measureBox()[axis];\n    const size = max - min;\n    return boxSizing === \"border-box\"\n        ? size\n        : size - parseFloat(paddingStart) - parseFloat(paddingEnd);\n}\nconst positionalValues = {\n    // Dimensions\n    width: ({ width, paddingLeft = \"0\", paddingRight = \"0\", boxSizing }, measureBox) => measureDimension(width, measureBox, \"x\", paddingLeft, paddingRight, boxSizing),\n    height: ({ height, paddingTop = \"0\", paddingBottom = \"0\", boxSizing }, measureBox) => measureDimension(height, measureBox, \"y\", paddingTop, paddingBottom, boxSizing),\n    top: ({ top }) => parseFloat(top),\n    left: ({ left }) => parseFloat(left),\n    bottom: ({ top }, measureBox) => {\n        const { y } = measureBox();\n        return parseFloat(top) + (y.max - y.min);\n    },\n    right: ({ left }, measureBox) => {\n        const { x } = measureBox();\n        return parseFloat(left) + (x.max - x.min);\n    },\n    // Transform\n    x: ({ transform }) => parseValueFromTransform(transform, \"x\"),\n    y: ({ transform }) => parseValueFromTransform(transform, \"y\"),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { boxDependentValues, isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n//# sourceMappingURL=unit-conversion.mjs.map\n","import { isNumericalString, isZeroValueString } from 'motion-utils';\nimport { complex } from '../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../value/types/utils/animatable-none.mjs';\nimport { fillWildcards } from './utils/fill-wildcards.mjs';\nimport { boxDependentValues, removeNonTranslationalTransform } from './utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nlet isForced = false;\nfunction measureAllKeyframes() {\n    if (anyNeedsMeasurement) {\n        const resolversToMeasure = [];\n        const elementsToMeasure = new Set();\n        const elementsToUntransform = new Set();\n        toResolve.forEach((resolver) => {\n            if (!resolver.needsMeasurement)\n                return;\n            resolversToMeasure.push(resolver);\n            elementsToMeasure.add(resolver.element);\n            if (boxDependentValues.has(resolver.name)) {\n                elementsToUntransform.add(resolver.element);\n            }\n        });\n        const transformsToRestore = new Map();\n        /**\n         * Write pass\n         * Values measured from the bounding box need bounding box-changing\n         * transforms removed first. Values read from computed style don't.\n         */\n        elementsToUntransform.forEach((element) => {\n            const removedTransforms = removeNonTranslationalTransform(element);\n            if (!removedTransforms.length)\n                return;\n            transformsToRestore.set(element, removedTransforms);\n            element.render();\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n        // Write\n        elementsToMeasure.forEach((element) => {\n            element.render();\n            const restore = transformsToRestore.get(element);\n            if (restore) {\n                restore.forEach(([key, value]) => {\n                    element.getValue(key)?.set(value);\n                });\n            }\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n        // Write\n        resolversToMeasure.forEach((resolver) => {\n            if (resolver.suspendedScrollY !== undefined) {\n                window.scrollTo(0, resolver.suspendedScrollY);\n            }\n        });\n    }\n    anyNeedsMeasurement = false;\n    isScheduled = false;\n    toResolve.forEach((resolver) => resolver.complete(isForced));\n    toResolve.clear();\n}\nfunction readAllKeyframes() {\n    toResolve.forEach((resolver) => {\n        resolver.readKeyframes();\n        if (resolver.needsMeasurement) {\n            anyNeedsMeasurement = true;\n        }\n    });\n}\nfunction flushKeyframeResolvers() {\n    isForced = true;\n    readAllKeyframes();\n    measureAllKeyframes();\n    isForced = false;\n}\n/**\n * Normalise a value read from the subject into an animation origin: a\n * number read as a string (\"0\", \"200\") becomes a number, and a value\n * that isn't animatable (e.g. \"none\") but whose target is becomes an\n * animatable zero in the shape of the target.\n */\nfunction readOrigin(value, name, target) {\n    if (typeof value === \"string\") {\n        if (isNumericalString(value) || isZeroValueString(value)) {\n            return parseFloat(value);\n        }\n        else if (!complex.test(value) && complex.test(target)) {\n            return getAnimatableNone(name, target);\n        }\n    }\n    return value ?? undefined;\n}\nclass KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n        this.state = \"pending\";\n        /**\n         * Track whether this resolver is async. If it is, it'll be added to the\n         * resolver queue and flushed in the next frame. Resolvers that aren't going\n         * to trigger read/write thrashing don't need to be async.\n         */\n        this.isAsync = false;\n        /**\n         * Track whether this resolver needs to perform a measurement\n         * to resolve its keyframes.\n         */\n        this.needsMeasurement = false;\n        this.unresolvedKeyframes = [...unresolvedKeyframes];\n        this.onComplete = onComplete;\n        this.name = name;\n        this.motionValue = motionValue;\n        this.element = element;\n        this.isAsync = isAsync;\n    }\n    scheduleResolve() {\n        this.state = \"scheduled\";\n        if (this.isAsync) {\n            toResolve.add(this);\n            if (!isScheduled) {\n                isScheduled = true;\n                frame.read(readAllKeyframes);\n                frame.resolveKeyframes(measureAllKeyframes);\n            }\n        }\n        else {\n            this.readKeyframes();\n            this.complete();\n        }\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, name, element, motionValue } = this;\n        // If initial keyframe is null we need to read it from the DOM\n        if (unresolvedKeyframes[0] === null) {\n            const currentValue = motionValue?.get();\n            // TODO: This doesn't work if the final keyframe is a wildcard\n            const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n            if (currentValue !== undefined) {\n                unresolvedKeyframes[0] = currentValue;\n            }\n            else if (element && name) {\n                const valueAsRead = readOrigin(element.readValue(name, finalKeyframe), name, finalKeyframe);\n                if (valueAsRead !== undefined) {\n                    unresolvedKeyframes[0] = valueAsRead;\n                }\n            }\n            if (unresolvedKeyframes[0] === undefined) {\n                unresolvedKeyframes[0] = finalKeyframe;\n            }\n            if (motionValue && currentValue === undefined) {\n                motionValue.set(unresolvedKeyframes[0]);\n            }\n        }\n        fillWildcards(unresolvedKeyframes);\n    }\n    setFinalKeyframe() { }\n    measureInitialState() { }\n    renderEndStyles() { }\n    measureEndState() { }\n    complete(isForcedComplete = false) {\n        this.state = \"complete\";\n        this.onComplete(this.unresolvedKeyframes, this.finalKeyframe, isForcedComplete);\n        toResolve.delete(this);\n    }\n    cancel() {\n        if (this.state === \"scheduled\") {\n            toResolve.delete(this);\n            this.state = \"pending\";\n        }\n    }\n    resume() {\n        if (this.state === \"pending\")\n            this.scheduleResolve();\n    }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n//# sourceMappingURL=KeyframesResolver.mjs.map\n","const isCSSVar = (name) => name.startsWith(\"--\");\n\nexport { isCSSVar };\n//# sourceMappingURL=is-css-var.mjs.map\n","import { isCSSVar } from './is-css-var.mjs';\n\nfunction setStyle(element, name, value) {\n    isCSSVar(name)\n        ? element.style.setProperty(name, value)\n        : (element.style[name] = value);\n}\n\nexport { setStyle };\n//# sourceMappingURL=style-set.mjs.map\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {};\n\nexport { supportsFlags };\n//# sourceMappingURL=flags.mjs.map\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n    const memoized = memo(callback);\n    return () => supportsFlags[supportsFlag] ?? memoized();\n}\n\nexport { memoSupports };\n//# sourceMappingURL=memo.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsScrollTimeline = /* @__PURE__ */ memoSupports(() => window.ScrollTimeline !== undefined, \"scrollTimeline\");\nconst supportsViewTimeline = /* @__PURE__ */ memoSupports(() => window.ViewTimeline !== undefined, \"viewTimeline\");\n\nexport { supportsScrollTimeline, supportsViewTimeline };\n//# sourceMappingURL=scroll-timeline.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n    try {\n        document\n            .createElement(\"div\")\n            .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n//# sourceMappingURL=linear-easing.mjs.map\n","const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { cubicBezierAsString };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","import { cubicBezierAsString } from './cubic-bezier.mjs';\n\nconst supportedWaapiEasing = {\n    linear: \"linear\",\n    ease: \"ease\",\n    easeIn: \"ease-in\",\n    easeOut: \"ease-out\",\n    easeInOut: \"ease-in-out\",\n    circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n    circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n    backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n    backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\n\nexport { supportedWaapiEasing };\n//# sourceMappingURL=supported.mjs.map\n","import { isBezierDefinition } from 'motion-utils';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from '../utils/linear.mjs';\nimport { cubicBezierAsString } from './cubic-bezier.mjs';\nimport { supportedWaapiEasing } from './supported.mjs';\n\nfunction mapEasingToNativeEasing(easing, duration) {\n    if (!easing) {\n        return undefined;\n    }\n    else if (typeof easing === \"function\") {\n        return supportsLinearEasing()\n            ? generateLinearEasing(easing, duration)\n            : \"ease-out\";\n    }\n    else if (isBezierDefinition(easing)) {\n        return cubicBezierAsString(easing);\n    }\n    else if (Array.isArray(easing)) {\n        return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n            supportedWaapiEasing.easeOut);\n    }\n    else {\n        return supportedWaapiEasing[easing];\n    }\n}\n\nexport { mapEasingToNativeEasing };\n//# sourceMappingURL=map-easing.mjs.map\n","import { mapEasingToNativeEasing } from './easing/map-easing.mjs';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeOut\", times, } = {}, pseudoElement = undefined) {\n    const keyframeOptions = {\n        [valueName]: keyframes,\n    };\n    if (times)\n        keyframeOptions.offset = times;\n    const easing = mapEasingToNativeEasing(ease, duration);\n    /**\n     * If this is an easing array, apply to keyframes, not animation as a whole\n     */\n    if (Array.isArray(easing))\n        keyframeOptions.easing = easing;\n    const options = {\n        delay,\n        duration,\n        easing: !Array.isArray(easing) ? easing : \"linear\",\n        fill: \"both\",\n        iterations: repeat + 1,\n        direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n    };\n    if (pseudoElement)\n        options.pseudoElement = pseudoElement;\n    return element.animate(keyframeOptions, options);\n}\n\nexport { startWaapiAnimation };\n//# sourceMappingURL=start-waapi-animation.mjs.map\n","function isGenerator(type) {\n    return typeof type === \"function\" && \"applyToOptions\" in type;\n}\n\nexport { isGenerator };\n//# sourceMappingURL=is-generator.mjs.map\n","import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { isGenerator } from '../../generators/utils/is-generator.mjs';\n\nfunction applyGeneratorOptions({ type, ...options }) {\n    if (isGenerator(type) && supportsLinearEasing()) {\n        return type.applyToOptions(options);\n    }\n    else {\n        options.duration ?? (options.duration = 300);\n        options.ease ?? (options.ease = \"easeOut\");\n    }\n    return options;\n}\n\nexport { applyGeneratorOptions };\n//# sourceMappingURL=apply-generator.mjs.map\n","import { invariant, millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { supportsScrollTimeline } from '../utils/supports/scroll-timeline.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { notifyAnimationStart } from './utils/notify-inspector.mjs';\nimport { startWaapiAnimation } from './waapi/start-waapi-animation.mjs';\nimport { applyGeneratorOptions } from './waapi/utils/apply-generator.mjs';\n\n/**\n * NativeAnimation implements AnimationPlaybackControls for the browser's Web Animations API.\n */\nclass NativeAnimation extends WithPromise {\n    constructor(options) {\n        super();\n        this.finishedTime = null;\n        this.isStopped = false;\n        /**\n         * Tracks a manually-set start time that takes precedence over WAAPI's\n         * dynamic startTime. This is cleared when play() or time setter is called,\n         * allowing WAAPI to take over timing.\n         */\n        this.manualStartTime = null;\n        if (!options)\n            return;\n        const { element, name, keyframes, pseudoElement, allowFlatten = false, finalKeyframe, onComplete, } = options;\n        this.isPseudoElement = Boolean(pseudoElement);\n        this.allowFlatten = allowFlatten;\n        this.options = options;\n        invariant(typeof options.type !== \"string\", `Mini animate() doesn't support \"type\" as a string.`, \"mini-spring\");\n        const transition = applyGeneratorOptions(options);\n        this.animation = startWaapiAnimation(element, name, keyframes, transition, pseudoElement);\n        if (transition.autoplay === false) {\n            this.animation.pause();\n        }\n        this.animation.onfinish = () => {\n            this.finishedTime = this.time;\n            if (!pseudoElement) {\n                const keyframe = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n                if (this.updateMotionValue) {\n                    this.updateMotionValue(keyframe);\n                }\n                /**\n                 * If we can, we want to commit the final style as set by the user,\n                 * rather than the computed keyframe value supplied by the animation.\n                 * We always do this, even when a motion value is present, to prevent\n                 * a visual flash in Firefox where the WAAPI animation's fill is removed\n                 * during cancel() before the scheduled render can apply the correct value.\n                 */\n                setStyle(element, name, keyframe);\n                this.animation.cancel();\n            }\n            onComplete?.();\n            this.notifyFinished();\n        };\n        notifyAnimationStart(this, options, transition);\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        this.manualStartTime = null;\n        this.animation.play();\n        if (this.state === \"finished\") {\n            this.updateFinished();\n        }\n    }\n    pause() {\n        this.animation.pause();\n    }\n    complete() {\n        this.animation.finish?.();\n    }\n    cancel() {\n        try {\n            this.animation.cancel();\n        }\n        catch (e) { }\n    }\n    stop() {\n        if (this.isStopped)\n            return;\n        this.isStopped = true;\n        const { state } = this;\n        if (state === \"idle\" || state === \"finished\") {\n            return;\n        }\n        if (this.updateMotionValue) {\n            this.updateMotionValue();\n        }\n        else {\n            this.commitStyles();\n        }\n        if (!this.isPseudoElement)\n            this.cancel();\n    }\n    /**\n     * WAAPI doesn't natively have any interruption capabilities.\n     *\n     * In this method, we commit styles back to the DOM before cancelling\n     * the animation.\n     *\n     * This is designed to be overridden by NativeAnimationExtended, which\n     * will create a renderless JS animation and sample it twice to calculate\n     * its current value, \"previous\" value, and therefore allow\n     * Motion to also correctly calculate velocity for any subsequent animation\n     * while deferring the commit until the next animation frame.\n     */\n    commitStyles() {\n        const element = this.options?.element;\n        if (!this.isPseudoElement && element?.isConnected) {\n            this.animation.commitStyles?.();\n        }\n    }\n    get duration() {\n        const duration = this.animation.effect?.getComputedTiming?.().duration || 0;\n        return millisecondsToSeconds(Number(duration));\n    }\n    get iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\n    }\n    get time() {\n        return millisecondsToSeconds(Number(this.animation.currentTime) || 0);\n    }\n    set time(newTime) {\n        const wasFinished = this.finishedTime !== null;\n        this.manualStartTime = null;\n        this.finishedTime = null;\n        this.animation.currentTime = secondsToMilliseconds(newTime);\n        if (wasFinished) {\n            this.animation.pause();\n        }\n    }\n    /**\n     * The playback speed of the animation.\n     * 1 = normal speed, 2 = double speed, 0.5 = half speed.\n     */\n    get speed() {\n        return this.animation.playbackRate;\n    }\n    set speed(newSpeed) {\n        // Allow backwards playback after finishing\n        if (newSpeed < 0)\n            this.finishedTime = null;\n        this.animation.playbackRate = newSpeed;\n    }\n    get state() {\n        return this.finishedTime !== null\n            ? \"finished\"\n            : this.animation.playState;\n    }\n    get startTime() {\n        return this.manualStartTime ?? Number(this.animation.startTime);\n    }\n    set startTime(newStartTime) {\n        this.manualStartTime = this.animation.startTime = newStartTime;\n    }\n    /**\n     * Attaches a timeline to the animation, for instance the `ScrollTimeline`.\n     */\n    attachTimeline({ timeline, rangeStart, rangeEnd, observe, }) {\n        if (this.allowFlatten) {\n            this.animation.effect?.updateTiming({ easing: \"linear\" });\n        }\n        this.animation.onfinish = null;\n        if (timeline && supportsScrollTimeline()) {\n            this.animation.timeline = timeline;\n            if (rangeStart)\n                this.animation.rangeStart = rangeStart;\n            if (rangeEnd)\n                this.animation.rangeEnd = rangeEnd;\n            return noop;\n        }\n        else {\n            return observe(this);\n        }\n    }\n}\n\nexport { NativeAnimation };\n//# sourceMappingURL=NativeAnimation.mjs.map\n","import { circInOut, backInOut, anticipate } from 'motion-utils';\n\nconst unsupportedEasingFunctions = {\n    anticipate,\n    backInOut,\n    circInOut,\n};\nfunction isUnsupportedEase(key) {\n    return key in unsupportedEasingFunctions;\n}\nfunction replaceStringEasing(transition) {\n    if (typeof transition.ease === \"string\" &&\n        isUnsupportedEase(transition.ease)) {\n        transition.ease = unsupportedEasingFunctions[transition.ease];\n    }\n}\n\nexport { replaceStringEasing };\n//# sourceMappingURL=unsupported-easing.mjs.map\n","import { clamp } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { NativeAnimation } from './NativeAnimation.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { replaceStringEasing } from './waapi/utils/unsupported-easing.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\nclass NativeAnimationExtended extends NativeAnimation {\n    constructor(options) {\n        /**\n         * The base NativeAnimation function only supports a subset\n         * of Motion easings, and WAAPI also only supports some\n         * easing functions via string/cubic-bezier definitions.\n         *\n         * This function replaces those unsupported easing functions\n         * with a JS easing function. This will later get compiled\n         * to a linear() easing function.\n         */\n        replaceStringEasing(options);\n        /**\n         * Ensure we replace the transition type with a generator function\n         * before passing to WAAPI.\n         *\n         * TODO: Does this have a better home? It could be shared with\n         * JSAnimation.\n         */\n        replaceTransitionType(options);\n        super(options);\n        /**\n         * Only set startTime when the animation should autoplay.\n         * Setting startTime on a paused WAAPI animation unpauses it\n         * (per the WAAPI spec), which breaks autoplay: false.\n         */\n        if (options.startTime !== undefined && options.autoplay !== false) {\n            this.startTime = options.startTime;\n        }\n        this.options = options;\n    }\n    /**\n     * WAAPI doesn't natively have any interruption capabilities.\n     *\n     * Rather than read committed styles back out of the DOM, we can\n     * create a renderless JS animation and sample it twice to calculate\n     * its current value, \"previous\" value, and therefore allow\n     * Motion to calculate velocity for any subsequent animation.\n     */\n    updateMotionValue(value) {\n        const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n        if (!motionValue)\n            return;\n        if (value !== undefined) {\n            motionValue.set(value);\n            return;\n        }\n        const sampleAnimation = new JSAnimation({\n            ...options,\n            autoplay: false,\n        });\n        /**\n         * Use wall-clock elapsed time for sampling.\n         * Under CPU load, WAAPI's currentTime may not reflect actual\n         * elapsed time, causing incorrect sampling and visual jumps.\n         */\n        const sampleTime = Math.max(sampleDelta, time.now() - this.startTime);\n        const delta = clamp(0, sampleDelta, sampleTime - sampleDelta);\n        const current = sampleAnimation.sample(sampleTime).value;\n        /**\n         * Write the estimated value to inline style so it persists\n         * after cancel(), covering the async gap before the next\n         * animation starts.\n         */\n        const { name } = this.options;\n        if (element && name)\n            setStyle(element, name, current);\n        motionValue.setWithVelocity(sampleAnimation.sample(Math.max(0, sampleTime - delta)).value, current, delta);\n        sampleAnimation.stop();\n    }\n}\n\nexport { NativeAnimationExtended };\n//# sourceMappingURL=NativeAnimationExtended.mjs.map\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n    // If the list of keys that might be non-animatable grows, replace with Set\n    if (name === \"zIndex\")\n        return false;\n    // If it's a number or a keyframes array, we can animate it. We might at some point\n    // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n    // but for now lets leave it like this for performance reasons\n    if (typeof value === \"number\" || Array.isArray(value))\n        return true;\n    if (typeof value === \"string\" && // It's animatable if we have a string\n        (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n        !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n    ) {\n        return true;\n    }\n    return false;\n};\n\nexport { isAnimatable };\n//# sourceMappingURL=is-animatable.mjs.map\n","import { warning } from 'motion-utils';\nimport { isGenerator } from '../generators/utils/is-generator.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n    const current = keyframes[0];\n    if (keyframes.length === 1)\n        return true;\n    for (let i = 0; i < keyframes.length; i++) {\n        if (keyframes[i] !== current)\n            return true;\n    }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n    /**\n     * Check if we're able to animate between the start and end keyframes,\n     * and throw a warning if we're attempting to animate between one that's\n     * animatable and another that isn't.\n     */\n    const originKeyframe = keyframes[0];\n    if (originKeyframe === null) {\n        return false;\n    }\n    /**\n     * These aren't traditionally animatable but we do support them.\n     * In future we could look into making this more generic or replacing\n     * this function with mix() === mixImmediate\n     */\n    if (name === \"display\" || name === \"visibility\")\n        return true;\n    const targetKeyframe = keyframes[keyframes.length - 1];\n    const isOriginAnimatable = isAnimatable(originKeyframe, name);\n    const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n    // Always skip if any of these are true\n    if (!isOriginAnimatable || !isTargetAnimatable) {\n        // Only build the message when we're going to warn\n        isOriginAnimatable !== isTargetAnimatable &&\n            warning(false, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". \"${isOriginAnimatable ? targetKeyframe : originKeyframe}\" is not an animatable value.`, \"value-not-animatable\");\n        return false;\n    }\n    return (hasKeyframesChanged(keyframes) ||\n        ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n//# sourceMappingURL=can-animate.mjs.map\n","function makeAnimationInstant(options) {\n    options.duration = 0;\n    options.type = \"keyframes\";\n}\n\nexport { makeAnimationInstant };\n//# sourceMappingURL=make-animation-instant.mjs.map\n","/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n    \"opacity\",\n    \"clipPath\",\n    \"filter\",\n    \"transform\",\n    \"backgroundColor\",\n]);\n\nexport { acceleratedValues };\n//# sourceMappingURL=accelerated-values.mjs.map\n","const browserColorFunctions = /^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\\(/;\nfunction hasBrowserOnlyColors(keyframes) {\n    for (let i = 0; i < keyframes.length; i++) {\n        if (typeof keyframes[i] === \"string\" &&\n            browserColorFunctions.test(keyframes[i])) {\n            return true;\n        }\n    }\n    return false;\n}\n\nexport { hasBrowserOnlyColors };\n//# sourceMappingURL=is-browser-color.mjs.map\n","import { memo } from 'motion-utils';\nimport { acceleratedValues } from '../utils/accelerated-values.mjs';\nimport { hasBrowserOnlyColors } from '../utils/is-browser-color.mjs';\n\nconst colorProperties = new Set([\n    \"color\",\n    \"backgroundColor\",\n    \"outlineColor\",\n    \"fill\",\n    \"stroke\",\n    \"borderColor\",\n    \"borderTopColor\",\n    \"borderRightColor\",\n    \"borderBottomColor\",\n    \"borderLeftColor\",\n]);\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\nfunction supportsBrowserAnimation(options) {\n    const { motionValue, name, repeatDelay, repeatType, damping, type, keyframes, } = options;\n    /**\n     * Most values can't be accelerated at all, so check the name before\n     * looking at the element or its props.\n     */\n    if (!name ||\n        !(acceleratedValues.has(name) || colorProperties.has(name))) {\n        return false;\n    }\n    const subject = motionValue?.owner?.current;\n    /**\n     * We use instanceof checks instead of isHTMLElement()/isSVGElement()\n     * because we explicitly **don't** want elements in different timing\n     * contexts (i.e. popups) to be accelerated, as it's not possible to sync\n     * these animations properly with those driven from the main window\n     * frameloop.\n     */\n    if (!(subject instanceof HTMLElement) &&\n        !(subject instanceof SVGElement)) {\n        return false;\n    }\n    const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n    return (supportsWaapi() &&\n        /**\n         * Force WAAPI for color properties with browser-only color formats\n         * (oklch, oklab, lab, lch, etc.) that the JS animation path can't parse.\n         */\n        (acceleratedValues.has(name) ||\n            (colorProperties.has(name) &&\n                hasBrowserOnlyColors(keyframes))) &&\n        (name !== \"transform\" || !transformTemplate) &&\n        /**\n         * If we're outputting values to onUpdate then we can't use WAAPI as there's\n         * no way to read the value from WAAPI every frame.\n         */\n        !onUpdate &&\n        !repeatDelay &&\n        repeatType !== \"mirror\" &&\n        damping !== 0 &&\n        type !== \"inertia\");\n}\n\nexport { supportsBrowserAnimation };\n//# sourceMappingURL=waapi.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { KeyframeResolver, flushKeyframeResolvers } from './keyframes/KeyframesResolver.mjs';\nimport { NativeAnimationExtended } from './NativeAnimationExtended.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { makeAnimationInstant } from './utils/make-animation-instant.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { supportsBrowserAnimation } from './waapi/supports/waapi.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass AsyncMotionValueAnimation extends WithPromise {\n    constructor(options) {\n        super();\n        /**\n         * Bound to support return animation.stop pattern\n         */\n        this.stop = () => {\n            if (this._animation) {\n                this._animation.stop();\n                this.stopTimeline?.();\n            }\n            this.keyframeResolver?.cancel();\n        };\n        this.createdAt = time.now();\n        const { keyframes, name, motionValue, element } = options;\n        /**\n         * animateMotionValue builds a fresh options object per value, so\n         * it's completed in place as keyframes resolve rather than copied.\n         */\n        const optionsWithDefaults = options;\n        optionsWithDefaults.autoplay ?? (optionsWithDefaults.autoplay = true);\n        optionsWithDefaults.delay ?? (optionsWithDefaults.delay = 0);\n        optionsWithDefaults.type ?? (optionsWithDefaults.type = \"keyframes\");\n        optionsWithDefaults.repeat ?? (optionsWithDefaults.repeat = 0);\n        optionsWithDefaults.repeatDelay ?? (optionsWithDefaults.repeatDelay = 0);\n        optionsWithDefaults.repeatType ?? (optionsWithDefaults.repeatType = \"loop\");\n        const KeyframeResolver$1 = element?.KeyframeResolver || KeyframeResolver;\n        this.keyframeResolver = new KeyframeResolver$1(keyframes, (resolvedKeyframes, finalKeyframe, forced) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe, optionsWithDefaults, !forced), name, motionValue, element);\n        this.keyframeResolver?.scheduleResolve();\n    }\n    onKeyframesResolved(keyframes, finalKeyframe, options, sync) {\n        this.keyframeResolver = undefined;\n        const { name, type, velocity, delay, isHandoff, onUpdate } = options;\n        this.resolvedAt = time.now();\n        /**\n         * If we can't animate this value with the resolved keyframes\n         * then we should complete it immediately.\n         */\n        let canAnimateValue = true;\n        if (!canAnimate(keyframes, name, type, velocity)) {\n            canAnimateValue = false;\n            if (MotionGlobalConfig.instantAnimations || !delay) {\n                onUpdate?.(getFinalKeyframe(keyframes, options, finalKeyframe));\n            }\n            keyframes[0] = keyframes[keyframes.length - 1];\n            makeAnimationInstant(options);\n            options.repeat = 0;\n        }\n        /**\n         * Resolve startTime for the animation.\n         *\n         * This method uses the createdAt and resolvedAt to calculate the\n         * animation startTime. *Ideally*, we would use the createdAt time as t=0\n         * as the following frame would then be the first frame of the animation in\n         * progress, which would feel snappier.\n         *\n         * However, if there's a delay (main thread work) between the creation of\n         * the animation and the first committed frame, we prefer to use resolvedAt\n         * to avoid a sudden jump into the animation.\n         */\n        const startTime = sync\n            ? !this.resolvedAt\n                ? this.createdAt\n                : this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n                    ? this.resolvedAt\n                    : this.createdAt\n            : undefined;\n        const { onComplete } = options;\n        /**\n         * A startTime passed in options (an optimised appear handoff syncing\n         * to its WAAPI animation) takes precedence over the derived one.\n         */\n        options.startTime ?? (options.startTime = startTime);\n        options.finalKeyframe = finalKeyframe;\n        options.keyframes = keyframes;\n        /**\n         * JSAnimation and NativeAnimation call onComplete exactly when\n         * their own `finished` resolves, so this replaces a promise chain\n         * per value with a callback.\n         */\n        options.onComplete = () => {\n            onComplete?.();\n            this.notifyFinished();\n        };\n        /**\n         * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n         * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n         * optimised animation.\n         *\n         * Also skip WAAPI when keyframes aren't animatable, as the resolved\n         * values may not be valid CSS and would trigger browser warnings.\n         */\n        const useWaapi = canAnimateValue && !isHandoff && supportsBrowserAnimation(options);\n        let animation;\n        if (useWaapi) {\n            /**\n             * The resolver needed the VisualElement, WAAPI needs the DOM\n             * element. JSAnimation reads neither, so this is safe to\n             * leave in place if we fall back to it.\n             */\n            options.element = options.motionValue?.owner?.current;\n            try {\n                animation = new NativeAnimationExtended(options);\n            }\n            catch {\n                animation = new JSAnimation(options);\n            }\n        }\n        else {\n            animation = new JSAnimation(options);\n        }\n        if (this.pendingTimeline) {\n            this.stopTimeline = animation.attachTimeline(this.pendingTimeline);\n            this.pendingTimeline = undefined;\n        }\n        this._animation = animation;\n    }\n    get finished() {\n        return this._animation ? this._animation.finished : super.finished;\n    }\n    then(onResolve, _onReject) {\n        return this.finished.finally(onResolve).then(() => { });\n    }\n    get animation() {\n        if (!this._animation) {\n            this.keyframeResolver?.resume();\n            flushKeyframeResolvers();\n        }\n        return this._animation;\n    }\n    get duration() {\n        return this.animation.duration;\n    }\n    get iterationDuration() {\n        return this.animation.iterationDuration;\n    }\n    get time() {\n        return this.animation.time;\n    }\n    set time(newTime) {\n        this.animation.time = newTime;\n    }\n    get speed() {\n        return this.animation.speed;\n    }\n    get state() {\n        return this.animation.state;\n    }\n    set speed(newSpeed) {\n        this.animation.speed = newSpeed;\n    }\n    get startTime() {\n        return this.animation.startTime;\n    }\n    attachTimeline(timeline) {\n        if (this._animation) {\n            this.stopTimeline = this.animation.attachTimeline(timeline);\n        }\n        else {\n            this.pendingTimeline = timeline;\n        }\n        return () => this.stop();\n    }\n    play() {\n        this.animation.play();\n    }\n    pause() {\n        this.animation.pause();\n    }\n    complete() {\n        this.animation.complete();\n    }\n    cancel() {\n        if (this._animation) {\n            this.animation.cancel();\n        }\n        this.keyframeResolver?.cancel();\n    }\n}\n\nexport { AsyncMotionValueAnimation };\n//# sourceMappingURL=AsyncMotionValueAnimation.mjs.map\n","class GroupAnimation {\n    constructor(animations) {\n        // Bound to accomadate common `return animation.stop` pattern\n        this.stop = () => this.runAll(\"stop\");\n        this.animations = animations.filter(Boolean);\n    }\n    get finished() {\n        return Promise.all(this.animations.map((animation) => animation.finished));\n    }\n    /**\n     * TODO: Filter out cancelled or stopped animations before returning\n     */\n    getAll(propName) {\n        return this.animations[0][propName];\n    }\n    setAll(propName, newValue) {\n        for (let i = 0; i < this.animations.length; i++) {\n            this.animations[i][propName] = newValue;\n        }\n    }\n    attachTimeline(timeline) {\n        const subscriptions = this.animations.map((animation) => animation.attachTimeline(timeline));\n        return () => {\n            subscriptions.forEach((cancel, i) => {\n                cancel && cancel();\n                this.animations[i].stop();\n            });\n        };\n    }\n    get time() {\n        return this.getAll(\"time\");\n    }\n    set time(time) {\n        this.setAll(\"time\", time);\n    }\n    get speed() {\n        return this.getAll(\"speed\");\n    }\n    set speed(speed) {\n        this.setAll(\"speed\", speed);\n    }\n    get state() {\n        return this.getAll(\"state\");\n    }\n    get startTime() {\n        return this.getAll(\"startTime\");\n    }\n    get duration() {\n        return getMax(this.animations, \"duration\");\n    }\n    get iterationDuration() {\n        return getMax(this.animations, \"iterationDuration\");\n    }\n    runAll(methodName) {\n        this.animations.forEach((controls) => controls[methodName]());\n    }\n    play() {\n        this.runAll(\"play\");\n    }\n    pause() {\n        this.runAll(\"pause\");\n    }\n    cancel() {\n        this.runAll(\"cancel\");\n    }\n    complete() {\n        this.runAll(\"complete\");\n    }\n}\nfunction getMax(animations, propName) {\n    let max = 0;\n    for (let i = 0; i < animations.length; i++) {\n        const value = animations[i][propName];\n        if (value !== null && value > max) {\n            max = value;\n        }\n    }\n    return max;\n}\n\nexport { GroupAnimation };\n//# sourceMappingURL=GroupAnimation.mjs.map\n","import { GroupAnimation } from './GroupAnimation.mjs';\n\nclass GroupAnimationWithThen extends GroupAnimation {\n    then(onResolve, _onReject) {\n        return this.finished.finally(onResolve).then(() => { });\n    }\n}\n\nexport { GroupAnimationWithThen };\n//# sourceMappingURL=GroupAnimationWithThen.mjs.map\n","import { warnOnce, SubscriptionManager, velocityPerSecond } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n    return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n    current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n    /**\n     * @param init - The initiating value\n     * @param config - Optional configuration options\n     *\n     * -  `transformer`: A function to transform incoming values with.\n     */\n    constructor(init, options = {}) {\n        /**\n         * Tracks whether this value can output a velocity. Currently this is only true\n         * if the value is numerical, but we might be able to widen the scope here and support\n         * other value types.\n         *\n         * @internal\n         */\n        this.canTrackVelocity = null;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        this.updateAndNotify = (v) => {\n            const currentTime = time.now();\n            /**\n             * If we're updating the value during another frame or eventloop\n             * than the previous frame, then the we set the previous frame value\n             * to current.\n             */\n            if (this.updatedAt !== currentTime) {\n                this.setPrevFrameValue();\n            }\n            this.prev = this.current;\n            this.setCurrent(v);\n            // Update update subscribers\n            if (this.current !== this.prev) {\n                this.notifyChange();\n                if (this.dependents) {\n                    for (const dependent of this.dependents) {\n                        dependent.dirty();\n                    }\n                }\n            }\n        };\n        this.hasAnimated = false;\n        this.setCurrent(init);\n        this.owner = options.owner;\n    }\n    setCurrent(current) {\n        this.current = current;\n        this.updatedAt = time.now();\n        if (this.canTrackVelocity === null && current !== undefined) {\n            this.canTrackVelocity = isFloat(this.current);\n        }\n    }\n    setPrevFrameValue(prevFrameValue = this.current) {\n        this.prevFrameValue = prevFrameValue;\n        this.prevUpdatedAt = this.updatedAt;\n    }\n    /**\n     * Adds a function that will be notified when the `MotionValue` is updated.\n     *\n     * It returns a function that, when called, will cancel the subscription.\n     *\n     * When calling `onChange` inside a React component, it should be wrapped with the\n     * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n     * from the `useEffect` function to ensure you don't add duplicate subscribers..\n     *\n     * ```jsx\n     * export const MyComponent = () => {\n     *   const x = useMotionValue(0)\n     *   const y = useMotionValue(0)\n     *   const opacity = useMotionValue(1)\n     *\n     *   useEffect(() => {\n     *     function updateOpacity() {\n     *       const maxXY = Math.max(x.get(), y.get())\n     *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\n     *       opacity.set(newOpacity)\n     *     }\n     *\n     *     const unsubscribeX = x.on(\"change\", updateOpacity)\n     *     const unsubscribeY = y.on(\"change\", updateOpacity)\n     *\n     *     return () => {\n     *       unsubscribeX()\n     *       unsubscribeY()\n     *     }\n     *   }, [])\n     *\n     *   return <motion.div style={{ x }} />\n     * }\n     * ```\n     *\n     * @param subscriber - A function that receives the latest value.\n     * @returns A function that, when called, will cancel this subscription.\n     *\n     * @deprecated\n     */\n    onChange(subscription) {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n        }\n        return this.on(\"change\", subscription);\n    }\n    on(eventName, callback) {\n        var _a;\n        if (eventName === \"change\")\n            return this.onChangeSubscribe(callback);\n        return ((_a = this.events)[eventName] || (_a[eventName] = new SubscriptionManager())).add(callback);\n    }\n    onChangeSubscribe(callback) {\n        const { events } = this;\n        if (!events.change && !this.changeSubscriber) {\n            this.changeSubscriber = callback;\n        }\n        else {\n            if (!events.change) {\n                events.change = new SubscriptionManager();\n                events.change.add(this.changeSubscriber);\n                this.changeSubscriber = undefined;\n            }\n            events.change.add(callback);\n        }\n        return () => {\n            if (this.changeSubscriber === callback) {\n                this.changeSubscriber = undefined;\n            }\n            else {\n                events.change?.remove(callback);\n            }\n            this.stopIfUnobserved();\n        };\n    }\n    /**\n     * If we have no more change listeners by the start\n     * of the next frame, stop active animations.\n     */\n    stopIfUnobserved() {\n        frame.read(() => {\n            if (!this.changeSubscriber && !this.events.change?.getSize()) {\n                this.stop();\n            }\n        });\n    }\n    clearListeners() {\n        this.changeSubscriber = undefined;\n        for (const eventManagers in this.events) {\n            this.events[eventManagers].clear();\n        }\n    }\n    /**\n     * Attaches a passive effect to the `MotionValue`.\n     */\n    attach(passiveEffect, stopPassiveEffect) {\n        this.passiveEffect = passiveEffect;\n        this.stopPassiveEffect = stopPassiveEffect;\n    }\n    /**\n     * Sets the state of the `MotionValue`.\n     *\n     * @remarks\n     *\n     * ```jsx\n     * const x = useMotionValue(0)\n     * x.set(10)\n     * ```\n     *\n     * @param latest - Latest value to set.\n     * @param render - Whether to notify render subscribers. Defaults to `true`\n     *\n     * @public\n     */\n    set(v) {\n        if (!this.passiveEffect) {\n            this.updateAndNotify(v);\n        }\n        else {\n            this.passiveEffect(v, this.updateAndNotify);\n        }\n    }\n    setWithVelocity(prev, current, delta) {\n        this.set(current);\n        this.prev = undefined;\n        this.prevFrameValue = prev;\n        this.prevUpdatedAt = this.updatedAt - delta;\n    }\n    /**\n     * Set the state of the `MotionValue`, stopping any active animations,\n     * effects, and resets velocity to `0`.\n     */\n    jump(v, endAnimation = true) {\n        this.updateAndNotify(v);\n        this.prev = v;\n        this.prevUpdatedAt = this.prevFrameValue = undefined;\n        endAnimation && this.stop();\n        if (this.stopPassiveEffect)\n            this.stopPassiveEffect();\n    }\n    dirty() {\n        this.notifyChange();\n    }\n    notifyChange() {\n        const { current, changeSubscriber } = this;\n        /**\n         * One or the other exists. Subscribing during the direct\n         * subscriber's call moves it into a new manager, which must not\n         * then be notified for the same change.\n         */\n        if (changeSubscriber) {\n            changeSubscriber(current);\n        }\n        else {\n            this.events.change?.notify(current);\n        }\n    }\n    addDependent(dependent) {\n        if (!this.dependents) {\n            this.dependents = new Set();\n        }\n        this.dependents.add(dependent);\n    }\n    removeDependent(dependent) {\n        if (this.dependents) {\n            this.dependents.delete(dependent);\n        }\n    }\n    /**\n     * Returns the latest state of `MotionValue`\n     *\n     * @returns - The latest state of `MotionValue`\n     *\n     * @public\n     */\n    get() {\n        if (collectMotionValues.current) {\n            collectMotionValues.current.push(this);\n        }\n        return this.current;\n    }\n    /**\n     * @public\n     */\n    getPrevious() {\n        return this.prev;\n    }\n    /**\n     * Returns the latest velocity of `MotionValue`\n     *\n     * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n     *\n     * @public\n     */\n    getVelocity() {\n        const currentTime = time.now();\n        if (!this.canTrackVelocity ||\n            this.prevFrameValue === undefined ||\n            currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n            return 0;\n        }\n        const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n        // Casts because of parseFloat's poor typing\n        return velocityPerSecond(parseFloat(this.current) -\n            parseFloat(this.prevFrameValue), delta);\n    }\n    /**\n     * Registers a new animation to control this `MotionValue`. Only one\n     * animation can drive a `MotionValue` at one time.\n     *\n     * ```jsx\n     * value.start()\n     * ```\n     *\n     * @param animation - A function that starts the provided animation\n     */\n    start(startAnimation) {\n        this.stop();\n        return new Promise((resolve) => {\n            this.hasAnimated = true;\n            /**\n             * Complete synchronously via the callback rather than chaining a\n             * second promise per animation. Guard against animations that\n             * complete before startAnimation has returned.\n             */\n            let isComplete = false;\n            let animation;\n            // eslint-disable-next-line prefer-const -- read by the callback before assignment when completing synchronously\n            animation = startAnimation(() => {\n                isComplete = true;\n                this.events.animationComplete?.notify();\n                if (this.animation === animation)\n                    this.clearAnimation();\n                resolve();\n            });\n            if (!isComplete)\n                this.animation = animation;\n            this.events.animationStart?.notify();\n        });\n    }\n    /**\n     * Stop the currently active animation.\n     *\n     * @public\n     */\n    stop() {\n        if (this.animation) {\n            this.animation.stop();\n            if (this.events.animationCancel) {\n                this.events.animationCancel.notify();\n            }\n        }\n        this.clearAnimation();\n    }\n    /**\n     * Returns `true` if this value is currently animating.\n     *\n     * @public\n     */\n    isAnimating() {\n        return !!this.animation;\n    }\n    clearAnimation() {\n        // Assign rather than delete to keep the object's shape stable\n        this.animation = undefined;\n    }\n    /**\n     * Destroy and clean up subscribers to this `MotionValue`.\n     *\n     * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n     * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n     * created a `MotionValue` via the `motionValue` function.\n     *\n     * @public\n     */\n    destroy() {\n        this.dependents?.clear();\n        this.events.destroy?.notify();\n        this.clearListeners();\n        this.stop();\n        if (this.stopPassiveEffect) {\n            this.stopPassiveEffect();\n        }\n    }\n}\nfunction motionValue(init, options) {\n    return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n//# sourceMappingURL=index.mjs.map\n","/**\n * If `transition` has `inherit: true`, shallow-merge it with\n * `parentTransition` (child keys win) and strip the `inherit` key.\n * Otherwise return `transition` unchanged.\n */\nfunction resolveTransition(transition, parentTransition) {\n    if (transition?.inherit && parentTransition) {\n        const { inherit: _, ...rest } = transition;\n        return { ...parentTransition, ...rest };\n    }\n    return transition;\n}\n\nexport { resolveTransition };\n//# sourceMappingURL=resolve-transition.mjs.map\n","import { resolveTransition } from './resolve-transition.mjs';\n\nfunction getValueTransition(transition, key) {\n    const valueTransition = transition?.[key] ??\n        transition?.[\"default\"] ??\n        transition;\n    if (valueTransition !== transition) {\n        return resolveTransition(valueTransition, transition);\n    }\n    return valueTransition;\n}\n\nexport { getValueTransition };\n//# sourceMappingURL=get-value-transition.mjs.map\n","import { transformProps } from '../../render/utils/keys-transform.mjs';\n\nconst underDampedSpring = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n    restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n    type: \"spring\",\n    stiffness: 550,\n    damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n    restSpeed: 10,\n});\nconst keyframesTransition = {\n    type: \"keyframes\",\n    duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n    type: \"keyframes\",\n    ease: [0.25, 0.1, 0.35, 1],\n    duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n    if (keyframes.length > 2) {\n        return keyframesTransition;\n    }\n    else if (transformProps.has(valueKey)) {\n        return valueKey.startsWith(\"scale\")\n            ? criticallyDampedSpring(keyframes[1])\n            : underDampedSpring;\n    }\n    return ease;\n};\n\nexport { getDefaultTransition };\n//# sourceMappingURL=default-transitions.mjs.map\n","const orchestrationKeys = new Set([\n    \"when\",\n    \"delay\",\n    \"delayChildren\",\n    \"staggerChildren\",\n    \"staggerDirection\",\n    \"repeat\",\n    \"repeatType\",\n    \"repeatDelay\",\n    \"from\",\n    \"elapsed\",\n]);\n/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined(transition) {\n    for (const key in transition) {\n        if (!orchestrationKeys.has(key))\n            return true;\n    }\n    return false;\n}\n\nexport { isTransitionDefined };\n//# sourceMappingURL=is-transition-defined.mjs.map\n","import { secondsToMilliseconds, MotionGlobalConfig } from 'motion-utils';\nimport { AsyncMotionValueAnimation } from '../AsyncMotionValueAnimation.mjs';\nimport { JSAnimation } from '../JSAnimation.mjs';\nimport { getValueTransition } from '../utils/get-value-transition.mjs';\nimport { makeAnimationInstant } from '../utils/make-animation-instant.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { getFinalKeyframe } from '../keyframes/get-final.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n    const valueTransition = getValueTransition(transition, name) || {};\n    /**\n     * Most transition values are currently completely overwritten by value-specific\n     * transitions. In the future it'd be nicer to blend these transitions. But for now\n     * delay actually does inherit from the root transition if not value-specific.\n     */\n    const delay = valueTransition.delay || transition.delay || 0;\n    /**\n     * Elapsed isn't a public transition option but can be passed through from\n     * optimized appear effects in milliseconds.\n     */\n    let { elapsed = 0 } = transition;\n    elapsed = elapsed - secondsToMilliseconds(delay);\n    const options = {\n        keyframes: Array.isArray(target) ? target : [null, target],\n        ease: \"easeOut\",\n        velocity: value.getVelocity(),\n        ...valueTransition,\n        delay: -elapsed,\n        onUpdate: (v) => {\n            value.set(v);\n            valueTransition.onUpdate && valueTransition.onUpdate(v);\n        },\n        onComplete: () => {\n            onComplete();\n            valueTransition.onComplete && valueTransition.onComplete();\n        },\n        name,\n        motionValue: value,\n        element: isHandoff ? undefined : element,\n    };\n    /**\n     * If there's no transition defined for this value, we can generate\n     * unique transition settings for this value.\n     */\n    if (!isTransitionDefined(valueTransition)) {\n        Object.assign(options, getDefaultTransition(name, options));\n    }\n    /**\n     * Both WAAPI and our internal animation functions use durations\n     * as defined by milliseconds, while our external API defines them\n     * as seconds.\n     */\n    options.duration && (options.duration = secondsToMilliseconds(options.duration));\n    options.repeatDelay && (options.repeatDelay = secondsToMilliseconds(options.repeatDelay));\n    /**\n     * Support deprecated way to set initial value. Prefer keyframe syntax.\n     */\n    if (options.from !== undefined) {\n        options.keyframes[0] = options.from;\n    }\n    let shouldSkip = false;\n    if (options.type === false ||\n        (options.duration === 0 && !options.repeatDelay)) {\n        makeAnimationInstant(options);\n        if (options.delay === 0) {\n            shouldSkip = true;\n        }\n    }\n    if (MotionGlobalConfig.instantAnimations ||\n        MotionGlobalConfig.skipAnimations ||\n        element?.shouldSkipAnimations ||\n        valueTransition.skipAnimations) {\n        shouldSkip = true;\n        makeAnimationInstant(options);\n        options.delay = 0;\n    }\n    /**\n     * If the transition type or easing has been explicitly set by the user\n     * then we don't want to allow flattening the animation.\n     */\n    options.allowFlatten = !valueTransition.type && !valueTransition.ease;\n    /**\n     * If we can or must skip creating the animation, and apply only\n     * the final keyframe, do so. We also check once keyframes are resolved but\n     * this early check prevents the need to create an animation at all.\n     */\n    if (shouldSkip && !isHandoff && value.get() !== undefined) {\n        const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n        if (finalKeyframe !== undefined) {\n            frame.update(() => {\n                options.onUpdate(finalKeyframe);\n                options.onComplete();\n            });\n            return;\n        }\n    }\n    return valueTransition.isSync\n        ? new JSAnimation(options)\n        : new AsyncMotionValueAnimation(options);\n};\n\nexport { animateMotionValue };\n//# sourceMappingURL=motion-value.mjs.map\n","import { invariant, isNumericalString } from 'motion-utils';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n    const match = splitCSSVariableRegex.exec(current);\n    if (!match)\n        return [,];\n    const [, token1, token2, fallback] = match;\n    return [`--${token1 ?? token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n    invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`, \"max-css-var-depth\");\n    const [token, fallback] = parseCSSVariable(current);\n    // No CSS variable detected\n    if (!token)\n        return;\n    // Attempt to read this CSS variable off the element\n    const resolved = window.getComputedStyle(element).getPropertyValue(token);\n    if (resolved) {\n        const trimmed = resolved.trim();\n        return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n    }\n    return isCSSVariableToken(fallback)\n        ? getVariableValue(fallback, element, depth + 1)\n        : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n//# sourceMappingURL=css-variables-conversion.mjs.map\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n    \"width\",\n    \"height\",\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n//# sourceMappingURL=keys-position.mjs.map\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n//# sourceMappingURL=is-motion-value.mjs.map\n","function camelToDash(str) {\n    return str.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);\n}\n\nexport { camelToDash };\n//# sourceMappingURL=camel-to-dash.mjs.map\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n    test: (v) => v === \"auto\",\n    parse: (v) => v,\n};\n\nexport { auto };\n//# sourceMappingURL=auto.mjs.map\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n//# sourceMappingURL=test.mjs.map\n","import { auto } from './auto.mjs';\nimport { number } from './numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from './numbers/units.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n//# sourceMappingURL=dimensions.mjs.map\n","import { isZeroValueString } from 'motion-utils';\n\nfunction isNone(value) {\n    if (typeof value === \"number\") {\n        return value === 0;\n    }\n    else if (value !== null) {\n        return value === \"none\" || value === \"0\" || isZeroValueString(value);\n    }\n    else {\n        return true;\n    }\n}\n\nexport { isNone };\n//# sourceMappingURL=is-none.mjs.map\n","import { hasComplexValues } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../../value/types/utils/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n    let i = 0;\n    let animatableTemplate = undefined;\n    while (i < unresolvedKeyframes.length && !animatableTemplate) {\n        const keyframe = unresolvedKeyframes[i];\n        if (typeof keyframe === \"string\" &&\n            !invalidTemplates.has(keyframe) &&\n            hasComplexValues(keyframe)) {\n            animatableTemplate = unresolvedKeyframes[i];\n        }\n        i++;\n    }\n    if (animatableTemplate && name) {\n        for (const noneIndex of noneKeyframeIndexes) {\n            /**\n             * A zero-valued template like \"0%\" is already its own\n             * animatable none, so there's nothing to derive.\n             */\n            if (unresolvedKeyframes[noneIndex] === animatableTemplate)\n                continue;\n            unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n        }\n    }\n}\n\nexport { makeNoneKeyframesAnimatable };\n//# sourceMappingURL=make-none-animatable.mjs.map\n","import { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { findDimensionValueType } from '../../value/types/dimensions.mjs';\nimport { getVariableValue } from '../utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken, containsCSSVariable } from '../utils/is-css-variable.mjs';\nimport { KeyframeResolver } from './KeyframesResolver.mjs';\nimport { isNone } from './utils/is-none.mjs';\nimport { makeNoneKeyframesAnimatable } from './utils/make-none-animatable.mjs';\nimport { positionalValues, isNumOrPxType } from './utils/unit-conversion.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n        super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, element, name } = this;\n        if (!element || !element.current)\n            return;\n        super.readKeyframes();\n        /**\n         * If any keyframe is a CSS variable, we need to find its value by sampling the element\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            let keyframe = unresolvedKeyframes[i];\n            if (typeof keyframe === \"string\") {\n                keyframe = keyframe.trim();\n                if (isCSSVariableToken(keyframe)) {\n                    const resolved = getVariableValue(keyframe, element.current);\n                    if (resolved !== undefined) {\n                        unresolvedKeyframes[i] = resolved;\n                    }\n                    if (i === unresolvedKeyframes.length - 1) {\n                        this.finalKeyframe = keyframe;\n                    }\n                }\n            }\n        }\n        /**\n         * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n         * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n         * have a far bigger performance impact.\n         */\n        this.resolveNoneKeyframes();\n        /**\n         * Check to see if unit type has changed. If so schedule jobs that will\n         * temporarily set styles to the destination keyframes.\n         * Skip if we have more than two keyframes or this isn't a positional value.\n         * TODO: We can throw if there are multiple keyframes and the value type changes.\n         */\n        if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n            return;\n        }\n        const [origin, target] = unresolvedKeyframes;\n        // Two numbers share a unit, so skip the value type search.\n        if (typeof origin === \"number\" && typeof target === \"number\")\n            return;\n        const originType = findDimensionValueType(origin);\n        const targetType = findDimensionValueType(target);\n        /**\n         * If one keyframe contains embedded CSS variables (e.g. in calc()) and the other\n         * doesn't, we need to measure to convert to pixels. This handles GitHub issue #3410.\n         */\n        const originHasVar = containsCSSVariable(origin);\n        const targetHasVar = containsCSSVariable(target);\n        if (originHasVar !== targetHasVar && positionalValues[name]) {\n            this.needsMeasurement = true;\n            return;\n        }\n        /**\n         * Either we don't recognise these value types or we can animate between them.\n         */\n        if (originType === targetType)\n            return;\n        /**\n         * If both values are numbers or pixels, we can animate between them by\n         * converting them to numbers.\n         */\n        if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n            for (let i = 0; i < unresolvedKeyframes.length; i++) {\n                const value = unresolvedKeyframes[i];\n                if (typeof value === \"string\") {\n                    unresolvedKeyframes[i] = parseFloat(value);\n                }\n            }\n        }\n        else if (positionalValues[name]) {\n            /**\n             * Else, the only way to resolve this is by measuring the element.\n             */\n            this.needsMeasurement = true;\n        }\n    }\n    resolveNoneKeyframes() {\n        const { unresolvedKeyframes, name } = this;\n        const noneKeyframeIndexes = [];\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (unresolvedKeyframes[i] === null ||\n                isNone(unresolvedKeyframes[i])) {\n                noneKeyframeIndexes.push(i);\n            }\n        }\n        if (noneKeyframeIndexes.length) {\n            makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n        }\n    }\n    measure() {\n        const { element, name } = this;\n        return positionalValues[name](window.getComputedStyle(element.current), () => element.measureViewportBox());\n    }\n    measureInitialState() {\n        const { element, unresolvedKeyframes, name } = this;\n        if (!element || !element.current)\n            return;\n        if (name === \"height\") {\n            this.suspendedScrollY = window.pageYOffset;\n        }\n        this.measuredOrigin = this.measure();\n        unresolvedKeyframes[0] = this.measuredOrigin;\n        // Set final key frame to measure after next render\n        const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n        if (measureKeyframe !== undefined) {\n            this.motionValue?.jump(measureKeyframe, false);\n        }\n    }\n    measureEndState() {\n        const { element, unresolvedKeyframes } = this;\n        if (!element || !element.current)\n            return;\n        this.motionValue?.jump(this.measuredOrigin, false);\n        const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n        const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n        unresolvedKeyframes[finalKeyframeIndex] = this.measure();\n        if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n            this.finalKeyframe = finalKeyframe;\n        }\n        // If we removed transform values, reapply them before the next render\n        if (this.removedTransforms?.length) {\n            this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n                element\n                    .getValue(unsetTransformName)\n                    .set(unsetTransformValue);\n            });\n        }\n        this.resolveNoneKeyframes();\n    }\n}\n\nexport { DOMKeyframesResolver };\n//# sourceMappingURL=DOMKeyframesResolver.mjs.map\n","import { invariant, removeItem } from 'motion-utils';\nimport { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { animateMotionValue } from '../interfaces/motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Effects registered via `animate.addEffect()`, most recent first.\n */\nconst effects = [];\nfunction addEffect(effect) {\n    invariant(typeof effect.test === \"function\" && typeof effect.read === \"function\", \"Effects passed to animate.addEffect() need test() and read().\", \"effect-missing-test\");\n    removeEffect(effect);\n    effects.unshift(effect);\n}\nfunction removeEffect(effect) {\n    removeItem(effects, effect);\n}\nfunction findEffect(subject) {\n    return effects.find((effect) => effect.test(subject));\n}\n/**\n * Animate each key in `keyframes` on the motion value `getValue` returns\n * for it. `element` is what the keyframe resolver uses to read, render\n * and measure the subject when the effect defers resolution to it.\n */\nfunction animateValues(getValue, keyframes, transition = {}, element) {\n    const animations = [];\n    const { velocity } = transition;\n    const reduceMotion = transition.reduceMotion ?? element?.shouldReduceMotion;\n    for (const key in keyframes) {\n        if (key === \"transition\" || key === \"transitionEnd\")\n            continue;\n        const target = keyframes[key];\n        if (target === undefined)\n            continue;\n        const value = getValue(key);\n        /**\n         * If the value is already at the defined target, skip the animation.\n         * We still re-assert the value via frame.update to take precedence\n         * over any stale transitionEnd callbacks from previous animations.\n         */\n        const current = value.get();\n        if (current !== undefined &&\n            !value.isAnimating() &&\n            !Array.isArray(target) &&\n            target === current &&\n            !velocity) {\n            frame.update(() => value.set(target));\n            continue;\n        }\n        value.start(animateMotionValue(key, value, target, reduceMotion && positionalKeys.has(key)\n            ? { type: false }\n            : transition, element));\n        value.animation &&\n            animations.push(value.animation);\n    }\n    const { transitionEnd } = keyframes;\n    if (transitionEnd) {\n        const applyTransitionEnd = () => frame.update(() => {\n            for (const key in transitionEnd) {\n                getValue(key).set(transitionEnd[key]);\n            }\n        });\n        animations.length\n            ? Promise.all(animations).then(applyTransitionEnd)\n            : applyTransitionEnd();\n    }\n    return animations;\n}\n/**\n * Animate the keys of `subject` via `effect`. Motion values are created on\n * first animation and bound to the subject through the effect for the\n * rest of its life.\n *\n * Without `element`, a new value is seeded synchronously from the first\n * keyframe or `effect.read()`. With it, the value starts undefined and the\n * keyframe resolver reads the subject (batched, with unit conversion by\n * measurement) via `element`.\n */\nfunction animateEffectSubject(effect, subject, keyframes, transition, element) {\n    return animateValues((key) => {\n        let value = effect.get(subject, key);\n        if (!value) {\n            let initial;\n            if (!element) {\n                const target = keyframes[key];\n                initial =\n                    firstKeyframe(target) ??\n                        effect.read(subject, key, target);\n                invariant(initial !== undefined, `\"${key}\" can't be read from the animated subject. Provide [from, to] keyframes.`, \"effect-unreadable-value\");\n            }\n            value = motionValue(initial, { owner: element });\n            effect(subject, { [key]: value });\n        }\n        return value;\n    }, keyframes, transition, element);\n}\nfunction firstKeyframe(target) {\n    const first = Array.isArray(target) ? target[0] : undefined;\n    return first === null ? undefined : first;\n}\n\nexport { addEffect, animateEffectSubject, animateValues, findEffect, removeEffect };\n//# sourceMappingURL=effects.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an HTML element in a way\n * that works across iframes\n */\nfunction isHTMLElement(element) {\n    return (isObject(element) &&\n        \"offsetHeight\" in element &&\n        !(\"ownerSVGElement\" in element));\n}\n\nexport { isHTMLElement };\n//# sourceMappingURL=is-html-element.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an SVG element in a way\n * that works across iframes\n */\nfunction isSVGElement(element) {\n    return isObject(element) && \"ownerSVGElement\" in element;\n}\n\nexport { isSVGElement };\n//# sourceMappingURL=is-svg-element.mjs.map\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n    return type && typeof value === \"number\"\n        ? type.transform(value)\n        : value;\n};\n\nexport { getValueAsType };\n//# sourceMappingURL=get-as-type.mjs.map\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n    if (elementOrSelector == null) {\n        return [];\n    }\n    if (elementOrSelector instanceof EventTarget) {\n        return [elementOrSelector];\n    }\n    else if (typeof elementOrSelector === \"string\") {\n        let root = document;\n        if (scope) {\n            root = scope.current;\n        }\n        const elements = selectorCache?.[elementOrSelector] ??\n            root.querySelectorAll(elementOrSelector);\n        return elements ? Array.from(elements) : [];\n    }\n    return Array.from(elementOrSelector).filter((element) => element != null);\n}\n\nexport { resolveElements };\n//# sourceMappingURL=resolve-elements.mjs.map\n","import { frame } from '../frameloop/frame.mjs';\n\nclass MotionValueState {\n    /**\n     * @param step - The frameloop step renders are scheduled in. Defaults\n     * to `frame.render`. Effects that feed a render loop running in\n     * `frame.render` (GPU scenes) should write in `frame.preRender`.\n     */\n    constructor(step = frame.render) {\n        this.step = step;\n        this.values = new Map();\n        /**\n         * Renders scheduled for the next flush, usually one or two (values\n         * bound to the same computed render, e.g. `x` and `y` to `transform`,\n         * share an entry). Tracked with a count rather than truncating the\n         * array so no backing store is reallocated every frame. Kept per\n         * state so pending writes can be flushed synchronously before the\n         * subject is measured.\n         */\n        this.pending = [];\n        this.numPending = 0;\n        /**\n         * Run the pending renders. Resetting the count first means a render\n         * scheduled while flushing lands in the next frame, as with the\n         * frameloop itself.\n         */\n        this.flush = () => {\n            const { pending, numPending } = this;\n            this.numPending = 0;\n            for (let i = 0; i < numPending; i++)\n                pending[i]();\n        };\n    }\n    /**\n     * @param render - Writes the value to the subject. Renders read the\n     * motion value directly rather than a cached copy, so there is one\n     * place a value lives.\n     * @param computed - A value already in this state (e.g. `transform`)\n     * whose render should run whenever `value` changes.\n     */\n    set(name, value, render, computed) {\n        this.values.get(name)?.onRemove();\n        if (computed) {\n            for (const entry of this.values.values()) {\n                if (entry.value === computed)\n                    render = entry.render;\n            }\n        }\n        const onChange = () => render && this.schedule(render);\n        /**\n         * Values created ahead of a DOM read start out undefined and\n         * have nothing to render until they're set.\n         */\n        value.get() !== undefined && onChange();\n        const cancelOnChange = value.on(\"change\", onChange);\n        const onRemove = () => {\n            cancelOnChange();\n            render && !computed && this.cancel(render);\n            this.values.delete(name);\n        };\n        this.values.set(name, {\n            value,\n            render: computed ? undefined : render,\n            onRemove,\n        });\n        return onRemove;\n    }\n    get(name) {\n        return this.values.get(name)?.value;\n    }\n    /**\n     * Detach every value from this state and return them, so another\n     * renderer can take them over. The state stays cached by its effect,\n     * so the bound transforms are reset too rather than leaking into\n     * values bound later.\n     */\n    release() {\n        const values = new Map();\n        this.values.forEach((entry, name) => {\n            values.set(name, entry.value);\n            entry.onRemove();\n        });\n        this.transformKeys = this.transformValues = undefined;\n        return values;\n    }\n    schedule(render) {\n        const { pending, numPending } = this;\n        for (let i = 0; i < numPending; i++) {\n            if (pending[i] === render)\n                return;\n        }\n        numPending || this.step(this.flush);\n        pending[this.numPending++] = render;\n    }\n    cancel(render) {\n        const { pending } = this;\n        for (let i = 0; i < this.numPending; i++) {\n            if (pending[i] === render) {\n                pending[i] = pending[--this.numPending];\n                return;\n            }\n        }\n    }\n}\n\nexport { MotionValueState };\n//# sourceMappingURL=MotionValueState.mjs.map\n","import { MotionValueState } from '../MotionValueState.mjs';\n\nfunction createEffect(addValue, { step, ...options } = {}) {\n    const stateCache = new WeakMap();\n    const effect = (subject, values) => {\n        const state = stateCache.get(subject) ?? new MotionValueState(step);\n        stateCache.set(subject, state);\n        const subscriptions = [];\n        for (const key in values) {\n            const value = values[key];\n            const remove = addValue(subject, state, key, value);\n            subscriptions.push(remove);\n        }\n        return () => {\n            for (const cancel of subscriptions)\n                cancel();\n        };\n    };\n    return Object.assign(effect, options, {\n        get: (subject, key) => stateCache.get(subject)?.get(key),\n        flush: (subject) => stateCache.get(subject)?.flush(),\n        state: (subject) => stateCache.get(subject),\n    });\n}\n\nexport { createEffect };\n//# sourceMappingURL=create-effect.mjs.map\n","import { transformValueTypes } from '../../value/types/maps/transform.mjs';\nimport { getValueAsType } from '../../value/types/utils/get-as-type.mjs';\n\nconst translateAlias = {\n    x: \"translateX\",\n    y: \"translateY\",\n    z: \"translateZ\",\n    transformPerspective: \"perspective\",\n};\n/**\n * Cache of `translateX(`-style openers so each render is a few string\n * concatenations rather than a template per transform.\n */\nconst openers = {};\nfunction buildTransform(state) {\n    let transform = \"\";\n    const { transformKeys: keys = [], transformValues: values = {} } = state;\n    /**\n     * Loop over the bound transforms in order, adding the ones that\n     * aren't at their default value to the transform string.\n     */\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const value = values[key].get();\n        if (value === undefined)\n            continue;\n        const parsed = typeof value === \"number\" ? value : parseFloat(value);\n        if (parsed !== (key.startsWith(\"scale\") ? 1 : 0)) {\n            transform +=\n                (transform && \" \") +\n                    (openers[key] ||\n                        (openers[key] = (translateAlias[key] || key) + \"(\")) +\n                    getValueAsType(value, transformValueTypes[key]) +\n                    \")\";\n        }\n    }\n    // See build-transform.ts: additive `rotate()` so user `rotate` isn't\n    // clobbered. Not a `transformPropOrder` slot.\n    const pathRotation = state.get(\"pathRotation\")?.get();\n    if (pathRotation) {\n        transform +=\n            (transform && \" \") +\n                \"rotate(\" +\n                getValueAsType(pathRotation, transformValueTypes.pathRotation) +\n                \")\";\n    }\n    return transform || \"none\";\n}\n\nexport { buildTransform };\n//# sourceMappingURL=transform.mjs.map\n","import { isCSSVar } from '../../render/dom/is-css-var.mjs';\nimport { readTransformValue } from '../../render/dom/parse-transform.mjs';\nimport { transformProps, transformPropOrder } from '../../render/utils/keys-transform.mjs';\nimport { isHTMLElement } from '../../utils/is-html-element.mjs';\nimport { isSVGElement } from '../../utils/is-svg-element.mjs';\nimport { MotionValue } from '../../value/index.mjs';\nimport { numberValueTypes } from '../../value/types/maps/number.mjs';\nimport { getValueAsType } from '../../value/types/utils/get-as-type.mjs';\nimport { createSelectorEffect } from '../utils/create-dom-effect.mjs';\nimport { createEffect } from '../utils/create-effect.mjs';\nimport { buildTransform } from './transform.mjs';\n\nconst originProps = new Set([\"originX\", \"originY\", \"originZ\"]);\n/**\n * A bound value in its default unit, e.g. `originX: 50` -> `\"50%\"`.\n */\nconst styleValue = (state, key) => getValueAsType(state.get(key)?.get(), numberValueTypes[key]);\nconst addStyleValue = (element, state, key, value) => {\n    let render = undefined;\n    let computed = undefined;\n    if (transformProps.has(key)) {\n        if (key !== \"pathRotation\") {\n            const keys = (state.transformKeys ?? (state.transformKeys = []));\n            (state.transformValues ?? (state.transformValues = {}))[key] = value;\n            if (!keys.includes(key)) {\n                keys.push(key);\n                keys.sort((a, b) => transformPropOrder.indexOf(a) -\n                    transformPropOrder.indexOf(b));\n            }\n        }\n        if (!state.get(\"transform\")) {\n            // If this is an HTML element, we need to set the transform-box to fill-box\n            // to normalise the transform relative to the element's bounding box\n            if (!isHTMLElement(element) && !state.get(\"transformBox\")) {\n                addStyleValue(element, state, \"transformBox\", new MotionValue(\"fill-box\"));\n            }\n            state.set(\"transform\", new MotionValue(\"none\"), () => {\n                element.style.transform = buildTransform(state);\n            });\n        }\n        computed = state.get(\"transform\");\n    }\n    else if (originProps.has(key)) {\n        if (!state.get(\"transformOrigin\")) {\n            state.set(\"transformOrigin\", new MotionValue(\"\"), () => {\n                const originX = styleValue(state, \"originX\") ?? \"50%\";\n                const originY = styleValue(state, \"originY\") ?? \"50%\";\n                const originZ = styleValue(state, \"originZ\") ?? 0;\n                element.style.transformOrigin = `${originX} ${originY} ${originZ}`;\n            });\n        }\n        computed = state.get(\"transformOrigin\");\n    }\n    else if (isCSSVar(key)) {\n        render = () => {\n            element.style.setProperty(key, value.get());\n        };\n    }\n    else {\n        render = () => {\n            element.style[key] = getValueAsType(value.get(), numberValueTypes[key]);\n        };\n    }\n    return state.set(key, value, render, computed);\n};\nconst isStyleSubject = (subject) => isHTMLElement(subject) || isSVGElement(subject);\n/**\n * Reads the current value of a style from the element, as the initial\n * keyframe when `animate()` targets an element via this effect. Transforms\n * are parsed out of the computed matrix; everything else is the computed\n * style. Units aren't converted to match the target keyframes. A style\n * the browser can't report is 0, as a VisualElement reports it.\n */\nconst readStyleValue = (element, key) => {\n    if (transformProps.has(key)) {\n        return readTransformValue(element, key);\n    }\n    const computedStyle = getComputedStyle(element);\n    const value = isCSSVar(key)\n        ? computedStyle.getPropertyValue(key)\n        : computedStyle[key];\n    return (typeof value === \"string\" && value.trim()) || 0;\n};\n/**\n * The per-element effect `animate()` binds through, so HTML values share\n * state with a direct `styleEffect()` call. The exported `styleEffect`\n * is this wrapped to also accept selectors.\n */\nconst styleSubjectEffect = /*@__PURE__*/ createEffect(addStyleValue, {\n    test: isStyleSubject,\n    read: readStyleValue,\n});\nconst styleEffect = /*@__PURE__*/ createSelectorEffect(styleSubjectEffect);\n\nexport { addStyleValue, readStyleValue, styleEffect, styleSubjectEffect };\n//# sourceMappingURL=index.mjs.map\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { buildSVGPath } from './path.mjs';\n\nconst cssStyleProperties = [\n    \"transform\",\n    \"opacity\",\n    \"offsetDistance\",\n    \"offsetPath\",\n    \"offsetRotate\",\n    \"offsetAnchor\",\n];\n/**\n * Build SVG visual attributes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate, styleProp) {\n    buildHTMLStyles(state, latest, transformTemplate);\n    /**\n     * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n     * as normal HTML tags.\n     */\n    if (isSVGTag) {\n        if (state.style.viewBox) {\n            state.attrs.viewBox = state.style.viewBox;\n        }\n        return;\n    }\n    state.attrs = state.style;\n    state.style = {};\n    const { attrs, style } = state;\n    for (const key of cssStyleProperties) {\n        if (attrs[key] !== undefined) {\n            style[key] = attrs[key];\n            delete attrs[key];\n        }\n    }\n    if (style.transform || attrs.transformOrigin) {\n        style.transformOrigin = attrs.transformOrigin ?? \"50% 50%\";\n        delete attrs.transformOrigin;\n    }\n    if (style.transform) {\n        /**\n         * SVG's element transform-origin uses its own median as a reference.\n         * Therefore, transformBox becomes a fill-box\n         */\n        style.transformBox = styleProp?.transformBox ?? \"fill-box\";\n        delete attrs.transformBox;\n    }\n    // Render attrX/attrY/attrScale as attributes\n    if (attrX !== undefined)\n        attrs.x = attrX;\n    if (attrY !== undefined)\n        attrs.y = attrY;\n    if (attrScale !== undefined)\n        attrs.scale = attrScale;\n    // Build SVG path if one has been defined\n    if (pathLength !== undefined) {\n        buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n    }\n}\n\nexport { buildSVGAttrs, cssStyleProperties };\n//# sourceMappingURL=build-attrs.mjs.map\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\nimport { numberValueTypes } from '../../value/types/maps/number.mjs';\nimport { getValueAsType } from '../../value/types/utils/get-as-type.mjs';\nimport { createSelectorEffect } from '../utils/create-dom-effect.mjs';\nimport { createEffect } from '../utils/create-effect.mjs';\n\nfunction canSetAsProperty(element, name) {\n    if (!(name in element))\n        return false;\n    const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(element), name) ||\n        Object.getOwnPropertyDescriptor(element, name);\n    // Check if it has a setter\n    return descriptor && typeof descriptor.set === \"function\";\n}\n/**\n * `name` is the attribute written when it differs from the key the value\n * is stored under, e.g. `attrX` -> `x`. Numbers take the attribute's\n * default unit (`x: 100` -> `\"100px\"`), as they do when key and name match.\n */\nconst addAttrValue = (element, state, key, value, name = key) => {\n    const isProp = canSetAsProperty(element, name);\n    if (!isProp && (name.startsWith(\"data\") || name.startsWith(\"aria\"))) {\n        name = camelToDash(name);\n    }\n    const type = numberValueTypes[key] || numberValueTypes[name];\n    /**\n     * Set attribute directly via property if available\n     */\n    const render = isProp\n        ? () => {\n            element[name] = getValueAsType(value.get(), numberValueTypes[key]);\n        }\n        : () => {\n            const v = getValueAsType(value.get(), type);\n            if (v === null || v === undefined) {\n                element.removeAttribute(name);\n            }\n            else {\n                element.setAttribute(name, String(v));\n            }\n        };\n    return state.set(key, value, render);\n};\nconst attrEffect = /*@__PURE__*/ createSelectorEffect(\n/*@__PURE__*/ createEffect(addAttrValue));\n\nexport { addAttrValue, attrEffect };\n//# sourceMappingURL=index.mjs.map\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\nimport { cssStyleProperties } from '../../render/svg/utils/build-attrs.mjs';\nimport { transformProps } from '../../render/utils/keys-transform.mjs';\nimport { isSVGElement } from '../../utils/is-svg-element.mjs';\nimport { MotionValue } from '../../value/index.mjs';\nimport { numberValueTypes } from '../../value/types/maps/number.mjs';\nimport { addAttrValue } from '../attr/index.mjs';\nimport { addStyleValue, readStyleValue } from '../style/index.mjs';\nimport { createSelectorEffect } from '../utils/create-dom-effect.mjs';\nimport { createEffect } from '../utils/create-effect.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nfunction addSVGPathValue(element, state, key, value) {\n    frame.render(() => element.setAttribute(\"pathLength\", \"1\"));\n    if (key === \"pathOffset\") {\n        return state.set(key, value, () => {\n            // Use unitless value to avoid Safari zoom bug\n            const offset = value.get();\n            element.setAttribute(\"stroke-dashoffset\", `${-offset}`);\n        });\n    }\n    else {\n        if (!state.get(\"stroke-dasharray\")) {\n            state.set(\"stroke-dasharray\", new MotionValue(\"1 1\"), () => {\n                const pathLength = state.get(\"pathLength\")?.get() ?? 1;\n                const pathSpacing = state.get(\"pathSpacing\")?.get();\n                // Use unitless values to avoid Safari zoom bug\n                element.setAttribute(\"stroke-dasharray\", `${pathLength} ${pathSpacing ?? 1 - Number(pathLength)}`);\n            });\n        }\n        return state.set(key, value, undefined, state.get(\"stroke-dasharray\"));\n    }\n}\nconst addSVGValue = (element, state, key, value) => {\n    if (key.startsWith(\"path\")) {\n        return addSVGPathValue(element, state, key, value);\n    }\n    else if (key.startsWith(\"attr\")) {\n        return addAttrValue(element, state, key, value, convertAttrKey(key));\n    }\n    const handler = key in element.style ? addStyleValue : addAttrValue;\n    return handler(element, state, key, value);\n};\n/**\n * Reads the current value of `key` from an SVG element as the origin of\n * an animation, as the SVG VisualElement does: transforms start from\n * their defaults, the few CSS-only properties come from computed style\n * and everything else is read from the attribute, dash-cased\n * (`strokeWidth` -> `stroke-width`) or, failing that, as written\n * (`baseFrequency`).\n */\nconst readSVGValue = (element, key) => {\n    if (transformProps.has(key)) {\n        return numberValueTypes[key]?.default || 0;\n    }\n    if (cssStyleProperties.includes(key)) {\n        return readStyleValue(element, key);\n    }\n    key = convertAttrKey(key);\n    return (element.getAttribute(camelToDash(key)) ??\n        element.getAttribute(key) ??\n        undefined);\n};\n/**\n * The per-element effect `animate()` binds through, so SVG values share\n * state with a direct `svgEffect()` call.\n */\nconst svgSubjectEffect = /*@__PURE__*/ createEffect(addSVGValue, {\n    test: isSVGElement,\n    read: readSVGValue,\n});\nconst svgEffect = /*@__PURE__*/ createSelectorEffect(svgSubjectEffect);\nfunction convertAttrKey(key) {\n    return key.replace(/^attr([A-Z])/, (_, firstChar) => firstChar.toLowerCase());\n}\n\nexport { addSVGValue, readSVGValue, svgEffect, svgSubjectEffect };\n//# sourceMappingURL=index.mjs.map\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n    return {\n        x: { min: left, max: right },\n        y: { min: top, max: bottom },\n    };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n    return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n    if (!transformPoint)\n        return point;\n    const topLeft = transformPoint({ x: point.left, y: point.top });\n    const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n    return {\n        top: topLeft.y,\n        left: topLeft.x,\n        bottom: bottomRight.y,\n        right: bottomRight.x,\n    };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n//# sourceMappingURL=conversion.mjs.map\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n    return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n    const viewportBox = measureViewportBox(element, transformPagePoint);\n    const { scroll } = rootProjectionNode;\n    if (scroll) {\n        translateAxis(viewportBox.x, scroll.offset.x);\n        translateAxis(viewportBox.y, scroll.offset.y);\n    }\n    return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n//# sourceMappingURL=measure.mjs.map\n","import { styleSubjectEffect } from '../../effects/style/index.mjs';\nimport { svgSubjectEffect } from '../../effects/svg/index.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { isSVGElement } from '../../utils/is-svg-element.mjs';\nimport { DOMKeyframesResolver } from '../keyframes/DOMKeyframesResolver.mjs';\nimport { animateValues, animateEffectSubject } from './effects.mjs';\n\nconst noProps = {};\nconst getElementEffect = (element) => (isSVGElement(element)\n    ? svgSubjectEffect\n    : styleSubjectEffect);\n/**\n * Presents an effect bound to a DOM element in the shape the DOM keyframe\n * resolver and WAAPI expect, which is that of a VisualElement. Holds no\n * state: everything delegates to the effect. Goes once the resolver takes\n * an effect and subject directly.\n */\nclass EffectSubject {\n    constructor(effect, current) {\n        this.effect = effect;\n        this.current = current;\n        this.KeyframeResolver = DOMKeyframesResolver;\n    }\n    getValue(key) {\n        return this.effect.get(this.current, key);\n    }\n    readValue(key, target) {\n        return this.effect.read(this.current, key, target);\n    }\n    render() {\n        this.effect.flush(this.current);\n    }\n    measureViewportBox() {\n        return measureViewportBox(this.current);\n    }\n    getProps() {\n        return noProps;\n    }\n}\n/**\n * Animate a DOM element's styles. HTML elements are bound through\n * styleEffect, SVG through svgEffect, and both are resolved with the DOM\n * keyframe resolver so reads are batched, units are converted by\n * measurement and eligible values run on WAAPI.\n *\n * Pass the element's VisualElement (a <motion.*> component or an\n * animateLayout() node) to animate its values instead, so the two keep\n * sharing values and a renderer.\n */\nfunction animateElement(element, keyframes, transition, visualElement) {\n    if (visualElement) {\n        return animateValues((key) => visualElement.getValue(key, null), keyframes, transition, visualElement);\n    }\n    const effect = getElementEffect(element);\n    return animateEffectSubject(effect, element, keyframes, transition, new EffectSubject(effect, element));\n}\n/**\n * Hand the values styleEffect/svgEffect are rendering on `element`,\n * whether bound by animate() or directly, to a VisualElement that now\n * owns the element (e.g. created by animateLayout()), so a single\n * renderer drives them alongside its own values.\n */\nfunction handOffElementState(element, visualElement) {\n    const state = getElementEffect(element).state(element);\n    if (!state)\n        return;\n    const { transformKeys } = state;\n    state.release().forEach((value, key) => {\n        /**\n         * The style effect derives transform (from the bound transform\n         * keys) and transformBox itself; a VisualElement builds its own.\n         */\n        const derived = key === \"transformBox\" ||\n            (key === \"transform\" && transformKeys?.length);\n        derived || visualElement.addValue(key, value);\n    });\n}\n\nexport { animateElement, handOffElementState };\n//# sourceMappingURL=element.mjs.map\n","import { isObject } from 'motion-utils';\nimport { createEffect } from '../utils/create-effect.mjs';\n\n/**\n * Writes motion values to the properties of any object. This is\n * animate()'s fallback for subjects no registered effect claims.\n */\nconst propEffect = /*@__PURE__*/ createEffect((subject, state, key, value) => {\n    return state.set(key, value, () => {\n        subject[key] = value.get();\n    });\n}, {\n    test: (subject) => isObject(subject),\n    read: (subject, key) => {\n        const value = subject[key];\n        return typeof value === \"string\" || typeof value === \"number\"\n            ? value\n            : undefined;\n    },\n});\n\nexport { propEffect };\n//# sourceMappingURL=index.mjs.map\n","import { easingDefinitionToFunction } from 'motion-utils';\n\nfunction getOriginIndex(from, total) {\n    if (from === \"first\") {\n        return 0;\n    }\n    else {\n        const lastIndex = total - 1;\n        return from === \"last\" ? lastIndex : lastIndex / 2;\n    }\n}\nfunction stagger(duration = 0.1, { startDelay = 0, from = 0, ease } = {}) {\n    return (i, total) => {\n        const fromIndex = typeof from === \"number\" ? from : getOriginIndex(from, total);\n        const distance = Math.abs(fromIndex - i);\n        let delay = duration * distance;\n        if (ease) {\n            const maxDelay = total * duration;\n            const easingFunction = easingDefinitionToFunction(ease);\n            delay = easingFunction(delay / maxDelay) * maxDelay;\n        }\n        return startDelay + delay;\n    };\n}\n\nexport { getOriginIndex, stagger };\n//# sourceMappingURL=stagger.mjs.map\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n//# sourceMappingURL=store.mjs.map\n","import { animateMotionValue } from '../interfaces/motion-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n    const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n    motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n    return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n//# sourceMappingURL=single-value.mjs.map\n","function isDOMKeyframes(keyframes) {\n    return typeof keyframes === \"object\" && !Array.isArray(keyframes);\n}\n\nexport { isDOMKeyframes };\n//# sourceMappingURL=is-dom-keyframes.mjs.map\n","import { resolveElements } from 'motion-dom';\nimport { isDOMKeyframes } from '../utils/is-dom-keyframes.mjs';\n\nfunction resolveSubjects(subject, keyframes, scope, selectorCache) {\n    if (subject == null) {\n        return [];\n    }\n    if (typeof subject === \"string\" && isDOMKeyframes(keyframes)) {\n        return resolveElements(subject, scope, selectorCache);\n    }\n    else if (subject instanceof NodeList) {\n        return Array.from(subject);\n    }\n    else if (Array.isArray(subject)) {\n        return subject.filter((s) => s != null);\n    }\n    else {\n        return [subject];\n    }\n}\n\nexport { resolveSubjects };\n//# sourceMappingURL=resolve-subjects.mjs.map\n","function calculateRepeatDuration(duration, repeat, repeatDelay) {\n    return duration * (repeat + 1) + repeatDelay * repeat;\n}\n\nexport { calculateRepeatDuration };\n//# sourceMappingURL=calc-repeat-duration.mjs.map\n","/**\n * Given a absolute or relative time definition and current/prev time state of the sequence,\n * calculate an absolute time for the next keyframes.\n */\nfunction calcNextTime(current, next, prev, labels) {\n    if (typeof next === \"number\") {\n        return next;\n    }\n    else if (next.startsWith(\"-\") || next.startsWith(\"+\")) {\n        return Math.max(0, current + parseFloat(next));\n    }\n    else if (next === \"<\") {\n        return prev;\n    }\n    else if (next.startsWith(\"<\")) {\n        return Math.max(0, prev + parseFloat(next.slice(1)));\n    }\n    else {\n        return labels.get(next) ?? current;\n    }\n}\n\nexport { calcNextTime };\n//# sourceMappingURL=calc-time.mjs.map\n","import { mixNumber } from 'motion-dom';\nimport { getEasingForSegment, removeItem } from 'motion-utils';\n\nfunction eraseKeyframes(sequence, startTime, endTime) {\n    for (let i = 0; i < sequence.length; i++) {\n        const keyframe = sequence[i];\n        if (keyframe.at > startTime && keyframe.at < endTime) {\n            removeItem(sequence, keyframe);\n            // If we remove this item we have to push the pointer back one\n            i--;\n        }\n    }\n}\nfunction addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) {\n    /**\n     * Erase every existing value between currentTime and targetTime,\n     * this will essentially splice this timeline into any currently\n     * defined ones.\n     */\n    eraseKeyframes(sequence, startTime, endTime);\n    for (let i = 0; i < keyframes.length; i++) {\n        sequence.push({\n            value: keyframes[i],\n            at: mixNumber(startTime, endTime, offset[i]),\n            easing: getEasingForSegment(easing, i),\n        });\n    }\n}\n\nexport { addKeyframes, eraseKeyframes };\n//# sourceMappingURL=edit.mjs.map\n","/**\n * Take an array of times that represent repeated keyframes. For instance\n * if we have original times of [0, 0.5, 1] then our repeated times will\n * be [0, 0.5, 1, 1, 1.5, 2]. Loop over the times and scale them back\n * down to a 0-1 scale.\n *\n * `repeatDelayUnits` is the repeatDelay expressed in units of a single\n * iteration's duration, so the total span equals `(repeat + 1) + repeat * repeatDelayUnits`.\n */\nfunction normalizeTimes(times, repeat, repeatDelayUnits = 0) {\n    const totalUnits = repeat + 1 + repeat * repeatDelayUnits;\n    for (let i = 0; i < times.length; i++) {\n        times[i] = times[i] / totalUnits;\n    }\n}\n\nexport { normalizeTimes };\n//# sourceMappingURL=normalize-times.mjs.map\n","function compareByTime(a, b) {\n    if (a.at === b.at) {\n        if (a.value === null)\n            return 1;\n        if (b.value === null)\n            return -1;\n        return 0;\n    }\n    else {\n        return a.at - b.at;\n    }\n}\n\nexport { compareByTime };\n//# sourceMappingURL=sort.mjs.map\n","import { isMotionValue, defaultOffset, isGenerator, createGeneratorEasing, fillOffset } from 'motion-dom';\nimport { progress, secondsToMilliseconds, warning, reverseEasing, getEasingForSegment } from 'motion-utils';\nimport { resolveSubjects } from '../animate/resolve-subjects.mjs';\nimport { calculateRepeatDuration } from './utils/calc-repeat-duration.mjs';\nimport { calcNextTime } from './utils/calc-time.mjs';\nimport { addKeyframes } from './utils/edit.mjs';\nimport { normalizeTimes } from './utils/normalize-times.mjs';\nimport { compareByTime } from './utils/sort.mjs';\n\nconst defaultSegmentEasing = \"easeInOut\";\nconst MAX_REPEAT = 20;\nfunction createAnimationsFromSequence(sequence, { defaultTransition = {}, ...sequenceTransition } = {}, scope, generators) {\n    const defaultDuration = defaultTransition.duration || 0.3;\n    const animationDefinitions = new Map();\n    const sequences = new Map();\n    const elementCache = {};\n    const timeLabels = new Map();\n    let prevTime = 0;\n    let currentTime = 0;\n    let totalDuration = 0;\n    /**\n     * Build the timeline by mapping over the sequence array and converting\n     * the definitions into keyframes and offsets with absolute time values.\n     * These will later get converted into relative offsets in a second pass.\n     */\n    for (let i = 0; i < sequence.length; i++) {\n        const segment = sequence[i];\n        /**\n         * If this is a timeline label, mark it and skip the rest of this iteration.\n         */\n        if (typeof segment === \"string\") {\n            timeLabels.set(segment, currentTime);\n            continue;\n        }\n        else if (!Array.isArray(segment)) {\n            timeLabels.set(segment.name, calcNextTime(currentTime, segment.at, prevTime, timeLabels));\n            continue;\n        }\n        let [subject, keyframes, transition = {}] = segment;\n        /**\n         * If a relative or absolute time value has been specified we need to resolve\n         * it in relation to the currentTime.\n         */\n        if (transition.at !== undefined) {\n            currentTime = calcNextTime(currentTime, transition.at, prevTime, timeLabels);\n        }\n        /**\n         * Keep track of the maximum duration in this definition. This will be\n         * applied to currentTime once the definition has been parsed.\n         */\n        let maxDuration = 0;\n        const resolveValueSequence = (valueKeyframes, valueTransition, valueSequence, elementIndex = 0, numSubjects = 0) => {\n            const valueKeyframesAsList = keyframesAsList(valueKeyframes);\n            const { delay = 0, times = defaultOffset(valueKeyframesAsList), type = defaultTransition.type || \"keyframes\", repeat, repeatType, repeatDelay = 0, ...remainingTransition } = valueTransition;\n            let { ease = defaultTransition.ease || \"easeOut\", duration } = valueTransition;\n            /**\n             * Resolve stagger() if defined.\n             */\n            const calculatedDelay = typeof delay === \"function\"\n                ? delay(elementIndex, numSubjects)\n                : delay;\n            /**\n             * If this animation should and can use a spring, generate a spring easing function.\n             */\n            const numKeyframes = valueKeyframesAsList.length;\n            const createGenerator = isGenerator(type)\n                ? type\n                : generators?.[type || \"keyframes\"];\n            if (numKeyframes <= 2 && createGenerator) {\n                /**\n                 * As we're creating an easing function from a spring,\n                 * ideally we want to generate it using the real distance\n                 * between the two keyframes. However this isn't always\n                 * possible - in these situations we use 0-100.\n                 */\n                let absoluteDelta = 100;\n                if (numKeyframes === 2 &&\n                    isNumberKeyframesArray(valueKeyframesAsList)) {\n                    const delta = valueKeyframesAsList[1] - valueKeyframesAsList[0];\n                    absoluteDelta = Math.abs(delta);\n                }\n                const springTransition = {\n                    ...defaultTransition,\n                    ...remainingTransition,\n                };\n                if (duration !== undefined) {\n                    springTransition.duration = secondsToMilliseconds(duration);\n                }\n                const springEasing = createGeneratorEasing(springTransition, absoluteDelta, createGenerator);\n                ease = springEasing.ease;\n                duration = springEasing.duration;\n            }\n            duration ?? (duration = defaultDuration);\n            const startTime = currentTime + calculatedDelay;\n            /**\n             * If there's only one time offset of 0, fill in a second with length 1\n             */\n            if (times.length === 1 && times[0] === 0) {\n                times[1] = 1;\n            }\n            /**\n             * Fill out if offset if fewer offsets than keyframes\n             */\n            const remainder = times.length - valueKeyframesAsList.length;\n            remainder > 0 && fillOffset(times, remainder);\n            /**\n             * If only one value has been set, ie [1], push a null to the start of\n             * the keyframe array. This will let us mark a keyframe at this point\n             * that will later be hydrated with the previous value.\n             */\n            valueKeyframesAsList.length === 1 &&\n                valueKeyframesAsList.unshift(null);\n            /**\n             * Segments can't express `repeat: Infinity` or very large\n             * counts — they'd leave dead time after the segment or\n             * explode the keyframe array. Ignore with a warning.\n             */\n            if (repeat) {\n                warning(repeat < MAX_REPEAT, `Sequence segments can't repeat ${repeat} times — ignoring repeat option. Use a value below ${MAX_REPEAT} or apply repeat at the sequence level instead.`);\n            }\n            if (repeat && repeat < MAX_REPEAT) {\n                /**\n                 * Express repeatDelay in units of a single iteration's duration\n                 * so it can be added to the per-iteration time offsets below\n                 * before they're normalized to 0-1.\n                 */\n                const repeatDelayUnits = duration > 0 ? repeatDelay / duration : 0;\n                duration = calculateRepeatDuration(duration, repeat, repeatDelay);\n                const originalKeyframes = [...valueKeyframesAsList];\n                const originalTimes = [...times];\n                ease = Array.isArray(ease) ? [...ease] : [ease];\n                const originalEase = [...ease];\n                /**\n                 * For reverse/mirror, alternate iterations play the segment\n                 * backwards. mirror matches JSAnimation's mirroredGenerator:\n                 * reversed keyframes, easings unchanged. reverse matches\n                 * JSAnimation's iterationProgress = 1 - p: reversed\n                 * keyframes, easing array reversed AND each function easing\n                 * mapped through reverseEasing (string easings unchanged —\n                 * they're resolved later by the keyframes engine).\n                 */\n                const isFlipping = repeatType === \"reverse\" || repeatType === \"mirror\";\n                let flippedKeyframes = originalKeyframes;\n                let flippedEases = originalEase;\n                if (isFlipping) {\n                    flippedKeyframes = [...originalKeyframes].reverse();\n                    if (repeatType === \"reverse\") {\n                        flippedEases = [...originalEase]\n                            .reverse()\n                            .map((e) => typeof e === \"function\"\n                            ? reverseEasing(e)\n                            : e);\n                    }\n                }\n                for (let repeatIndex = 0; repeatIndex < repeat; repeatIndex++) {\n                    const isFlipped = isFlipping && repeatIndex % 2 === 0;\n                    const iterKeyframes = isFlipped\n                        ? flippedKeyframes\n                        : originalKeyframes;\n                    const iterEase = isFlipped ? flippedEases : originalEase;\n                    const iterStartOffset = (repeatIndex + 1) * (1 + repeatDelayUnits);\n                    /**\n                     * If repeatDelay is set, hold the previous iteration's\n                     * final value through the delay by inserting a keyframe\n                     * at the moment the next iteration begins.\n                     */\n                    if (repeatDelayUnits > 0) {\n                        valueKeyframesAsList.push(valueKeyframesAsList[valueKeyframesAsList.length - 1]);\n                        times.push(iterStartOffset);\n                        ease.push(\"linear\");\n                    }\n                    valueKeyframesAsList.push(...iterKeyframes);\n                    for (let keyframeIndex = 0; keyframeIndex < iterKeyframes.length; keyframeIndex++) {\n                        times.push(originalTimes[keyframeIndex] + iterStartOffset);\n                        ease.push(keyframeIndex === 0\n                            ? \"linear\"\n                            : getEasingForSegment(iterEase, keyframeIndex - 1));\n                    }\n                }\n                normalizeTimes(times, repeat, repeatDelayUnits);\n            }\n            const targetTime = startTime + duration;\n            /**\n             * Add keyframes, mapping offsets to absolute time.\n             */\n            addKeyframes(valueSequence, valueKeyframesAsList, ease, times, startTime, targetTime);\n            maxDuration = Math.max(calculatedDelay + duration, maxDuration);\n            totalDuration = Math.max(targetTime, totalDuration);\n        };\n        if (isMotionValue(subject)) {\n            const subjectSequence = getSubjectSequence(subject, sequences);\n            resolveValueSequence(keyframes, transition, getValueSequence(\"default\", subjectSequence));\n        }\n        else {\n            const subjects = resolveSubjects(subject, keyframes, scope, elementCache);\n            const numSubjects = subjects.length;\n            /**\n             * For every element in this segment, process the defined values.\n             */\n            for (let subjectIndex = 0; subjectIndex < numSubjects; subjectIndex++) {\n                /**\n                 * Cast necessary, but we know these are of this type\n                 */\n                keyframes = keyframes;\n                transition = transition;\n                const thisSubject = subjects[subjectIndex];\n                const subjectSequence = getSubjectSequence(thisSubject, sequences);\n                for (const key in keyframes) {\n                    resolveValueSequence(keyframes[key], getValueTransition(transition, key), getValueSequence(key, subjectSequence), subjectIndex, numSubjects);\n                }\n            }\n        }\n        prevTime = currentTime;\n        currentTime += maxDuration;\n    }\n    /**\n     * For every element and value combination create a new animation.\n     */\n    sequences.forEach((valueSequences, element) => {\n        for (const key in valueSequences) {\n            const valueSequence = valueSequences[key];\n            /**\n             * Arrange all the keyframes in ascending time order.\n             */\n            valueSequence.sort(compareByTime);\n            const keyframes = [];\n            const valueOffset = [];\n            const valueEasing = [];\n            /**\n             * For each keyframe, translate absolute times into\n             * relative offsets based on the total duration of the timeline.\n             */\n            for (let i = 0; i < valueSequence.length; i++) {\n                const { at, value, easing } = valueSequence[i];\n                keyframes.push(value);\n                valueOffset.push(progress(0, totalDuration, at));\n                valueEasing.push(easing || \"easeOut\");\n            }\n            /**\n             * If the first keyframe doesn't land on offset: 0\n             * provide one by duplicating the initial keyframe. This ensures\n             * it snaps to the first keyframe when the animation starts.\n             */\n            if (valueOffset[0] !== 0) {\n                valueOffset.unshift(0);\n                keyframes.unshift(keyframes[0]);\n                valueEasing.unshift(defaultSegmentEasing);\n            }\n            /**\n             * If the last keyframe doesn't land on offset: 1\n             * provide one with a null wildcard value. This will ensure it\n             * stays static until the end of the animation.\n             */\n            if (valueOffset[valueOffset.length - 1] !== 1) {\n                valueOffset.push(1);\n                keyframes.push(null);\n            }\n            if (!animationDefinitions.has(element)) {\n                animationDefinitions.set(element, {\n                    keyframes: {},\n                    transition: {},\n                });\n            }\n            const definition = animationDefinitions.get(element);\n            definition.keyframes[key] = keyframes;\n            /**\n             * Exclude `type` from defaultTransition since springs have been\n             * converted to duration-based easing functions in resolveValueSequence.\n             * Including `type: \"spring\"` would cause JSAnimation to error when\n             * the merged keyframes array has more than 2 keyframes.\n             */\n            const { type: _type, ...remainingDefaultTransition } = defaultTransition;\n            definition.transition[key] = {\n                ...remainingDefaultTransition,\n                duration: totalDuration,\n                ease: valueEasing,\n                times: valueOffset,\n                ...sequenceTransition,\n            };\n        }\n    });\n    return animationDefinitions;\n}\nfunction getSubjectSequence(subject, sequences) {\n    !sequences.has(subject) && sequences.set(subject, {});\n    return sequences.get(subject);\n}\nfunction getValueSequence(name, sequences) {\n    if (!sequences[name])\n        sequences[name] = [];\n    return sequences[name];\n}\nfunction keyframesAsList(keyframes) {\n    return Array.isArray(keyframes) ? keyframes : [keyframes];\n}\nfunction getValueTransition(transition, key) {\n    return transition && transition[key]\n        ? {\n            ...transition,\n            ...transition[key],\n        }\n        : { ...transition };\n}\nconst isNumber = (keyframe) => typeof keyframe === \"number\";\nconst isNumberKeyframesArray = (keyframes) => keyframes.every(isNumber);\n\nexport { createAnimationsFromSequence, getValueTransition };\n//# sourceMappingURL=create.mjs.map\n","import { animateSingleValue, animateElement, visualElementStore, animateEffectSubject, propEffect, findEffect, isMotionValue } from 'motion-dom';\nimport { invariant } from 'motion-utils';\nimport { isDOMKeyframes } from '../utils/is-dom-keyframes.mjs';\nimport { resolveSubjects } from './resolve-subjects.mjs';\n\nfunction isSingleValue(subject, keyframes) {\n    return (isMotionValue(subject) ||\n        typeof subject === \"number\" ||\n        (typeof subject === \"string\" && !isDOMKeyframes(keyframes)));\n}\n/**\n * Implementation\n */\nfunction animateSubject(subject, keyframes, options, scope) {\n    const animations = [];\n    if (isSingleValue(subject, keyframes)) {\n        animations.push(animateSingleValue(subject, isDOMKeyframes(keyframes)\n            ? keyframes.default || keyframes\n            : keyframes, options ? options.default || options : options));\n    }\n    else {\n        // Gracefully handle null/undefined subjects (e.g., from querySelector returning null)\n        if (subject == null) {\n            return animations;\n        }\n        const subjects = resolveSubjects(subject, keyframes, scope);\n        const numSubjects = subjects.length;\n        invariant(Boolean(numSubjects), \"No valid elements provided.\", \"no-valid-elements\");\n        for (let i = 0; i < numSubjects; i++) {\n            const thisSubject = subjects[i];\n            const transition = { ...options };\n            /**\n             * Resolve stagger function if provided.\n             */\n            if (\"delay\" in transition &&\n                typeof transition.delay === \"function\") {\n                transition.delay = transition.delay(i, numSubjects);\n            }\n            if (thisSubject instanceof Element) {\n                /**\n                 * An element already owned by a VisualElement (a <motion.*>\n                 * component or animateLayout()) animates its values so they\n                 * share one renderer. Anything else is driven through\n                 * styleEffect (or svgEffect) and the DOM keyframe resolver,\n                 * without creating a VisualElement.\n                 */\n                animations.push(...animateElement(thisSubject, keyframes, transition, visualElementStore.get(thisSubject)));\n            }\n            else {\n                /**\n                 * Registered effects (animate.addEffect) claim non-DOM\n                 * subjects before we fall back to writing plain properties.\n                 */\n                animations.push(...animateEffectSubject(findEffect(thisSubject) ?? propEffect, thisSubject, keyframes, transition));\n            }\n        }\n    }\n    return animations;\n}\n\nexport { animateSubject };\n//# sourceMappingURL=subject.mjs.map\n","import { motionValue, spring } from 'motion-dom';\nimport { createAnimationsFromSequence } from '../sequence/create.mjs';\nimport { animateSubject } from './subject.mjs';\n\nfunction animateSequence(sequence, options, scope) {\n    const animations = [];\n    /**\n     * Pre-process: replace function segments with MotionValue segments,\n     * subscribe callbacks immediately\n     */\n    const processedSequence = sequence.map((segment) => {\n        if (Array.isArray(segment) && typeof segment[0] === \"function\") {\n            const callback = segment[0];\n            const mv = motionValue(0);\n            mv.on(\"change\", callback);\n            if (segment.length === 1) {\n                return [mv, [0, 1]];\n            }\n            else if (segment.length === 2) {\n                return [mv, [0, 1], segment[1]];\n            }\n            else {\n                return [mv, segment[1], segment[2]];\n            }\n        }\n        return segment;\n    });\n    const animationDefinitions = createAnimationsFromSequence(processedSequence, options, scope, { spring });\n    animationDefinitions.forEach(({ keyframes, transition }, subject) => {\n        animations.push(...animateSubject(subject, keyframes, transition));\n    });\n    return animations;\n}\n\nexport { animateSequence };\n//# sourceMappingURL=sequence.mjs.map\n","import { removeEffect, addEffect, GroupAnimationWithThen } from 'motion-dom';\nimport { removeItem } from 'motion-utils';\nimport { animateSequence } from './sequence.mjs';\nimport { animateSubject } from './subject.mjs';\n\nfunction isSequence(value) {\n    return Array.isArray(value) && value.some(Array.isArray);\n}\n/**\n * Creates an animation function that is optionally scoped\n * to a specific element.\n */\nfunction createScopedAnimate(options = {}) {\n    const { scope, reduceMotion, skipAnimations } = options;\n    /**\n     * Implementation\n     */\n    function scopedAnimate(subjectOrSequence, optionsOrKeyframes, options) {\n        let animations = [];\n        let animationOnComplete;\n        const inherited = {};\n        if (reduceMotion !== undefined)\n            inherited.reduceMotion = reduceMotion;\n        if (skipAnimations !== undefined)\n            inherited.skipAnimations = skipAnimations;\n        if (isSequence(subjectOrSequence)) {\n            const { onComplete, ...sequenceOptions } = optionsOrKeyframes || {};\n            if (typeof onComplete === \"function\") {\n                animationOnComplete = onComplete;\n            }\n            animations = animateSequence(subjectOrSequence, { ...inherited, ...sequenceOptions }, scope);\n        }\n        else {\n            // Extract top-level onComplete so it doesn't get applied per-value\n            const { onComplete, ...rest } = options || {};\n            if (typeof onComplete === \"function\") {\n                animationOnComplete = onComplete;\n            }\n            animations = animateSubject(subjectOrSequence, optionsOrKeyframes, { ...inherited, ...rest }, scope);\n        }\n        const animation = new GroupAnimationWithThen(animations);\n        if (animationOnComplete) {\n            animation.finished.then(animationOnComplete);\n        }\n        if (scope) {\n            scope.animations.push(animation);\n            animation.finished.then(() => {\n                removeItem(scope.animations, animation);\n            });\n        }\n        return animation;\n    }\n    return scopedAnimate;\n}\nconst animate = Object.assign(createScopedAnimate(), {\n    /**\n     * Register an effect so `animate()` can animate the subjects it\n     * claims, for instance `animate.addEffect(threeEffect)`. The most\n     * recently added effect is tested first. DOM elements are always\n     * animated directly.\n     */\n    addEffect,\n    removeEffect,\n});\n\nexport { animate, createScopedAnimate };\n//# sourceMappingURL=index.mjs.map\n","const formatters = new Map();\n\nfunction clockFor(requested) {\n  if (formatters.has(requested)) return formatters.get(requested);\n  let zone = requested;\n  let formatter;\n  const options = {\n    year: \"numeric\", month: \"2-digit\", day: \"2-digit\",\n    hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\", hourCycle: \"h23\",\n  };\n  try {\n    formatter = new Intl.DateTimeFormat(\"en-GB-u-nu-latn\", { ...options, timeZone: zone });\n  } catch {\n    zone = \"Europe/Moscow\";\n    formatter = new Intl.DateTimeFormat(\"en-GB-u-nu-latn\", { ...options, timeZone: zone });\n  }\n  if (formatters.size >= 8) formatters.clear();\n  const result = { zone, formatter };\n  formatters.set(requested, result);\n  return result;\n}\n\nexport function formatDisplayTime(value, requested = globalThis.document?.body?.dataset?.displayTimezone || \"Europe/Moscow\") {\n  if (!value) return \"—\";\n  const instant = new Date(value);\n  if (Number.isNaN(instant.getTime())) return \"—\";\n  const { zone, formatter } = clockFor(requested);\n  const p = Object.fromEntries(formatter.formatToParts(instant).map((part) => [part.type, part.value]));\n  const wall = new Date(0);\n  wall.setUTCFullYear(Number(p.year), Number(p.month) - 1, Number(p.day));\n  wall.setUTCHours(Number(p.hour), Number(p.minute), Number(p.second), 0);\n  const minutes = Math.round((wall.getTime() - instant.getTime() + instant.getUTCMilliseconds()) / 60000);\n  const absolute = Math.abs(minutes);\n  const offset = `${minutes < 0 ? \"-\" : \"+\"}${String(Math.floor(absolute / 60)).padStart(2, \"0\")}:${String(absolute % 60).padStart(2, \"0\")}`;\n  const suffix = zone === \"UTC\" ? \"UTC\" : `${zone === \"Europe/Moscow\" ? \"МСК\" : zone} (UTC${offset})`;\n  return `${p.day}.${p.month}.${p.year} ${p.hour}:${p.minute} ${suffix}`;\n}\n","import { formatDisplayTime } from \"./ui-dates.js\";\n\nexport function bindAuctionUpdates(root = document) {\n  root.querySelectorAll(\"[data-auction-live]:not([data-live-bound])\").forEach((page) => {\n    page.dataset.liveBound = \"true\";\n    const status = page.querySelector(\"[data-connection-status]\");\n    const countdown = page.querySelector(\"[data-auction-countdown]\");\n    const announcement = page.querySelector(\"[data-auction-announcement]\");\n    let source = null;\n    let retryTimer = null;\n    let pollingTimer = null;\n    let snapshotBusy = false;\n    let cardBusy = false;\n    let cardAgain = false;\n    let unavailable = false;\n    let last = null;\n    let clockBase = null;\n    let clockAt = 0;\n    let lastReceived = 0;\n    let failures = 0;\n    let pollDelay = 4000;\n    let watchdogAt = performance.now();\n    const controllers = new Set();\n\n    function disableActions() {\n      page.querySelectorAll(\"[data-auction-card] form button\").forEach((button) => { button.disabled = true; });\n      page.querySelectorAll(\".auction-buyout-link\").forEach((link) => { link.hidden = true; });\n    }\n\n    function setClock(serverNow) {\n      const parsed = Date.parse(serverNow);\n      if (!Number.isFinite(parsed)) return;\n      if (clockBase !== null && parsed < clockBase) return;\n      clockBase = parsed;\n      clockAt = performance.now();\n      lastReceived = clockAt;\n      tick();\n    }\n\n    function tick() {\n      if (!last || clockBase === null || unavailable) return;\n      if (!last.bid_open) disableActions();\n      const now = clockBase + performance.now() - clockAt;\n      const waiting = last.status === \"scheduled\";\n      const target = Date.parse(waiting ? last.starts_at : last.ends_at);\n      const seconds = Math.max(0, Math.ceil((target - now) / 1000));\n      if (last.closed_at || [\"ended\", \"cancelled\"].includes(last.status)) {\n        countdown.textContent = \"Торги завершены\";\n      } else if (seconds === 0) {\n        countdown.textContent = waiting ? \"Ожидаем начала торгов\" : \"Приём ставок завершён · ожидаем итог\";\n        if (!waiting) disableActions();\n      } else {\n        const hours = Math.floor(seconds / 3600);\n        const minutes = Math.floor((seconds % 3600) / 60);\n        const remaining = seconds % 60;\n        countdown.textContent = `${waiting ? \"До старта\" : \"До окончания\"} · ${hours}:${String(minutes).padStart(2, \"0\")}:${String(remaining).padStart(2, \"0\")}`;\n      }\n      if (performance.now() - lastReceived > 15000) {\n        status.textContent = \"Связь потеряна. Проверяем цену…\";\n        disableActions();\n      }\n    }\n\n    async function request(url) {\n      const controller = new AbortController();\n      controllers.add(controller);\n      const timeout = window.setTimeout(() => controller.abort(), 7000);\n      try {\n        const response = await fetch(url, { cache: \"no-store\", credentials: \"same-origin\", signal: controller.signal, redirect: \"error\" });\n        const bytes = await response.arrayBuffer();\n        return new Response(bytes, { status: response.status, headers: response.headers });\n      } finally {\n        window.clearTimeout(timeout);\n        controllers.delete(controller);\n      }\n    }\n\n    function markUnavailable() {\n      unavailable = true;\n      source?.close();\n      source = null;\n      disableActions();\n      status.textContent = \"Лот больше недоступен. Вернитесь к списку аукционов.\";\n      countdown.textContent = \"Участие недоступно\";\n      page.querySelectorAll(\"[data-auction-card], [data-auction-history], .auction-extras\").forEach((node) => { node.hidden = true; });\n    }\n\n    async function refreshCard() {\n      if (unavailable || document.hidden || !page.isConnected) return;\n      if (cardBusy) { cardAgain = true; return; }\n      cardBusy = true;\n      try {\n        const response = await request(page.dataset.participationUrl);\n        if (response.status === 404) { markUnavailable(); return; }\n        if (!response.ok) throw new Error(\"card unavailable\");\n        const markup = new DOMParser().parseFromString(await response.text(), \"text/html\");\n        const incoming = markup.querySelector(\"[data-auction-card]\");\n        const current = page.querySelector(\"[data-auction-card]\");\n        if (!incoming || !current) throw new Error(\"session unavailable\");\n        if (last && Number(incoming.dataset.sequence) < last.sequence) { cardAgain = true; return; }\n        const focused = current.contains(document.activeElement) ? document.activeElement : null;\n        // Keep the exact input/error/idempotency nodes while participation is still allowed.\n        if (incoming.dataset.canBid === \"true\" && current.dataset.canBid === \"true\") {\n          const errors = current.querySelector(\"[data-auction-errors]\");\n          if (errors?.textContent.trim()) incoming.querySelector(\"[data-auction-errors]\").replaceWith(errors);\n          current.querySelectorAll(\"[data-form]\").forEach((form) => {\n            const replacement = incoming.querySelector(`[data-form=\"${form.dataset.form}\"]`);\n            if (!replacement) return;\n            const input = form.querySelector(\"input[type=number]\");\n            const freshInput = replacement.querySelector(\"input[type=number]\");\n            if (input && freshInput) {\n              input.placeholder = freshInput.placeholder;\n              if (freshInput.hasAttribute(\"min\")) input.min = freshInput.min;\n            }\n            const hint = form.querySelector(\".auction-form-hint\");\n            if (hint) hint.textContent = replacement.querySelector(\".auction-form-hint\")?.textContent || hint.textContent;\n            replacement.replaceWith(form);\n            form.querySelectorAll(\"button\").forEach((button) => { button.disabled = false; });\n          });\n        }\n        current.querySelectorAll(\"details[data-details]\").forEach((details) => {\n          const nextDetails = incoming.querySelector(`[data-details=\"${details.dataset.details}\"]`);\n          if (nextDetails) {\n            nextDetails.open = details.open;\n            const summary = details.querySelector(\"summary\");\n            const freshSummary = nextDetails.querySelector(\"summary\");\n            summary.innerHTML = freshSummary.innerHTML;\n            freshSummary.replaceWith(summary);\n          }\n        });\n        const nextFocusedLink = focused?.tagName === \"A\"\n          ? [...incoming.querySelectorAll(\"a\")].find((link) => link.getAttribute(\"href\") === focused.getAttribute(\"href\"))\n          : null;\n        const before = current.textContent.includes(\"Сейчас вы лидируете\");\n        const after = incoming.textContent.includes(\"Сейчас вы лидируете\");\n        current.replaceWith(incoming);\n        if (focused?.isConnected) focused.focus({ preventScroll: true });\n        else if (nextFocusedLink) nextFocusedLink.focus({ preventScroll: true });\n        else if (focused) {\n          page.querySelector(\"[data-auction-refresh]\").focus({ preventScroll: true });\n          announcement.textContent = \"Состояние участия изменилось. Проверьте результат торгов.\";\n        }\n        if (before !== after) {\n          if (incoming.dataset.resultState !== \"open\") {\n            announcement.textContent = incoming.textContent.includes(\"Вы победили\")\n              ? \"Торги завершены. Вы победили. Откройте заказ.\"\n              : \"Торги завершены. Проверьте итог.\";\n          } else announcement.textContent = after ? \"Сейчас вы лидируете.\" : \"Вашу ставку перебили.\";\n        }\n        tick();\n      } catch {\n        disableActions();\n        status.textContent = \"Не удалось проверить ваше участие. Обновите страницу перед ставкой.\";\n      } finally {\n        cardBusy = false;\n        if (cardAgain) { cardAgain = false; void refreshCard(); }\n      }\n    }\n\n    function applySnapshot(data, refresh = true) {\n      if (data.schema !== \"furrytopia.auction-public.v1\" || !Array.isArray(data.history)) throw new Error(\"invalid snapshot\");\n      if (last && (data.sequence < last.sequence || Date.parse(data.server_now) < Date.parse(last.server_now))) return;\n      const changed = !last || data.revision !== last.revision;\n      last = data;\n      setClock(data.server_now);\n      page.querySelector(\"[data-current-price]\").textContent = data.current_label;\n      page.querySelector(\".auction-price-caption\").textContent = data.price_caption;\n      page.querySelector(\".auction-bidding-count\").textContent = `Ставок: ${data.sequence}`;\n      if (!changed) return;\n      page.querySelectorAll(\"[data-threshold]\").forEach((item) => {\n        const threshold = data.thresholds.find((entry) => String(entry.position) === item.dataset.threshold);\n        if (!threshold) return;\n        item.classList.toggle(\"auction-extra-unlocked\", threshold.unlocked);\n        item.querySelector(\".auction-extra-icon\").textContent = threshold.unlocked ? \"✓\" : \"+\";\n        if (threshold.unlocked) item.querySelector(\".auction-extra-price\").textContent = \"Входит в лот\";\n      });\n      const history = page.querySelector(\"[data-auction-history]\");\n      if (data.history.length) {\n        history.replaceChildren(...data.history.map((bid) => {\n          const row = document.createElement(\"li\");\n          const info = document.createElement(\"div\");\n          const handle = document.createElement(\"strong\");\n          handle.textContent = `@${bid.handle}`;\n          const caption = document.createElement(\"span\");\n          caption.textContent = `${bid.source} · `;\n          const time = document.createElement(\"time\");\n          time.dateTime = bid.created_at;\n          time.textContent = formatDisplayTime(bid.created_at);\n          caption.append(time);\n          const amount = document.createElement(\"strong\");\n          amount.textContent = bid.amount_label;\n          info.append(handle, caption);\n          row.append(info, amount);\n          return row;\n        }));\n      }\n      announcement.textContent = `${data.status_label}. ${data.price_caption}: ${data.current_label}.`;\n      if (!data.bid_open) disableActions();\n      if (refresh) void refreshCard();\n    }\n\n    async function poll() {\n      if (snapshotBusy || unavailable || document.hidden || !page.isConnected) return;\n      snapshotBusy = true;\n      try {\n        const response = await request(page.dataset.snapshotUrl);\n        if (response.status === 404) { markUnavailable(); return; }\n        if (response.status === 429) {\n          pollDelay = Math.max(4000, Math.min(60000, Number(response.headers.get(\"Retry-After\")) * 1000 || 10000));\n          throw new Error(\"rate limited\");\n        }\n        if (!response.ok) throw new Error(\"snapshot unavailable\");\n        applySnapshot(await response.json(), false);\n        failures = 0;\n        pollDelay = 4000;\n        status.textContent = source?.readyState === 1 ? \"Обновляется автоматически\" : \"Обновляется каждые несколько секунд\";\n        await refreshCard();\n      } catch {\n        failures += 1;\n        pollDelay = Math.min(60000, Math.max(pollDelay, 4000 * 2 ** Math.min(failures, 4)));\n        status.textContent = \"Связь потеряна. Пробуем восстановить обновления…\";\n        disableActions();\n      } finally {\n        snapshotBusy = false;\n      }\n    }\n\n    function schedulePolling() {\n      window.clearTimeout(pollingTimer);\n      if (unavailable || document.hidden || !page.isConnected) return;\n      pollingTimer = window.setTimeout(async () => {\n        await poll();\n        schedulePolling();\n      }, source?.readyState === 1 ? 15000 : pollDelay);\n    }\n\n    function connect() {\n      if (unavailable || document.hidden || !page.isConnected || source || !window.EventSource) return;\n      source = new EventSource(page.dataset.eventsUrl);\n      watchdogAt = performance.now();\n      source.onopen = () => { status.textContent = \"Обновляется автоматически\"; };\n      [\"snapshot\", \"update\"].forEach((kind) => source.addEventListener(kind, (event) => {\n        try { applySnapshot(JSON.parse(event.data)); } catch { source?.close(); source = null; }\n      }));\n      source.addEventListener(\"clock\", (event) => {\n        try { setClock(JSON.parse(event.data).server_now); } catch { /* Polling revalidates. */ }\n      });\n      source.addEventListener(\"unavailable\", markUnavailable);\n      source.onerror = () => {\n        source?.close();\n        source = null;\n        status.textContent = \"Проверяем цену каждые несколько секунд\";\n        void poll();\n        schedulePolling();\n        window.clearTimeout(retryTimer);\n        retryTimer = window.setTimeout(connect, 10000);\n      };\n    }\n\n    page.querySelector(\"[data-auction-refresh]\").addEventListener(\"click\", () => { void poll(); });\n    function runTicker() {\n      tick();\n      if (source && performance.now() - Math.max(lastReceived, watchdogAt) > 10000) {\n        source.close(); source = null; void poll(); schedulePolling();\n      }\n      if (!page.isConnected) { stop(); window.clearInterval(ticker); }\n    }\n    let ticker = window.setInterval(runTicker, 1000);\n    function stop() {\n      source?.close(); source = null;\n      window.clearTimeout(retryTimer); window.clearTimeout(pollingTimer);\n      controllers.forEach((controller) => controller.abort());\n    }\n    document.addEventListener(\"visibilitychange\", () => {\n      if (document.hidden) stop();\n      else { void poll(); connect(); schedulePolling(); }\n    });\n    window.addEventListener(\"pagehide\", () => { stop(); window.clearInterval(ticker); }, { once: true });\n    window.addEventListener(\"pageshow\", (event) => {\n      if (event.persisted) {\n        window.clearInterval(ticker);\n        ticker = window.setInterval(runTicker, 1000);\n        void poll(); connect(); schedulePolling();\n      }\n    });\n    window.addEventListener(\"online\", () => { void poll(); connect(); schedulePolling(); });\n    void poll();\n    connect();\n    schedulePolling();\n  });\n}\n","export function bindPaymentWindows(root = document) {\n  root.querySelectorAll(\"[data-payment-window]:not([data-bound])\").forEach((panel) => {\n    panel.dataset.bound = \"true\";\n    const deadline = Date.parse(panel.dataset.deadline);\n    const serverNow = Date.parse(panel.dataset.serverNow);\n    if (!Number.isFinite(deadline) || !Number.isFinite(serverNow)) return;\n    const started = performance.now();\n    let timer;\n    const check = () => {\n      clearTimeout(timer);\n      if (!panel.isConnected) {\n        document.removeEventListener(\"visibilitychange\", check);\n        return;\n      }\n      if (serverNow + performance.now() - started >= deadline) {\n        const active = document.activeElement;\n        const actions = [...document.querySelectorAll(\"[data-payment-action]\")];\n        if (actions.some((action) => action.contains(active))) {\n          panel.querySelector(\"[data-payment-window-refresh]\")?.focus();\n        }\n        actions.forEach((action) => { action.hidden = true; });\n        panel.querySelector(\"[data-payment-window-heading]\").textContent = \"Срок оплаты истёк\";\n        if (!panel.dataset.expired) {\n          panel.querySelector(\"[data-payment-window-note]\").textContent = \"Оплата закрыта. Обновите статус заказа: автоматическая отмена обрабатывается.\";\n        }\n        panel.querySelector(\"[data-payment-window-announcement]\").textContent = \"Оплата закрыта. Обновите статус заказа.\";\n        document.removeEventListener(\"visibilitychange\", check);\n        return;\n      }\n      if (!document.hidden) timer = setTimeout(check, 1000);\n    };\n    document.addEventListener(\"visibilitychange\", check);\n    check();\n  });\n}\n","export function bindOfferWindows(root = document) {\n  root.querySelectorAll(\"[data-offer-window]:not([data-bound])\").forEach((panel) => {\n    panel.dataset.bound = \"true\";\n    const deadline = Date.parse(panel.dataset.deadline);\n    const serverNow = Date.parse(panel.dataset.serverNow);\n    if (!Number.isFinite(deadline) || !Number.isFinite(serverNow)) return;\n    const started = performance.now();\n    let timer;\n    const check = () => {\n      clearTimeout(timer);\n      if (!panel.isConnected) {\n        document.removeEventListener(\"visibilitychange\", check);\n        return;\n      }\n      if (serverNow + performance.now() - started >= deadline) {\n        const actions = [...panel.closest(\"[data-offer-page]\").querySelectorAll(\"[data-offer-action]\")];\n        if (actions.some((action) => action.contains(document.activeElement))) {\n          panel.querySelector(\"[data-offer-window-refresh]\")?.focus();\n        }\n        actions.forEach((action) => { action.hidden = true; });\n        panel.querySelector(\"[data-offer-window-heading]\").textContent = \"Срок ответа истёк\";\n        panel.querySelector(\"[data-offer-window-note]\").textContent = \"Ответ закрыт. Обновите статус: предложение закрывается автоматически, заказ не создаётся.\";\n        panel.querySelector(\"[data-offer-window-announcement]\").textContent = \"Срок ответа истёк. Обновите статус предложения.\";\n        document.removeEventListener(\"visibilitychange\", check);\n        return;\n      }\n      if (!document.hidden) timer = setTimeout(check, 1000);\n    };\n    document.addEventListener(\"visibilitychange\", check);\n    check();\n  });\n}\n","// Keep the form's original controls and input intact across native and HTMX requests.\nexport const REQUEST_TIMEOUT = 60_000;\nconst submitControls = 'button:not([type]), button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]';\nconst states = new WeakMap();\nconst scopes = new WeakMap();\nconst active = new Set();\nconst uncertain = \"Ответ не получен. Перед повторной отправкой проверьте актуальное состояние. Ваш ввод остаётся в форме.\";\n\nexport function formBusy(form) {\n  return states.has(form);\n}\n\nexport function scopeBusy(scope) {\n  return scopes.has(scope);\n}\n\nexport function resetFormBusy(form, { status, message = \"\", focus = false } = {}) {\n  const state = states.get(form);\n  if (state) {\n    window.clearTimeout(state.disableTimer);\n    window.clearTimeout(state.timeout);\n    state.controls.forEach((disabled, control) => { control.disabled = disabled; });\n    status ||= state.status;\n    states.delete(form);\n    scopes.delete(state.scope);\n    active.delete(form);\n  }\n  delete form.dataset.submitting;\n  form.removeAttribute(\"aria-busy\");\n  if (status) {\n    status.textContent = message;\n    if (focus && form.isConnected) {\n      status.setAttribute(\"tabindex\", \"-1\");\n      status.focus();\n    }\n  }\n}\n\nexport function startFormBusy(form, { status, message = \"Сохраняем…\", scope = form, nativeEvent, xhr } = {}) {\n  if (formBusy(form) || scopeBusy(scope)) return false;\n  const state = { status, scope, controls: new Map([...scope.querySelectorAll(submitControls)].map((control) => [control, control.disabled])) };\n  states.set(form, state);\n  scopes.set(scope, form);\n  active.add(form);\n  form.dataset.submitting = \"true\";\n  form.setAttribute(\"aria-busy\", \"true\");\n  if (status) {\n    status.textContent = message;\n    status.setAttribute(\"tabindex\", \"-1\");\n    status.focus();\n  }\n  const disable = () => {\n    if (nativeEvent?.defaultPrevented) { resetFormBusy(form); return; }\n    if (states.get(form) === state) state.controls.forEach((_, control) => { control.disabled = true; });\n  };\n  // Native submission serializes named submit buttons after the submit event.\n  if (nativeEvent) state.disableTimer = window.setTimeout(disable, 0);\n  else disable();\n  state.timeout = window.setTimeout(() => {\n    if (states.get(form) !== state) return;\n    if (xhr && xhr.readyState !== 4) xhr.abort();\n    resetFormBusy(form, { status, message: uncertain, focus: true });\n  }, REQUEST_TIMEOUT);\n  return true;\n}\n\nfunction resetActiveForms() {\n  [...active].forEach((form) => resetFormBusy(form));\n}\n\nwindow.addEventListener(\"pageshow\", resetActiveForms);\nwindow.addEventListener(\"pagehide\", resetActiveForms);\ndocument.addEventListener(\"htmx:beforeHistorySave\", resetActiveForms);\n","import { formBusy, startFormBusy, resetFormBusy } from \"./form-busy.js\";\n\nconst bound = new WeakSet();\nexport function bindExtensionForms(root = document) {\n  root.querySelector(\"[data-extension-error]\")?.focus();\n  root.querySelectorAll(\"[data-extension-form]\").forEach((form) => {\n    if (bound.has(form)) return;\n    bound.add(form);\n    form.dataset.bound = \"true\";\n    const reset = () => {\n      resetFormBusy(form, { status: form.querySelector(\"[data-extension-loading]\") });\n    };\n    form.addEventListener(\"htmx:confirm\", (event) => {\n      if (formBusy(form)) event.preventDefault();\n    });\n    form.addEventListener(\"htmx:beforeRequest\", (event) => {\n      startFormBusy(form, { status: form.querySelector(\"[data-extension-loading]\"), message: \"Сохраняем решение…\", xhr: event.detail.xhr });\n    });\n    form.addEventListener(\"submit\", (event) => {\n      if (event.defaultPrevented) return;\n      if (formBusy(form)) { event.preventDefault(); return; }\n      if (window.htmx && form.hasAttribute(\"hx-post\")) return;\n      startFormBusy(form, { status: form.querySelector(\"[data-extension-loading]\"), message: \"Сохраняем решение…\", nativeEvent: event });\n    });\n    form.addEventListener(\"htmx:afterRequest\", (event) => {\n      reset();\n      if (event.detail.failed) {\n        form.querySelector(\"[data-extension-loading]\").textContent = \"Ответ не получен. Проверьте заказ перед повторной отправкой.\";\n      }\n    });\n  });\n}\n","import { formBusy, startFormBusy, resetFormBusy } from \"./form-busy.js\";\n\nconst bound = new WeakSet();\nexport function bindCharacterForms(root = document) {\n  for (const form of root.querySelectorAll(\"[data-character-form]\")) {\n    if (bound.has(form)) continue;\n    bound.add(form);\n    form.dataset.characterBound = \"true\";\n    form.addEventListener(\"submit\", (event) => {\n      if (event.defaultPrevented) return;\n      if (formBusy(form)) {\n        event.preventDefault();\n        return;\n      }\n      if (window.htmx && form.hasAttribute(\"hx-post\")) return;\n      startFormBusy(form, { status: form.querySelector(\"[data-character-status]\"), message: form.dataset.loadingLabel || \"Сохраняем…\", nativeEvent: event });\n    });\n  }\n  root.querySelector(\"[data-character-error]\")?.focus();\n}\n\nfunction resetForm(form, message = \"\") {\n  resetFormBusy(form, { status: form.querySelector(\"[data-character-status]\"), message });\n}\n\ndocument.body.addEventListener(\"htmx:confirm\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-character-form]\");\n  if (form && formBusy(form)) event.preventDefault();\n});\ndocument.body.addEventListener(\"htmx:beforeRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-character-form]\");\n  if (form) startFormBusy(form, { status: form.querySelector(\"[data-character-status]\"), message: form.dataset.loadingLabel || \"Сохраняем…\", xhr: event.detail.xhr });\n});\n\ndocument.body.addEventListener(\"htmx:beforeSwap\", (event) => {\n  if (event.detail.target.matches?.(\"[data-follow-control], [data-notification-control]\") && [400, 429].includes(event.detail.xhr.status)) {\n    event.detail.shouldSwap = true;\n    event.detail.isError = false;\n    return;\n  }\n  if (event.detail.target.id !== \"character-editor-response\" || event.detail.xhr.status !== 429)\n    return;\n  event.detail.shouldSwap = true;\n  event.detail.isError = false;\n});\n\ndocument.body.addEventListener(\"htmx:afterRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-character-form]\");\n  if (!form?.isConnected)\n    return;\n  resetForm(form, event.detail.failed ? \"Ответ не получен. Проверьте актуальное состояние перед повторным сохранением.\" : \"\");\n});\n\nwindow.addEventListener(\"pageshow\", (event) => {\n  if (!event.persisted) return;\n  for (const form of document.querySelectorAll(\"[data-character-form]\")) resetForm(form);\n});\n","import { formBusy, startFormBusy, resetFormBusy } from \"./form-busy.js\";\n\nconst bound = new WeakSet();\nconst supportStatus = (form) => form.querySelector(\"[data-support-status]\") || form.closest(\".support-card, .security-card\")?.querySelector(\"[data-support-status]\");\n\nfunction resetSupportForms(root = document) {\n  const forms = [...root.querySelectorAll(\"[data-support-action]\")];\n  if (root.matches?.(\"[data-support-action]\")) forms.unshift(root);\n  forms.forEach((form) => {\n    resetFormBusy(form, { status: supportStatus(form) });\n  });\n}\n\nfunction startRequest(form, nativeEvent, xhr) {\n  startFormBusy(form, { status: supportStatus(form), message: form.dataset.supportBusy || \"Отправляем сообщение…\", nativeEvent, xhr });\n}\n\nexport function bindSupportForms(root = document) {\n  root.querySelectorAll(\"[data-support-action]\").forEach((form) => {\n    if (bound.has(form)) return;\n    bound.add(form);\n    form.dataset.supportBound = \"true\";\n    form.addEventListener(\"submit\", (event) => {\n      if (window.htmx && (form.hasAttribute(\"hx-post\") || form.hasAttribute(\"hx-get\"))) return;\n      if (event.defaultPrevented) return;\n      if (formBusy(form)) { event.preventDefault(); return; }\n      startRequest(form, event);\n    });\n  });\n}\n\nwindow.addEventListener(\"pageshow\", () => resetSupportForms());\ndocument.addEventListener(\"htmx:beforeRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-support-action]\");\n  if (form) startRequest(form, undefined, event.detail.xhr);\n});\ndocument.addEventListener(\"htmx:confirm\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-support-action]\");\n  if (form && formBusy(form)) event.preventDefault();\n});\ndocument.addEventListener(\"htmx:beforeSwap\", (event) => {\n  const form = event.detail.requestConfig?.elt?.closest(\"[data-support-action]\");\n  if (form && [400, 403, 404, 409, 429].includes(event.detail.xhr.status)) {\n    event.detail.shouldSwap = true;\n    event.detail.isError = false;\n  }\n});\ndocument.addEventListener(\"htmx:afterRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-support-action]\");\n  if (!form) return;\n  resetSupportForms(form.closest(\".support-card, .security-card\") || document);\n  if (event.detail.failed && form.isConnected) {\n    const status = supportStatus(form);\n    if (status) { status.textContent = form.dataset.supportFailure || \"Нет ответа сервера. Обновите переписку перед повторной отправкой.\"; status.focus(); }\n  }\n});\n\nexport function focusSupportResult(root = document, swapped = false) {\n  if (root !== document && !root.isConnected) root = document;\n  const support = root.matches?.(\".support-shell, .security-shell\") ? root : root.querySelector(\".support-shell, .security-shell\");\n  if (!support) return;\n  const target = support.querySelector(\"[data-support-result]\") || (swapped ? support.querySelector(\"[data-support-page]\") : null);\n  target?.focus();\n}\n\ndocument.addEventListener(\"htmx:afterSettle\", () => focusSupportResult(document, true));\n","export function bindHomeGallery(root = document) {\n  root.querySelectorAll('[data-home-gallery]:not([data-gallery-bound])').forEach((gallery) => {\n    gallery.dataset.galleryBound = 'true';\n    const slides = [...gallery.querySelectorAll('[data-home-slide]')];\n    const previews = [...gallery.querySelectorAll('[data-home-preview]')];\n    const next = gallery.querySelector('[data-home-next]');\n    const count = gallery.querySelector('[data-home-count]');\n    if (!next || slides.length < 2) return;\n    let active = 0;\n    next.hidden = false;\n    next.addEventListener('click', () => {\n      active = (active + 1) % slides.length;\n      slides.forEach((slide, index) => { slide.hidden = index !== active; });\n      previews.forEach((preview, index) => { preview.hidden = index !== (active + 1) % slides.length; });\n      if (count) count.textContent = `${String(active + 1).padStart(2, '0')} / ${String(slides.length).padStart(2, '0')}`;\n    });\n  });\n}\n\nexport function bindSiteMenu() {\n  const menu = document.querySelector('.site-menu');\n  if (!menu) return;\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape' && menu.open) {\n      menu.open = false;\n      menu.querySelector('summary')?.focus();\n    }\n  });\n  document.addEventListener('pointerdown', (event) => {\n    if (menu.open && !menu.contains(event.target)) menu.open = false;\n  });\n}\n","const systemMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\nconst preferenceKey = \"furrytopia.reduce-motion\";\nlet manualReduction = false;\nconst bound = new WeakSet();\ntry { manualReduction = window.localStorage.getItem(preferenceKey) === \"true\"; } catch { /* Storage may be unavailable. */ }\n\nexport function motionReduced() {\n  return systemMotion.matches || manualReduction;\n}\n\nfunction applyPreference() {\n  const reduced = motionReduced();\n  document.documentElement.dataset.reduceMotion = String(reduced);\n  document.querySelectorAll(\"[data-motion-toggle]\").forEach((button) => {\n    button.setAttribute(\"aria-pressed\", String(reduced));\n    button.disabled = systemMotion.matches;\n    button.title = systemMotion.matches ? \"Анимация снижена в настройках вашего устройства\" : \"Настройка сохраняется в этом браузере\";\n  });\n  if (reduced) document.getAnimations().forEach((animation) => animation.cancel());\n}\n\nexport function bindMotionPreference() {\n  document.querySelectorAll(\"[data-motion-toggle]\").forEach((button) => {\n    if (bound.has(button)) return;\n    bound.add(button);\n    button.dataset.motionBound = \"true\";\n    button.hidden = false;\n    button.addEventListener(\"click\", () => {\n      manualReduction = !manualReduction;\n      try { window.localStorage.setItem(preferenceKey, String(manualReduction)); } catch { /* The current page still respects the choice. */ }\n      applyPreference();\n    });\n  });\n  applyPreference();\n}\n\nsystemMotion.addEventListener(\"change\", applyPreference);\napplyPreference();\n","export function focusFormErrors(root = document) {\n  const summary = root.matches?.(\"[data-form-error-summary]\")\n    ? root\n    : root.querySelector(\"[data-form-error-summary]\");\n  if (summary?.isConnected && !summary.closest(\"[hidden], [aria-hidden='true']\")) {\n    summary.focus();\n  }\n}\n","// Native GET remains usable without JavaScript. Restore controls on bfcache return.\nimport { formBusy, startFormBusy, resetFormBusy } from \"./form-busy.js\";\n\nconst bound = new WeakSet();\nexport function bindSearchForms() {\n  const forms = document.querySelectorAll(\"[data-public-search]\");\n  forms.forEach((form) => {\n    if (bound.has(form)) return;\n    bound.add(form);\n    // A modified native submit can open another tab. Keep this tab usable.\n    let elsewhere = false;\n    const rememberTarget = (event) => {\n      elsewhere = event.ctrlKey || event.metaKey || event.shiftKey;\n      window.setTimeout(() => { elsewhere = false; }, 0);\n    };\n    form.addEventListener(\"click\", (event) => {\n      if (event.target.closest('button[type=\"submit\"], input[type=\"submit\"]')) {\n        rememberTarget(event);\n      }\n    });\n    form.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Enter\") rememberTarget(event);\n    });\n    form.addEventListener(\"submit\", (event) => {\n      if (event.defaultPrevented || elsewhere) return;\n      if (formBusy(form)) { event.preventDefault(); return; }\n      startFormBusy(form, { status: form.querySelector(\"[data-search-progress]\"), message: form.dataset.loadingLabel || \"Ищем…\", nativeEvent: event });\n    });\n  });\n}\n","import Alpine from \"@alpinejs/csp\";\nimport htmx from \"htmx.org\";\nimport { animate, stagger } from \"motion\";\nimport { bindAuctionUpdates } from \"./auctions.js\";\nimport { bindPaymentWindows } from \"./payment-window.js\";\nimport { bindOfferWindows } from \"./offer-window.js\";\nimport { bindExtensionForms } from \"./payment-extension.js\";\nimport { bindCharacterForms } from \"./characters.js\";\nimport { bindSupportForms, focusSupportResult } from \"./support.js\";\nimport { bindHomeGallery, bindSiteMenu } from \"./home-gallery.js\";\nimport { bindMotionPreference, motionReduced } from \"./motion-preference.js\";\nimport { REQUEST_TIMEOUT, formBusy, scopeBusy, startFormBusy, resetFormBusy } from \"./form-busy.js\";\nimport { focusFormErrors } from \"./form-accessibility.js\";\n\nimport { bindSearchForms } from \"./search.js\";\n\nimport \"../styles/app.css\";\n\nwindow.Alpine = Alpine;\nwindow.htmx = htmx;\nhtmx.config.allowEval = false;\nhtmx.config.timeout = REQUEST_TIMEOUT;\n\nAlpine.start();\nbindCharacterForms();\nbindSearchForms();\n\nbindMotionPreference();\n\nfunction resetSocialForms(root = document) {\n  root.querySelectorAll(\"[data-social-action]\").forEach((form) => {\n    const status = form.closest(\".social-card\")?.querySelector(\"[data-social-status]\");\n    resetFormBusy(form, { status });\n  });\n}\n\nfunction startSocialRequest(form, nativeEvent, xhr) {\n  const card = form.closest(\".social-card\");\n  const status = card?.querySelector(\"[data-social-status]\");\n  return startFormBusy(form, { status, message: \"Проверяем подтверждение…\", scope: card || form, nativeEvent, xhr });\n}\n\nconst socialBound = new WeakSet();\nfunction bindSocialForms(root = document) {\n  root.querySelectorAll(\"[data-social-action]\").forEach((form) => {\n    if (socialBound.has(form)) return;\n    socialBound.add(form);\n    form.dataset.socialBound = \"true\";\n    form.addEventListener(\"submit\", (event) => {\n      if (window.htmx && form.hasAttribute(\"hx-post\")) return;\n      if (event.defaultPrevented) return;\n      if (formBusy(form)) { event.preventDefault(); return; }\n      if (!startSocialRequest(form, event)) event.preventDefault();\n    });\n  });\n}\n\nwindow.addEventListener(\"pageshow\", () => resetSocialForms());\n\ndocument.addEventListener(\"htmx:beforeRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-social-action]\");\n  if (form && !startSocialRequest(form, undefined, event.detail.xhr)) event.preventDefault();\n});\ndocument.addEventListener(\"htmx:confirm\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-social-action]\");\n  if (form && (formBusy(form) || scopeBusy(form.closest(\".social-card\") || form))) event.preventDefault();\n});\n\ndocument.addEventListener(\"htmx:beforeSwap\", (event) => {\n  const form = event.detail.requestConfig?.elt?.closest(\"[data-social-action]\");\n  if (form && [400, 403].includes(event.detail.xhr.status)) {\n    event.detail.shouldSwap = true;\n    event.detail.isError = false;\n  }\n});\n\ndocument.addEventListener(\"htmx:afterRequest\", (event) => {\n  const form = event.detail.elt?.closest(\"[data-social-action]\");\n  if (!form) return;\n  resetSocialForms(form.closest(\".social-card\") || document);\n  if (event.detail.failed && form.isConnected) {\n    const status = form.closest(\".social-card\")?.querySelector(\"[data-social-status]\");\n    if (status) { status.textContent = \"Нет ответа сервера. Обновите привязки перед повторным действием.\"; status.focus(); }\n  }\n});\n\nfunction reveal(root = document) {\n  const elements = [...root.querySelectorAll(\"[data-reveal]:not([data-revealed])\")];\n  if (elements.length === 0) return;\n  elements.forEach((element) => element.setAttribute(\"data-revealed\", \"true\"));\n  if (motionReduced()) return;\n  animate(\n    elements,\n    { opacity: [0, 1], transform: [\"translateY(16px)\", \"translateY(0)\"] },\n    { duration: 0.55, delay: stagger(0.055), ease: [0.22, 1, 0.36, 1] },\n  );\n}\n\nfunction bindInteractiveControls(root = document) {\n  root.querySelectorAll(\"[data-password-toggle]:not([data-bound])\").forEach((button) => {\n    button.setAttribute(\"data-bound\", \"true\");\n    button.addEventListener(\"click\", () => {\n      const input = document.getElementById(button.dataset.target);\n      if (!input) return;\n      const visible = input.type === \"text\";\n      input.type = visible ? \"password\" : \"text\";\n      button.textContent = visible ? \"Показать\" : \"Скрыть\";\n    });\n  });\n\n  root.querySelectorAll(\"[data-toast]:not([data-bound])\").forEach((toast) => {\n    toast.setAttribute(\"data-bound\", \"true\");\n    const close = () => {\n      if (motionReduced()) {\n        toast.remove();\n        return;\n      }\n      animate(toast, { opacity: 0, transform: \"translateX(18px)\" }, { duration: 0.2 }).then(\n        () => toast.remove(),\n      );\n    };\n    toast.querySelector(\"[data-toast-close]\")?.addEventListener(\"click\", close);\n    window.setTimeout(close, 6500);\n  });\n}\n\nfunction csrfToken() {\n  return document.cookie\n    .split(\"; \")\n    .find((row) => row.startsWith(\"csrftoken=\"))\n    ?.split(\"=\")[1];\n}\n\nfunction syncCatalogErrors(focus = false) {\n  const results = document.getElementById(\"catalog-results\");\n  const filters = document.querySelector(\".catalog-filters\");\n  if (!results || !filters) return;\n  filters.querySelectorAll(\"[id][name]\").forEach((field) => {\n    const errorId = `${field.id}_error`;\n    const error = document.getElementById(errorId);\n    const refs = (field.getAttribute(\"aria-describedby\") || \"\").split(/\\s+/).filter((id) => id && id !== errorId);\n    if (error) { refs.push(errorId); field.setAttribute(\"aria-invalid\", \"true\"); }\n    else field.removeAttribute(\"aria-invalid\");\n    if (refs.length) field.setAttribute(\"aria-describedby\", refs.join(\" \"));\n    else field.removeAttribute(\"aria-describedby\");\n  });\n  if (focus) results.querySelector('[role=\"alert\"]')?.focus();\n}\n\ndocument.addEventListener(\"htmx:beforeRequest\", (event) => {\n  if (!event.detail.elt?.closest(\".catalog-filters\")) return;\n  document.getElementById(\"catalog-results\")?.setAttribute(\"aria-busy\", \"true\");\n  const progress = document.querySelector(\"[data-catalog-progress]\");\n  if (progress) progress.textContent = \"Ищем предложения…\";\n});\n\ndocument.addEventListener(\"htmx:afterRequest\", (event) => {\n  if (!event.detail.elt?.closest(\".catalog-filters\")) return;\n  document.getElementById(\"catalog-results\")?.removeAttribute(\"aria-busy\");\n  const progress = document.querySelector(\"[data-catalog-progress]\");\n  if (progress) progress.textContent = event.detail.failed ? \"Не удалось обновить поиск. Попробуйте ещё раз.\" : \"\";\n});\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  syncCatalogErrors(true);\n  bindHomeGallery();\n  bindSiteMenu();\n  document.querySelector(\"[data-security-result]\")?.focus();\n  const securityError = document.querySelector('.security-shell [role=\"alert\"]');\n  if (securityError) { securityError.setAttribute(\"tabindex\", \"-1\"); securityError.focus(); }\n  document.querySelector(\"[data-privacy-result]\")?.focus();\n  document.querySelector(\"[data-social-result]\")?.focus();\n  bindSocialForms();\n  bindSupportForms();\n  focusSupportResult();\n  document.querySelector(\"[data-telegram-control] [data-notification-success]\")?.focus();\n  reveal();\n  bindInteractiveControls();\n  focusFormErrors();\n  bindAuctionUpdates();\n  bindPaymentWindows();\n  bindOfferWindows();\n  bindExtensionForms();\n});\n\ndocument.body.addEventListener(\"htmx:configRequest\", (event) => {\n  const token = csrfToken();\n  if (token) event.detail.headers[\"X-CSRFToken\"] = decodeURIComponent(token);\n});\n\ndocument.body.addEventListener(\"htmx:afterSwap\", (event) => {\n  if (event.detail.target.id === \"catalog-results\") syncCatalogErrors(true);\n  bindHomeGallery(event.detail.target);\n  const socialRoot = event.detail.target.id === \"main-content\" ? document.getElementById(\"main-content\") : event.detail.target;\n  bindSocialForms(socialRoot);\n  socialRoot.querySelector(\"[data-security-result]\")?.focus();\n  socialRoot.querySelector(\"[data-privacy-result]\")?.focus();\n  bindSupportForms(socialRoot);\n  focusSupportResult(socialRoot, true);\n  if (socialRoot.querySelector(\".social-shell\")) {\n    (socialRoot.querySelector(\"[data-social-result]\") || socialRoot.querySelector(\"[data-social-page]\"))?.focus();\n  }\n  reveal(event.detail.target);\n  bindInteractiveControls(event.detail.target);\n  focusFormErrors(event.detail.target);\n  bindAuctionUpdates(event.detail.target);\n  bindPaymentWindows(document);\n  bindOfferWindows(event.detail.target);\n  bindExtensionForms(document);\n  bindCharacterForms(document);\n  const notificationControl = document.getElementById(event.detail.target.id);\n  if (notificationControl?.matches(\"[data-notification-control]\") && !notificationControl.querySelector(\"[data-character-error]\")) {\n    notificationControl.querySelector(\"[data-notification-success]\")?.focus();\n  }\n  const followControl = document.getElementById(event.detail.target.id);\n  if (followControl?.matches(\"[data-follow-control]\") && !followControl.querySelector(\"[data-character-error]\")) {\n    const nextAction = followControl.querySelector('button[type=\"submit\"]');\n    (nextAction || followControl.closest(\"article\")?.querySelector(\"h2\"))?.focus();\n  }\n});\n\ndocument.body.addEventListener(\"htmx:historyRestore\", () => {\n  bindSupportForms();\n  bindCharacterForms();\n  bindExtensionForms();\n  bindSocialForms();\n  bindSearchForms();\n  bindMotionPreference();\n});\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152],"mappings":"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"}