@pie-players/pie-tool-protractor 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/tool-protractor.js +12707 -0
- package/dist/tool-protractor.js.map +1 -0
- package/index.ts +8 -0
- package/package.json +63 -0
- package/protractor.svg +294 -0
- package/tool-protractor.svelte +343 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-protractor.js","sources":["../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/version.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/disclose-version.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/constants.js","../../../node_modules/.bun/esm-env@1.2.2/node_modules/esm-env/false.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/shared/utils.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/constants.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/shared/errors.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/errors.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/warnings.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/hydration.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/equality.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/flags/index.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/context.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/task.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/error-handling.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/status.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/utils.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/batch.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/reactivity/create-subscriber.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/async.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/sources.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/proxy.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/operations.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/effects.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/runtime.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/elements/events.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/reconciler.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/template.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/utils.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/render.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/blocks/branches.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/index-client.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/blocks/if.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/css.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/reactivity/props.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/legacy/legacy-client.js","../../../node_modules/.bun/svelte@5.49.1/node_modules/svelte/src/internal/client/dom/elements/custom-element.js","../../assessment-toolkit/dist/services/HighlightCoordinator.js","../../assessment-toolkit/dist/services/PNPMapper.js","../../assessment-toolkit/dist/services/ToolCoordinator.js","../../assessment-toolkit/dist/services/TTSService.js","../../../node_modules/.bun/framework-utils@1.1.0/node_modules/framework-utils/dist/utils.esm.js","../../../node_modules/.bun/@daybrush+utils@1.13.0/node_modules/@daybrush/utils/dist/utils.esm.js","../../../node_modules/.bun/@egjs+list-differ@1.0.1/node_modules/@egjs/list-differ/dist/list-differ.esm.js","../../../node_modules/.bun/croact@1.0.4/node_modules/croact/dist/croact.esm.js","../../../node_modules/.bun/@egjs+agent@2.4.4/node_modules/@egjs/agent/dist/agent.esm.js","../../../node_modules/.bun/@scena+matrix@1.1.1/node_modules/@scena/matrix/dist/matrix.esm.js","../../../node_modules/.bun/css-to-mat@1.1.1/node_modules/css-to-mat/dist/css-to-mat.esm.js","../../../node_modules/.bun/@egjs+children-differ@1.0.1/node_modules/@egjs/children-differ/dist/children-differ.esm.js","../../../node_modules/.bun/@scena+event-emitter@1.0.5/node_modules/@scena/event-emitter/dist/event-emitter.esm.js","../../../node_modules/.bun/@scena+dragscroll@1.4.0/node_modules/@scena/dragscroll/dist/dragscroll.esm.js","../../../node_modules/.bun/overlap-area@1.1.0/node_modules/overlap-area/dist/overlap-area.esm.js","../../../node_modules/.bun/gesto@1.19.4/node_modules/gesto/dist/gesto.esm.js","../../../node_modules/.bun/css-styled@1.0.8/node_modules/css-styled/dist/styled.esm.js","../../../node_modules/.bun/croact-css-styled@1.1.9/node_modules/croact-css-styled/dist/styled.esm.js","../../../node_modules/.bun/croact-moveable@0.9.0+e72a0408a2e7afb4/node_modules/croact-moveable/dist/moveable.esm.js","../../../node_modules/.bun/moveable@0.53.0/node_modules/moveable/dist/moveable.esm.js","../protractor.svg","../tool-protractor.svelte"],"sourcesContent":["// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.49.1';\nexport const PUBLIC_VERSION = '5';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n\n// Flags exclusive to effects\n/** Set once an effect that should run synchronously has run */\nexport const EFFECT_RAN = 1 << 15;\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed).\n */\nexport const WAS_MARKED = 1 << 15;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport * from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode | null} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(hydrate_node));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tif (remove) node.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT, EFFECT_RAN } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n * <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, EFFECT_RAN } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\tif ((effect.f & EFFECT_RAN) === 0) {\n\t\t// if the error occurred while creating this subtree, we let it\n\t\t// bubble up until it hits a boundary that can handle it\n\t\tif ((effect.f & BOUNDARY_EFFECT) === 0) {\n\t\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\t\tapply_adjustments(error);\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t} else {\n\t\t// otherwise we bubble up the effect tree ourselves\n\t\tinvoke_error_boundary(error, effect);\n\t}\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? ' ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\n/** @import { Boundary } from '../dom/blocks/boundary' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tBOUNDARY_EFFECT,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs in non-async mode\n * TODO 6.0 remove this, as non-async mode will go away\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n// TODO this should really be a property of `batch`\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nlet is_flushing = false;\nexport let is_flushing_sync = false;\n\nexport class Batch {\n\tcommitted = false;\n\n\t/**\n\t * The current values of any sources that are updated in this batch\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Source, any>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any sources that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Source, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<() => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * The number of async effects that are currently in flight, _not_ inside a pending boundary\n\t */\n\t#blocking_pending = 0;\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A set of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`\n\t * @type {Set<Effect>}\n\t */\n\tskipped_effects = new Set();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\tis_deferred() {\n\t\treturn this.is_fork || this.#blocking_pending > 0;\n\t}\n\n\t/**\n\t *\n\t * @param {Effect[]} root_effects\n\t */\n\tprocess(root_effects) {\n\t\tqueued_root_effects = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = [];\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\tfor (const root of root_effects) {\n\t\t\tthis.#traverse_effect_tree(root, effects, render_effects);\n\t\t\t// Note: #traverse_effect_tree runs block effects eagerly, which can schedule effects,\n\t\t\t// which means queued_root_effects now may be filled again.\n\n\t\t\t// Helpful for debugging reactivity loss that has to do with branches being skipped:\n\t\t\t// log_inconsistent_branches(root);\n\t\t}\n\n\t\tif (this.is_deferred()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const e of this.skipped_effects) {\n\t\t\t\treset_branch(e);\n\t\t\t}\n\t\t} else {\n\t\t\t// append/remove branches\n\t\t\tfor (const fn of this.#commit_callbacks) fn();\n\t\t\tthis.#commit_callbacks.clear();\n\n\t\t\tif (this.#pending === 0) {\n\t\t\t\tthis.#commit();\n\t\t\t}\n\n\t\t\t// If sources are written to, then work needs to happen in a separate batch, else prior sources would be mixed with\n\t\t\t// newly updated sources, which could lead to infinite loops when effects run over and over again.\n\t\t\tprevious_batch = this;\n\t\t\tcurrent_batch = null;\n\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\n\t\t\tprevious_batch = null;\n\n\t\t\tthis.#deferred?.resolve();\n\t\t}\n\n\t\tbatch_values = null;\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse_effect_tree(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\t/** @type {Effect | null} */\n\t\tvar pending_boundary = null;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect);\n\n\t\t\t// Inside a `<svelte:boundary>` with a pending snippet,\n\t\t\t// all effects are deferred until the boundary resolves\n\t\t\t// (except block/async effects, which run immediately)\n\t\t\tif (\n\t\t\t\tasync_mode_flag &&\n\t\t\t\tpending_boundary === null &&\n\t\t\t\t(flags & BOUNDARY_EFFECT) !== 0 &&\n\t\t\t\teffect.b?.is_pending\n\t\t\t) {\n\t\t\t\tpending_boundary = effect;\n\t\t\t}\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if (\n\t\t\t\t\tpending_boundary !== null &&\n\t\t\t\t\t(flags & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0\n\t\t\t\t) {\n\t\t\t\t\t/** @type {Boundary} */ (pending_boundary.b).defer_effect(effect);\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar parent = effect.parent;\n\t\t\teffect = effect.next;\n\n\t\t\twhile (effect === null && parent !== null) {\n\t\t\t\tif (parent === pending_boundary) {\n\t\t\t\t\tpending_boundary = null;\n\t\t\t\t}\n\n\t\t\t\teffect = parent.next;\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Source} source\n\t * @param {any} value\n\t */\n\tcapture(source, value) {\n\t\tif (value !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, value);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, source.v);\n\t\t\tbatch_values?.set(source, source.v);\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t\tthis.apply();\n\t}\n\n\tdeactivate() {\n\t\t// If we're not the current batch, don't deactivate,\n\t\t// else we could create zombie batches that are never flushed\n\t\tif (current_batch !== this) return;\n\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\tthis.activate();\n\n\t\tif (queued_root_effects.length > 0) {\n\t\t\tflush_effects();\n\n\t\t\tif (current_batch !== null && current_batch !== this) {\n\t\t\t\t// this can happen if a new batch was created during `flush_effects()`\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (this.#pending === 0) {\n\t\t\tthis.process([]); // TODO this feels awkward\n\t\t}\n\n\t\tthis.deactivate();\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tif (batches.size > 1) {\n\t\t\tthis.previous.clear();\n\n\t\t\tvar previous_batch_values = batch_values;\n\t\t\tvar is_earlier = true;\n\n\t\t\tfor (const batch of batches) {\n\t\t\t\tif (batch === this) {\n\t\t\t\t\tis_earlier = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/** @type {Source[]} */\n\t\t\t\tconst sources = [];\n\n\t\t\t\tfor (const [source, value] of this.current) {\n\t\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\t\tif (is_earlier && value !== batch.current.get(source)) {\n\t\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\t\tbatch.current.set(source, value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.push(source);\n\t\t\t\t}\n\n\t\t\t\tif (sources.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches\n\t\t\t\tconst others = [...batch.current.keys()].filter((s) => !this.current.has(s));\n\t\t\t\tif (others.length > 0) {\n\t\t\t\t\t// Avoid running queued root effects on the wrong branch\n\t\t\t\t\tvar prev_queued_root_effects = queued_root_effects;\n\t\t\t\t\tqueued_root_effects = [];\n\n\t\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\t\tconst marked = new Set();\n\t\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\t\tconst checked = new Map();\n\t\t\t\t\tfor (const source of sources) {\n\t\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (queued_root_effects.length > 0) {\n\t\t\t\t\t\tcurrent_batch = batch;\n\t\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\t\tfor (const root of queued_root_effects) {\n\t\t\t\t\t\t\tbatch.#traverse_effect_tree(root, [], []);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO do we need to do anything with the dummy effect arrays?\n\n\t\t\t\t\t\tbatch.deactivate();\n\t\t\t\t\t}\n\n\t\t\t\t\tqueued_root_effects = prev_queued_root_effects;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = previous_batch_values;\n\t\t}\n\n\t\tthis.committed = true;\n\t\tbatches.delete(this);\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} blocking\n\t */\n\tincrement(blocking) {\n\t\tthis.#pending += 1;\n\t\tif (blocking) this.#blocking_pending += 1;\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} blocking\n\t */\n\tdecrement(blocking) {\n\t\tthis.#pending -= 1;\n\t\tif (blocking) this.#blocking_pending -= 1;\n\n\t\tif (this.#decrement_queued) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\n\t\t\tif (!this.is_deferred()) {\n\t\t\t\t// we only reschedule previously-deferred effects if we expect\n\t\t\t\t// to be able to run them after processing the batch\n\t\t\t\tthis.revive();\n\t\t\t} else if (queued_root_effects.length > 0) {\n\t\t\t\t// if other effects are scheduled, process the batch _without_\n\t\t\t\t// rescheduling the previously-deferred effects\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\t}\n\n\trevive() {\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tthis.flush();\n\t}\n\n\t/** @param {() => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\t\t\tbatches.add(current_batch);\n\n\t\t\tif (!is_flushing_sync) {\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.flush();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && batches.size === 1)) return;\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map(this.current);\n\n\t\t// ...and undo changes belonging to other batches\n\t\tfor (const batch of batches) {\n\t\t\tif (batch === this) continue;\n\n\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tif (current_batch !== null) {\n\t\t\t\tflush_effects();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\tcurrent_batch?.flush();\n\n\t\t\t\t// we need to check again, in case we just updated an `$effect.pending()`\n\t\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\t\t// this would be reset in `flush_effects()` but since we are early returning here,\n\t\t\t\t\t// we need to reset it here as well in case the first time there's 0 queued root effects\n\t\t\t\t\tlast_scheduled_effect = null;\n\n\t\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflush_effects();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction flush_effects() {\n\tis_flushing = true;\n\n\tvar source_stacks = DEV ? new Set() : null;\n\n\ttry {\n\t\tvar flush_count = 0;\n\n\t\twhile (queued_root_effects.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\n\t\t\tif (flush_count++ > 1000) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tvar updates = new Map();\n\n\t\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentry.count += update.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const update of updates.values()) {\n\t\t\t\t\t\tif (update.error) {\n\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\tconsole.error(update.error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinfinite_loop_guard();\n\t\t\t}\n\n\t\t\tbatch.process(queued_root_effects);\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t/** @type {Set<Source>} */ (source_stacks).add(source);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_flushing = false;\n\n\t\tlast_scheduled_effect = null;\n\n\t\tif (DEV) {\n\t\t\tfor (const source of /** @type {Set<Source>} */ (source_stacks)) {\n\t\t\t\tsource.updated = null;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction infinite_loop_guard() {\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (effect.deps === null && effect.first === null && effect.nodes === null) {\n\t\t\t\t// if there's no teardown or abort controller we completely unlink\n\t\t\t\t// the effect from the graph\n\t\t\t\tif (effect.teardown === null && effect.ac === null) {\n\t\t\t\t\t// remove this effect from the graph\n\t\t\t\t\tunlink_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\t// keep the effect in the graph, but free up some memory\n\t\t\t\t\teffect.fn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tvar effect = (last_scheduled_effect = signal);\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t// updated an internal source, bail out or we'll cause a second flush\n\t\tif (\n\t\t\tis_flushing &&\n\t\t\teffect === active_effect &&\n\t\t\t(flags & BLOCK_EFFECT) !== 0 &&\n\t\t\t(flags & HEAD_EFFECT) === 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) return;\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\ttry {\n\t\tflushSync(() => {\n\t\t\tfor (const version of eager_versions) {\n\t\t\t\tupdate(version);\n\t\t\t}\n\t\t});\n\t} finally {\n\t\teager_versions = [];\n\t}\n}\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar version = source(0);\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later\n * @param {Effect} effect\n */\nfunction reset_branch(effect) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\t// revert state changes\n\tfor (var [source, value] of batch.previous) {\n\t\tsource.v = value;\n\t}\n\n\t// make writable deriveds dirty, so they recalculate correctly\n\tfor (source of batch.current.keys()) {\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tset_signal_status(source, DIRTY);\n\t\t}\n\t}\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batches.has(batch)) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, value] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.revive();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batches.has(batch)) {\n\t\t\t\tbatches.delete(batch);\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBOUNDARY_EFFECT,\n\tCOMMENT_NODE,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, schedule_effect } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\nimport { set_signal_status } from '../../reactivity/status.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n * failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n * pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @returns {void}\n */\nexport function boundary(node, props, children) {\n\tnew Boundary(node, props, children);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t/** @type {TemplateNode | null} */\n\t#pending_anchor = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t#is_creating_fallback = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t */\n\tconstructor(node, props, children) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\t\tthis.#children = children;\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\tthis.is_pending = !!this.#props.pending;\n\n\t\tthis.#effect = block(() => {\n\t\t\t/** @type {Effect} */ (active_effect).b = this;\n\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = this.#hydrate_open;\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending =\n\t\t\t\t\t/** @type {Comment} */ (comment).nodeType === COMMENT_NODE &&\n\t\t\t\t\t/** @type {Comment} */ (comment).data === HYDRATION_START_ELSE;\n\n\t\t\t\tif (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\n\t\t\t\t\tif (this.#pending_count === 0) {\n\t\t\t\t\t\tthis.is_pending = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar anchor = this.#get_anchor();\n\n\t\t\t\ttry {\n\t\t\t\t\tthis.#main_effect = branch(() => children(anchor));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.error(error);\n\t\t\t\t}\n\n\t\t\t\tif (this.#pending_count > 0) {\n\t\t\t\t\tthis.#show_pending_snippet();\n\t\t\t\t} else {\n\t\t\t\t\tthis.is_pending = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tthis.#pending_anchor?.remove();\n\t\t\t};\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar anchor = this.#get_anchor();\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\tBatch.ensure();\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tthis.#show_pending_snippet();\n\t\t\t} else {\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.is_pending = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t#get_anchor() {\n\t\tvar anchor = this.#anchor;\n\n\t\tif (this.is_pending) {\n\t\t\tthis.#pending_anchor = create_text();\n\t\t\tthis.#anchor.before(this.#pending_anchor);\n\n\t\t\tanchor = this.#pending_anchor;\n\t\t}\n\n\t\treturn anchor;\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @param {() => Effect | null} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t#show_pending_snippet() {\n\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\n\t\tif (this.#main_effect !== null) {\n\t\t\tthis.#offscreen_fragment = document.createDocumentFragment();\n\t\t\tthis.#offscreen_fragment.append(/** @type {TemplateNode} */ (this.#pending_anchor));\n\t\t\tmove_effect(this.#main_effect, this.#offscreen_fragment);\n\t\t}\n\n\t\tif (this.#pending_effect === null) {\n\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t */\n\t#update_pending_count(d) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.is_pending = false;\n\n\t\t\t// any effects that were encountered and deferred during traversal\n\t\t\t// should be rescheduled — after the next traversal (which will happen\n\t\t\t// immediately, due to the same update that brought us here)\n\t\t\t// the effects will be flushed\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tthis.#dirty_effects.clear();\n\t\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t */\n\tupdate_pending_count(d) {\n\t\tthis.#update_pending_count(d);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (this.#is_creating_fallback || (!onerror && !failed)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\t// If the failure happened while flushing effects, current_batch can be null\n\t\t\tBatch.ensure();\n\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// we intentionally do not try to find the nearest pending boundary. If this boundary has one, we'll render it on reset\n\t\t\t// but it would be really weird to show the parent's boundary on a child reset.\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\tthis.#is_creating_fallback = false;\n\t\t\t\treturn branch(() => this.#children(this.#anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tthis.#show_pending_snippet();\n\t\t\t} else {\n\t\t\t\tthis.is_pending = false;\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tonerror?.(error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (error) {\n\t\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t\t}\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\tBatch.ensure();\n\t\t\t\t\tthis.#is_creating_fallback = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.#is_creating_fallback = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function get_boundary() {\n\treturn /** @type {Boundary} */ (/** @type {Effect} */ (active_effect).b);\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","/** @import { Blocker, Effect, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { get_boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\tcurrent_async_effect,\n\tderived,\n\tderived_safe_equal,\n\tset_from_async_derived\n} from './deriveds.js';\nimport { aborted } from './effects.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(sync.map(d));\n\t\treturn;\n\t}\n\n\tvar batch = current_batch;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/** @param {Value[]} values */\n\tfunction finish(values) {\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn(values);\n\t\t} catch (error) {\n\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t}\n\t\t}\n\n\t\tbatch?.deactivate();\n\t\tunset_context();\n\t}\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish(sync.map(d)));\n\t\treturn;\n\t}\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\trestore();\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then((result) => finish([...sync.map(d), ...result]))\n\t\t\t.catch((error) => invoke_error_boundary(error, parent));\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(run);\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = active_effect;\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = current_batch;\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\t\tif (activate_batch) previous_batch?.activate();\n\n\t\tif (DEV) {\n\t\t\tset_from_async_derived(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = current_async_effect;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_from_async_derived(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had a normal completion and `return` is defined on the iterator, call it and return the value\n\t\tif (normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context() {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\n\tif (DEV) {\n\t\tset_from_async_derived(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tvar boundary = get_boundary();\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = boundary.is_rendered();\n\n\tboundary.update_pending_count(1);\n\tbatch.increment(blocking);\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\tif (errored) {\n\t\t\t\t\tthrow errored.error;\n\t\t\t\t}\n\n\t\t\t\tif (aborted(active)) {\n\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t}\n\n\t\t\t\trestore();\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\n\t\t\tunset_context();\n\t\t\tcurrent_batch?.deactivate();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(() => {\n\t\t\tboundary.update_pending_count(-1);\n\t\t\tbatch.decrement(blocking);\n\t\t});\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n","/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport { async_effect, destroy_effect, effect_tracking, teardown } from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch } from './batch.js';\nimport { unset_context } from './async.js';\nimport { deferred, includes } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Effect | null} */\nexport let current_async_effect = null;\n\n/** @param {Effect | null} v */\nexport function set_from_async_derived(v) {\n\tcurrent_async_effect = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar boundary = /** @type {Boundary} */ (parent.b);\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Map();\n\n\tasync_effect(() => {\n\t\tif (DEV) current_async_effect = active_effect;\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn())\n\t\t\t\t.then(d.resolve, d.reject)\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (batch === current_batch && batch.committed) {\n\t\t\t\t\t\t// if the batch was rejected as stale, we need to cleanup\n\t\t\t\t\t\t// after any `$.save(...)` calls inside `fn()`\n\t\t\t\t\t\tbatch.deactivate();\n\t\t\t\t\t}\n\n\t\t\t\t\tunset_context();\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) current_async_effect = null;\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\tvar blocking = boundary.is_rendered();\n\n\t\t\tboundary.update_pending_count(1);\n\t\t\tbatch.increment(blocking);\n\n\t\t\tdeferreds.get(batch)?.reject(STALE_REACTION);\n\t\t\tdeferreds.delete(batch); // delete to ensure correct order in Map iteration below\n\t\t\tdeferreds.set(batch, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tcurrent_async_effect = null;\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tif (error !== STALE_REACTION) {\n\t\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\t\tinternal_set(signal, error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\t// All prior async derived runs are now stale\n\t\t\t\tfor (const [b, d] of deferreds) {\n\t\t\t\t\tdeferreds.delete(b);\n\t\t\t\t\tif (b === batch) break;\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (should_suspend) {\n\t\t\t\tboundary.update_pending_count(-1);\n\t\t\t\tbatch.decrement(blocking);\n\t\t\t}\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds.values()) {\n\t\t\td.reject(STALE_REACTION);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\t// The original parent effect might've been destroyed but the derived\n\t\t\t// is used elsewhere now - do not return the destroyed effect in that case\n\t\t\treturn (parent.f & DESTROYED) === 0 ? /** @type {Effect} */ (parent) : null;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tderived.v = value;\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { includes } from '../../shared/utils.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport { Batch, batch_values, eager_block_effects, schedule_effect } from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<any>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !includes.call(current_sources, source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\tupdate_derived_status(derived);\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & EAGER_EFFECT) !== 0) {\n\t\t\teager_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds can be reliably unmarked right away\n\t\t\t\tif (flags & CONNECTED) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(/** @type {Effect} */ (reaction));\n\t\t\t}\n\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, EFFECT_RAN } from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & EFFECT_RAN) !== 0;\n}\n\n/**\n *\n * @param {string} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\tif (namespace) {\n\t\treturn document.createElementNS(namespace, tag, options);\n\t}\n\treturn document.createElement(tag, options);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tEFFECT_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, current_batch, schedule_effect } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t\teffect.f |= EFFECT_RAN;\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\t// if an effect has already ran and doesn't need to be kept in the tree\n\t// (because it won't re-run, has no DOM, and has no teardown etc)\n\t// then we skip it and go to its child (if any)\n\tif (\n\t\tsync &&\n\t\te.deps === null &&\n\t\te.teardown === null &&\n\t\te.nodes === null &&\n\t\te.first === e.last && // either `null`, or a singular child\n\t\t(e.f & EFFECT_PRESERVED) === 0\n\t) {\n\t\te = e.first;\n\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn, true);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar is_async = async.length > 0 || blockers.length > 0;\n\n\tif (is_async) batch.increment(true);\n\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)), false);\n\t\tif (is_async) batch.decrement(true);\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent =\n\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tschedule_effect(effect);\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\tdestroy_derived_effects,\n\texecute_derived,\n\trecent_async_deriveds,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\n\nlet is_updating_effect = false;\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif (flags & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && includes.call(current_sources, signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\tupdate_derived_status(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tdestroy_derived_effects(derived);\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\t// TODO reinstate this, but make it actually work\n\t\t// if (current_async_effect) {\n\t\t// \tvar tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;\n\t\t// \tvar was_read = current_async_effect.deps?.includes(signal);\n\n\t\t// \tif (!tracking && !untracking && !was_read) {\n\t\t// \t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t// \t\tvar trace = get_error('traced at');\n\t\t// \t\t// eslint-disable-next-line no-console\n\t\t// \t\tif (trace) console.warn(trace);\n\t\t// \t}\n\t\t// }\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\tvar trace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = derived.deps === null;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tif (derived.deps === null) return;\n\n\tderived.f |= CONNECTED;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n * // this will run when `data` changes, but not when `time` changes\n * save(data, {\n * timestamp: untrack(() => time)\n * });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check __root to skip all nodes below it in case this is a\n\t// parent of the __root node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent.__root = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","/** @param {string} html */\nexport function create_fragment_from_html(html) {\n\tvar elem = document.createElement('template');\n\telem.innerHTML = html.replaceAll('<!>', '<!---->'); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, EFFECT_RAN, TEXT_NODE } from '#client/constants';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.tagName === 'TEMPLATE'\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.tagName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).tagName === 'SCRIPT'\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = document.createElement('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & EFFECT_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, STATE_SYMBOL } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /** @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<string, number>} */\nconst document_listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\t/** @type {Set<string>} */\n\tvar registered_events = new Set();\n\n\t/** @param {Array<string>} events */\n\tvar event_handle = (events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t// Add the event listener to both the container and the document.\n\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t// the outer content stops propagation of the event.\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, { passive });\n\n\t\t\tvar n = document_listeners.get(event_name);\n\n\t\t\tif (n === undefined) {\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tdocument.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\tdocument_listeners.set(event_name, 1);\n\t\t\t} else {\n\t\t\t\tdocument_listeners.set(event_name, n + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tif (context) {\n\t\t\t\t\tpush({});\n\t\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\t\tctx.c = context;\n\t\t\t\t}\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (context) {\n\t\t\t\t\tpop();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\n\t\t\t\tvar n = /** @type {number} */ (document_listeners.get(event_name));\n\n\t\t\t\tif (--n === 0) {\n\t\t\t\t\tdocument.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\tdocument_listeners.delete(event_name);\n\t\t\t\t} else {\n\t\t\t\t\tdocument_listeners.set(event_name, n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t#commit = () => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t// or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.skipped_effects.delete(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skipped_effects.add(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.skipped_effects.delete(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skipped_effects.add(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit();\n\t\t}\n\t}\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: null; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { HYDRATION_START_ELSE } from '../../../../constants.js';\nimport { BranchManager } from './branches.js';\n\n// TODO reinstate https://github.com/sveltejs/svelte/pull/15250\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, flag?: boolean) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {boolean} condition,\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(condition, fn) {\n\t\tif (hydrating) {\n\t\t\tconst is_else = read_hydration_instruction(node) === HYDRATION_START_ELSE;\n\n\t\t\tif (condition === is_else) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(condition, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(condition, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, flag = true) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(flag, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(false, null);\n\t\t}\n\t}, flags);\n}\n","import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\n\n/**\n * @param {Node} anchor\n * @param {{ hash: string, code: string }} css\n */\nexport function append_styles(anchor, css) {\n\t// Use `queue_micro_task` to ensure `anchor` is in the DOM, otherwise getRootNode() will yield wrong results\n\teffect(() => {\n\t\tvar root = anchor.getRootNode();\n\n\t\tvar target = /** @type {ShadowRoot} */ (root).host\n\t\t\t? /** @type {ShadowRoot} */ (root)\n\t\t\t: /** @type {Document} */ (root).head ?? /** @type {Document} */ (root.ownerDocument).head;\n\n\t\t// Always querying the DOM is roughly the same perf as additionally checking for presence in a map first assuming\n\t\t// that you'll get cache hits half of the time, so we just always query the dom for simplicity and code savings.\n\t\tif (!target.querySelector('#' + css.hash)) {\n\t\t\tconst style = document.createElement('style');\n\t\t\tstyle.id = css.hash;\n\t\t\tstyle.textContent = css.code;\n\n\t\t\ttarget.appendChild(style);\n\n\t\t\tif (DEV) {\n\t\t\t\tregister_style(css.hash, style);\n\t\t\t}\n\t\t}\n\t});\n}\n","/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { LOADING_ATTR_SYMBOL } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== 'PROGRESS'))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === 'LINK')\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.tagName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.tagName === 'INPUT') {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.tagName === 'OPTION';\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar delegated = can_delegate_event(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (value != null) {\n\t\t\t\tif (!delegated) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @this {any}\n\t\t\t\t\t * @param {Event} evt\n\t\t\t\t\t */\n\t\t\t\t\tfunction handle(evt) {\n\t\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement[`__${event_name}`] = value;\n\t\t\t\t\tdelegate([event_name]);\n\t\t\t\t}\n\t\t\t} else if (delegated) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[`__${event_name}`] = undefined;\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === 'SELECT';\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","import { STATE_SYMBOL } from '#client/constants';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\nimport { queue_micro_task } from '../../task.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// We cannot use effects in the teardown phase, we we use a microtask instead.\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tvar setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (this latter part is necessary\n\t\t\t// because `bind:this` can read props after the component has\n\t\t\t// been destroyed. TODO simplify `bind:this`\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\nimport { set_signal_status } from '../internal/client/reactivity/status.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t * component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n","import { createClassComponent } from '../../../../legacy/legacy-client.js';\nimport { effect_root, render_effect } from '../../reactivity/effects.js';\nimport { append } from '../template.js';\nimport { define_property, get_descriptor, object_keys } from '../../../shared/utils.js';\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n\n/** @type {any} */\nlet SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** @type {any} The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** @type {Record<string, any>} Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\t\t/** @type {any} The managed render effect for reflecting attributes */\n\t\t$$me;\n\t\t/** @type {ShadowRoot | null} The ShadowRoot of the custom element */\n\t\t$$shadowRoot = null;\n\n\t\t/**\n\t\t * @param {*} $$componentCtor\n\t\t * @param {*} $$slots\n\t\t * @param {ShadowRootInit | undefined} shadow_root_init\n\t\t */\n\t\tconstructor($$componentCtor, $$slots, shadow_root_init) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\n\t\t\tif (shadow_root_init) {\n\t\t\t\t// We need to store the reference to shadow root, because `closed` shadow root cannot be\n\t\t\t\t// accessed with `this.shadowRoot`.\n\t\t\t\tthis.$$shadowRoot = this.attachShadow(shadow_root_init);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/** @param {string} name */\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Element} anchor\n\t\t\t\t\t */\n\t\t\t\t\treturn (anchor) => {\n\t\t\t\t\t\tconst slot = document.createElement('slot');\n\t\t\t\t\t\tif (name !== 'default') slot.name = name;\n\n\t\t\t\t\t\tappend(anchor, slot);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string, any>} */\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\tif (name === 'default' && !this.$$d.children) {\n\t\t\t\t\t\t\tthis.$$d.children = create_slot(name);\n\t\t\t\t\t\t\t$$slots.default = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$slots[name] = create_slot(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = createClassComponent({\n\t\t\t\t\tcomponent: this.$$ctor,\n\t\t\t\t\ttarget: this.$$shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$host: this\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tthis.$$me = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\t\tfor (const key of object_keys(this.$$c)) {\n\t\t\t\t\t\t\tif (!this.$$p_d[key]?.reflect) continue;\n\t\t\t\t\t\t\tthis.$$d[key] = this.$$c[key];\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$$r = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\n\t\t/**\n\t\t * @param {string} attr\n\t\t * @param {string} _oldValue\n\t\t * @param {string} newValue\n\t\t */\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$me();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * @param {string} attribute_name\n\t\t */\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tobject_keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction get_custom_elements_slots(element) {\n\t/** @type {Record<string, true>} */\n\tconst result = {};\n\telement.childNodes.forEach((node) => {\n\t\tresult[/** @type {Element} node */ (node).slot || 'default'] = true;\n\t});\n\treturn result;\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {any} Component A Svelte component function\n * @param {Record<string, CustomElementPropDefinition>} props_definition The props to observe\n * @param {string[]} slots The slots to create\n * @param {string[]} exports Explicitly exported values, other than props\n * @param {ShadowRootInit | undefined} shadow_root_init Options passed to shadow DOM constructor\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\texports,\n\tshadow_root_init,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, shadow_root_init);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn object_keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tobject_keys(props_definition).forEach((prop) => {\n\t\tdefine_property(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tvar component = this.$$c;\n\n\t\t\t\tif (component) {\n\t\t\t\t\t// // If the instance has an accessor, use that instead\n\t\t\t\t\tvar setter = get_descriptor(component, prop)?.get;\n\n\t\t\t\t\tif (setter) {\n\t\t\t\t\t\tcomponent[prop] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomponent.$set({ [prop]: value });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\texports.forEach((property) => {\n\t\tdefine_property(Class.prototype, property, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[property];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ Class;\n\treturn Class;\n}\n","/**\n * HighlightCoordinator\n *\n * Manages separate highlight layers for TTS (temporary) and annotations (persistent).\n * Uses CSS Custom Highlight API - zero DOM mutation, preserves accessibility.\n *\n * Features:\n * - Separate layers prevent TTS clearing from removing student annotations\n * - CSS Custom Highlight API (no DOM mutation)\n * - Full accessibility support (screen readers see original text)\n * - Configurable colors and styles\n *\n * Part of PIE Assessment Toolkit.\n *\n * Browser Support:\n * - Chrome/Edge 105+\n * - Safari 17.2+\n * - Firefox: Behind flag (not recommended for production)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CSS_Custom_Highlight_API\n */\n/**\n * Highlight types\n */\nexport var HighlightType;\n(function (HighlightType) {\n HighlightType[\"TTS_WORD\"] = \"tts-word\";\n HighlightType[\"TTS_SENTENCE\"] = \"tts-sentence\";\n HighlightType[\"ANNOTATION\"] = \"annotation\";\n})(HighlightType || (HighlightType = {}));\n/**\n * Highlight colors for annotations\n */\nexport var HighlightColor;\n(function (HighlightColor) {\n HighlightColor[\"YELLOW\"] = \"yellow\";\n HighlightColor[\"GREEN\"] = \"green\";\n HighlightColor[\"BLUE\"] = \"blue\";\n HighlightColor[\"PINK\"] = \"pink\";\n HighlightColor[\"ORANGE\"] = \"orange\";\n})(HighlightColor || (HighlightColor = {}));\nexport class HighlightCoordinator {\n config;\n ttsWordHighlight = null;\n ttsSentenceHighlight = null;\n annotations = new Map();\n annotationHighlights = new Map();\n nextAnnotationId = 1;\n supported = false;\n constructor(config = {}) {\n this.config = config;\n // SSR guard\n if (typeof CSS === \"undefined\" || !(\"highlights\" in CSS)) {\n console.warn(\"CSS Custom Highlight API not supported (SSR or unsupported browser)\");\n return;\n }\n this.supported = true;\n this.initializeHighlights();\n this.registerStyles();\n }\n /**\n * Initialize CSS Custom Highlights\n */\n initializeHighlights() {\n if (!this.supported)\n return;\n // Create highlight registries\n this.ttsWordHighlight = new Highlight();\n this.ttsSentenceHighlight = new Highlight();\n // Register with CSS\n CSS.highlights.set(\"tts-word\", this.ttsWordHighlight);\n CSS.highlights.set(\"tts-sentence\", this.ttsSentenceHighlight);\n }\n /**\n * Register CSS styles for highlights\n */\n registerStyles() {\n if (!this.supported)\n return;\n if (typeof document === \"undefined\")\n return; // SSR guard\n // Check if styles already exist\n if (document.getElementById(\"pie-highlight-styles\"))\n return;\n const style = document.createElement(\"style\");\n style.id = \"pie-highlight-styles\";\n style.textContent = `\n /* TTS highlights - temporary */\n ::highlight(tts-word) {\n background-color: rgba(255, 235, 59, 0.4);\n color: inherit;\n }\n\n ::highlight(tts-sentence) {\n background-color: rgba(173, 216, 230, 0.3);\n color: inherit;\n }\n\n /* Annotation highlights - persistent */\n ::highlight(annotation-yellow) {\n background-color: rgba(255, 255, 0, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-green) {\n background-color: rgba(144, 238, 144, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-blue) {\n background-color: rgba(173, 216, 230, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-pink) {\n background-color: rgba(255, 182, 193, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-orange) {\n background-color: rgba(255, 165, 0, 0.3);\n color: inherit;\n }\n `;\n document.head.appendChild(style);\n }\n /**\n * Highlight a word for TTS (temporary)\n *\n * @param textNode Text node containing the word\n * @param startOffset Start position in text node\n * @param endOffset End position in text node\n */\n highlightTTSWord(textNode, startOffset, endOffset) {\n if (!this.ttsWordHighlight)\n return;\n // Clear previous word highlight\n this.clearTTSWord();\n // Create range for word\n const range = document.createRange();\n range.setStart(textNode, startOffset);\n range.setEnd(textNode, endOffset);\n // Add to highlight\n this.ttsWordHighlight.add(range);\n }\n /**\n * Highlight a sentence for TTS (temporary)\n *\n * @param ranges Array of ranges that make up the sentence\n */\n highlightTTSSentence(ranges) {\n if (!this.ttsSentenceHighlight)\n return;\n // Clear previous sentence highlight\n this.clearTTSSentence();\n // Add all ranges\n for (const range of ranges) {\n this.ttsSentenceHighlight.add(range);\n }\n }\n /**\n * Clear TTS word highlight\n */\n clearTTSWord() {\n if (!this.ttsWordHighlight)\n return;\n this.ttsWordHighlight.clear();\n }\n /**\n * Clear TTS sentence highlight\n */\n clearTTSSentence() {\n if (!this.ttsSentenceHighlight)\n return;\n this.ttsSentenceHighlight.clear();\n }\n /**\n * Clear all TTS highlights\n */\n clearTTS() {\n this.clearTTSWord();\n this.clearTTSSentence();\n }\n /**\n * Add an annotation highlight (persistent)\n *\n * @param range Text range to annotate\n * @param color Highlight color\n * @returns Annotation ID for later removal\n */\n addAnnotation(range, color = HighlightColor.YELLOW) {\n const id = `annotation-${this.nextAnnotationId++}`;\n // Store annotation data\n const annotation = {\n id,\n range: range.cloneRange(),\n type: HighlightType.ANNOTATION,\n color,\n timestamp: Date.now(),\n };\n this.annotations.set(id, annotation);\n // Create highlight for this annotation\n const highlight = new Highlight(range);\n this.annotationHighlights.set(id, highlight);\n // Register with CSS\n CSS.highlights.set(`annotation-${color}-${id}`, highlight);\n return id;\n }\n /**\n * Remove an annotation\n *\n * @param id Annotation ID\n */\n removeAnnotation(id) {\n const annotation = this.annotations.get(id);\n if (!annotation)\n return;\n // Remove from CSS highlights\n CSS.highlights.delete(`annotation-${annotation.color}-${id}`);\n // Clean up\n this.annotationHighlights.delete(id);\n this.annotations.delete(id);\n }\n /**\n * Remove all annotations\n */\n clearAnnotations() {\n for (const id of this.annotations.keys()) {\n this.removeAnnotation(id);\n }\n }\n /**\n * Get all annotations\n */\n getAnnotations() {\n return Array.from(this.annotations.values());\n }\n /**\n * Get annotation by ID\n */\n getAnnotation(id) {\n return this.annotations.get(id) ?? null;\n }\n /**\n * Change annotation color\n *\n * @param id Annotation ID\n * @param newColor New color\n */\n changeAnnotationColor(id, newColor) {\n const annotation = this.annotations.get(id);\n if (!annotation)\n return;\n // Remove old highlight\n CSS.highlights.delete(`annotation-${annotation.color}-${id}`);\n // Update color\n annotation.color = newColor;\n // Re-register with new color\n const highlight = this.annotationHighlights.get(id);\n if (highlight) {\n CSS.highlights.set(`annotation-${newColor}-${id}`, highlight);\n }\n }\n /**\n * Export annotations as serializable data\n */\n exportAnnotations() {\n // Note: This is a simplified export. Production implementation\n // would need a robust way to serialize DOM ranges.\n return this.getAnnotations().map((annotation) => ({\n id: annotation.id,\n startContainer: this.getNodePath(annotation.range.startContainer),\n startOffset: annotation.range.startOffset,\n endContainer: this.getNodePath(annotation.range.endContainer),\n endOffset: annotation.range.endOffset,\n color: annotation.color,\n timestamp: annotation.timestamp,\n }));\n }\n /**\n * Get XPath-like path for a node (simplified)\n */\n getNodePath(node) {\n const path = [];\n let current = node;\n while (current && current !== document.body) {\n if (current.parentNode) {\n const siblings = Array.from(current.parentNode.childNodes);\n const index = siblings.indexOf(current);\n path.unshift(`${current.nodeName}[${index}]`);\n }\n current = current.parentNode;\n }\n return \"/\" + path.join(\"/\");\n }\n // ============================================================================\n // IHighlightCoordinator Interface Implementation\n // ============================================================================\n /**\n * Highlight a text range (interface method)\n *\n * Generic method that adapts to the specific highlight type.\n * For more control, use the specific methods like highlightTTSWord().\n */\n highlightRange(range, type, color = HighlightColor.YELLOW) {\n if (!this.supported)\n return;\n switch (type) {\n case HighlightType.TTS_WORD:\n case HighlightType.TTS_SENTENCE: {\n // For TTS, add to appropriate highlight\n const highlight = type === HighlightType.TTS_WORD\n ? this.ttsWordHighlight\n : this.ttsSentenceHighlight;\n if (highlight) {\n highlight.clear();\n highlight.add(range);\n }\n break;\n }\n case HighlightType.ANNOTATION:\n // For annotations, use the existing method\n this.addAnnotation(range, color);\n break;\n }\n }\n /**\n * Clear highlights of a specific type (interface method)\n */\n clearHighlights(type) {\n if (!this.supported)\n return;\n switch (type) {\n case HighlightType.TTS_WORD:\n this.clearTTSWord();\n break;\n case HighlightType.TTS_SENTENCE:\n this.clearTTSSentence();\n break;\n case HighlightType.ANNOTATION:\n this.clearAnnotations();\n break;\n }\n }\n /**\n * Clear all highlights (interface method)\n */\n clearAll() {\n if (!this.supported)\n return;\n this.clearTTS();\n this.clearAnnotations();\n }\n /**\n * Check if CSS Highlight API is supported (interface method)\n */\n isSupported() {\n return this.supported;\n }\n /**\n * Update TTS highlight style dynamically\n *\n * @param color CSS color value (e.g., '#ffeb3b')\n * @param opacity Opacity value (0.0 to 1.0)\n */\n updateTTSHighlightStyle(color, opacity) {\n if (!this.supported)\n return;\n if (typeof document === \"undefined\")\n return;\n const styleEl = document.getElementById(\"pie-highlight-styles\");\n if (!styleEl)\n return;\n // Convert hex to rgba\n const hexToRgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n };\n const rgb = hexToRgb(color);\n if (!rgb)\n return;\n const rgbaColor = `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\n // Update the style element\n styleEl.textContent = `\n /* TTS highlights - temporary */\n ::highlight(tts-word) {\n background-color: ${rgbaColor};\n color: inherit;\n }\n\n ::highlight(tts-sentence) {\n background-color: rgba(173, 216, 230, 0.3);\n color: inherit;\n }\n\n /* Annotation highlights - persistent */\n ::highlight(annotation-yellow) {\n background-color: rgba(255, 255, 0, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-green) {\n background-color: rgba(144, 238, 144, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-blue) {\n background-color: rgba(173, 216, 230, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-pink) {\n background-color: rgba(255, 182, 193, 0.3);\n color: inherit;\n }\n\n ::highlight(annotation-orange) {\n background-color: rgba(255, 165, 0, 0.3);\n color: inherit;\n }\n `;\n }\n /**\n * Cleanup - remove all highlights\n */\n destroy() {\n if (!this.supported)\n return;\n this.clearTTS();\n this.clearAnnotations();\n // Remove style element\n if (typeof document !== \"undefined\") {\n const styleEl = document.getElementById(\"pie-highlight-styles\");\n if (styleEl) {\n styleEl.remove();\n }\n }\n }\n}\n//# sourceMappingURL=HighlightCoordinator.js.map","/**\n * PNP Mapper - Maps QTI 3.0 PNP support IDs to PIE tool identifiers\n *\n * Provides bidirectional mapping between QTI 3.0 Personal Needs Profile (PNP)\n * support identifiers and PIE tool IDs. Supports custom extensions via registration.\n *\n * Part of PIE Assessment Toolkit.\n */\n/**\n * Standard QTI 3.0 PNP support → PIE tool ID mapping\n *\n * Maps industry-standard PNP support identifiers to corresponding PIE tools.\n * Based on IMS Global QTI 3.0 specification.\n */\nexport const PNP_TO_PIE_TOOL_MAP = {\n // Standard QTI 3.0 PNP supports\n textToSpeech: \"pie-tool-text-to-speech\",\n calculator: \"pie-tool-calculator\",\n ruler: \"pie-tool-ruler\",\n protractor: \"pie-tool-protractor\",\n highlighter: \"pie-tool-annotation-toolbar\",\n lineReader: \"pie-tool-line-reader\",\n magnifier: \"pie-tool-magnifier\",\n colorContrast: \"pie-theme-contrast\",\n answerMasking: \"pie-tool-answer-eliminator\",\n dictionaryLookup: \"pie-tool-dictionary\",\n // Common extensions (not in QTI standard but widely used)\n graphingCalculator: \"pie-tool-calculator\",\n scientificCalculator: \"pie-tool-calculator\",\n basicCalculator: \"pie-tool-calculator\",\n};\n/**\n * Reverse mapping for debugging/export (PIE tool ID → PNP support ID)\n */\nexport const PIE_TOOL_TO_PNP_MAP = Object.fromEntries(Object.entries(PNP_TO_PIE_TOOL_MAP).map(([pnp, tool]) => [tool, pnp]));\n/**\n * Map PNP support ID to PIE tool ID\n *\n * @param supportId QTI 3.0 PNP support identifier\n * @returns PIE tool ID or null if no mapping exists\n *\n * @example\n * mapPNPSupportToToolId('textToSpeech') // Returns: 'pie-tool-text-to-speech'\n * mapPNPSupportToToolId('calculator') // Returns: 'pie-tool-calculator'\n * mapPNPSupportToToolId('unknown') // Returns: null\n */\nexport function mapPNPSupportToToolId(supportId) {\n return PNP_TO_PIE_TOOL_MAP[supportId] || null;\n}\n/**\n * Map PIE tool ID back to PNP support ID\n *\n * Useful for exporting or debugging tool configurations.\n *\n * @param toolId PIE tool identifier\n * @returns QTI 3.0 PNP support ID or null if no mapping exists\n *\n * @example\n * mapToolIdToPNPSupport('pie-tool-text-to-speech') // Returns: 'textToSpeech'\n */\nexport function mapToolIdToPNPSupport(toolId) {\n return PIE_TOOL_TO_PNP_MAP[toolId] || null;\n}\n/**\n * Register custom PNP support mapping\n *\n * Allows products to extend the standard PNP vocabulary with custom tools.\n * Custom supports should use 'x-' prefix per IMS convention.\n *\n * @param supportId PNP support identifier (e.g., 'x-pie-periodic-table')\n * @param toolId PIE tool identifier (e.g., 'pie-tool-periodic-table')\n *\n * @example\n * registerCustomPNPMapping('x-pie-periodic-table', 'pie-tool-periodic-table');\n * registerCustomPNPMapping('x-pie-graph', 'pie-tool-graphing');\n */\nexport function registerCustomPNPMapping(supportId, toolId) {\n PNP_TO_PIE_TOOL_MAP[supportId] = toolId;\n PIE_TOOL_TO_PNP_MAP[toolId] = supportId;\n}\n/**\n * Get all registered PNP support IDs\n *\n * @returns Array of all PNP support identifiers (standard + custom)\n */\nexport function getAllPNPSupports() {\n return Object.keys(PNP_TO_PIE_TOOL_MAP);\n}\n/**\n * Check if a PNP support is registered\n *\n * @param supportId PNP support identifier to check\n * @returns true if mapping exists\n */\nexport function isPNPSupportRegistered(supportId) {\n return supportId in PNP_TO_PIE_TOOL_MAP;\n}\n//# sourceMappingURL=PNPMapper.js.map","/**\n * ToolCoordinator\n *\n * Manages z-index layering and visibility for floating tools.\n * Prevents conflicts between calculator, ruler, protractor, etc.\n *\n * Features:\n * - Centralized z-index management with defined layers\n * - Tool visibility state tracking\n * - Bring-to-front on interaction\n * - Framework-agnostic (works with any DOM element)\n *\n * Part of PIE Assessment Toolkit.\n */\nimport { createLogger } from \"../utils/logger\";\nconst log = createLogger(\"ToolCoordinator\");\n/**\n * Z-index layers for assessment components\n */\nexport var ZIndexLayer;\n(function (ZIndexLayer) {\n ZIndexLayer[ZIndexLayer[\"BASE\"] = 0] = \"BASE\";\n ZIndexLayer[ZIndexLayer[\"TOOL\"] = 1000] = \"TOOL\";\n ZIndexLayer[ZIndexLayer[\"MODAL\"] = 2000] = \"MODAL\";\n ZIndexLayer[ZIndexLayer[\"CONTROL\"] = 3000] = \"CONTROL\";\n ZIndexLayer[ZIndexLayer[\"HIGHLIGHT\"] = 4000] = \"HIGHLIGHT\";\n})(ZIndexLayer || (ZIndexLayer = {}));\nexport class ToolCoordinator {\n config;\n tools = new Map();\n layerCounters = new Map();\n listeners = new Set();\n constructor(config = {}) {\n this.config = config;\n // Initialize layer counters\n this.layerCounters.set(ZIndexLayer.BASE, 0);\n this.layerCounters.set(ZIndexLayer.TOOL, 0);\n this.layerCounters.set(ZIndexLayer.MODAL, 0);\n this.layerCounters.set(ZIndexLayer.CONTROL, 0);\n this.layerCounters.set(ZIndexLayer.HIGHLIGHT, 0);\n }\n /**\n * Subscribe to tool state changes\n * Returns unsubscribe function\n */\n subscribe(listener) {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n /**\n * Notify all listeners of state change\n */\n notifyListeners() {\n this.listeners.forEach((listener) => listener());\n }\n /**\n * Register a tool with the coordinator\n *\n * @param id Unique tool identifier\n * @param name Display name\n * @param element DOM element for the tool (optional for backward compatibility)\n * @param layer Z-index layer (defaults to MODAL)\n */\n registerTool(id, name, element, layer = ZIndexLayer.MODAL) {\n log(\"registerTool called:\", { id, name, hasElement: !!element, layer });\n if (this.tools.has(id)) {\n log(`Tool ${id} is already registered`);\n return;\n }\n // If no element provided, create a placeholder registration\n if (!element) {\n this.tools.set(id, {\n id,\n name,\n element: null,\n layer,\n isVisible: false,\n baseZIndex: layer,\n });\n log(\"Tool registered without element:\", id);\n return;\n }\n // Calculate base z-index for this layer\n const baseZIndex = layer + this.getNextLayerOffset(layer);\n // Apply z-index\n element.style.zIndex = String(baseZIndex);\n // Create and store event handler to enable proper cleanup\n const mouseDownHandler = () => this.bringToFront(element);\n element.addEventListener(\"mousedown\", mouseDownHandler);\n // Register tool with handler reference\n this.tools.set(id, {\n id,\n name,\n element,\n layer,\n isVisible: false,\n baseZIndex,\n mouseDownHandler,\n });\n log(\"Tool registered with element:\", id);\n }\n /**\n * Unregister a tool\n *\n * @param id Tool identifier\n */\n unregisterTool(id) {\n const tool = this.tools.get(id);\n if (!tool)\n return;\n // Remove event listeners using stored handler reference\n if (tool.element && tool.mouseDownHandler) {\n tool.element.removeEventListener(\"mousedown\", tool.mouseDownHandler);\n }\n this.tools.delete(id);\n }\n /**\n * Show a tool\n *\n * @param id Tool identifier\n */\n showTool(id) {\n const tool = this.tools.get(id);\n if (!tool) {\n log(`Tool ${id} not found`);\n return;\n }\n if (tool.element) {\n tool.element.style.display = \"\";\n this.bringToFront(tool.element);\n }\n tool.isVisible = true;\n this.notifyListeners();\n }\n /**\n * Hide a tool\n *\n * @param id Tool identifier\n */\n hideTool(id) {\n const tool = this.tools.get(id);\n if (!tool) {\n log(`Tool ${id} not found`);\n return;\n }\n if (tool.element) {\n tool.element.style.display = \"none\";\n }\n tool.isVisible = false;\n this.notifyListeners();\n }\n /**\n * Toggle tool visibility\n *\n * @param id Tool identifier\n */\n toggleTool(id) {\n log(\"toggleTool called for:\", id);\n const tool = this.tools.get(id);\n if (!tool) {\n log(`Tool ${id} not found. Registered tools:`, Array.from(this.tools.keys()));\n return;\n }\n log(\"Tool found, current visibility:\", tool.isVisible);\n if (tool.isVisible) {\n this.hideTool(id);\n }\n else {\n this.showTool(id);\n }\n }\n /**\n * Check if tool is visible\n *\n * @param id Tool identifier\n * @returns true if tool is visible\n */\n isToolVisible(id) {\n const tool = this.tools.get(id);\n return tool?.isVisible ?? false;\n }\n /**\n * Bring element to front of its layer\n *\n * @param element DOM element to bring forward\n */\n bringToFront(element) {\n // Find tool registration\n const tool = Array.from(this.tools.values()).find((t) => t.element === element);\n if (!tool)\n return;\n // Calculate new z-index (highest in layer + 1)\n const maxZIndexInLayer = this.getMaxZIndexInLayer(tool.layer);\n const newZIndex = Math.max(maxZIndexInLayer + 1, tool.layer + 1);\n // Update z-index\n element.style.zIndex = String(newZIndex);\n tool.baseZIndex = newZIndex;\n }\n /**\n * Get all registered tool IDs\n */\n getRegisteredTools() {\n return Array.from(this.tools.keys());\n }\n /**\n * Get tool element by ID\n */\n getToolElement(id) {\n return this.tools.get(id)?.element ?? null;\n }\n /**\n * Get next offset within a layer\n */\n getNextLayerOffset(layer) {\n const current = this.layerCounters.get(layer) ?? 0;\n this.layerCounters.set(layer, current + 1);\n return current;\n }\n /**\n * Get maximum z-index currently in use in a layer\n */\n getMaxZIndexInLayer(layer) {\n let max = layer;\n for (const tool of this.tools.values()) {\n if (tool.layer === layer) {\n max = Math.max(max, tool.baseZIndex);\n }\n }\n return max;\n }\n /**\n * Reset all tools to their base z-indices\n */\n resetZIndices() {\n for (const tool of this.tools.values()) {\n if (tool.element) {\n tool.element.style.zIndex = String(tool.baseZIndex);\n }\n }\n }\n /**\n * Update tool element reference (backward compatibility)\n *\n * @param id Tool identifier\n * @param element New DOM element\n */\n updateToolElement(id, element) {\n const tool = this.tools.get(id);\n if (!tool) {\n log(`Tool ${id} not found`);\n return;\n }\n // Remove old event listener using stored handler reference\n if (tool.element && tool.mouseDownHandler) {\n tool.element.removeEventListener(\"mousedown\", tool.mouseDownHandler);\n }\n // Create new handler and add listener\n const mouseDownHandler = () => this.bringToFront(element);\n element.addEventListener(\"mousedown\", mouseDownHandler);\n // Update element and handler reference\n tool.element = element;\n tool.mouseDownHandler = mouseDownHandler;\n // Apply z-index to new element\n element.style.zIndex = String(tool.baseZIndex);\n if (tool.isVisible) {\n element.style.display = \"\";\n }\n else {\n element.style.display = \"none\";\n }\n }\n /**\n * Hide all tools (backward compatibility)\n */\n hideAllTools() {\n for (const id of this.tools.keys()) {\n this.hideTool(id);\n }\n this.notifyListeners();\n }\n /**\n * Get tool state (interface method)\n *\n * @param id Tool identifier\n * @returns Tool state or undefined\n */\n getToolState(id) {\n const tool = this.tools.get(id);\n if (!tool)\n return undefined;\n return {\n id: tool.id,\n name: tool.name,\n isVisible: tool.isVisible,\n element: tool.element ?? null,\n layer: tool.layer,\n };\n }\n /**\n * Get all visible tools (interface method)\n *\n * @returns Array of visible tool states\n */\n getVisibleTools() {\n return Array.from(this.tools.values())\n .filter((tool) => tool.isVisible)\n .map((tool) => ({\n id: tool.id,\n name: tool.name,\n isVisible: tool.isVisible,\n element: tool.element ?? null,\n layer: tool.layer,\n }));\n }\n}\n//# sourceMappingURL=ToolCoordinator.js.map","/**\n * TTSService\n *\n * Text-to-speech service with pluggable provider architecture.\n * Manages playback state, coordinates multiple TTS entry points,\n * and integrates with HighlightCoordinator for word highlighting.\n *\n * Features:\n * - Pluggable TTS providers (browser, AWS Polly, etc.)\n * - QTI 3.0 accessibility catalogs (pre-authored spoken content)\n * - Unified playback state management\n * - Prevents conflicts from simultaneous speech\n * - Word highlighting integration\n * - Playback controls: play, pause, resume, stop\n *\n * Part of PIE Assessment Toolkit.\n */\n/**\n * Playback state\n */\nexport var PlaybackState;\n(function (PlaybackState) {\n PlaybackState[\"IDLE\"] = \"idle\";\n PlaybackState[\"LOADING\"] = \"loading\";\n PlaybackState[\"PLAYING\"] = \"playing\";\n PlaybackState[\"PAUSED\"] = \"paused\";\n PlaybackState[\"ERROR\"] = \"error\";\n})(PlaybackState || (PlaybackState = {}));\n/**\n * TTSService\n *\n * Instantiable service for text-to-speech functionality.\n * Each instance manages its own playback state.\n */\nexport class TTSService {\n currentProvider = null;\n provider = null;\n highlightCoordinator = null;\n catalogResolver = null;\n state = PlaybackState.IDLE;\n currentText = null;\n currentContentElement = null;\n normalizedToDOM = new Map();\n listeners = new Map();\n lastError = null;\n constructor() { }\n /**\n * Initialize TTS service with a provider\n *\n * @param provider TTS provider instance\n * @param config Provider configuration\n */\n async initialize(provider, config = {}) {\n this.currentProvider = provider;\n // Initialize provider and get implementation\n this.provider = await provider.initialize(config);\n }\n /**\n * Update TTS settings dynamically without full reinitialization\n *\n * This allows changing rate, pitch, and voice on the fly.\n * Note: Some providers may require reinitialization for voice changes.\n *\n * @param settings Partial settings to update (rate, pitch, voice)\n */\n async updateSettings(settings) {\n if (!this.provider) {\n throw new Error(\"TTSService not initialized. Call initialize() first.\");\n }\n // If the provider implementation has an updateSettings method, use it\n if (\"updateSettings\" in this.provider &&\n typeof this.provider.updateSettings === \"function\") {\n await this.provider.updateSettings(settings);\n }\n else {\n // Fallback: Reinitialize with merged config\n // This requires storing the original config, which we don't have\n // So for now, just log a warning\n console.warn(\"[TTSService] Provider does not support dynamic settings updates. Some settings may require reinitialization.\");\n }\n }\n /**\n * Set highlight coordinator for word highlighting\n */\n setHighlightCoordinator(coordinator) {\n this.highlightCoordinator = coordinator;\n }\n /**\n * Set accessibility catalog resolver for spoken content\n *\n * When set, the speak() method will check for pre-authored spoken\n * content in catalogs before falling back to generated TTS.\n *\n * @param resolver AccessibilityCatalogResolver instance\n */\n setCatalogResolver(resolver) {\n this.catalogResolver = resolver;\n }\n /**\n * Get provider capabilities\n */\n getCapabilities() {\n return this.currentProvider?.getCapabilities() || null;\n }\n /**\n * Build a character-by-character map from normalized text positions to DOM positions\n * This handles the complexity of whitespace normalization\n */\n buildPositionMap(element, spokenText) {\n this.normalizedToDOM.clear();\n // Get the actual DOM text as it will be rendered\n const range = document.createRange();\n range.selectNodeContents(element);\n const domText = range.toString();\n // Normalize the DOM text the same way the spoken text is normalized\n // (trim + collapse whitespace)\n const normalizedDomText = domText.trim().replace(/\\s+/g, \" \");\n console.log(\"[TTSService] Text comparison:\", {\n spokenLength: spokenText.length,\n normalizedDomLength: normalizedDomText.length,\n match: spokenText === normalizedDomText,\n spokenPreview: spokenText.substring(0, 150),\n normalizedPreview: normalizedDomText.substring(0, 150),\n differAtIndex: spokenText === normalizedDomText\n ? null\n : (() => {\n for (let i = 0; i < Math.min(spokenText.length, normalizedDomText.length); i++) {\n if (spokenText[i] !== normalizedDomText[i]) {\n return {\n index: i,\n spokenChar: spokenText[i],\n normalizedChar: normalizedDomText[i],\n spokenContext: spokenText.substring(Math.max(0, i - 20), i + 20),\n normalizedContext: normalizedDomText.substring(Math.max(0, i - 20), i + 20),\n };\n }\n }\n return null;\n })(),\n });\n // Build map by walking through nodes and tracking normalized position\n let normalizedPos = 0;\n let inLeadingWhitespace = true;\n let lastCharWasWhitespace = false;\n const walk = (node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const textNode = node;\n const text = textNode.textContent || \"\";\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n const isWhitespace = /\\s/.test(char);\n if (inLeadingWhitespace) {\n // Skip leading whitespace entirely - don't map it\n if (!isWhitespace) {\n inLeadingWhitespace = false;\n this.normalizedToDOM.set(normalizedPos, {\n node: textNode,\n offset: i,\n });\n normalizedPos++;\n lastCharWasWhitespace = false;\n }\n }\n else {\n // Past leading whitespace\n if (isWhitespace) {\n // Only map the first whitespace in a sequence (collapse multiple)\n if (!lastCharWasWhitespace) {\n this.normalizedToDOM.set(normalizedPos, {\n node: textNode,\n offset: i,\n });\n normalizedPos++;\n }\n lastCharWasWhitespace = true;\n }\n else {\n // Regular character - always map it\n this.normalizedToDOM.set(normalizedPos, {\n node: textNode,\n offset: i,\n });\n normalizedPos++;\n lastCharWasWhitespace = false;\n }\n }\n }\n }\n else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node;\n if (element.tagName !== \"SCRIPT\" && element.tagName !== \"STYLE\") {\n for (const child of Array.from(node.childNodes)) {\n walk(child);\n }\n }\n }\n };\n walk(element);\n console.log(\"[TTSService] Position map built:\", {\n entries: this.normalizedToDOM.size,\n spokenTextLength: spokenText.length,\n normalizedDomLength: normalizedDomText.length,\n mapLengthMatchesSpoken: this.normalizedToDOM.size === spokenText.length,\n firstFewMappings: Array.from(this.normalizedToDOM.entries())\n .slice(0, 10)\n .map(([pos, { node, offset }]) => ({\n pos,\n offset,\n char: node.textContent?.[offset],\n expected: spokenText[pos],\n })),\n });\n }\n /**\n * Find text node and offsets for highlighting a word\n *\n * @param charIndex Character position in normalized/spoken text\n * @param length Length of the word\n * @returns Text node and local offsets, or null if not found\n */\n findHighlightRange(charIndex, length) {\n const startPos = this.normalizedToDOM.get(charIndex);\n if (!startPos) {\n console.warn(`[TTSService] No mapping found for start position ${charIndex}`, {\n totalMappings: this.normalizedToDOM.size,\n nearbyMappings: Array.from(this.normalizedToDOM.entries())\n .filter(([pos]) => Math.abs(pos - charIndex) < 5)\n .map(([pos, { offset, node }]) => ({\n pos,\n offset,\n char: node.textContent?.[offset],\n })),\n });\n return null;\n }\n // Find the end position (last character of the word)\n const endIndex = charIndex + length - 1;\n const endPos = this.normalizedToDOM.get(endIndex);\n if (!endPos) {\n console.warn(`[TTSService] No mapping found for end position ${endIndex}`, {\n startChar: charIndex,\n length,\n totalMappings: this.normalizedToDOM.size,\n });\n return null;\n }\n // For simplicity, if the word spans multiple nodes, just highlight in the first node\n // (This is a rare edge case and would require creating multiple ranges)\n if (startPos.node !== endPos.node) {\n console.warn(`[TTSService] Word spans multiple nodes, highlighting in first node only`);\n return {\n node: startPos.node,\n start: startPos.offset,\n end: (startPos.node.textContent || \"\").length,\n };\n }\n return {\n node: startPos.node,\n start: startPos.offset,\n end: endPos.offset + 1, // +1 because we want to include the character at endPos\n };\n }\n /**\n * Speak text with optional catalog support\n *\n * @param text Text to speak (will be normalized: trimmed and whitespace collapsed)\n * @param options Optional catalog ID, language, and content element for highlighting\n */\n async speak(text, options) {\n if (!this.provider) {\n throw new Error(\"TTS service not initialized\");\n }\n // Normalize the input text to ensure consistency\n // This handles cases where the caller didn't normalize\n const normalizedText = text.trim().replace(/\\s+/g, \" \");\n // Try to resolve from accessibility catalog if catalogId provided\n let contentToSpeak = normalizedText;\n if (options?.catalogId && this.catalogResolver) {\n const catalogContent = this.catalogResolver.getAlternative(options.catalogId, {\n type: \"spoken\",\n language: options.language || \"en-US\",\n useFallback: true,\n });\n if (catalogContent) {\n // Use pre-authored spoken content from catalog\n contentToSpeak = catalogContent.content;\n console.debug(`[TTSService] Using catalog content for \"${options.catalogId}\" (${catalogContent.language})`);\n }\n else {\n console.debug(`[TTSService] No catalog found for \"${options.catalogId}\", falling back to generated TTS`);\n }\n }\n this.currentText = contentToSpeak;\n this.currentContentElement = options?.contentElement || null;\n this.lastError = null; // Clear previous error\n this.setState(PlaybackState.LOADING);\n // Build position map for highlighting if we have a content element\n if (this.currentContentElement && this.highlightCoordinator) {\n this.buildPositionMap(this.currentContentElement, contentToSpeak);\n // Apply sentence-level highlighting as base layer\n const range = document.createRange();\n range.selectNodeContents(this.currentContentElement);\n this.highlightCoordinator.highlightTTSSentence([range]);\n console.log(\"[TTSService] Applied sentence-level highlighting\");\n }\n try {\n // Setup word boundary highlighting\n if (this.highlightCoordinator && this.currentContentElement) {\n this.provider.onWordBoundary = (word, charIndex, length) => {\n const wordLength = length || word.length;\n const highlightRange = this.findHighlightRange(charIndex, wordLength);\n if (highlightRange && this.highlightCoordinator) {\n const highlightText = highlightRange.node.textContent?.substring(highlightRange.start, highlightRange.end) || \"\";\n console.log(`[TTSService] Highlighting \"${highlightText}\" (word: \"${word}\") at position ${charIndex}`);\n this.highlightCoordinator.highlightTTSWord(highlightRange.node, highlightRange.start, highlightRange.end);\n }\n else {\n console.warn(`[TTSService] Could not find highlight range for position ${charIndex}, length ${wordLength}`);\n }\n };\n }\n this.setState(PlaybackState.PLAYING);\n await this.provider.speak(contentToSpeak);\n this.setState(PlaybackState.IDLE);\n // Clear highlights when done\n if (this.highlightCoordinator) {\n this.highlightCoordinator.clearTTS();\n }\n // Clear tracking\n this.currentContentElement = null;\n this.normalizedToDOM.clear();\n }\n catch (error) {\n console.error(\"TTS error:\", error);\n this.lastError = error instanceof Error ? error.message : String(error);\n this.setState(PlaybackState.ERROR);\n // Clear highlights on error\n if (this.highlightCoordinator) {\n this.highlightCoordinator.clearTTS();\n }\n // Clear tracking\n this.currentContentElement = null;\n this.normalizedToDOM.clear();\n throw error;\n }\n }\n /**\n * Speak a text range\n *\n * @param range DOM Range to speak\n */\n async speakRange(range) {\n const text = range.toString();\n await this.speak(text);\n }\n /**\n * Pause playback\n */\n pause() {\n if (!this.provider)\n return;\n if (this.state === PlaybackState.PLAYING) {\n this.provider.pause();\n this.setState(PlaybackState.PAUSED);\n }\n }\n /**\n * Resume playback\n */\n resume() {\n if (!this.provider)\n return;\n if (this.state === PlaybackState.PAUSED) {\n this.provider.resume();\n this.setState(PlaybackState.PLAYING);\n }\n }\n /**\n * Stop playback\n */\n stop() {\n if (!this.provider)\n return;\n this.provider.stop();\n this.setState(PlaybackState.IDLE);\n this.currentText = null;\n // Clear highlights\n if (this.highlightCoordinator) {\n this.highlightCoordinator.clearTTS();\n }\n // Clear tracking\n this.currentContentElement = null;\n this.normalizedToDOM.clear();\n }\n /**\n * Check if currently playing\n */\n isPlaying() {\n return this.state === PlaybackState.PLAYING;\n }\n /**\n * Check if paused\n */\n isPaused() {\n return this.state === PlaybackState.PAUSED;\n }\n /**\n * Get current state\n */\n getState() {\n return this.state;\n }\n /**\n * Get current text being spoken\n */\n getCurrentText() {\n return this.currentText;\n }\n /**\n * Get the last error message\n * Returns null if no error has occurred\n */\n getLastError() {\n return this.lastError;\n }\n /**\n * Subscribe to state changes\n *\n * @param id Unique listener ID\n * @param callback Function to call on state change\n */\n onStateChange(id, callback) {\n if (!this.listeners.has(id)) {\n this.listeners.set(id, new Set());\n }\n this.listeners.get(id).add(callback);\n }\n /**\n * Unsubscribe from state changes\n */\n offStateChange(id, callback) {\n const callbacks = this.listeners.get(id);\n if (callbacks) {\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n this.listeners.delete(id);\n }\n }\n }\n /**\n * Set state and notify listeners\n */\n setState(newState) {\n if (this.state === newState)\n return;\n this.state = newState;\n // Notify all listeners\n for (const callbacks of this.listeners.values()) {\n for (const callback of callbacks) {\n callback(newState);\n }\n }\n }\n}\n//# sourceMappingURL=TTSService.js.map","/*\nCopyright (c) 2019 Daybrush\nname: framework-utils\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/framework-utils.git\nversion: 1.1.0\n*/\nfunction prefixNames(prefix) {\n var classNames = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n\n return classNames.map(function (className) {\n return className.split(\" \").map(function (name) {\n return name ? \"\" + prefix + name : \"\";\n }).join(\" \");\n }).join(\" \");\n}\nfunction prefixCSS(prefix, css) {\n return css.replace(/([^}{]*){/gm, function (_, selector) {\n return selector.replace(/\\.([^{,\\s\\d.]+)/g, \".\" + prefix + \"$1\") + \"{\";\n });\n}\n/* react */\n\nfunction ref(target, name) {\n return function (e) {\n e && (target[name] = e);\n };\n}\nfunction refs(target, name, i) {\n return function (e) {\n e && (target[name][i] = e);\n };\n}\n/* Class Decorator */\n\nfunction Properties(properties, action) {\n return function (component) {\n var prototype = component.prototype;\n properties.forEach(function (property) {\n action(prototype, property);\n });\n };\n}\n/* Property Decorator */\n\nfunction withMethods(methods, duplicate) {\n if (duplicate === void 0) {\n duplicate = {};\n }\n\n return function (prototype, propertyName) {\n methods.forEach(function (name) {\n var methodName = duplicate[name] || name;\n\n if (methodName in prototype) {\n return;\n }\n\n prototype[methodName] = function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var result = (_a = this[propertyName])[name].apply(_a, args);\n\n if (result === this[propertyName]) {\n return this;\n } else {\n return result;\n }\n };\n });\n };\n}\n\nexport { Properties, prefixCSS, prefixNames, ref, refs, withMethods };\n//# sourceMappingURL=utils.esm.js.map\n","/*\nCopyright (c) 2018 Daybrush\n@name: @daybrush/utils\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/utils\n@version 1.13.0\n*/\n/**\n* @namespace\n* @name Consts\n*/\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nvar RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nvar RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nvar HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nvar HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nvar COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nvar FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nvar PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nvar ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nvar OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nvar STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nvar NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nvar UNDEFINED = \"undefined\";\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nvar IS_WINDOW = typeof window !== UNDEFINED;\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nvar doc = typeof document !== UNDEFINED && document; // FIXME: this type maybe false\nvar prefixes = [\"webkit\", \"ms\", \"moz\", \"o\"];\n/**\n * @namespace CrossBrowser\n */\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nvar getCrossBrowserProperty = /*#__PURE__*/function (property) {\n if (!doc) {\n return \"\";\n }\n var styles = (doc.body || doc.documentElement).style;\n var length = prefixes.length;\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (var i = 0; i < length; ++i) {\n var name = \"-\" + prefixes[i] + \"-\" + property;\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nvar TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nvar FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nvar ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nvar KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\nvar OPEN_CLOSED_CHARACTERS = [{\n open: \"(\",\n close: \")\"\n}, {\n open: \"\\\"\",\n close: \"\\\"\"\n}, {\n open: \"'\",\n close: \"'\"\n}, {\n open: \"\\\\\\\"\",\n close: \"\\\\\\\"\"\n}, {\n open: \"\\\\'\",\n close: \"\\\\'\"\n}];\nvar TINY_NUM = 0.0000001;\nvar REVERSE_TINY_NUM = 1 / TINY_NUM;\nvar DEFAULT_UNIT_PRESETS = {\n \"cm\": function (pos) {\n return pos * 96 / 2.54;\n },\n \"mm\": function (pos) {\n return pos * 96 / 254;\n },\n \"in\": function (pos) {\n return pos * 96;\n },\n \"pt\": function (pos) {\n return pos * 96 / 72;\n },\n \"pc\": function (pos) {\n return pos * 96 / 6;\n },\n \"%\": function (pos, size) {\n return pos * size / 100;\n },\n \"vw\": function (pos, size) {\n if (size === void 0) {\n size = window.innerWidth;\n }\n return pos / 100 * size;\n },\n \"vh\": function (pos, size) {\n if (size === void 0) {\n size = window.innerHeight;\n }\n return pos / 100 * size;\n },\n \"vmax\": function (pos, size) {\n if (size === void 0) {\n size = Math.max(window.innerWidth, window.innerHeight);\n }\n return pos / 100 * size;\n },\n \"vmin\": function (pos, size) {\n if (size === void 0) {\n size = Math.min(window.innerWidth, window.innerHeight);\n }\n return pos / 100 * size;\n }\n};\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n}\n\n/**\n* @namespace\n* @name Utils\n*/\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nfunction dot(a1, a2, b1, b2) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nfunction isUndefined(value) {\n return typeof value === UNDEFINED;\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nfunction isObject(value) {\n return value && typeof value === OBJECT;\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nfunction isArray(value) {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nfunction isString(value) {\n return typeof value === STRING;\n}\nfunction isNumber(value) {\n return typeof value === NUMBER;\n}\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nfunction isFunction(value) {\n return typeof value === FUNCTION;\n}\nfunction isEqualSeparator(character, separator) {\n var isCharacterSpace = character === \"\" || character == \" \";\n var isSeparatorSpace = separator === \"\" || separator == \" \";\n return isSeparatorSpace && isCharacterSpace || character === separator;\n}\nfunction findOpen(openCharacter, texts, index, length, openCloseCharacters) {\n var isIgnore = findIgnore(openCharacter, texts, index);\n if (!isIgnore) {\n return findClose(openCharacter, texts, index + 1, length, openCloseCharacters);\n }\n return index;\n}\nfunction findIgnore(character, texts, index) {\n if (!character.ignore) {\n return null;\n }\n var otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(\"\");\n return new RegExp(character.ignore).exec(otherText);\n}\nfunction findClose(closeCharacter, texts, index, length, openCloseCharacters) {\n var _loop_1 = function (i) {\n var character = texts[i].trim();\n if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) {\n return {\n value: i\n };\n }\n var nextIndex = i;\n // re open\n var openCharacter = find(openCloseCharacters, function (_a) {\n var open = _a.open;\n return open === character;\n });\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n }\n if (nextIndex === -1) {\n return out_i_1 = i, \"break\";\n }\n i = nextIndex;\n out_i_1 = i;\n };\n var out_i_1;\n for (var i = index; i < length; ++i) {\n var state_1 = _loop_1(i);\n i = out_i_1;\n if (typeof state_1 === \"object\") return state_1.value;\n if (state_1 === \"break\") break;\n }\n return -1;\n}\nfunction splitText(text, splitOptions) {\n var _a = isString(splitOptions) ? {\n separator: splitOptions\n } : splitOptions,\n _b = _a.separator,\n separator = _b === void 0 ? \",\" : _b,\n isSeparateFirst = _a.isSeparateFirst,\n isSeparateOnlyOpenClose = _a.isSeparateOnlyOpenClose,\n _c = _a.isSeparateOpenClose,\n isSeparateOpenClose = _c === void 0 ? isSeparateOnlyOpenClose : _c,\n _d = _a.openCloseCharacters,\n openCloseCharacters = _d === void 0 ? OPEN_CLOSED_CHARACTERS : _d;\n var openClosedText = openCloseCharacters.map(function (_a) {\n var open = _a.open,\n close = _a.close;\n if (open === close) {\n return open;\n }\n return open + \"|\" + close;\n }).join(\"|\");\n var regexText = \"(\\\\s*\" + separator + \"\\\\s*|\" + openClosedText + \"|\\\\s+)\";\n var regex = new RegExp(regexText, \"g\");\n var texts = text.split(regex).filter(function (chr) {\n return chr && chr !== \"undefined\";\n });\n var length = texts.length;\n var values = [];\n var tempValues = [];\n function resetTemp() {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n return true;\n }\n return false;\n }\n var _loop_2 = function (i) {\n var character = texts[i].trim();\n var nextIndex = i;\n var openCharacter = find(openCloseCharacters, function (_a) {\n var open = _a.open;\n return open === character;\n });\n var closeCharacter = find(openCloseCharacters, function (_a) {\n var close = _a.close;\n return close === character;\n });\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n if (nextIndex !== -1 && isSeparateOpenClose) {\n if (resetTemp() && isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n values.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n if (isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n return out_i_2 = i, \"continue\";\n }\n } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) {\n var nextOpenCloseCharacters = __spreadArrays(openCloseCharacters);\n nextOpenCloseCharacters.splice(openCloseCharacters.indexOf(closeCharacter), 1);\n return {\n value: splitText(text, {\n separator: separator,\n isSeparateFirst: isSeparateFirst,\n isSeparateOnlyOpenClose: isSeparateOnlyOpenClose,\n isSeparateOpenClose: isSeparateOpenClose,\n openCloseCharacters: nextOpenCloseCharacters\n })\n };\n } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) {\n resetTemp();\n if (isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n return out_i_2 = i, \"continue\";\n }\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n out_i_2 = i;\n };\n var out_i_2;\n for (var i = 0; i < length; ++i) {\n var state_2 = _loop_2(i);\n i = out_i_2;\n if (typeof state_2 === \"object\") return state_2.value;\n if (state_2 === \"break\") break;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nfunction splitSpace(text) {\n // divide comma(space)\n return splitText(text, \"\");\n}\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nfunction splitComma(text) {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nfunction splitBracket(text) {\n var matches = /([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g.exec(text);\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return {\n prefix: matches[1],\n value: matches[2],\n suffix: matches[3]\n };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nfunction splitUnit(text) {\n var matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n if (!matches) {\n return {\n prefix: \"\",\n unit: \"\",\n value: NaN\n };\n }\n var prefix = matches[1];\n var value = matches[2];\n var unit = matches[3];\n return {\n prefix: prefix,\n unit: unit,\n value: parseFloat(value)\n };\n}\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nfunction camelize(str) {\n return str.replace(/[\\s-_]+([^\\s-_])/g, function (all, letter) {\n return letter.toUpperCase();\n });\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nfunction decamelize(str, separator) {\n if (separator === void 0) {\n separator = \"-\";\n }\n return str.replace(/([a-z])([A-Z])/g, function (all, letter, letter2) {\n return \"\" + letter + separator + letter2.toLowerCase();\n });\n}\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nfunction toArray(value) {\n return [].slice.call(value);\n}\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nfunction now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nfunction findIndex(arr, callback, defaultIndex) {\n if (defaultIndex === void 0) {\n defaultIndex = -1;\n }\n var length = arr.length;\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n/**\n* Returns the reverse direction index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findLastIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findLastIndex } from \"@daybrush/utils\";\n\nfindLastIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nfunction findLastIndex(arr, callback, defaultIndex) {\n if (defaultIndex === void 0) {\n defaultIndex = -1;\n }\n var length = arr.length;\n for (var i = length - 1; i >= 0; --i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n/**\n* Returns the value of the reverse direction element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findLast` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nfunction findLast(arr, callback, defalutValue) {\n var index = findLastIndex(arr, callback);\n return index > -1 ? arr[index] : defalutValue;\n}\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nfunction find(arr, callback, defalutValue) {\n var index = findIndex(arr, callback);\n return index > -1 ? arr[index] : defalutValue;\n}\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nvar requestAnimationFrame = /*#__PURE__*/function () {\n var firstTime = now();\n var raf = IS_WINDOW && (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame);\n return raf ? raf.bind(window) : function (callback) {\n var currTime = now();\n var id = setTimeout(function () {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n };\n}();\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nvar cancelAnimationFrame = /*#__PURE__*/function () {\n var caf = IS_WINDOW && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.msCancelAnimationFrame);\n return caf ? caf.bind(window) : function (handle) {\n clearTimeout(handle);\n };\n}();\n/**\n* @function\n* @memberof Utils\n*/\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction getValues(obj) {\n var keys = getKeys(obj);\n return keys.map(function (key) {\n return obj[key];\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction getEntries(obj) {\n var keys = getKeys(obj);\n return keys.map(function (key) {\n return [key, obj[key]];\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction sortOrders(keys, orders) {\n if (orders === void 0) {\n orders = [];\n }\n keys.sort(function (a, b) {\n var index1 = orders.indexOf(a);\n var index2 = orders.indexOf(b);\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nfunction convertUnitSize(pos, size) {\n var _a = splitUnit(pos),\n value = _a.value,\n unit = _a.unit;\n if (isObject(size)) {\n var sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nfunction between(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction checkBoundSize(targetSize, compareSize, isMax, ratio) {\n if (ratio === void 0) {\n ratio = targetSize[0] / targetSize[1];\n }\n return [[throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] / ratio, TINY_NUM)], [throttle(compareSize[1] * ratio, TINY_NUM), throttle(compareSize[1], TINY_NUM)]].filter(function (size) {\n return size.every(function (value, i) {\n var defaultSize = compareSize[i];\n var throttledSize = throttle(defaultSize, TINY_NUM);\n return isMax ? value <= defaultSize || value <= throttledSize : value >= defaultSize || value >= throttledSize;\n });\n })[0] || targetSize;\n}\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nfunction calculateBoundSize(size, minSize, maxSize, keepRatio) {\n if (!keepRatio) {\n return size.map(function (value, i) {\n return between(value, minSize[i], maxSize[i]);\n });\n }\n var width = size[0],\n height = size[1];\n var ratio = keepRatio === true ? width / height : keepRatio;\n // width : height = minWidth : minHeight;\n var _a = checkBoundSize(size, minSize, false, ratio),\n minWidth = _a[0],\n minHeight = _a[1];\n var _b = checkBoundSize(size, maxSize, true, ratio),\n maxWidth = _b[0],\n maxHeight = _b[1];\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nfunction sum(nums) {\n var length = nums.length;\n var total = 0;\n for (var i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nfunction average(nums) {\n var length = nums.length;\n var total = 0;\n for (var i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nfunction getRad(pos1, pos2) {\n var distX = pos2[0] - pos1[0];\n var distY = pos2[1] - pos1[1];\n var rad = Math.atan2(distY, distX);\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nfunction getCenterPoint(points) {\n return [0, 1].map(function (i) {\n return average(points.map(function (pos) {\n return pos[i];\n }));\n });\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nfunction getShapeDirection(points) {\n var center = getCenterPoint(points);\n var pos1Rad = getRad(center, points[0]);\n var pos2Rad = getRad(center, points[1]);\n return pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI || pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI ? 1 : -1;\n}\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nfunction getDist(a, b) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nfunction throttle(num, unit) {\n if (!unit) {\n return num;\n }\n var reverseUnit = 1 / unit;\n return Math.round(num / unit) / reverseUnit;\n}\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nfunction throttleArray(nums, unit) {\n nums.forEach(function (_, i) {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction counter(num) {\n var nums = [];\n for (var i = 0; i < num; ++i) {\n nums.push(i);\n }\n return nums;\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction replaceOnce(text, fromText, toText) {\n var isOnce = false;\n return text.replace(fromText, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isOnce) {\n return args[0];\n }\n isOnce = true;\n return isString(toText) ? toText : toText.apply(void 0, args);\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction flat(arr) {\n return arr.reduce(function (prev, cur) {\n return prev.concat(cur);\n }, []);\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction deepFlat(arr) {\n return arr.reduce(function (prev, cur) {\n if (isArray(cur)) {\n prev.push.apply(prev, deepFlat(cur));\n } else {\n prev.push(cur);\n }\n return prev;\n }, []);\n}\n/**\n * @function\n * @memberof Utils\n */\nfunction pushSet(elements, element) {\n if (elements.indexOf(element) === -1) {\n elements.push(element);\n }\n}\n\n/**\n* @namespace\n* @name Color\n*/\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nfunction cutHex(hex) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nfunction hexToRGBA(hex) {\n var h = cutHex(hex);\n var r = parseInt(h.substring(0, 2), 16);\n var g = parseInt(h.substring(2, 4), 16);\n var b = parseInt(h.substring(4, 6), 16);\n var a = parseInt(h.substring(6, 8), 16) / 255;\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nfunction toFullHex(h) {\n var r = h.charAt(1);\n var g = h.charAt(2);\n var b = h.charAt(3);\n var a = h.charAt(4);\n var arr = [\"#\", r, r, g, g, b, b, a, a];\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nfunction hslToRGBA(hsl) {\n var _a;\n var h = hsl[0];\n var s = hsl[1];\n var l = hsl[2];\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n var c = (1 - Math.abs(2 * l - 1)) * s;\n var x = c * (1 - Math.abs(h / 60 % 2 - 1));\n var m = l - c / 2;\n var rgb;\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n return [Math.round((rgb[0] + m) * 255), Math.round((rgb[1] + m) * 255), Math.round((rgb[2] + m) * 255), (_a = hsl[3]) !== null && _a !== void 0 ? _a : 1];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nfunction stringToRGBA(color) {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n var _a = splitBracket(color),\n prefix = _a.prefix,\n value = _a.value;\n if (!prefix || !value) {\n return undefined;\n }\n var arr = splitComma(value);\n var colorArr = [0, 0, 0, 1];\n var length = arr.length;\n switch (prefix) {\n case RGB:\n case RGBA:\n for (var i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (var i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined;\n}\n\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nfunction $(selectors, multi) {\n if (!doc) {\n return multi ? [] : null;\n }\n return multi ? doc.querySelectorAll(selectors) : doc.querySelector(selectors);\n}\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nfunction hasClass(element, className) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\n}\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nfunction addClass(element, className) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += \" \" + className;\n }\n}\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nfunction removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\n element.className = element.className.replace(reg, \" \");\n }\n}\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nfunction fromCSS(elements, properties) {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n var element;\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n var cssObject = {};\n var styles = getWindow(element).getComputedStyle(element);\n var length = properties.length;\n for (var i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nfunction addEvent(el, type, listener, options) {\n el.addEventListener(type, listener, options);\n}\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nfunction removeEvent(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n}\nfunction getDocument(el) {\n return (el === null || el === void 0 ? void 0 : el.ownerDocument) || doc;\n}\nfunction getDocumentElement(el) {\n return getDocument(el).documentElement;\n}\nfunction getDocumentBody(el) {\n return getDocument(el).body;\n}\nfunction getWindow(el) {\n var _a;\n return ((_a = el === null || el === void 0 ? void 0 : el.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) || window;\n}\nfunction isWindow(val) {\n return val && \"postMessage\" in val && \"blur\" in val && \"self\" in val;\n}\nfunction isNode(el) {\n return isObject(el) && el.nodeName && el.nodeType && \"ownerDocument\" in el;\n}\n\nexport { RGB, RGBA, HSL, HSLA, COLOR_MODELS, FUNCTION, PROPERTY, ARRAY, OBJECT, STRING, NUMBER, UNDEFINED, IS_WINDOW, doc as document, getCrossBrowserProperty, TRANSFORM, FILTER, ANIMATION, KEYFRAMES, OPEN_CLOSED_CHARACTERS, TINY_NUM, REVERSE_TINY_NUM, DEFAULT_UNIT_PRESETS, cutHex, hexToRGBA, toFullHex, hslToRGBA, stringToRGBA, dot, isUndefined, isObject, isArray, isString, isNumber, isFunction, splitText, splitSpace, splitComma, splitBracket, splitUnit, camelize, decamelize, toArray, now, findIndex, findLastIndex, findLast, find, requestAnimationFrame, cancelAnimationFrame, getKeys, getValues, getEntries, sortOrders, convertUnitSize, between, checkBoundSize, calculateBoundSize, sum, average, getRad, getCenterPoint, getShapeDirection, getDist, throttle, throttleArray, counter, replaceOnce, flat, deepFlat, pushSet, $, hasClass, addClass, removeClass, fromCSS, addEvent, removeEvent, getDocument, getDocumentElement, getDocumentBody, getWindow, isWindow, isNode };\n//# sourceMappingURL=utils.esm.js.map\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/list-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-list-differ\nversion: 1.0.1\n*/\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar PolyMap =\n/*#__PURE__*/\nfunction () {\n function PolyMap() {\n this.keys = [];\n this.values = [];\n }\n\n var __proto = PolyMap.prototype;\n\n __proto.get = function (key) {\n return this.values[this.keys.indexOf(key)];\n };\n\n __proto.set = function (key, value) {\n var keys = this.keys;\n var values = this.values;\n var prevIndex = keys.indexOf(key);\n var index = prevIndex === -1 ? keys.length : prevIndex;\n keys[index] = key;\n values[index] = value;\n };\n\n return PolyMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar HashMap =\n/*#__PURE__*/\nfunction () {\n function HashMap() {\n this.object = {};\n }\n\n var __proto = HashMap.prototype;\n\n __proto.get = function (key) {\n return this.object[key];\n };\n\n __proto.set = function (key, value) {\n this.object[key] = value;\n };\n\n return HashMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar SUPPORT_MAP = typeof Map === \"function\";\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar Link =\n/*#__PURE__*/\nfunction () {\n function Link() {}\n\n var __proto = Link.prototype;\n\n __proto.connect = function (prevLink, nextLink) {\n this.prev = prevLink;\n this.next = nextLink;\n prevLink && (prevLink.next = this);\n nextLink && (nextLink.prev = this);\n };\n\n __proto.disconnect = function () {\n // In double linked list, diconnect the interconnected relationship.\n var prevLink = this.prev;\n var nextLink = this.next;\n prevLink && (prevLink.next = nextLink);\n nextLink && (nextLink.prev = prevLink);\n };\n\n __proto.getIndex = function () {\n var link = this;\n var index = -1;\n\n while (link) {\n link = link.prev;\n ++index;\n }\n\n return index;\n };\n\n return Link;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nfunction orderChanged(changed, fixed) {\n // It is roughly in the order of these examples.\n // 4, 6, 0, 2, 1, 3, 5, 7\n var fromLinks = []; // 0, 1, 2, 3, 4, 5, 6, 7\n\n var toLinks = [];\n changed.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var link = new Link();\n fromLinks[from] = link;\n toLinks[to] = link;\n }); // `fromLinks` are connected to each other by double linked list.\n\n fromLinks.forEach(function (link, i) {\n link.connect(fromLinks[i - 1]);\n });\n return changed.filter(function (_, i) {\n return !fixed[i];\n }).map(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n\n if (from === to) {\n return [0, 0];\n }\n\n var fromLink = fromLinks[from];\n var toLink = toLinks[to - 1];\n var fromIndex = fromLink.getIndex(); // Disconnect the link connected to `fromLink`.\n\n fromLink.disconnect(); // Connect `fromLink` to the right of `toLink`.\n\n if (!toLink) {\n fromLink.connect(undefined, fromLinks[0]);\n } else {\n fromLink.connect(toLink, toLink.next);\n }\n\n var toIndex = fromLink.getIndex();\n return [fromIndex, toIndex];\n });\n}\n\nvar Result =\n/*#__PURE__*/\nfunction () {\n function Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed) {\n this.prevList = prevList;\n this.list = list;\n this.added = added;\n this.removed = removed;\n this.changed = changed;\n this.maintained = maintained;\n this.changedBeforeAdded = changedBeforeAdded;\n this.fixed = fixed;\n }\n\n var __proto = Result.prototype;\n Object.defineProperty(__proto, \"ordered\", {\n get: function () {\n if (!this.cacheOrdered) {\n this.caculateOrdered();\n }\n\n return this.cacheOrdered;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(__proto, \"pureChanged\", {\n get: function () {\n if (!this.cachePureChanged) {\n this.caculateOrdered();\n }\n\n return this.cachePureChanged;\n },\n enumerable: true,\n configurable: true\n });\n\n __proto.caculateOrdered = function () {\n var ordered = orderChanged(this.changedBeforeAdded, this.fixed);\n var changed = this.changed;\n var pureChanged = [];\n this.cacheOrdered = ordered.filter(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n var _b = changed[i],\n fromBefore = _b[0],\n toBefore = _b[1];\n\n if (from !== to) {\n pureChanged.push([fromBefore, toBefore]);\n return true;\n }\n });\n this.cachePureChanged = pureChanged;\n };\n\n return Result;\n}();\n\n/**\n *\n * @memberof eg.ListDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/list-differ\";\n * // script => eg.ListDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1], e => e);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list, findKeyCallback) {\n var mapClass = SUPPORT_MAP ? Map : findKeyCallback ? HashMap : PolyMap;\n\n var callback = findKeyCallback || function (e) {\n return e;\n };\n\n var added = [];\n var removed = [];\n var maintained = [];\n var prevKeys = prevList.map(callback);\n var keys = list.map(callback);\n var prevKeyMap = new mapClass();\n var keyMap = new mapClass();\n var changedBeforeAdded = [];\n var fixed = [];\n var removedMap = {};\n var changed = [];\n var addedCount = 0;\n var removedCount = 0; // Add prevKeys and keys to the hashmap.\n\n prevKeys.forEach(function (key, prevListIndex) {\n prevKeyMap.set(key, prevListIndex);\n });\n keys.forEach(function (key, listIndex) {\n keyMap.set(key, listIndex);\n }); // Compare `prevKeys` and `keys` and add them to `removed` if they are not in `keys`.\n\n prevKeys.forEach(function (key, prevListIndex) {\n var listIndex = keyMap.get(key); // In prevList, but not in list, it is removed.\n\n if (typeof listIndex === \"undefined\") {\n ++removedCount;\n removed.push(prevListIndex);\n } else {\n removedMap[listIndex] = removedCount;\n }\n }); // Compare `prevKeys` and `keys` and add them to `added` if they are not in `prevKeys`.\n\n keys.forEach(function (key, listIndex) {\n var prevListIndex = prevKeyMap.get(key); // In list, but not in prevList, it is added.\n\n if (typeof prevListIndex === \"undefined\") {\n added.push(listIndex);\n ++addedCount;\n } else {\n maintained.push([prevListIndex, listIndex]);\n removedCount = removedMap[listIndex] || 0;\n changedBeforeAdded.push([prevListIndex - removedCount, listIndex - addedCount]);\n fixed.push(listIndex === prevListIndex);\n\n if (prevListIndex !== listIndex) {\n changed.push([prevListIndex, listIndex]);\n }\n }\n }); // Sort by ascending order of 'to(list's index).\n\n removed.reverse();\n return new Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed);\n}\n\n/**\n * A module that checks diff when values are added, removed, or changed in an array.\n * @ko 배열 또는 오브젝트에서 값이 추가되거나 삭제되거나 순서가 변경사항을 체크하는 모듈입니다.\n * @memberof eg\n */\n\nvar ListDiffer =\n/*#__PURE__*/\nfunction () {\n /**\n * @param - Initializing Data Array. <ko> 초기 설정할 데이터 배열.</ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @example\n * import ListDiffer from \"@egjs/list-differ\";\n * // script => eg.ListDiffer\n * const differ = new ListDiffer([0, 1, 2, 3, 4, 5], e => e);\n * const result = differ.update([7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`.\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`.\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n function ListDiffer(list, findKeyCallback) {\n if (list === void 0) {\n list = [];\n }\n\n this.findKeyCallback = findKeyCallback;\n this.list = [].slice.call(list);\n }\n /**\n * Update list.\n * @ko 리스트를 업데이트를 합니다.\n * @param - List to update <ko> 업데이트할 리스트 </ko>\n * @return - Returns the results of an update from `prevList` to `list`.<ko> `prevList`에서 `list`로 업데이트한 결과를 반환한다. </ko>\n */\n\n\n var __proto = ListDiffer.prototype;\n\n __proto.update = function (list) {\n var newData = [].slice.call(list);\n var result = diff(this.list, newData, this.findKeyCallback);\n this.list = newData;\n return result;\n };\n\n return ListDiffer;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ListDiffer;\nexport { diff };\n//# sourceMappingURL=list-differ.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: croact\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/croact.git\nversion: 1.0.4\n*/\nimport { isNode, isArray, isUndefined, getValues, find, isString, removeEvent, addEvent, getDocument, getKeys, decamelize, flat as flat$1, isNumber, pushSet, isFunction, getEntries } from '@daybrush/utils';\nimport { diff } from '@egjs/list-differ';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction fillKeys(keys) {\n var index = 0;\n return keys.map(function (key) {\n return key == null ? \"$compat\".concat(++index) : \"\".concat(key);\n });\n}\nfunction flat(arr) {\n var arr2 = [];\n arr.forEach(function (el) {\n arr2 = arr2.concat(isArray(el) ? flat(el) : el);\n });\n return arr2;\n}\nfunction fillProps(props, defaultProps) {\n if (!defaultProps) {\n return props;\n }\n for (var name_1 in defaultProps) {\n if (isUndefined(props[name_1])) {\n props[name_1] = defaultProps[name_1];\n }\n }\n return props;\n}\nfunction isDiff(a, b) {\n if (a === b) {\n return false;\n }\n for (var i in a) {\n if (!(i in b)) {\n return true;\n }\n }\n for (var i in b) {\n if (a[i] !== b[i]) {\n return true;\n }\n }\n return false;\n}\nfunction getAttributes(props) {\n var className = props.className,\n otherProps = __rest(props, [\"className\"]);\n if (className != null) {\n otherProps.class = className;\n }\n delete otherProps.style;\n delete otherProps.children;\n return otherProps;\n}\nfunction splitProps(props) {\n var attributes = {};\n var events = {};\n for (var name_2 in props) {\n if (name_2.indexOf(\"on\") === 0) {\n events[name_2] = props[name_2];\n } else {\n attributes[name_2] = props[name_2];\n }\n }\n return [attributes, events];\n}\nfunction findContainerNode(provider) {\n if (!provider) {\n return null;\n }\n var base = provider.b;\n if (isNode(base)) {\n return base;\n }\n return findContainerNode(provider.c);\n}\nfunction removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n}\nfunction executeHooks(hooks) {\n hooks.forEach(function (hook) {\n hook();\n });\n}\nfunction renderFunctionComponent() {\n return this.constructor(this.props, this.context);\n}\n\nvar hooksIndex = 0;\nvar Provider = /*#__PURE__*/function () {\n function Provider(\n /**\n * Type\n */\n t,\n /**\n * Depth\n */\n d,\n /**\n * Key\n */\n k,\n /**\n * index\n */\n i,\n /**\n * Container\n */\n c,\n /**\n * Ref\n */\n ref,\n /**\n * Props\n */\n ps) {\n if (ps === void 0) {\n ps = {};\n }\n this.t = t;\n this.d = d;\n this.k = k;\n this.i = i;\n this.c = c;\n this.ref = ref;\n this.ps = ps;\n this.typ = \"prov\";\n /**\n * providers\n */\n this._ps = [];\n /**\n * Contexts\n */\n this._cs = {};\n /**\n * Whether to hydrate\n */\n this._hyd = null;\n /**\n * is self render\n */\n this._sel = false;\n }\n var __proto = Provider.prototype;\n __proto.s = function () {\n return true;\n };\n /**\n * Update\n */\n __proto.u = function (hooks, contexts, nextElement, nextState, isForceUpdate) {\n var self = this;\n var currentDepth = self.d;\n var scheduledContexts = getValues(contexts).filter(function (context) {\n return context.$_req;\n });\n var scheduledSubs = flat(scheduledContexts.map(function (context) {\n return context.$_subs;\n }));\n var isContextUpdate = find(scheduledSubs, function (provider) {\n return provider.d === currentDepth;\n });\n if (self.b && !isString(nextElement) && !isForceUpdate && !self.s(nextElement.props, nextState) && !isContextUpdate) {\n var nextChildSubs = scheduledSubs.reduce(function (childs, sub) {\n var depth = sub.d;\n if (childs[0]) {\n if (childs[0].d === depth) {\n childs.push(sub);\n }\n } else if (depth > currentDepth) {\n childs.push(sub);\n }\n return childs;\n }, []);\n nextChildSubs.forEach(function (child) {\n // provider.container!,\n // [provider],\n // [provider.original],\n // hooks,\n // provider._cs,\n // { ...self.state, ...self.$_state },\n // isForceUpdate,\n renderProviders(child, child._ps, [child.o], hooks, contexts, true);\n });\n return false;\n }\n self.o = nextElement;\n self.ss(nextState);\n // render\n var prevProps = self.ps;\n if (!isString(nextElement)) {\n self.ps = nextElement.props;\n self.ref = nextElement.ref;\n }\n setCurrentInstance(this);\n self.r(hooks, contexts, self.b ? prevProps : {}, nextState);\n return true;\n };\n __proto.md = function () {\n this.rr();\n };\n __proto.ss = function () {\n return;\n };\n __proto.ud = function () {\n this.rr();\n };\n /**\n * register refs\n */\n __proto.rr = function () {\n var self = this;\n var ref = self.ref;\n var fr = self.fr;\n ref && ref(fr ? fr.current : self.b);\n };\n return Provider;\n}();\nfunction getCurrentInstance() {\n return Object.__CROACT_CURRENT_INSTNACE__;\n}\nfunction getHooksIndex() {\n return hooksIndex;\n}\nfunction setHooksInex(nextHooksIndex) {\n hooksIndex = nextHooksIndex;\n}\nfunction setCurrentInstance(provider) {\n Object.__CROACT_CURRENT_INSTNACE__ = provider;\n hooksIndex = 0;\n return provider;\n}\n\nvar Component = /*#__PURE__*/function () {\n function Component(props, context) {\n if (props === void 0) {\n props = {};\n }\n this.props = props;\n this.context = context;\n this.state = {};\n this.$_timer = 0;\n this.$_state = {};\n this.$_subs = [];\n this.$_cs = {};\n }\n var __proto = Component.prototype;\n __proto.render = function () {\n return null;\n };\n __proto.shouldComponentUpdate = function (props, state) {\n return this.props !== props || this.state !== state;\n };\n __proto.setState = function (state, callback, isForceUpdate) {\n var self = this;\n if (!self.$_timer) {\n self.$_state = {};\n }\n clearTimeout(self.$_timer);\n self.$_timer = 0;\n self.$_state = __assign(__assign({}, self.$_state), state);\n if (!isForceUpdate) {\n self.$_timer = window.setTimeout(function () {\n self.$_timer = 0;\n self.$_setState(callback, isForceUpdate);\n });\n } else {\n self.$_setState(callback, isForceUpdate);\n }\n return;\n };\n __proto.forceUpdate = function (callback) {\n this.setState({}, callback, true);\n };\n __proto.componentDidMount = function () {};\n __proto.componentDidUpdate = function (prevProps, prevState) {};\n __proto.componentWillUnmount = function () {};\n __proto.$_setState = function (callback, isForceUpdate) {\n var hooks = [];\n var provider = this.$_p;\n var isUpdate = renderProviders(provider.c, [provider], [provider.o], hooks, provider._cs, __assign(__assign({}, this.state), this.$_state), isForceUpdate);\n if (isUpdate) {\n if (callback) {\n hooks.push(callback);\n }\n executeHooks(hooks);\n setCurrentInstance(null);\n }\n };\n return Component;\n}();\nvar PureComponent = /*#__PURE__*/function (_super) {\n __extends(PureComponent, _super);\n function PureComponent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n var __proto = PureComponent.prototype;\n __proto.shouldComponentUpdate = function (props, state) {\n return isDiff(this.props, props) || isDiff(this.state, state);\n };\n return PureComponent;\n}(Component);\n\nfunction createRef(defaultValue) {\n var refCallback = function (e) {\n refCallback.current = e;\n };\n refCallback.current = defaultValue;\n return refCallback;\n}\nfunction forwardRef(func) {\n func._fr = true;\n return func;\n}\n\nfunction createComponent(type, props, contextValue, self) {\n var _a;\n var base;\n if ((_a = type === null || type === void 0 ? void 0 : type.prototype) === null || _a === void 0 ? void 0 : _a.render) {\n base = new type(props, contextValue);\n } else {\n base = new Component(props, contextValue);\n base.constructor = type;\n if (type._fr) {\n self.fr = createRef();\n base.render = function () {\n return this.constructor(this.props, self.fr);\n };\n } else {\n base.render = renderFunctionComponent;\n }\n }\n base.$_p = self;\n return base;\n}\nvar ComponentProvider = /*#__PURE__*/function (_super) {\n __extends(ComponentProvider, _super);\n function ComponentProvider(type, depth, key, index, container, ref, props) {\n if (props === void 0) {\n props = {};\n }\n var _this = _super.call(this, type, depth, key, index, container, ref, fillProps(props, type.defaultProps)) || this;\n _this.typ = \"comp\";\n /**\n * Update shift effects\n */\n _this._usefs = [];\n /**\n * Update effects\n */\n _this._uefs = [];\n /**\n * Destroy effects\n */\n _this._defs = [];\n return _this;\n }\n var __proto = ComponentProvider.prototype;\n __proto.s = function (nextProps, nextState) {\n var base = this.b;\n return base.shouldComponentUpdate(fillProps(nextProps, this.t.defaultProps), nextState || base.state) !== false;\n };\n __proto.r = function (hooks, contexts, prevProps) {\n var _a, _b;\n var self = this;\n var type = self.t;\n self.ps = fillProps(self.ps, self.t.defaultProps);\n var props = self.ps;\n var isMount = !self.b;\n var contextType = type.contextType;\n var base = self.b;\n var contextValue = contextType === null || contextType === void 0 ? void 0 : contextType.get(self);\n self._cs = contexts;\n if (isMount) {\n base = createComponent(type, props, contextValue, self);\n self.b = base;\n } else {\n base.props = props;\n base.context = contextValue;\n }\n var prevState = base.state;\n self._usefs = [];\n self._uefs = [];\n var template = base.render();\n if (((_b = (_a = template === null || template === void 0 ? void 0 : template.props) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) === 0) {\n template.props.children = self.ps.children;\n }\n var nextContexts = __assign(__assign({}, contexts), base.$_cs);\n renderProviders(self, self._ps, template ? [template] : [], hooks, nextContexts);\n if (isMount) {\n self._uefs.push(function () {\n contextType === null || contextType === void 0 ? void 0 : contextType.register(self);\n base.componentDidMount();\n });\n } else {\n self._uefs.push(function () {\n base.componentDidUpdate(prevProps, prevState);\n });\n }\n hooks.push(function () {\n self._usefs.forEach(function (ef) {\n ef();\n });\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n self._defs = self._uefs.map(function (ef) {\n return ef();\n });\n });\n };\n __proto.ss = function (nextState) {\n var base = this.b;\n if (!base || !nextState) {\n return;\n }\n base.state = nextState;\n };\n __proto.un = function () {\n var _a;\n var self = this;\n self._ps.forEach(function (provider) {\n provider.un();\n });\n var type = self.t;\n (_a = type.contextType) === null || _a === void 0 ? void 0 : _a.unregister(self);\n clearTimeout(self.b.$_timer);\n self._defs.forEach(function (def) {\n def && def();\n });\n self.b.componentWillUnmount();\n };\n return ComponentProvider;\n}(Provider);\n\nfunction diffAttributes(attrs1, attrs2, el) {\n var _a = diffObject(getAttributes(attrs1), getAttributes(attrs2)),\n added = _a.added,\n removed = _a.removed,\n changed = _a.changed;\n for (var name_1 in added) {\n el.setAttribute(name_1, added[name_1]);\n }\n for (var name_2 in changed) {\n el.setAttribute(name_2, changed[name_2][1]);\n }\n for (var name_3 in removed) {\n el.removeAttribute(name_3);\n }\n}\nfunction diffEvents(events1, events2, provier) {\n var _a = diffObject(events1, events2),\n added = _a.added,\n removed = _a.removed;\n for (var name_4 in removed) {\n provier.e(name_4, true);\n }\n for (var name_5 in added) {\n provier.e(name_5);\n }\n}\nfunction diffObject(a, b) {\n var keys1 = getKeys(a);\n var keys2 = getKeys(b);\n var result = diff(keys1, keys2, function (key) {\n return key;\n });\n var added = {};\n var removed = {};\n var changed = {};\n result.added.forEach(function (index) {\n var name = keys2[index];\n added[name] = b[name];\n });\n result.removed.forEach(function (index) {\n var name = keys1[index];\n removed[name] = a[name];\n });\n result.maintained.forEach(function (_a) {\n var index = _a[0];\n var name = keys1[index];\n var values = [a[name], b[name]];\n if (a[name] !== b[name]) {\n changed[name] = values;\n }\n });\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n}\nfunction diffStyle(style1, style2, el) {\n var style = el.style;\n var _a = diffObject(style1, style2),\n added = _a.added,\n removed = _a.removed,\n changed = _a.changed;\n for (var beforeName in added) {\n var name_6 = decamelize(beforeName, \"-\");\n style.setProperty(name_6, added[beforeName]);\n }\n for (var beforeName in changed) {\n var name_7 = decamelize(beforeName, \"-\");\n style.setProperty(name_7, changed[beforeName][1]);\n }\n for (var beforeName in removed) {\n var name_8 = decamelize(beforeName, \"-\");\n style.removeProperty(name_8);\n }\n}\nfunction getNativeEventName(name) {\n return name.replace(/^on/g, \"\").toLowerCase();\n}\nvar ElementProvider = /*#__PURE__*/function (_super) {\n __extends(ElementProvider, _super);\n function ElementProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.typ = \"elem\";\n /**\n * Events\n */\n _this._es = {};\n /**\n * is svg\n */\n _this._svg = false;\n return _this;\n }\n var __proto = ElementProvider.prototype;\n __proto.e = function (name, isRemove) {\n var self = this;\n var events = self._es;\n var base = self.b;\n var eventName = getNativeEventName(name);\n if (isRemove) {\n removeEvent(base, eventName, events[name]);\n delete events[name];\n } else {\n events[name] = function (e) {\n var _a, _b;\n (_b = (_a = self.ps)[name]) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n };\n addEvent(base, eventName, events[name]);\n }\n };\n __proto.s = function (nextProps) {\n return isDiff(this.ps, nextProps);\n };\n __proto.r = function (hooks, contextValues, prevProps) {\n var _a;\n var self = this;\n var isMount = !self.b;\n var nextProps = self.ps;\n if (isMount) {\n var containerNode = findContainerNode(self.c);\n var isSVG = false;\n if (self._svg || self.t === \"svg\") {\n isSVG = true;\n } else {\n isSVG = containerNode && containerNode.ownerSVGElement;\n }\n self._svg = isSVG;\n var element = (_a = self._hyd) === null || _a === void 0 ? void 0 : _a.splice(0, 1)[0];\n var type = self.t;\n if (element) {\n self._hyd = [].slice.call(element.children || []);\n } else {\n var doc = getDocument(containerNode);\n if (isSVG) {\n element = doc.createElementNS(\"http://www.w3.org/2000/svg\", type);\n } else {\n element = doc.createElement(type);\n }\n }\n self.b = element;\n }\n renderProviders(self, self._ps, nextProps.children, hooks, contextValues);\n var base = self.b;\n var _b = splitProps(prevProps),\n prevAttributes = _b[0],\n prevEvents = _b[1];\n var _c = splitProps(nextProps),\n nextAttributes = _c[0],\n nextEvents = _c[1];\n diffAttributes(prevAttributes, nextAttributes, base);\n diffEvents(prevEvents, nextEvents, self);\n diffStyle(prevProps.style || {}, nextProps.style || {}, base);\n hooks.push(function () {\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n });\n return true;\n };\n __proto.un = function () {\n var self = this;\n var events = self._es;\n var base = self.b;\n for (var name_9 in events) {\n removeEvent(base, name_9, events[name_9]);\n }\n self._ps.forEach(function (provider) {\n provider.un();\n });\n self._es = {};\n if (!self._sel) {\n removeNode(base);\n }\n };\n return ElementProvider;\n}(Provider);\n\nfunction findDOMNode(comp) {\n if (!comp || isNode(comp)) {\n return comp;\n }\n var providers = comp.$_p._ps;\n if (!providers.length) {\n return null;\n }\n return findDOMNode(providers[0].b);\n}\nfunction findNodeProvider(provider) {\n if (!provider) {\n return;\n }\n if (provider.b && isNode(provider.b)) {\n return provider;\n }\n var providers = provider._ps;\n if (!providers.length) {\n return null;\n }\n return findNodeProvider(providers[0]);\n}\nfunction createElement(type, props) {\n var children = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n children[_i - 2] = arguments[_i];\n }\n var _a = props || {},\n key = _a.key,\n ref = _a.ref,\n otherProps = __rest(_a, [\"key\", \"ref\"]);\n return {\n type: type,\n key: key,\n ref: ref,\n props: __assign(__assign({}, otherProps), {\n children: flat$1(children).filter(function (child) {\n return child != null && child !== false;\n })\n })\n };\n}\n\nvar ContainerProvider = /*#__PURE__*/function (_super) {\n __extends(ContainerProvider, _super);\n function ContainerProvider(base, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n var _this = _super.call(this, \"container\", depth, \"container\", 0, null) || this;\n _this.typ = \"container\";\n _this.b = base;\n return _this;\n }\n var __proto = ContainerProvider.prototype;\n __proto.r = function () {\n return true;\n };\n __proto.un = function () {\n return;\n };\n return ContainerProvider;\n}(Provider);\nvar TextProvider = /*#__PURE__*/function (_super) {\n __extends(TextProvider, _super);\n function TextProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.typ = \"text\";\n return _this;\n }\n var __proto = TextProvider.prototype;\n __proto.r = function (hooks) {\n var _a;\n var self = this;\n var isMount = !self.b;\n if (isMount) {\n var containerNode = findContainerNode(self.c);\n var b = (_a = self._hyd) === null || _a === void 0 ? void 0 : _a.splice(0, 1)[0];\n self.b = b || getDocument(containerNode).createTextNode(self.t.replace(\"text_\", \"\"));\n }\n hooks.push(function () {\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n });\n return true;\n };\n __proto.un = function () {\n removeNode(this.b);\n };\n return TextProvider;\n}(Provider);\nfunction diffProviders(containerProvider, providers, children) {\n var childrenKeys = children.map(function (p) {\n return isString(p) ? null : p.key;\n });\n var keys1 = fillKeys(providers.map(function (p) {\n return p.k;\n }));\n var keys2 = fillKeys(childrenKeys);\n var result = diff(keys1, keys2, function (key) {\n return key;\n });\n result.removed.forEach(function (index) {\n providers.splice(index, 1)[0].un();\n });\n result.ordered.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var childrenProvider = providers.splice(from, 1)[0];\n providers.splice(to, 0, childrenProvider);\n var el = findDOMNode(childrenProvider.b);\n var next = findDOMNode(providers[to + 1] && providers[to + 1].b);\n if (el) {\n el.parentNode.insertBefore(el, next);\n }\n });\n result.added.forEach(function (index) {\n providers.splice(index, 0, createProvider(children[index], childrenKeys[index], index, containerProvider));\n });\n var changed = result.maintained.filter(function (_a) {\n _a[0];\n var to = _a[1];\n var el = children[to];\n var childProvider = providers[to];\n var type = isString(el) ? \"text_\".concat(el) : el.type;\n if (type !== childProvider.t) {\n childProvider.un();\n providers.splice(to, 1, createProvider(el, childrenKeys[to], to, containerProvider));\n return true;\n }\n childProvider.i = to;\n return false;\n });\n return __spreadArray(__spreadArray([], result.added, true), changed.map(function (_a) {\n _a[0];\n var to = _a[1];\n return to;\n }), true);\n}\n\nfunction getNextSibiling(provider, childProvider) {\n var childProviders = provider._ps;\n var length = childProviders.length;\n for (var i = childProvider.i + 1; i < length; ++i) {\n var el = findDOMNode(childProviders[i].b);\n if (el) {\n return el;\n }\n }\n return null;\n}\nfunction createProvider(el, key, index, containerProvider) {\n var depth = containerProvider.d + 1;\n if (isString(el) || isNumber(el)) {\n return new TextProvider(\"text_\".concat(el), depth, key, index, containerProvider, null, {});\n }\n var type = el.type;\n var providerClass = typeof type === \"string\" ? ElementProvider : ComponentProvider;\n return new providerClass(type, depth, key, index, containerProvider, el.ref, el.props);\n}\nfunction renderProviders(containerProvider, providers, children, updatedHooks, nextContexts, nextState, isForceUpdate) {\n var result = diffProviders(containerProvider, providers, children);\n var hyd = containerProvider._hyd;\n var updated = providers.filter(function (childProvider, i) {\n childProvider._hyd = hyd;\n return childProvider.u(updatedHooks, nextContexts, children[i], nextState, isForceUpdate);\n });\n if (containerProvider.typ === \"container\" && containerProvider._sel) {\n providers.forEach(function (provider) {\n var nodeProvider = findNodeProvider(provider);\n if (nodeProvider) {\n nodeProvider._sel = true;\n }\n });\n }\n containerProvider._hyd = null;\n var containerNode = findContainerNode(containerProvider);\n if (containerNode) {\n result.reverse().forEach(function (index) {\n var childProvider = providers[index];\n var el = findDOMNode(childProvider.b);\n if (!el) {\n return;\n }\n if (containerNode !== el && !el.parentNode) {\n var nextElement = getNextSibiling(containerProvider, childProvider);\n containerNode.insertBefore(el, nextElement);\n }\n });\n }\n return updated.length > 0;\n}\nfunction renderProvider(element, container, provider, contexts) {\n if (provider === void 0) {\n provider = container.__CROACT__;\n }\n if (contexts === void 0) {\n contexts = {};\n }\n var isProvider = !!provider;\n if (!provider) {\n provider = new ContainerProvider(container);\n }\n var hooks = [];\n renderProviders(provider, provider._ps, element ? [element] : [], hooks, contexts, undefined, undefined);\n executeHooks(hooks);\n setCurrentInstance(null);\n if (!isProvider) {\n container.__CROACT__ = provider;\n }\n return provider;\n}\nfunction render(element, container, callback) {\n var provider = container.__CROACT__;\n if (element && !provider) {\n container.innerHTML = \"\";\n }\n renderProvider(element, container, provider);\n callback && callback();\n}\nfunction renderSelf(element, self, containerProvider) {\n if (!containerProvider && element) {\n containerProvider = new ContainerProvider(self.parentElement);\n containerProvider._hyd = [self];\n containerProvider._sel = true;\n }\n renderProvider(element, self, containerProvider);\n return containerProvider;\n}\n\nvar i = 0;\nfunction createContext(defaultValue) {\n var id = \"c\".concat(++i);\n function Provider(props) {\n var self = this;\n if (!self.$_cs[id]) {\n self.$_cs[id] = self;\n var $_subs = [];\n self.shouldComponentUpdate = function (nextProps) {\n if (nextProps.value !== self.props.value) {\n // request\n self.$_req = true;\n }\n };\n self.render = function () {\n return self.props.children[0];\n };\n self.$_subs = $_subs;\n }\n return props.children[0];\n }\n function Consumer(props, contextValue) {\n return props.children(contextValue);\n }\n function getContext(provider) {\n return provider._cs[id];\n }\n var context = {\n $_id: id,\n $_dv: defaultValue,\n Consumer: Consumer,\n Provider: Provider,\n get: function (provider) {\n var _a, _b;\n return (_b = (_a = getContext(provider)) === null || _a === void 0 ? void 0 : _a.props.value) !== null && _b !== void 0 ? _b : defaultValue;\n },\n register: function (provider) {\n var mainComponent = getContext(provider);\n if (mainComponent) {\n pushSet(mainComponent.$_subs, provider);\n }\n },\n unregister: function (provider) {\n var mainComponent = getContext(provider);\n if (mainComponent) {\n var subs = mainComponent.$_subs;\n var index = subs.indexOf(provider);\n if (index > -1) {\n subs.splice(index, 1);\n }\n }\n }\n };\n Consumer.contextType = context;\n return context;\n}\n\nvar Portal = /*#__PURE__*/function (_super) {\n __extends(Portal, _super);\n function Portal() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n var __proto = Portal.prototype;\n __proto.componentDidMount = function () {\n var self = this;\n var _a = self.props,\n element = _a.element,\n container = _a.container;\n var parentProvider = self.$_p;\n self._pp = new ContainerProvider(container, parentProvider.d + 1);\n renderProvider(element, container, self._pp, parentProvider._cs);\n };\n __proto.componentDidUpdate = function () {\n var self = this;\n var _a = self.props,\n element = _a.element,\n container = _a.container;\n renderProvider(element, container, self._pp, self.$_p._cs);\n };\n __proto.componentWillUnmount = function () {\n var self = this;\n var container = self.props.container;\n renderProvider(null, container, self._pp, self.$_p._cs);\n this._pp = null;\n };\n return Portal;\n}(PureComponent);\nfunction createPortal(el, container) {\n return createElement(Portal, {\n element: el,\n container: container\n });\n}\n\nfunction _renderToString(node, parentContexts, self) {\n if (node == null) {\n return \"\";\n }\n if (isString(node) || isNumber(node) || isFunction(node)) {\n return node;\n }\n var type = node.type,\n props = node.props;\n if (isString(type)) {\n var stringProps_1 = {};\n getEntries(props).forEach(function (_a) {\n var name = _a[0],\n value = _a[1];\n if (name === \"style\") {\n stringProps_1[name] = getEntries(value).map(function (_a) {\n var styleName = _a[0],\n styleValue = _a[1];\n return \"\".concat(decamelize(styleName), \": \").concat(styleValue, \";\");\n }).join(\"\");\n } else if (name === \"children\") {\n return;\n } else if (!name.match(/^on[^a-z]/g)) {\n stringProps_1[name] = \"\".concat(value);\n }\n });\n var children = props.children.map(function (child) {\n return _renderToString(child, parentContexts);\n }).join(\"\");\n if (self) {\n return {\n tagName: type,\n props: stringProps_1,\n children: children\n };\n }\n var strings = __spreadArray([type], getEntries(stringProps_1).map(function (_a) {\n var name = _a[0],\n value = _a[1];\n return \"\".concat(name, \"=\\\"\").concat(value.replace(/\"/g, \"\\\\\\\"\"), \"\\\"\");\n }), true);\n return \"<\".concat(strings.join(\" \"), \">\").concat(children, \"</\").concat(type, \">\");\n } else if (isFunction(type)) {\n var contextType = type.contextType;\n var provider = {\n b: null,\n _hs: [],\n _usefs: [],\n _uefs: [],\n _defs: [],\n _cs: parentContexts\n };\n setCurrentInstance(provider);\n var contextValue = contextType === null || contextType === void 0 ? void 0 : contextType.get(provider);\n var base = createComponent(type, props, contextValue, {});\n var nextContexts = __assign(__assign({}, parentContexts), base.$_cs);\n provider.b = base;\n return _renderToString(base.render(), nextContexts, self);\n }\n return \"\";\n}\nfunction renderToString(node) {\n return _renderToString(node, {});\n}\nfunction renderSelfToString(node) {\n return _renderToString(node, {}, true);\n}\n\nfunction checkHookInfo(info) {\n var inst = getCurrentInstance();\n var hooks = inst._hs || (inst._hs = []);\n var index = getHooksIndex();\n var prevHt = hooks[index];\n setHooksInex(index + 1);\n if (prevHt) {\n if (!isDiff(prevHt.deps, info.deps)) {\n prevHt.updated = false;\n return prevHt;\n }\n hooks[index] = info;\n } else {\n hooks.push(info);\n }\n info.value = info.func();\n info.updated = true;\n return info;\n}\nfunction useMemo(defaultFunction, deps) {\n var info = checkHookInfo({\n func: defaultFunction,\n deps: deps\n });\n return info.value;\n}\nfunction useRef(defaultValue) {\n return useMemo(function () {\n return createRef(defaultValue);\n }, []);\n}\nfunction useContext(context) {\n var inst = getCurrentInstance();\n var contextId = context.$_id;\n var contexts = inst._cs;\n var providerComponent;\n if (contextId in contexts) {\n providerComponent = contexts[contextId];\n providerComponent.props.value;\n } else {\n context.$_dv;\n }\n useEffect(function () {\n context.register(inst);\n return function () {\n context.unregister(inst);\n };\n }, []);\n return context.get(inst);\n}\nfunction useState(st) {\n var inst = getCurrentInstance();\n var index = getHooksIndex();\n var comp = inst.b;\n checkHookInfo({\n func: function () {\n comp.state[index] = isFunction(st) ? st() : st;\n },\n deps: []\n });\n return [comp.state[index], function (nextValue) {\n var _a;\n return comp.setState((_a = {}, _a[index] = nextValue, _a));\n }];\n}\nfunction useEffect(effect, deps, unshift) {\n var inst = getCurrentInstance();\n var info = checkHookInfo({\n func: function () {\n return effect;\n },\n deps: deps\n });\n var effects = unshift ? inst._usefs : inst._uefs;\n if (info.updated) {\n effects.push(function () {\n info.effect && info.effect();\n info.effect = effect();\n return info.effect;\n });\n } else {\n effects.push(function () {\n return info.effect;\n });\n }\n}\nfunction useImperativeHandle(ref, func, deps) {\n useEffect(function () {\n ref === null || ref === void 0 ? void 0 : ref(func());\n }, deps, true);\n}\n\nvar version = \"simple-1.0.0\";\n\nexport { Component, ContainerProvider, PureComponent, createContext, createElement, createPortal, createRef, findDOMNode, findNodeProvider, forwardRef, render, renderSelf, renderSelfToString, renderToString, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState, version };\n//# sourceMappingURL=croact.esm.js.map\n","/*\nCopyright (c) 2015 NAVER Corp.\nname: @egjs/agent\nlicense: MIT\nauthor: NAVER Corp.\nrepository: git+https://github.com/naver/egjs-agent.git\nversion: 2.4.4\n*/\nfunction some(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return true;\n }\n }\n\n return false;\n}\nfunction find(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return arr[i];\n }\n }\n\n return null;\n}\nfunction getUserAgentString(agent) {\n var userAgent = agent;\n\n if (typeof userAgent === \"undefined\") {\n if (typeof navigator === \"undefined\" || !navigator) {\n return \"\";\n }\n\n userAgent = navigator.userAgent || \"\";\n }\n\n return userAgent.toLowerCase();\n}\nfunction execRegExp(pattern, text) {\n try {\n return new RegExp(pattern, \"g\").exec(text);\n } catch (e) {\n return null;\n }\n}\nfunction hasUserAgentData() {\n if (typeof navigator === \"undefined\" || !navigator || !navigator.userAgentData) {\n return false;\n }\n\n var userAgentData = navigator.userAgentData;\n var brands = userAgentData.brands || userAgentData.uaList;\n return !!(brands && brands.length);\n}\nfunction findVersion(versionTest, userAgent) {\n var result = execRegExp(\"(\" + versionTest + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))\", userAgent);\n return result ? result[3] : \"\";\n}\nfunction convertVersion(text) {\n return text.replace(/_/g, \".\");\n}\nfunction findPreset(presets, userAgent) {\n var userPreset = null;\n var version = \"-1\";\n some(presets, function (preset) {\n var result = execRegExp(\"(\" + preset.test + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?\", userAgent);\n\n if (!result || preset.brand) {\n return false;\n }\n\n userPreset = preset;\n version = result[3] || \"-1\";\n\n if (preset.versionAlias) {\n version = preset.versionAlias;\n } else if (preset.versionTest) {\n version = findVersion(preset.versionTest.toLowerCase(), userAgent) || version;\n }\n\n version = convertVersion(version);\n return true;\n });\n return {\n preset: userPreset,\n version: version\n };\n}\nfunction findPresetBrand(presets, brands) {\n var brandInfo = {\n brand: \"\",\n version: \"-1\"\n };\n some(presets, function (preset) {\n var result = findBrand(brands, preset);\n\n if (!result) {\n return false;\n }\n\n brandInfo.brand = preset.id;\n brandInfo.version = preset.versionAlias || result.version;\n return brandInfo.version !== \"-1\";\n });\n return brandInfo;\n}\nfunction findBrand(brands, preset) {\n return find(brands, function (_a) {\n var brand = _a.brand;\n return execRegExp(\"\" + preset.test, brand.toLowerCase());\n });\n}\n\nvar BROWSER_PRESETS = [{\n test: \"phantomjs\",\n id: \"phantomjs\"\n}, {\n test: \"whale\",\n id: \"whale\"\n}, {\n test: \"edgios|edge|edg\",\n id: \"edge\"\n}, {\n test: \"msie|trident|windows phone\",\n id: \"ie\",\n versionTest: \"iemobile|msie|rv\"\n}, {\n test: \"miuibrowser\",\n id: \"miui browser\"\n}, {\n test: \"samsungbrowser\",\n id: \"samsung internet\"\n}, {\n test: \"samsung\",\n id: \"samsung internet\",\n versionTest: \"version\"\n}, {\n test: \"chrome|crios\",\n id: \"chrome\"\n}, {\n test: \"firefox|fxios\",\n id: \"firefox\"\n}, {\n test: \"android\",\n id: \"android browser\",\n versionTest: \"version\"\n}, {\n test: \"safari|iphone|ipad|ipod\",\n id: \"safari\",\n versionTest: \"version\"\n}]; // chromium's engine(blink) is based on applewebkit 537.36.\n\nvar CHROMIUM_PRESETS = [{\n test: \"(?=.*applewebkit/(53[0-7]|5[0-2]|[0-4]))(?=.*\\\\schrome)\",\n id: \"chrome\",\n versionTest: \"chrome\"\n}, {\n test: \"chromium\",\n id: \"chrome\"\n}, {\n test: \"whale\",\n id: \"chrome\",\n versionAlias: \"-1\",\n brand: true\n}];\nvar WEBKIT_PRESETS = [{\n test: \"applewebkit\",\n id: \"webkit\",\n versionTest: \"applewebkit|safari\"\n}];\nvar WEBVIEW_PRESETS = [{\n test: \"(?=(iphone|ipad))(?!(.*version))\",\n id: \"webview\"\n}, {\n test: \"(?=(android|iphone|ipad))(?=.*(naver|daum|; wv))\",\n id: \"webview\"\n}, {\n // test webview\n test: \"webview\",\n id: \"webview\"\n}];\nvar OS_PRESETS = [{\n test: \"windows phone\",\n id: \"windows phone\"\n}, {\n test: \"windows 2000\",\n id: \"window\",\n versionAlias: \"5.0\"\n}, {\n test: \"windows nt\",\n id: \"window\"\n}, {\n test: \"win32|windows\",\n id: \"window\"\n}, {\n test: \"iphone|ipad|ipod\",\n id: \"ios\",\n versionTest: \"iphone os|cpu os\"\n}, {\n test: \"macos|macintel|mac os x\",\n id: \"mac\"\n}, {\n test: \"android|linux armv81\",\n id: \"android\"\n}, {\n test: \"tizen\",\n id: \"tizen\"\n}, {\n test: \"webos|web0s\",\n id: \"webos\"\n}];\n\nfunction isWebView(userAgent) {\n return !!findPreset(WEBVIEW_PRESETS, userAgent).preset;\n}\nfunction getLegacyAgent(userAgent) {\n var nextAgent = getUserAgentString(userAgent);\n var isMobile = !!/mobi/g.exec(nextAgent);\n var browser = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n webview: isWebView(nextAgent),\n chromium: false,\n chromiumVersion: \"-1\",\n webkit: false,\n webkitVersion: \"-1\"\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n\n var _a = findPreset(BROWSER_PRESETS, nextAgent),\n browserPreset = _a.preset,\n browserVersion = _a.version;\n\n var _b = findPreset(OS_PRESETS, nextAgent),\n osPreset = _b.preset,\n osVersion = _b.version;\n\n var chromiumPreset = findPreset(CHROMIUM_PRESETS, nextAgent);\n browser.chromium = !!chromiumPreset.preset;\n browser.chromiumVersion = chromiumPreset.version;\n\n if (!browser.chromium) {\n var webkitPreset = findPreset(WEBKIT_PRESETS, nextAgent);\n browser.webkit = !!webkitPreset.preset;\n browser.webkitVersion = webkitPreset.version;\n }\n\n if (osPreset) {\n os.name = osPreset.id;\n os.version = osVersion;\n os.majorVersion = parseInt(osVersion, 10);\n }\n\n if (browserPreset) {\n browser.name = browserPreset.id;\n browser.version = browserVersion; // Early whale bugs\n\n if (browser.webview && os.name === \"ios\" && browser.name !== \"safari\") {\n browser.webview = false;\n }\n }\n\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: false\n };\n}\n\nfunction getClientHintsAgent(osData) {\n var userAgentData = navigator.userAgentData;\n var brands = (userAgentData.uaList || userAgentData.brands).slice();\n var fullVersionList = osData && osData.fullVersionList;\n var isMobile = userAgentData.mobile || false;\n var firstBrand = brands[0];\n var platform = (osData && osData.platform || userAgentData.platform || navigator.platform).toLowerCase();\n var browser = {\n name: firstBrand.brand,\n version: firstBrand.version,\n majorVersion: -1,\n webkit: false,\n webkitVersion: \"-1\",\n chromium: false,\n chromiumVersion: \"-1\",\n webview: !!findPresetBrand(WEBVIEW_PRESETS, brands).brand || isWebView(getUserAgentString())\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n browser.webkit = !browser.chromium && some(WEBKIT_PRESETS, function (preset) {\n return findBrand(brands, preset);\n });\n var chromiumBrand = findPresetBrand(CHROMIUM_PRESETS, brands);\n browser.chromium = !!chromiumBrand.brand;\n browser.chromiumVersion = chromiumBrand.version || \"-1\";\n\n if (!browser.chromium) {\n var webkitBrand = findPresetBrand(WEBKIT_PRESETS, brands);\n browser.webkit = !!webkitBrand.brand;\n browser.webkitVersion = webkitBrand.version || \"-1\";\n }\n\n var platfomResult = find(OS_PRESETS, function (preset) {\n return new RegExp(\"\" + preset.test, \"g\").exec(platform);\n });\n os.name = platfomResult ? platfomResult.id : \"\";\n\n if (osData) {\n os.version = osData.platformVersion || \"-1\";\n }\n\n if (fullVersionList && fullVersionList.length) {\n var browserBrandByFullVersionList = findPresetBrand(BROWSER_PRESETS, fullVersionList);\n browser.name = browserBrandByFullVersionList.brand || browser.name;\n browser.version = browserBrandByFullVersionList.version || browser.version;\n } else {\n var browserBrand = findPresetBrand(BROWSER_PRESETS, brands);\n browser.name = browserBrand.brand || browser.name;\n browser.version = browserBrand.brand && osData ? osData.uaFullVersion : browserBrand.version;\n }\n\n if (browser.webkit) {\n os.name = isMobile ? \"ios\" : \"mac\";\n }\n\n if (os.name === \"ios\" && browser.webview) {\n browser.version = \"-1\";\n }\n\n os.version = convertVersion(os.version);\n browser.version = convertVersion(browser.version);\n os.majorVersion = parseInt(os.version, 10);\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: true\n };\n}\n\n/**\n * @namespace eg.agent\n */\n\n/**\n* Extracts accuate browser and operating system information from the user agent string or client hints.\n* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.\n* @function eg.agent#getAccurateAgent\n* @param - Callback function to get the accuate agent <ko>정확한 에이전트를 가져오기 위한 callback 함수</ko>\n* @return - get the accuate agent promise. If Promise are not supported, null is returned. <ko> 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. </ko>\n* @example\nimport { getAccurateAgent } from \"@egjs/agent\";\n// eg.agent.getAccurateAgent()\ngetAccurateAgent().then(agent => {\n const { os, browser, isMobile } = agent;\n});\ngetAccurateAgent(agent => {\n const { os, browser, isMobile } = agent;\n});\n*/\n\nfunction getAccurateAgent(callback) {\n if (hasUserAgentData()) {\n return navigator.userAgentData.getHighEntropyValues([\"architecture\", \"model\", \"platform\", \"platformVersion\", \"uaFullVersion\", \"fullVersionList\"]).then(function (info) {\n var agentInfo = getClientHintsAgent(info);\n callback && callback(agentInfo);\n return agentInfo;\n });\n }\n\n callback && callback(agent());\n\n if (typeof Promise === \"undefined\" || !Promise) {\n return null;\n }\n\n return Promise.resolve(agent());\n}\n/**\n * Extracts browser and operating system information from the user agent string.\n * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.\n * @function eg.agent#agent\n * @param - user agent string to parse <ko>파싱할 유저에이전트 문자열</ko>\n * @return - agent Info <ko> 에이전트 정보 </ko>\n * @example\nimport agent from \"@egjs/agent\";\n// eg.agent();\nconst { os, browser, isMobile } = agent();\n */\n\nfunction agent(userAgent) {\n if (typeof userAgent === \"undefined\" && hasUserAgentData()) {\n return getClientHintsAgent();\n } else {\n return getLegacyAgent(userAgent);\n }\n}\n\nexport default agent;\nexport { getAccurateAgent, getLegacyAgent };\n//# sourceMappingURL=agent.esm.js.map\n","/*\nCopyright (c) 2020 Daybrush\nname: @scena/matrix\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/matrix\nversion: 1.1.1\n*/\nimport { throttle, TINY_NUM, average } from '@daybrush/utils';\n\nfunction add(matrix, inverseMatrix, startIndex, fromIndex, n, k) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n var fromX = fromIndex + i * n;\n matrix[x] += matrix[fromX] * k;\n inverseMatrix[x] += inverseMatrix[fromX] * k;\n }\n}\n\nfunction swap(matrix, inverseMatrix, startIndex, fromIndex, n) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n var fromX = fromIndex + i * n;\n var v = matrix[x];\n var iv = inverseMatrix[x];\n matrix[x] = matrix[fromX];\n matrix[fromX] = v;\n inverseMatrix[x] = inverseMatrix[fromX];\n inverseMatrix[fromX] = iv;\n }\n}\n\nfunction divide(matrix, inverseMatrix, startIndex, n, k) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n matrix[x] /= k;\n inverseMatrix[x] /= k;\n }\n}\n/**\n *\n * @namespace Matrix\n */\n\n/**\n * @memberof Matrix\n */\n\n\nfunction ignoreDimension(matrix, m, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = matrix.slice();\n\n for (var i = 0; i < n; ++i) {\n newMatrix[i * n + m - 1] = 0;\n newMatrix[(m - 1) * n + i] = 0;\n }\n\n newMatrix[(m - 1) * (n + 1)] = 1;\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction invert(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = matrix.slice();\n var inverseMatrix = createIdentityMatrix(n);\n\n for (var i = 0; i < n; ++i) {\n // diagonal\n var identityIndex = n * i + i;\n\n if (!throttle(newMatrix[identityIndex], TINY_NUM)) {\n // newMatrix[identityIndex] = 0;\n for (var j = i + 1; j < n; ++j) {\n if (newMatrix[n * i + j]) {\n swap(newMatrix, inverseMatrix, i, j, n);\n break;\n }\n }\n }\n\n if (!throttle(newMatrix[identityIndex], TINY_NUM)) {\n // no inverse matrix\n return [];\n }\n\n divide(newMatrix, inverseMatrix, i, n, newMatrix[identityIndex]);\n\n for (var j = 0; j < n; ++j) {\n var targetStartIndex = j;\n var targetIndex = j + i * n;\n var target = newMatrix[targetIndex];\n\n if (!throttle(target, TINY_NUM) || i === j) {\n continue;\n }\n\n add(newMatrix, inverseMatrix, targetStartIndex, i, n, -target);\n }\n }\n\n return inverseMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction transpose(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = [];\n\n for (var i = 0; i < n; ++i) {\n for (var j = 0; j < n; ++j) {\n newMatrix[j * n + i] = matrix[n * i + j];\n }\n }\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction getOrigin(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var originMatrix = [];\n var w = matrix[n * n - 1];\n\n for (var i = 0; i < n - 1; ++i) {\n originMatrix[i] = matrix[n * (n - 1) + i] / w;\n }\n\n originMatrix[n - 1] = 0;\n return originMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction fromTranslation(pos, n) {\n var newMatrix = createIdentityMatrix(n);\n\n for (var i = 0; i < n - 1; ++i) {\n newMatrix[n * (n - 1) + i] = pos[i] || 0;\n }\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertPositionMatrix(matrix, n) {\n var newMatrix = matrix.slice();\n\n for (var i = matrix.length; i < n - 1; ++i) {\n newMatrix[i] = 0;\n }\n\n newMatrix[n - 1] = 1;\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertDimension(matrix, n, m) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n } // n < m\n\n\n if (n === m) {\n return matrix;\n }\n\n var newMatrix = createIdentityMatrix(m);\n var length = Math.min(n, m);\n\n for (var i = 0; i < length - 1; ++i) {\n for (var j = 0; j < length - 1; ++j) {\n newMatrix[i * m + j] = matrix[i * n + j];\n }\n\n newMatrix[(i + 1) * m - 1] = matrix[(i + 1) * n - 1];\n newMatrix[(m - 1) * m + i] = matrix[(n - 1) * n + i];\n }\n\n newMatrix[m * m - 1] = matrix[n * n - 1];\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction multiplies(n) {\n var matrixes = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n matrixes[_i - 1] = arguments[_i];\n }\n\n var m = createIdentityMatrix(n);\n matrixes.forEach(function (matrix) {\n m = multiply(m, matrix, n);\n });\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction multiply(matrix, matrix2, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = []; // 1 y: n\n // 1 x: m\n // 2 x: m\n // 2 y: k\n // n * m X m * k\n\n var m = matrix.length / n;\n var k = matrix2.length / m;\n\n if (!m) {\n return matrix2;\n } else if (!k) {\n return matrix;\n }\n\n for (var i = 0; i < n; ++i) {\n for (var j = 0; j < k; ++j) {\n newMatrix[j * n + i] = 0;\n\n for (var l = 0; l < m; ++l) {\n // m1 x: m(l), y: n(i)\n // m2 x: k(j): y: m(l)\n // nw x: n(i), y: k(j)\n newMatrix[j * n + i] += matrix[l * n + i] * matrix2[j * m + l];\n }\n }\n } // n * k\n\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction plus(pos1, pos2) {\n var length = Math.min(pos1.length, pos2.length);\n var nextPos = pos1.slice();\n\n for (var i = 0; i < length; ++i) {\n nextPos[i] = nextPos[i] + pos2[i];\n }\n\n return nextPos;\n}\n/**\n * @memberof Matrix\n */\n\nfunction minus(pos1, pos2) {\n var length = Math.min(pos1.length, pos2.length);\n var nextPos = pos1.slice();\n\n for (var i = 0; i < length; ++i) {\n nextPos[i] = nextPos[i] - pos2[i];\n }\n\n return nextPos;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertCSStoMatrix(a, is2d) {\n if (is2d === void 0) {\n is2d = a.length === 6;\n }\n\n if (is2d) {\n return [a[0], a[1], 0, a[2], a[3], 0, a[4], a[5], 1];\n }\n\n return a;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertMatrixtoCSS(a, is2d) {\n if (is2d === void 0) {\n is2d = a.length === 9;\n }\n\n if (is2d) {\n return [a[0], a[1], a[3], a[4], a[6], a[7]];\n }\n\n return a;\n}\n/**\n * @memberof Matrix\n */\n\nfunction calculate(matrix, matrix2, n) {\n if (n === void 0) {\n n = matrix2.length;\n }\n\n var result = multiply(matrix, matrix2, n);\n var k = result[n - 1];\n return result.map(function (v) {\n return v / k;\n });\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateX3d(matrix, rad) {\n return multiply(matrix, [1, 0, 0, 0, 0, Math.cos(rad), Math.sin(rad), 0, 0, -Math.sin(rad), Math.cos(rad), 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateY3d(matrix, rad) {\n return multiply(matrix, [Math.cos(rad), 0, -Math.sin(rad), 0, 0, 1, 0, 0, Math.sin(rad), 0, Math.cos(rad), 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateZ3d(matrix, rad) {\n return multiply(matrix, createRotateMatrix(rad, 4));\n}\n/**\n * @memberof Matrix\n */\n\nfunction scale3d(matrix, _a) {\n var _b = _a[0],\n sx = _b === void 0 ? 1 : _b,\n _c = _a[1],\n sy = _c === void 0 ? 1 : _c,\n _d = _a[2],\n sz = _d === void 0 ? 1 : _d;\n return multiply(matrix, [sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotate(pos, rad) {\n return calculate(createRotateMatrix(rad, 3), convertPositionMatrix(pos, 3));\n}\n/**\n * @memberof Matrix\n */\n\nfunction translate3d(matrix, _a) {\n var _b = _a[0],\n tx = _b === void 0 ? 0 : _b,\n _c = _a[1],\n ty = _c === void 0 ? 0 : _c,\n _d = _a[2],\n tz = _d === void 0 ? 0 : _d;\n return multiply(matrix, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction matrix3d(matrix1, matrix2) {\n return multiply(matrix1, matrix2, 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction createRotateMatrix(rad, n) {\n var cos = Math.cos(rad);\n var sin = Math.sin(rad);\n var m = createIdentityMatrix(n); // cos -sin\n // sin cos\n\n m[0] = cos;\n m[1] = sin;\n m[n] = -sin;\n m[n + 1] = cos;\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createIdentityMatrix(n) {\n var length = n * n;\n var matrix = [];\n\n for (var i = 0; i < length; ++i) {\n matrix[i] = i % (n + 1) ? 0 : 1;\n }\n\n return matrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createScaleMatrix(scale, n) {\n var m = createIdentityMatrix(n);\n var length = Math.min(scale.length, n - 1);\n\n for (var i = 0; i < length; ++i) {\n m[(n + 1) * i] = scale[i];\n }\n\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createOriginMatrix(origin, n) {\n var m = createIdentityMatrix(n);\n var length = Math.min(origin.length, n - 1);\n\n for (var i = 0; i < length; ++i) {\n m[n * (n - 1) + i] = origin[i];\n }\n\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createWarpMatrix(pos0, pos1, pos2, pos3, nextPos0, nextPos1, nextPos2, nextPos3) {\n var x0 = pos0[0],\n y0 = pos0[1];\n var x1 = pos1[0],\n y1 = pos1[1];\n var x2 = pos2[0],\n y2 = pos2[1];\n var x3 = pos3[0],\n y3 = pos3[1];\n var u0 = nextPos0[0],\n v0 = nextPos0[1];\n var u1 = nextPos1[0],\n v1 = nextPos1[1];\n var u2 = nextPos2[0],\n v2 = nextPos2[1];\n var u3 = nextPos3[0],\n v3 = nextPos3[1];\n var matrix = [x0, 0, x1, 0, x2, 0, x3, 0, y0, 0, y1, 0, y2, 0, y3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, x0, 0, x1, 0, x2, 0, x3, 0, y0, 0, y1, 0, y2, 0, y3, 0, 1, 0, 1, 0, 1, 0, 1, -u0 * x0, -v0 * x0, -u1 * x1, -v1 * x1, -u2 * x2, -v2 * x2, -u3 * x3, -v3 * x3, -u0 * y0, -v0 * y0, -u1 * y1, -v1 * y1, -u2 * y2, -v2 * y2, -u3 * y3, -v3 * y3];\n var inverseMatrix = invert(matrix, 8);\n\n if (!inverseMatrix.length) {\n return [];\n }\n\n var h = multiply(inverseMatrix, [u0, v0, u1, v1, u2, v2, u3, v3], 8);\n h[8] = 1;\n return convertDimension(transpose(h), 3, 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction getCenter(points) {\n return [0, 1].map(function (i) {\n return average(points.map(function (pos) {\n return pos[i];\n }));\n });\n}\n\nexport { calculate, convertCSStoMatrix, convertDimension, convertMatrixtoCSS, convertPositionMatrix, createIdentityMatrix, createOriginMatrix, createRotateMatrix, createScaleMatrix, createWarpMatrix, fromTranslation, getCenter, getOrigin, ignoreDimension, invert, matrix3d, minus, multiplies, multiply, plus, rotate, rotateX3d, rotateY3d, rotateZ3d, scale3d, translate3d, transpose };\n//# sourceMappingURL=matrix.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: css-to-mat\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-to-mat.git\nversion: 1.1.0\n*/\nimport { isArray, splitSpace, splitBracket, isObject, splitComma, convertUnitSize, splitUnit } from '@daybrush/utils';\nimport { calculate, matrix3d, invert, translate3d, scale3d, rotateZ3d, rotateX3d, rotateY3d } from '@scena/matrix';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nfunction createMatrix() {\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\nfunction parseMat(transform, size) {\n if (size === void 0) { size = 0; }\n return toMat(parse(transform, size));\n}\nfunction getElementMatrix(el) {\n return parseMat(getComputedStyle(el).transform);\n}\nfunction calculateMatrixDist(matrix, pos) {\n var res = calculate(matrix, [pos[0], pos[1] || 0, pos[2] || 0, 1], 4);\n var w = res[3] || 1;\n return [\n res[0] / w,\n res[1] / w,\n res[2] / w,\n ];\n}\nfunction getDistElementMatrix(el, container) {\n if (container === void 0) { container = document.body; }\n var target = el;\n var matrix = createMatrix();\n while (target) {\n var transform = getComputedStyle(target).transform;\n matrix = matrix3d(parseMat(transform), matrix);\n if (target === container) {\n break;\n }\n target = target.parentElement;\n }\n matrix = invert(matrix, 4);\n matrix[12] = 0;\n matrix[13] = 0;\n matrix[14] = 0;\n return matrix;\n}\nfunction toMat(matrixInfos) {\n var target = createMatrix();\n matrixInfos.forEach(function (info) {\n var matrixFunction = info.matrixFunction, functionValue = info.functionValue;\n if (!matrixFunction) {\n return;\n }\n target = matrixFunction(target, functionValue);\n });\n return target;\n}\nfunction parse(transform, size) {\n if (size === void 0) { size = 0; }\n var transforms = isArray(transform) ? transform : splitSpace(transform);\n return transforms.map(function (t) {\n var _a = splitBracket(t), name = _a.prefix, value = _a.value;\n var matrixFunction = null;\n var functionName = name;\n var functionValue = \"\";\n if (name === \"translate\" || name === \"translateX\" || name === \"translate3d\") {\n var nextSize_1 = isObject(size) ? __assign(__assign({}, size), { \"o%\": size[\"%\"] }) : {\n \"%\": size,\n \"o%\": size,\n };\n var _b = splitComma(value).map(function (v, i) {\n if (i === 0 && \"x%\" in nextSize_1) {\n nextSize_1[\"%\"] = size[\"x%\"];\n }\n else if (i === 1 && \"y%\" in nextSize_1) {\n nextSize_1[\"%\"] = size[\"y%\"];\n }\n else {\n nextSize_1[\"%\"] = size[\"o%\"];\n }\n return convertUnitSize(v, nextSize_1);\n }), posX = _b[0], _c = _b[1], posY = _c === void 0 ? 0 : _c, _d = _b[2], posZ = _d === void 0 ? 0 : _d;\n matrixFunction = translate3d;\n functionValue = [posX, posY, posZ];\n }\n else if (name === \"translateY\") {\n var nextSize = isObject(size) ? __assign({ \"%\": size[\"y%\"] }, size) : {\n \"%\": size,\n };\n var posY = convertUnitSize(value, nextSize);\n matrixFunction = translate3d;\n functionValue = [0, posY, 0];\n }\n else if (name === \"translateZ\") {\n var posZ = parseFloat(value);\n matrixFunction = translate3d;\n functionValue = [0, 0, posZ];\n }\n else if (name === \"scale\" || name === \"scale3d\") {\n var _e = splitComma(value).map(function (v) { return parseFloat(v); }), sx = _e[0], _f = _e[1], sy = _f === void 0 ? sx : _f, _g = _e[2], sz = _g === void 0 ? 1 : _g;\n matrixFunction = scale3d;\n functionValue = [sx, sy, sz];\n }\n else if (name === \"scaleX\") {\n var sx = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [sx, 1, 1];\n }\n else if (name === \"scaleY\") {\n var sy = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [1, sy, 1];\n }\n else if (name === \"scaleZ\") {\n var sz = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [1, 1, sz];\n }\n else if (name === \"rotate\" || name === \"rotateZ\" || name === \"rotateX\" || name === \"rotateY\") {\n var _h = splitUnit(value), unit = _h.unit, unitValue = _h.value;\n var rad = unit === \"rad\" ? unitValue : unitValue * Math.PI / 180;\n if (name === \"rotate\" || name === \"rotateZ\") {\n functionName = \"rotateZ\";\n matrixFunction = rotateZ3d;\n }\n else if (name === \"rotateX\") {\n matrixFunction = rotateX3d;\n }\n else if (name === \"rotateY\") {\n matrixFunction = rotateY3d;\n }\n functionValue = rad;\n }\n else if (name === \"matrix3d\") {\n matrixFunction = matrix3d;\n functionValue = splitComma(value).map(function (v) { return parseFloat(v); });\n }\n else if (name === \"matrix\") {\n var m = splitComma(value).map(function (v) { return parseFloat(v); });\n matrixFunction = matrix3d;\n functionValue = [\n m[0], m[1], 0, 0,\n m[2], m[3], 0, 0,\n 0, 0, 1, 0,\n m[4], m[5], 0, 1,\n ];\n }\n else {\n functionName = \"\";\n }\n return {\n name: name,\n functionName: functionName,\n value: value,\n matrixFunction: matrixFunction,\n functionValue: functionValue,\n };\n });\n}\n\nexport { calculateMatrixDist, createMatrix, getDistElementMatrix, getElementMatrix, parse, parseMat, toMat };\n//# sourceMappingURL=css-to-mat.esm.js.map\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/children-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-children-differ\nversion: 1.0.1\n*/\nimport ListDiffer, { diff as diff$1 } from '@egjs/list-differ';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar findKeyCallback = typeof Map === \"function\" ? undefined : function () {\n var childrenCount = 0;\n return function (el) {\n return el.__DIFF_KEY__ || (el.__DIFF_KEY__ = ++childrenCount);\n };\n}();\n\n/**\n * A module that checks diff when child are added, removed, or changed .\n * @ko 자식 노드들에서 자식 노드가 추가되거나 삭제되거나 순서가 변경된 사항을 체크하는 모듈입니다.\n * @memberof eg\n * @extends eg.ListDiffer\n */\n\nvar ChildrenDiffer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ChildrenDiffer, _super);\n /**\n * @param - Initializing Children <ko> 초기 설정할 자식 노드들</ko>\n */\n\n\n function ChildrenDiffer(list) {\n if (list === void 0) {\n list = [];\n }\n\n return _super.call(this, list, findKeyCallback) || this;\n }\n\n return ChildrenDiffer;\n}(ListDiffer);\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n/**\n *\n * @memberof eg.ChildrenDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/children-differ\";\n * // script => eg.ChildrenDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list) {\n return diff$1(prevList, list, findKeyCallback);\n}\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ChildrenDiffer;\nexport { diff };\n//# sourceMappingURL=children-differ.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: @scena/event-emitter\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/gesture.git\nversion: 1.0.5\n*/\nimport { isObject, findIndex } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n\n/**\n * Implement EventEmitter on object or component.\n */\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n function EventEmitter() {\n this._events = {};\n }\n /**\n * Add a listener to the registered event.\n * @param - Name of the event to be added\n * @param - listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add listener in \"a\" event\n * emitter.on(\"a\", () => {\n * });\n * // Add listeners\n * emitter.on({\n * a: () => {},\n * b: () => {},\n * });\n */\n\n\n var __proto = EventEmitter.prototype;\n\n __proto.on = function (eventName, listener) {\n if (isObject(eventName)) {\n for (var name in eventName) {\n this.on(name, eventName[name]);\n }\n } else {\n this._addEvent(eventName, listener, {});\n }\n\n return this;\n };\n /**\n * Remove listeners registered in the event target.\n * @param - Name of the event to be removed\n * @param - listener function of the event to be removed\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Remove all listeners.\n * emitter.off();\n *\n * // Remove all listeners in \"A\" event.\n * emitter.off(\"a\");\n *\n *\n * // Remove \"listener\" listener in \"a\" event.\n * emitter.off(\"a\", listener);\n */\n\n\n __proto.off = function (eventName, listener) {\n if (!eventName) {\n this._events = {};\n } else if (isObject(eventName)) {\n for (var name in eventName) {\n this.off(name);\n }\n } else if (!listener) {\n this._events[eventName] = [];\n } else {\n var events = this._events[eventName];\n\n if (events) {\n var index = findIndex(events, function (e) {\n return e.listener === listener;\n });\n\n if (index > -1) {\n events.splice(index, 1);\n }\n }\n }\n\n return this;\n };\n /**\n * Add a disposable listener and Use promise to the registered event.\n * @param - Name of the event to be added\n * @param - disposable listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add a disposable listener in \"a\" event\n * emitter.once(\"a\", () => {\n * });\n *\n * // Use Promise\n * emitter.once(\"a\").then(e => {\n * });\n */\n\n\n __proto.once = function (eventName, listener) {\n var _this = this;\n\n if (listener) {\n this._addEvent(eventName, listener, {\n once: true\n });\n }\n\n return new Promise(function (resolve) {\n _this._addEvent(eventName, resolve, {\n once: true\n });\n });\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.emit = function (eventName, param) {\n var _this = this;\n\n if (param === void 0) {\n param = {};\n }\n\n var events = this._events[eventName];\n\n if (!eventName || !events) {\n return true;\n }\n\n var isStop = false;\n param.eventType = eventName;\n\n param.stop = function () {\n isStop = true;\n };\n\n param.currentTarget = this;\n\n __spreadArrays(events).forEach(function (info) {\n info.listener(param);\n\n if (info.once) {\n _this.off(eventName, info.listener);\n }\n });\n\n return !isStop;\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n * // emit\n * emitter.trigger(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.trigger = function (eventName, param) {\n if (param === void 0) {\n param = {};\n }\n\n return this.emit(eventName, param);\n };\n\n __proto._addEvent = function (eventName, listener, options) {\n var events = this._events;\n events[eventName] = events[eventName] || [];\n var listeners = events[eventName];\n listeners.push(__assign({\n listener: listener\n }, options));\n };\n\n return EventEmitter;\n}();\n\nexport default EventEmitter;\n//# sourceMappingURL=event-emitter.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: @scena/dragscroll\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/dragscroll.git\nversion: 1.4.0\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport { now, isString, isFunction } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\nfunction getDefaultScrollPosition(e) {\n var container = e.container;\n if (container === document.body) {\n return [container.scrollLeft || document.documentElement.scrollLeft, container.scrollTop || document.documentElement.scrollTop];\n }\n return [container.scrollLeft, container.scrollTop];\n}\nfunction checkDefaultScrollEvent(container, callback) {\n container.addEventListener(\"scroll\", callback);\n return function () {\n container.removeEventListener(\"scroll\", callback);\n };\n}\nfunction getContainerElement(container) {\n if (!container) {\n return null;\n } else if (isString(container)) {\n return document.querySelector(container);\n }\n if (isFunction(container)) {\n return container();\n } else if (container instanceof Element) {\n return container;\n } else if (\"current\" in container) {\n return container.current;\n } else if (\"value\" in container) {\n return container.value;\n }\n}\n/**\n * @sort 1\n */\nvar DragScroll = /*#__PURE__*/function (_super) {\n __extends(DragScroll, _super);\n function DragScroll() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._startRect = null;\n _this._startPos = [];\n _this._prevTime = 0;\n _this._timer = 0;\n _this._prevScrollPos = [0, 0];\n _this._isWait = false;\n _this._flag = false;\n _this._currentOptions = null;\n _this._lock = false;\n _this._unregister = null;\n _this._onScroll = function () {\n var options = _this._currentOptions;\n if (_this._lock || !options) {\n return;\n }\n _this.emit(\"scrollDrag\", {\n next: function (inputEvent) {\n _this.checkScroll({\n container: options.container,\n inputEvent: inputEvent\n });\n }\n });\n };\n return _this;\n }\n /**\n */\n var __proto = DragScroll.prototype;\n __proto.dragStart = function (e, options) {\n var container = getContainerElement(options.container);\n if (!container) {\n this._flag = false;\n return;\n }\n var top = 0;\n var left = 0;\n var width = 0;\n var height = 0;\n if (container === document.body) {\n width = window.innerWidth;\n height = window.innerHeight;\n } else {\n var rect = container.getBoundingClientRect();\n top = rect.top;\n left = rect.left;\n width = rect.width;\n height = rect.height;\n }\n this._flag = true;\n this._startPos = [e.clientX, e.clientY];\n this._startRect = {\n top: top,\n left: left,\n width: width,\n height: height\n };\n this._prevScrollPos = this._getScrollPosition([0, 0], options);\n this._currentOptions = options;\n this._registerScrollEvent(options);\n };\n __proto.drag = function (e, options) {\n clearTimeout(this._timer);\n if (!this._flag) {\n return;\n }\n var clientX = e.clientX,\n clientY = e.clientY;\n var _a = options.threshold,\n threshold = _a === void 0 ? 0 : _a;\n var _b = this,\n _startRect = _b._startRect,\n _startPos = _b._startPos;\n this._currentOptions = options;\n var direction = [0, 0];\n if (_startRect.top > clientY - threshold) {\n if (_startPos[1] > _startRect.top || clientY < _startPos[1]) {\n direction[1] = -1;\n }\n } else if (_startRect.top + _startRect.height < clientY + threshold) {\n if (_startPos[1] < _startRect.top + _startRect.height || clientY > _startPos[1]) {\n direction[1] = 1;\n }\n }\n if (_startRect.left > clientX - threshold) {\n if (_startPos[0] > _startRect.left || clientX < _startPos[0]) {\n direction[0] = -1;\n }\n } else if (_startRect.left + _startRect.width < clientX + threshold) {\n if (_startPos[0] < _startRect.left + _startRect.width || clientX > _startPos[0]) {\n direction[0] = 1;\n }\n }\n if (!direction[0] && !direction[1]) {\n return false;\n }\n return this._continueDrag(__assign(__assign({}, options), {\n direction: direction,\n inputEvent: e,\n isDrag: true\n }));\n };\n /**\n */\n __proto.checkScroll = function (options) {\n var _this = this;\n if (this._isWait) {\n return false;\n }\n var _a = options.prevScrollPos,\n prevScrollPos = _a === void 0 ? this._prevScrollPos : _a,\n direction = options.direction,\n _b = options.throttleTime,\n throttleTime = _b === void 0 ? 0 : _b,\n inputEvent = options.inputEvent,\n isDrag = options.isDrag;\n var nextScrollPos = this._getScrollPosition(direction || [0, 0], options);\n var offsetX = nextScrollPos[0] - prevScrollPos[0];\n var offsetY = nextScrollPos[1] - prevScrollPos[1];\n var nextDirection = direction || [offsetX ? Math.abs(offsetX) / offsetX : 0, offsetY ? Math.abs(offsetY) / offsetY : 0];\n this._prevScrollPos = nextScrollPos;\n this._lock = false;\n if (!offsetX && !offsetY) {\n return false;\n }\n /**\n * @event DragScroll#move\n */\n this.emit(\"move\", {\n offsetX: nextDirection[0] ? offsetX : 0,\n offsetY: nextDirection[1] ? offsetY : 0,\n inputEvent: inputEvent\n });\n if (throttleTime && isDrag) {\n clearTimeout(this._timer);\n this._timer = window.setTimeout(function () {\n _this._continueDrag(options);\n }, throttleTime);\n }\n return true;\n };\n /**\n *\n */\n __proto.dragEnd = function () {\n this._flag = false;\n this._lock = false;\n clearTimeout(this._timer);\n this._unregisterScrollEvent();\n };\n __proto._getScrollPosition = function (direction, options) {\n var container = options.container,\n _a = options.getScrollPosition,\n getScrollPosition = _a === void 0 ? getDefaultScrollPosition : _a;\n return getScrollPosition({\n container: getContainerElement(container),\n direction: direction\n });\n };\n __proto._continueDrag = function (options) {\n var _this = this;\n var _a;\n var container = options.container,\n direction = options.direction,\n throttleTime = options.throttleTime,\n useScroll = options.useScroll,\n isDrag = options.isDrag,\n inputEvent = options.inputEvent;\n if (!this._flag || isDrag && this._isWait) {\n return;\n }\n var nowTime = now();\n var distTime = Math.max(throttleTime + this._prevTime - nowTime, 0);\n if (distTime > 0) {\n clearTimeout(this._timer);\n this._timer = window.setTimeout(function () {\n _this._continueDrag(options);\n }, distTime);\n return false;\n }\n this._prevTime = nowTime;\n var prevScrollPos = this._getScrollPosition(direction, options);\n this._prevScrollPos = prevScrollPos;\n if (isDrag) {\n this._isWait = true;\n }\n // unregister native scroll event\n if (!useScroll) {\n this._lock = true;\n }\n var param = {\n container: getContainerElement(container),\n direction: direction,\n inputEvent: inputEvent\n };\n (_a = options.requestScroll) === null || _a === void 0 ? void 0 : _a.call(options, param);\n /**\n * @event DragScroll#scroll\n */\n this.emit(\"scroll\", param);\n this._isWait = false;\n return useScroll || this.checkScroll(__assign(__assign({}, options), {\n prevScrollPos: prevScrollPos,\n direction: direction,\n inputEvent: inputEvent\n }));\n };\n __proto._registerScrollEvent = function (options) {\n this._unregisterScrollEvent();\n var checkScrollEvent = options.checkScrollEvent;\n if (!checkScrollEvent) {\n return;\n }\n var callback = checkScrollEvent === true ? checkDefaultScrollEvent : checkScrollEvent;\n var container = getContainerElement(options.container);\n if (checkScrollEvent === true && (container === document.body || container === document.documentElement)) {\n this._unregister = checkDefaultScrollEvent(window, this._onScroll);\n } else {\n this._unregister = callback(container, this._onScroll);\n }\n };\n __proto._unregisterScrollEvent = function () {\n var _a;\n (_a = this._unregister) === null || _a === void 0 ? void 0 : _a.call(this);\n this._unregister = null;\n };\n return DragScroll;\n}(EventEmitter);\n\nexport default DragScroll;\n//# sourceMappingURL=dragscroll.esm.js.map\n","/*\nCopyright (c) 2020 Daybrush\nname: overlap-area\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/overlap-area.git\nversion: 1.1.0\n*/\nimport { throttle, TINY_NUM, sum, find, getDist, getShapeDirection, findIndex } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n\nfunction tinyThrottle(num) {\n return throttle(num, TINY_NUM);\n}\nfunction isSameConstants(linearConstants1, linearConstants2) {\n return linearConstants1.every(function (v, i) {\n return tinyThrottle(v - linearConstants2[i]) === 0;\n });\n}\nfunction isSamePoint(point1, point2) {\n return !tinyThrottle(point1[0] - point2[0]) && !tinyThrottle(point1[1] - point2[1]);\n}\nfunction flat(arr) {\n return arr.reduce(function (prev, current) {\n prev.push.apply(prev, current);\n return prev;\n }, []);\n}\n\n/**\n * @namespace OverlapArea\n */\n\n/**\n * Gets the size of a shape (polygon) made of points.\n * @memberof OverlapArea\n */\n\nfunction getAreaSize(points) {\n if (points.length < 3) {\n return 0;\n }\n\n return Math.abs(sum(points.map(function (point, i) {\n var nextPoint = points[i + 1] || points[0];\n return point[0] * nextPoint[1] - nextPoint[0] * point[1];\n }))) / 2;\n}\n/**\n * Get points that fit the rect,\n * @memberof OverlapArea\n */\n\nfunction fitPoints(points, rect) {\n var width = rect.width,\n height = rect.height,\n left = rect.left,\n top = rect.top;\n\n var _a = getMinMaxs(points),\n minX = _a.minX,\n minY = _a.minY,\n maxX = _a.maxX,\n maxY = _a.maxY;\n\n var ratioX = width / (maxX - minX);\n var ratioY = height / (maxY - minY);\n return points.map(function (point) {\n return [left + (point[0] - minX) * ratioX, top + (point[1] - minY) * ratioY];\n });\n}\n/**\n * Get the minimum and maximum points of the points.\n * @memberof OverlapArea\n */\n\nfunction getMinMaxs(points) {\n var xs = points.map(function (point) {\n return point[0];\n });\n var ys = points.map(function (point) {\n return point[1];\n });\n return {\n minX: Math.min.apply(Math, xs),\n minY: Math.min.apply(Math, ys),\n maxX: Math.max.apply(Math, xs),\n maxY: Math.max.apply(Math, ys)\n };\n}\n/**\n * Whether the point is in shape\n * @param - point pos\n * @param - shape points\n * @param - whether to check except line\n * @memberof OverlapArea\n */\n\nfunction isInside(pos, points, excludeLine) {\n var x = pos[0],\n y = pos[1];\n\n var _a = getMinMaxs(points),\n minX = _a.minX,\n maxX = _a.maxX;\n\n var xLine = [[minX, y], [maxX, y]];\n var xLinearConstants = getLinearConstants(xLine[0], xLine[1]);\n var lines = convertLines(points);\n var intersectionPosInfos = [];\n lines.forEach(function (line) {\n var linearConstants = getLinearConstants(line[0], line[1]);\n var standardPoint = line[0];\n\n if (isSameConstants(xLinearConstants, linearConstants)) {\n intersectionPosInfos.push({\n pos: pos,\n line: line,\n type: \"line\"\n });\n } else {\n var xPoints = getPointsOnLines(getIntersectionPointsByConstants(xLinearConstants, linearConstants), [xLine, line]);\n xPoints.forEach(function (point) {\n if (line.some(function (linePoint) {\n return isSamePoint(linePoint, point);\n })) {\n intersectionPosInfos.push({\n pos: point,\n line: line,\n type: \"point\"\n });\n } else if (tinyThrottle(standardPoint[1] - y) !== 0) {\n intersectionPosInfos.push({\n pos: point,\n line: line,\n type: \"intersection\"\n });\n }\n });\n }\n });\n\n if (!excludeLine) {\n // on line\n if (find(intersectionPosInfos, function (p) {\n return p[0] === x;\n })) {\n return true;\n }\n }\n\n var intersectionCount = 0;\n var xMap = {};\n intersectionPosInfos.forEach(function (_a) {\n var pos = _a.pos,\n type = _a.type,\n line = _a.line;\n\n if (pos[0] > x) {\n return;\n }\n\n if (type === \"intersection\") {\n ++intersectionCount;\n } else if (type === \"line\") {\n return;\n } else if (type === \"point\") {\n var point = find(line, function (linePoint) {\n return linePoint[1] !== y;\n });\n var prevValue = xMap[pos[0]];\n var nextValue = point[1] > y ? 1 : -1;\n\n if (!prevValue) {\n xMap[pos[0]] = nextValue;\n } else if (prevValue !== nextValue) {\n ++intersectionCount;\n }\n }\n });\n return intersectionCount % 2 === 1;\n}\n/**\n * Get distance from point to constants. [a, b, c] (ax + by + c = 0)\n * @return [a, b, c]\n * @memberof OverlapArea\n */\n\nfunction getDistanceFromPointToConstants(_a, pos) {\n var a = _a[0],\n b = _a[1],\n c = _a[2];\n return (a * pos[0] + b * pos[1] + c) / (a * a + b * b);\n}\n/**\n * Get the coefficient of the linear function. [a, b, c] (ax + by + c = 0)\n * @return [a, b, c]\n * @memberof OverlapArea\n */\n\nfunction getLinearConstants(point1, point2) {\n var x1 = point1[0],\n y1 = point1[1];\n var x2 = point2[0],\n y2 = point2[1]; // ax + by + c = 0\n // [a, b, c]\n\n var dx = x2 - x1;\n var dy = y2 - y1;\n\n if (Math.abs(dx) < TINY_NUM) {\n dx = 0;\n }\n\n if (Math.abs(dy) < TINY_NUM) {\n dy = 0;\n } // b > 0\n // ax + by + c = 0\n\n\n var a = 0;\n var b = 0;\n var c = 0;\n\n if (!dx) {\n if (dy) {\n // -x + 1 = 0\n a = -1;\n c = x1;\n }\n } else if (!dy) {\n // y - 1 = 0\n b = 1;\n c = -y1;\n } else {\n // y = -a(x - x1) + y1\n // ax + y + a * x1 - y1 = 0\n a = -dy / dx;\n b = 1;\n c = -a * x1 - y1;\n }\n\n return [a, b, c];\n}\n/**\n * Get intersection points with linear functions.\n * @memberof OverlapArea\n */\n\nfunction getIntersectionPointsByConstants(linearConstants1, linearConstants2) {\n var a1 = linearConstants1[0],\n b1 = linearConstants1[1],\n c1 = linearConstants1[2];\n var a2 = linearConstants2[0],\n b2 = linearConstants2[1],\n c2 = linearConstants2[2];\n var isZeroA = a1 === 0 && a2 === 0;\n var isZeroB = b1 === 0 && b2 === 0;\n var results = [];\n\n if (isZeroA && isZeroB) {\n return [];\n } else if (isZeroA) {\n // b1 * y + c1 = 0\n // b2 * y + c2 = 0\n var y1 = -c1 / b1;\n var y2 = -c2 / b2;\n\n if (y1 !== y2) {\n return [];\n } else {\n return [[-Infinity, y1], [Infinity, y1]];\n }\n } else if (isZeroB) {\n // a1 * x + c1 = 0\n // a2 * x + c2 = 0\n var x1 = -c1 / a1;\n var x2 = -c2 / a2;\n\n if (x1 !== x2) {\n return [];\n } else {\n return [[x1, -Infinity], [x1, Infinity]];\n }\n } else if (a1 === 0) {\n // b1 * y + c1 = 0\n // y = - c1 / b1;\n // a2 * x + b2 * y + c2 = 0\n var y = -c1 / b1;\n var x = -(b2 * y + c2) / a2;\n results = [[x, y]];\n } else if (a2 === 0) {\n // b2 * y + c2 = 0\n // y = - c2 / b2;\n // a1 * x + b1 * y + c1 = 0\n var y = -c2 / b2;\n var x = -(b1 * y + c1) / a1;\n results = [[x, y]];\n } else if (b1 === 0) {\n // a1 * x + c1 = 0\n // x = - c1 / a1;\n // a2 * x + b2 * y + c2 = 0\n var x = -c1 / a1;\n var y = -(a2 * x + c2) / b2;\n results = [[x, y]];\n } else if (b2 === 0) {\n // a2 * x + c2 = 0\n // x = - c2 / a2;\n // a1 * x + b1 * y + c1 = 0\n var x = -c2 / a2;\n var y = -(a1 * x + c1) / b1;\n results = [[x, y]];\n } else {\n // a1 * x + b1 * y + c1 = 0\n // a2 * x + b2 * y + c2 = 0\n // b2 * a1 * x + b2 * b1 * y + b2 * c1 = 0\n // b1 * a2 * x + b1 * b2 * y + b1 * c2 = 0\n // (b2 * a1 - b1 * a2) * x = (b1 * c2 - b2 * c1)\n var x = (b1 * c2 - b2 * c1) / (b2 * a1 - b1 * a2);\n var y = -(a1 * x + c1) / b1;\n results = [[x, y]];\n }\n\n return results.map(function (result) {\n return [result[0], result[1]];\n });\n}\n/**\n * Get intersection points to the two lines.\n * @memberof OverlapArea\n */\n\nfunction getIntersectionPoints(line1, line2, isLimit) {\n var points = getIntersectionPointsByConstants(getLinearConstants(line1[0], line1[1]), getLinearConstants(line2[0], line2[1]));\n\n if (isLimit) {\n return getPointsOnLines(points, [line1, line2]);\n }\n\n return points;\n}\nfunction isPointOnLine(pos, line) {\n var linearConstants = getLinearConstants(line[0], line[1]);\n return tinyThrottle(getDistanceFromPointToConstants(linearConstants, pos)) === 0;\n}\n/**\n * Get the points on the lines (between two points).\n * @memberof OverlapArea\n */\n\nfunction getPointsOnLines(points, lines) {\n var minMaxs = lines.map(function (line) {\n return [0, 1].map(function (order) {\n return [Math.min(line[0][order], line[1][order]), Math.max(line[0][order], line[1][order])];\n });\n });\n var results = [];\n\n if (points.length === 2) {\n var _a = points[0],\n x = _a[0],\n y = _a[1];\n\n if (!tinyThrottle(x - points[1][0])) {\n /// Math.max(minY1, minY2)\n var top = Math.max.apply(Math, minMaxs.map(function (minMax) {\n return minMax[1][0];\n })); /// Math.min(maxY1, miax2)\n\n var bottom = Math.min.apply(Math, minMaxs.map(function (minMax) {\n return minMax[1][1];\n }));\n\n if (tinyThrottle(top - bottom) > 0) {\n return [];\n }\n\n results = [[x, top], [x, bottom]];\n } else if (!tinyThrottle(y - points[1][1])) {\n /// Math.max(minY1, minY2)\n var left = Math.max.apply(Math, minMaxs.map(function (minMax) {\n return minMax[0][0];\n })); /// Math.min(maxY1, miax2)\n\n var right = Math.min.apply(Math, minMaxs.map(function (minMax) {\n return minMax[0][1];\n }));\n\n if (tinyThrottle(left - right) > 0) {\n return [];\n }\n\n results = [[left, y], [right, y]];\n }\n }\n\n if (!results.length) {\n results = points.filter(function (point) {\n var pointX = point[0],\n pointY = point[1];\n return minMaxs.every(function (minMax) {\n return 0 <= tinyThrottle(pointX - minMax[0][0]) && 0 <= tinyThrottle(minMax[0][1] - pointX) && 0 <= tinyThrottle(pointY - minMax[1][0]) && 0 <= tinyThrottle(minMax[1][1] - pointY);\n });\n });\n }\n\n return results.map(function (result) {\n return [tinyThrottle(result[0]), tinyThrottle(result[1])];\n });\n}\n/**\n* Convert two points into lines.\n* @function\n* @memberof OverlapArea\n*/\n\nfunction convertLines(points) {\n return __spreadArrays(points.slice(1), [points[0]]).map(function (point, i) {\n return [points[i], point];\n });\n}\n\nfunction getOverlapPointInfos(points1, points2) {\n var targetPoints1 = points1.slice();\n var targetPoints2 = points2.slice();\n\n if (getShapeDirection(targetPoints1) === -1) {\n targetPoints1.reverse();\n }\n\n if (getShapeDirection(targetPoints2) === -1) {\n targetPoints2.reverse();\n }\n\n var lines1 = convertLines(targetPoints1);\n var lines2 = convertLines(targetPoints2);\n var linearConstantsList1 = lines1.map(function (line1) {\n return getLinearConstants(line1[0], line1[1]);\n });\n var linearConstantsList2 = lines2.map(function (line2) {\n return getLinearConstants(line2[0], line2[1]);\n });\n var overlapInfos = [];\n linearConstantsList1.forEach(function (linearConstants1, i) {\n var line1 = lines1[i];\n var linePointInfos = [];\n linearConstantsList2.forEach(function (linearConstants2, j) {\n var intersectionPoints = getIntersectionPointsByConstants(linearConstants1, linearConstants2);\n var points = getPointsOnLines(intersectionPoints, [line1, lines2[j]]);\n linePointInfos.push.apply(linePointInfos, points.map(function (pos) {\n return {\n index1: i,\n index2: j,\n pos: pos,\n type: \"intersection\"\n };\n }));\n });\n linePointInfos.sort(function (a, b) {\n return getDist(line1[0], a.pos) - getDist(line1[0], b.pos);\n });\n overlapInfos.push.apply(overlapInfos, linePointInfos);\n\n if (isInside(line1[1], targetPoints2)) {\n overlapInfos.push({\n index1: i,\n index2: -1,\n pos: line1[1],\n type: \"inside\"\n });\n }\n });\n lines2.forEach(function (line2, i) {\n if (!isInside(line2[1], targetPoints1)) {\n return;\n }\n\n var isNext = false;\n var index = findIndex(overlapInfos, function (_a) {\n var index2 = _a.index2;\n\n if (index2 === i) {\n isNext = true;\n return false;\n }\n\n if (isNext) {\n return true;\n }\n\n return false;\n });\n\n if (index === -1) {\n isNext = false;\n index = findIndex(overlapInfos, function (_a) {\n var index1 = _a.index1,\n index2 = _a.index2;\n\n if (index1 === -1 && index2 + 1 === i) {\n isNext = true;\n return false;\n }\n\n if (isNext) {\n return true;\n }\n\n return false;\n });\n }\n\n if (index === -1) {\n overlapInfos.push({\n index1: -1,\n index2: i,\n pos: line2[1],\n type: \"inside\"\n });\n } else {\n overlapInfos.splice(index, 0, {\n index1: -1,\n index2: i,\n pos: line2[1],\n type: \"inside\"\n });\n }\n });\n var pointMap = {};\n return overlapInfos.filter(function (_a) {\n var pos = _a.pos;\n var key = pos[0] + \"x\" + pos[1];\n\n if (pointMap[key]) {\n return false;\n }\n\n pointMap[key] = true;\n return true;\n });\n}\n/**\n* Get the points of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\n\nfunction getOverlapPoints(points1, points2) {\n var infos = getOverlapPointInfos(points1, points2);\n return infos.map(function (_a) {\n var pos = _a.pos;\n return pos;\n });\n}\n\nfunction isConnectedLine(line) {\n var _a = line[0],\n prevIndex1 = _a.index1,\n prevIndex2 = _a.index2,\n _b = line[1],\n nextIndex1 = _b.index1,\n nextIndex2 = _b.index2;\n\n if (prevIndex1 !== -1) {\n // same line\n if (prevIndex1 === nextIndex1) {\n return true;\n }\n\n if (prevIndex1 + 1 === nextIndex1) {\n return true;\n }\n }\n\n if (prevIndex2 !== -1) {\n // same line\n if (prevIndex2 === nextIndex2) {\n return true;\n }\n\n if (prevIndex2 + 1 === nextIndex2) {\n return true;\n }\n }\n\n return false;\n}\n/**\n* Get the areas of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\n\nfunction getOverlapAreas(points1, points2) {\n var infos = getOverlapPointInfos(points1, points2);\n var areas = [];\n var area;\n getOverlapPointInfos(points1, points2).forEach(function (info, i, arr) {\n if (i === 0 || !isConnectedLine([arr[i - 1], info])) {\n area = [info];\n areas.push(area);\n } else {\n area.push(info);\n }\n });\n return areas.map(function (area) {\n return area.map(function (_a) {\n var pos = _a.pos;\n return pos;\n });\n });\n}\n\nfunction findReversedAreas(points1, points2, index, areas) {\n if (index === void 0) {\n index = 0;\n }\n\n if (areas === void 0) {\n areas = [];\n }\n\n var isFirst = areas.length === 0;\n var length = points1.length;\n var nextIndex = points1[index] ? index : 0;\n\n var nextPoints1 = __spreadArrays(points1.slice(nextIndex), points1.slice(0, nextIndex));\n\n var _loop_1 = function (i) {\n var point1 = nextPoints1[i];\n\n if (find(points2, function (point2) {\n return point2[0] === point1[0] && point2[1] === point1[1];\n })) {\n return \"continue\";\n }\n\n if (areas.some(function (nextArea) {\n return find(nextArea, function (areaPoint) {\n return areaPoint[0] === point1[0] && areaPoint[1] === point1[1];\n });\n })) {\n if (isFirst) {\n return \"continue\";\n } else {\n return \"break\";\n }\n }\n\n var nextArea = void 0;\n\n if (isFirst) {\n nextArea = [];\n areas.push(nextArea);\n } else {\n nextArea = areas[areas.length - 1];\n }\n\n nextArea.push(point1);\n var line = [point1, points1[index + 1] || points1[0]];\n var nextPoint2 = points2.filter(function (point2) {\n return isPointOnLine(point2, line);\n }).sort(function (a, b) {\n return getDist(point1, a) - getDist(point1, b);\n })[0];\n\n if (!nextPoint2) {\n findReversedAreas(nextPoints1, points2, i + 1, areas);\n return \"break\";\n } else {\n var point2Index = points2.indexOf(nextPoint2);\n findReversedAreas(points2, points1, point2Index, areas);\n\n if (!isFirst) {\n return \"break\";\n }\n }\n };\n\n for (var i = 0; i < length; ++i) {\n var state_1 = _loop_1(i);\n\n if (state_1 === \"break\") break;\n }\n\n return areas;\n}\n\nfunction findConnectedAreas(points1, points2) {\n return findReversedAreas(points1, __spreadArrays(points2).reverse());\n}\n/**\n* Get non-overlapping areas of two shapes based on points1.\n* @memberof OverlapArea\n*/\n\nfunction getUnoverlapAreas(points1, points2) {\n if (!points2.length) {\n return [__spreadArrays(points1)];\n }\n\n var overlapAreas = getOverlapAreas(points1, points2);\n var unoverlapAreas = [points1];\n overlapAreas.forEach(function (overlapArea) {\n var nextOverlapArea = __spreadArrays(overlapArea).reverse();\n\n unoverlapAreas = flat(unoverlapAreas.map(function (area) {\n var connectedAreas = findReversedAreas(area, nextOverlapArea);\n var firstConnectedArea = connectedAreas[0];\n\n if (connectedAreas.length === 1 && nextOverlapArea.every(function (point) {\n return firstConnectedArea.indexOf(point) === -1;\n })) {\n var lastPoint_1 = firstConnectedArea[firstConnectedArea.length - 1];\n\n var firstPoint = __spreadArrays(nextOverlapArea).sort(function (a, b) {\n return getDist(lastPoint_1, a) - getDist(lastPoint_1, b);\n })[0];\n\n var firstIndex = nextOverlapArea.indexOf(firstPoint);\n firstConnectedArea.push.apply(firstConnectedArea, __spreadArrays(nextOverlapArea.slice(firstIndex), nextOverlapArea.slice(0, firstIndex), [nextOverlapArea[firstIndex], lastPoint_1]));\n }\n\n return connectedAreas;\n }));\n });\n return unoverlapAreas;\n}\n/**\n* Gets the size of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\nfunction getOverlapSize(points1, points2) {\n var points = getOverlapPoints(points1, points2);\n return getAreaSize(points);\n}\n\nexport { convertLines, findConnectedAreas, fitPoints, getAreaSize, getDistanceFromPointToConstants, getIntersectionPoints, getIntersectionPointsByConstants, getLinearConstants, getMinMaxs, getOverlapAreas, getOverlapPoints, getOverlapSize, getPointsOnLines, getUnoverlapAreas, isInside, isPointOnLine };\n//# sourceMappingURL=overlap-area.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: gesto\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/gesto.git\nversion: 1.19.4\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport { removeEvent, addEvent, now, isWindow, getWindow } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nfunction getRad(pos1, pos2) {\n var distX = pos2[0] - pos1[0];\n var distY = pos2[1] - pos1[1];\n var rad = Math.atan2(distY, distX);\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\nfunction getRotatiion(touches) {\n return getRad([\n touches[0].clientX,\n touches[0].clientY,\n ], [\n touches[1].clientX,\n touches[1].clientY,\n ]) / Math.PI * 180;\n}\nfunction isMultiTouch(e) {\n return e.touches && e.touches.length >= 2;\n}\nfunction getEventClients(e) {\n if (!e) {\n return [];\n }\n if (e.touches) {\n return getClients(e.touches);\n }\n else {\n return [getClient(e)];\n }\n}\nfunction isMouseEvent(e) {\n return e && (e.type.indexOf(\"mouse\") > -1 || \"button\" in e);\n}\nfunction getPosition(clients, prevClients, startClients) {\n var length = startClients.length;\n var _a = getAverageClient(clients, length), clientX = _a.clientX, clientY = _a.clientY, originalClientX = _a.originalClientX, originalClientY = _a.originalClientY;\n var _b = getAverageClient(prevClients, length), prevX = _b.clientX, prevY = _b.clientY;\n var _c = getAverageClient(startClients, length), startX = _c.clientX, startY = _c.clientY;\n var deltaX = clientX - prevX;\n var deltaY = clientY - prevY;\n var distX = clientX - startX;\n var distY = clientY - startY;\n return {\n clientX: originalClientX,\n clientY: originalClientY,\n deltaX: deltaX,\n deltaY: deltaY,\n distX: distX,\n distY: distY,\n };\n}\nfunction getDist(clients) {\n return Math.sqrt(Math.pow(clients[0].clientX - clients[1].clientX, 2)\n + Math.pow(clients[0].clientY - clients[1].clientY, 2));\n}\nfunction getClients(touches) {\n var length = Math.min(touches.length, 2);\n var clients = [];\n for (var i = 0; i < length; ++i) {\n clients.push(getClient(touches[i]));\n }\n return clients;\n}\nfunction getClient(e) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n };\n}\nfunction getAverageClient(clients, length) {\n if (length === void 0) { length = clients.length; }\n var sumClient = {\n clientX: 0,\n clientY: 0,\n originalClientX: 0,\n originalClientY: 0,\n };\n var minLength = Math.min(clients.length, length);\n for (var i = 0; i < minLength; ++i) {\n var client = clients[i];\n sumClient.originalClientX += \"originalClientX\" in client ? client.originalClientX : client.clientX;\n sumClient.originalClientY += \"originalClientY\" in client ? client.originalClientY : client.clientY;\n sumClient.clientX += client.clientX;\n sumClient.clientY += client.clientY;\n }\n if (!length) {\n return sumClient;\n }\n return {\n clientX: sumClient.clientX / length,\n clientY: sumClient.clientY / length,\n originalClientX: sumClient.originalClientX / length,\n originalClientY: sumClient.originalClientY / length,\n };\n}\n\nvar ClientStore = /*#__PURE__*/ (function () {\n function ClientStore(clients) {\n this.prevClients = [];\n this.startClients = [];\n this.movement = 0;\n this.length = 0;\n this.startClients = clients;\n this.prevClients = clients;\n this.length = clients.length;\n }\n ClientStore.prototype.getAngle = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getRotatiion(clients);\n };\n ClientStore.prototype.getRotation = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getRotatiion(clients) - getRotatiion(this.startClients);\n };\n ClientStore.prototype.getPosition = function (clients, isAdd) {\n if (clients === void 0) { clients = this.prevClients; }\n var position = getPosition(clients || this.prevClients, this.prevClients, this.startClients);\n var deltaX = position.deltaX, deltaY = position.deltaY;\n this.movement += Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n this.prevClients = clients;\n return position;\n };\n ClientStore.prototype.getPositions = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n var prevClients = this.prevClients;\n var startClients = this.startClients;\n var minLength = Math.min(this.length, prevClients.length);\n var positions = [];\n for (var i = 0; i < minLength; ++i) {\n positions[i] = getPosition([clients[i]], [prevClients[i]], [startClients[i]]);\n }\n return positions;\n };\n ClientStore.prototype.getMovement = function (clients) {\n var movement = this.movement;\n if (!clients) {\n return movement;\n }\n var currentClient = getAverageClient(clients, this.length);\n var prevClient = getAverageClient(this.prevClients, this.length);\n var deltaX = currentClient.clientX - prevClient.clientX;\n var deltaY = currentClient.clientY - prevClient.clientY;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY) + movement;\n };\n ClientStore.prototype.getDistance = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getDist(clients);\n };\n ClientStore.prototype.getScale = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getDist(clients) / getDist(this.startClients);\n };\n ClientStore.prototype.move = function (deltaX, deltaY) {\n this.startClients.forEach(function (client) {\n client.clientX -= deltaX;\n client.clientY -= deltaY;\n });\n this.prevClients.forEach(function (client) {\n client.clientX -= deltaX;\n client.clientY -= deltaY;\n });\n };\n return ClientStore;\n}());\n\nvar INPUT_TAGNAMES = [\"textarea\", \"input\"];\n/**\n * You can set up drag, pinch events in any browser.\n */\nvar Gesto = /*#__PURE__*/ (function (_super) {\n __extends(Gesto, _super);\n /**\n *\n */\n function Gesto(targets, options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this) || this;\n _this.options = {};\n _this.flag = false;\n _this.pinchFlag = false;\n _this.data = {};\n _this.isDrag = false;\n _this.isPinch = false;\n _this.clientStores = [];\n _this.targets = [];\n _this.prevTime = 0;\n _this.doubleFlag = false;\n _this._useMouse = false;\n _this._useTouch = false;\n _this._useDrag = false;\n _this._dragFlag = false;\n _this._isTrusted = false;\n _this._isMouseEvent = false;\n _this._isSecondaryButton = false;\n _this._preventMouseEvent = false;\n _this._prevInputEvent = null;\n _this._isDragAPI = false;\n _this._isIdle = true;\n _this._preventMouseEventId = 0;\n _this._window = window;\n _this.onDragStart = function (e, isTrusted) {\n if (isTrusted === void 0) { isTrusted = true; }\n if (!_this.flag && e.cancelable === false) {\n return;\n }\n var isDragAPI = e.type.indexOf(\"drag\") >= -1;\n if (_this.flag && isDragAPI) {\n return;\n }\n _this._isDragAPI = true;\n var _a = _this.options, container = _a.container, pinchOutside = _a.pinchOutside, preventWheelClick = _a.preventWheelClick, preventRightClick = _a.preventRightClick, preventDefault = _a.preventDefault, checkInput = _a.checkInput, dragFocusedInput = _a.dragFocusedInput, preventClickEventOnDragStart = _a.preventClickEventOnDragStart, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickEventByCondition = _a.preventClickEventByCondition;\n var useTouch = _this._useTouch;\n var isDragStart = !_this.flag;\n _this._isSecondaryButton = e.which === 3 || e.button === 2;\n if ((preventWheelClick && (e.which === 2 || e.button === 1))\n || (preventRightClick && (e.which === 3 || e.button === 2))) {\n _this.stop();\n return false;\n }\n if (isDragStart) {\n var activeElement = _this._window.document.activeElement;\n var target = e.target;\n if (target) {\n var tagName = target.tagName.toLowerCase();\n var hasInput = INPUT_TAGNAMES.indexOf(tagName) > -1;\n var hasContentEditable = target.isContentEditable;\n if (hasInput || hasContentEditable) {\n if (checkInput || (!dragFocusedInput && activeElement === target)) {\n // force false or already focused.\n return false;\n }\n // no focus\n if (activeElement && (activeElement === target\n || (hasContentEditable && activeElement.isContentEditable && activeElement.contains(target)))) {\n if (dragFocusedInput) {\n target.blur();\n }\n else {\n return false;\n }\n }\n }\n else if ((preventDefault || e.type === \"touchstart\") && activeElement) {\n var activeTagName = activeElement.tagName.toLowerCase();\n if (activeElement.isContentEditable || INPUT_TAGNAMES.indexOf(activeTagName) > -1) {\n activeElement.blur();\n }\n }\n if (preventClickEventOnDragStart || preventClickEventOnDrag || preventClickEventByCondition) {\n addEvent(_this._window, \"click\", _this._onClick, true);\n }\n }\n _this.clientStores = [new ClientStore(getEventClients(e))];\n _this._isIdle = false;\n _this.flag = true;\n _this.isDrag = false;\n _this._isTrusted = isTrusted;\n _this._dragFlag = true;\n _this._prevInputEvent = e;\n _this.data = {};\n _this.doubleFlag = now() - _this.prevTime < 200;\n _this._isMouseEvent = isMouseEvent(e);\n if (!_this._isMouseEvent && _this._preventMouseEvent) {\n _this._allowMouseEvent();\n }\n var result = _this._preventMouseEvent || _this.emit(\"dragStart\", __assign(__assign({ data: _this.data, datas: _this.data, inputEvent: e, isMouseEvent: _this._isMouseEvent, isSecondaryButton: _this._isSecondaryButton, isTrusted: isTrusted, isDouble: _this.doubleFlag }, _this.getCurrentStore().getPosition()), { preventDefault: function () {\n e.preventDefault();\n }, preventDrag: function () {\n _this._dragFlag = false;\n } }));\n if (result === false) {\n _this.stop();\n }\n if (_this._isMouseEvent && _this.flag && preventDefault) {\n e.preventDefault();\n }\n }\n if (!_this.flag) {\n return false;\n }\n var timer = 0;\n if (isDragStart) {\n _this._attchDragEvent();\n // wait pinch\n if (useTouch && pinchOutside) {\n timer = setTimeout(function () {\n addEvent(container, \"touchstart\", _this.onDragStart, {\n passive: false\n });\n });\n }\n }\n else if (useTouch && pinchOutside) {\n // pinch is occured\n removeEvent(container, \"touchstart\", _this.onDragStart);\n }\n if (_this.flag && isMultiTouch(e)) {\n clearTimeout(timer);\n if (isDragStart && (e.touches.length !== e.changedTouches.length)) {\n return;\n }\n if (!_this.pinchFlag) {\n _this.onPinchStart(e);\n }\n }\n };\n _this.onDrag = function (e, isScroll) {\n if (!_this.flag) {\n return;\n }\n var preventDefault = _this.options.preventDefault;\n if (!_this._isMouseEvent && preventDefault) {\n e.preventDefault();\n }\n _this._prevInputEvent = e;\n var clients = getEventClients(e);\n var result = _this.moveClients(clients, e, false);\n if (_this._dragFlag) {\n if (_this.pinchFlag || result.deltaX || result.deltaY) {\n var dragResult = _this._preventMouseEvent || _this.emit(\"drag\", __assign(__assign({}, result), { isScroll: !!isScroll, inputEvent: e }));\n if (dragResult === false) {\n _this.stop();\n return;\n }\n }\n if (_this.pinchFlag) {\n _this.onPinch(e, clients);\n }\n }\n _this.getCurrentStore().getPosition(clients, true);\n };\n _this.onDragEnd = function (e) {\n if (!_this.flag) {\n return;\n }\n var _a = _this.options, pinchOutside = _a.pinchOutside, container = _a.container, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickEventOnDragStart = _a.preventClickEventOnDragStart, preventClickEventByCondition = _a.preventClickEventByCondition;\n var isDrag = _this.isDrag;\n if (preventClickEventOnDrag || preventClickEventOnDragStart || preventClickEventByCondition) {\n requestAnimationFrame(function () {\n _this._allowClickEvent();\n });\n }\n if (!preventClickEventByCondition && !preventClickEventOnDragStart && preventClickEventOnDrag && !isDrag) {\n _this._allowClickEvent();\n }\n if (_this._useTouch && pinchOutside) {\n removeEvent(container, \"touchstart\", _this.onDragStart);\n }\n if (_this.pinchFlag) {\n _this.onPinchEnd(e);\n }\n var clients = (e === null || e === void 0 ? void 0 : e.touches) ? getEventClients(e) : [];\n var clientsLength = clients.length;\n if (clientsLength === 0 || !_this.options.keepDragging) {\n _this.flag = false;\n }\n else {\n _this._addStore(new ClientStore(clients));\n }\n var position = _this._getPosition();\n var currentTime = now();\n var isDouble = !isDrag && _this.doubleFlag;\n _this._prevInputEvent = null;\n _this.prevTime = isDrag || isDouble ? 0 : currentTime;\n if (!_this.flag) {\n _this._dettachDragEvent();\n _this._preventMouseEvent || _this.emit(\"dragEnd\", __assign({ data: _this.data, datas: _this.data, isDouble: isDouble, isDrag: isDrag, isClick: !isDrag, isMouseEvent: _this._isMouseEvent, isSecondaryButton: _this._isSecondaryButton, inputEvent: e, isTrusted: _this._isTrusted }, position));\n _this.clientStores = [];\n if (!_this._isMouseEvent) {\n _this._preventMouseEvent = true;\n // Prevent the problem of touch event and mouse event occurring simultaneously\n clearTimeout(_this._preventMouseEventId);\n _this._preventMouseEventId = setTimeout(function () {\n _this._preventMouseEvent = false;\n }, 200);\n }\n _this._isIdle = true;\n }\n };\n _this.onBlur = function () {\n _this.onDragEnd();\n };\n _this._allowClickEvent = function () {\n removeEvent(_this._window, \"click\", _this._onClick, true);\n };\n _this._onClick = function (e) {\n _this._allowClickEvent();\n _this._allowMouseEvent();\n var preventClickEventByCondition = _this.options.preventClickEventByCondition;\n if (preventClickEventByCondition === null || preventClickEventByCondition === void 0 ? void 0 : preventClickEventByCondition(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n };\n _this._onContextMenu = function (e) {\n var options = _this.options;\n if (!options.preventRightClick) {\n e.preventDefault();\n }\n else {\n _this.onDragEnd(e);\n }\n };\n _this._passCallback = function () { };\n var elements = [].concat(targets);\n var firstTarget = elements[0];\n _this._window = isWindow(firstTarget) ? firstTarget : getWindow(firstTarget);\n _this.options = __assign({ checkInput: false, container: firstTarget && !(\"document\" in firstTarget) ? getWindow(firstTarget) : firstTarget, preventRightClick: true, preventWheelClick: true, preventClickEventOnDragStart: false, preventClickEventOnDrag: false, preventClickEventByCondition: null, preventDefault: true, checkWindowBlur: false, keepDragging: false, pinchThreshold: 0, events: [\"touch\", \"mouse\"] }, options);\n var _a = _this.options, container = _a.container, events = _a.events, checkWindowBlur = _a.checkWindowBlur;\n _this._useDrag = events.indexOf(\"drag\") > -1;\n _this._useTouch = events.indexOf(\"touch\") > -1;\n _this._useMouse = events.indexOf(\"mouse\") > -1;\n _this.targets = elements;\n if (_this._useDrag) {\n elements.forEach(function (el) {\n addEvent(el, \"dragstart\", _this.onDragStart);\n });\n }\n if (_this._useMouse) {\n elements.forEach(function (el) {\n addEvent(el, \"mousedown\", _this.onDragStart);\n addEvent(el, \"mousemove\", _this._passCallback);\n });\n addEvent(container, \"contextmenu\", _this._onContextMenu);\n }\n if (checkWindowBlur) {\n addEvent(getWindow(), \"blur\", _this.onBlur);\n }\n if (_this._useTouch) {\n var passive_1 = {\n passive: false,\n };\n elements.forEach(function (el) {\n addEvent(el, \"touchstart\", _this.onDragStart, passive_1);\n addEvent(el, \"touchmove\", _this._passCallback, passive_1);\n });\n }\n return _this;\n }\n /**\n * Stop Gesto's drag events.\n */\n Gesto.prototype.stop = function () {\n this.isDrag = false;\n this.data = {};\n this.clientStores = [];\n this.pinchFlag = false;\n this.doubleFlag = false;\n this.prevTime = 0;\n this.flag = false;\n this._isIdle = true;\n this._allowClickEvent();\n this._dettachDragEvent();\n this._isDragAPI = false;\n };\n /**\n * The total moved distance\n */\n Gesto.prototype.getMovement = function (clients) {\n return this.getCurrentStore().getMovement(clients) + this.clientStores.slice(1).reduce(function (prev, cur) {\n return prev + cur.movement;\n }, 0);\n };\n /**\n * Whether to drag\n */\n Gesto.prototype.isDragging = function () {\n return this.isDrag;\n };\n /**\n * Whether the operation of gesto is finished and is in idle state\n */\n Gesto.prototype.isIdle = function () {\n return this._isIdle;\n };\n /**\n * Whether to start drag\n */\n Gesto.prototype.isFlag = function () {\n return this.flag;\n };\n /**\n * Whether to start pinch\n */\n Gesto.prototype.isPinchFlag = function () {\n return this.pinchFlag;\n };\n /**\n * Whether to start double click\n */\n Gesto.prototype.isDoubleFlag = function () {\n return this.doubleFlag;\n };\n /**\n * Whether to pinch\n */\n Gesto.prototype.isPinching = function () {\n return this.isPinch;\n };\n /**\n * If a scroll event occurs, it is corrected by the scroll distance.\n */\n Gesto.prototype.scrollBy = function (deltaX, deltaY, e, isCallDrag) {\n if (isCallDrag === void 0) { isCallDrag = true; }\n if (!this.flag) {\n return;\n }\n this.clientStores[0].move(deltaX, deltaY);\n isCallDrag && this.onDrag(e, true);\n };\n /**\n * Create a virtual drag event.\n */\n Gesto.prototype.move = function (_a, inputEvent) {\n var deltaX = _a[0], deltaY = _a[1];\n var store = this.getCurrentStore();\n var nextClients = store.prevClients;\n return this.moveClients(nextClients.map(function (_a) {\n var clientX = _a.clientX, clientY = _a.clientY;\n return {\n clientX: clientX + deltaX,\n clientY: clientY + deltaY,\n originalClientX: clientX,\n originalClientY: clientY,\n };\n }), inputEvent, true);\n };\n /**\n * The dragStart event is triggered by an external event.\n */\n Gesto.prototype.triggerDragStart = function (e) {\n this.onDragStart(e, false);\n };\n /**\n * Set the event data while dragging.\n */\n Gesto.prototype.setEventData = function (data) {\n var currentData = this.data;\n for (var name_1 in data) {\n currentData[name_1] = data[name_1];\n }\n return this;\n };\n /**\n * Set the event data while dragging.\n * Use `setEventData`\n * @deprecated\n */\n Gesto.prototype.setEventDatas = function (data) {\n return this.setEventData(data);\n };\n /**\n * Get the current event state while dragging.\n */\n Gesto.prototype.getCurrentEvent = function (inputEvent) {\n if (inputEvent === void 0) { inputEvent = this._prevInputEvent; }\n return __assign(__assign({ data: this.data, datas: this.data }, this._getPosition()), { movement: this.getMovement(), isDrag: this.isDrag, isPinch: this.isPinch, isScroll: false, inputEvent: inputEvent });\n };\n /**\n * Get & Set the event data while dragging.\n */\n Gesto.prototype.getEventData = function () {\n return this.data;\n };\n /**\n * Get & Set the event data while dragging.\n * Use getEventData method\n * @depreacated\n */\n Gesto.prototype.getEventDatas = function () {\n return this.data;\n };\n /**\n * Unset Gesto\n */\n Gesto.prototype.unset = function () {\n var _this = this;\n var targets = this.targets;\n var container = this.options.container;\n this.off();\n removeEvent(this._window, \"blur\", this.onBlur);\n if (this._useDrag) {\n targets.forEach(function (el) {\n removeEvent(el, \"dragstart\", _this.onDragStart);\n });\n }\n if (this._useMouse) {\n targets.forEach(function (target) {\n removeEvent(target, \"mousedown\", _this.onDragStart);\n });\n removeEvent(container, \"contextmenu\", this._onContextMenu);\n }\n if (this._useTouch) {\n targets.forEach(function (target) {\n removeEvent(target, \"touchstart\", _this.onDragStart);\n });\n removeEvent(container, \"touchstart\", this.onDragStart);\n }\n this._prevInputEvent = null;\n this._allowClickEvent();\n this._dettachDragEvent();\n };\n Gesto.prototype.onPinchStart = function (e) {\n var _this = this;\n var pinchThreshold = this.options.pinchThreshold;\n if (this.isDrag && this.getMovement() > pinchThreshold) {\n return;\n }\n var store = new ClientStore(getEventClients(e));\n this.pinchFlag = true;\n this._addStore(store);\n var result = this.emit(\"pinchStart\", __assign(__assign({ data: this.data, datas: this.data, angle: store.getAngle(), touches: this.getCurrentStore().getPositions() }, store.getPosition()), { inputEvent: e, isTrusted: this._isTrusted, preventDefault: function () {\n e.preventDefault();\n }, preventDrag: function () {\n _this._dragFlag = false;\n } }));\n if (result === false) {\n this.pinchFlag = false;\n }\n };\n Gesto.prototype.onPinch = function (e, clients) {\n if (!this.flag || !this.pinchFlag || clients.length < 2) {\n return;\n }\n var store = this.getCurrentStore();\n this.isPinch = true;\n this.emit(\"pinch\", __assign(__assign({ data: this.data, datas: this.data, movement: this.getMovement(clients), angle: store.getAngle(clients), rotation: store.getRotation(clients), touches: store.getPositions(clients), scale: store.getScale(clients), distance: store.getDistance(clients) }, store.getPosition(clients)), { inputEvent: e, isTrusted: this._isTrusted }));\n };\n Gesto.prototype.onPinchEnd = function (e) {\n if (!this.pinchFlag) {\n return;\n }\n var isPinch = this.isPinch;\n this.isPinch = false;\n this.pinchFlag = false;\n var store = this.getCurrentStore();\n this.emit(\"pinchEnd\", __assign(__assign({ data: this.data, datas: this.data, isPinch: isPinch, touches: store.getPositions() }, store.getPosition()), { inputEvent: e }));\n };\n Gesto.prototype.getCurrentStore = function () {\n return this.clientStores[0];\n };\n Gesto.prototype.moveClients = function (clients, inputEvent, isAdd) {\n var position = this._getPosition(clients, isAdd);\n var isPrevDrag = this.isDrag;\n if (position.deltaX || position.deltaY) {\n this.isDrag = true;\n }\n var isFirstDrag = false;\n if (!isPrevDrag && this.isDrag) {\n isFirstDrag = true;\n }\n return __assign(__assign({ data: this.data, datas: this.data }, position), { movement: this.getMovement(clients), isDrag: this.isDrag, isPinch: this.isPinch, isScroll: false, isMouseEvent: this._isMouseEvent, isSecondaryButton: this._isSecondaryButton, inputEvent: inputEvent, isTrusted: this._isTrusted, isFirstDrag: isFirstDrag });\n };\n Gesto.prototype._addStore = function (store) {\n this.clientStores.splice(0, 0, store);\n };\n Gesto.prototype._getPosition = function (clients, isAdd) {\n var store = this.getCurrentStore();\n var position = store.getPosition(clients, isAdd);\n var _a = this.clientStores.slice(1).reduce(function (prev, cur) {\n var storePosition = cur.getPosition();\n prev.distX += storePosition.distX;\n prev.distY += storePosition.distY;\n return prev;\n }, position), distX = _a.distX, distY = _a.distY;\n return __assign(__assign({}, position), { distX: distX, distY: distY });\n };\n Gesto.prototype._attchDragEvent = function () {\n var win = this._window;\n var container = this.options.container;\n var passive = {\n passive: false\n };\n if (this._isDragAPI) {\n addEvent(container, \"dragover\", this.onDrag, passive);\n addEvent(win, \"dragend\", this.onDragEnd);\n }\n if (this._useMouse) {\n addEvent(container, \"mousemove\", this.onDrag);\n addEvent(win, \"mouseup\", this.onDragEnd);\n }\n if (this._useTouch) {\n addEvent(container, \"touchmove\", this.onDrag, passive);\n addEvent(win, \"touchend\", this.onDragEnd, passive);\n addEvent(win, \"touchcancel\", this.onDragEnd, passive);\n }\n };\n Gesto.prototype._dettachDragEvent = function () {\n var win = this._window;\n var container = this.options.container;\n if (this._isDragAPI) {\n removeEvent(container, \"dragover\", this.onDrag);\n removeEvent(win, \"dragend\", this.onDragEnd);\n }\n if (this._useMouse) {\n removeEvent(container, \"mousemove\", this.onDrag);\n removeEvent(win, \"mouseup\", this.onDragEnd);\n }\n if (this._useTouch) {\n removeEvent(container, \"touchstart\", this.onDragStart);\n removeEvent(container, \"touchmove\", this.onDrag);\n removeEvent(win, \"touchend\", this.onDragEnd);\n removeEvent(win, \"touchcancel\", this.onDragEnd);\n }\n };\n Gesto.prototype._allowMouseEvent = function () {\n this._preventMouseEvent = false;\n clearTimeout(this._preventMouseEventId);\n };\n return Gesto;\n}(EventEmitter));\n\nexport { Gesto as default };\n//# sourceMappingURL=gesto.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-styled.git\nversion: 1.0.8\n*/\nimport { getDocument, splitComma } from '@daybrush/utils';\n\nfunction hash(str) {\n var hash = 5381,\n i = str.length;\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nvar stringHash = hash;\n\nfunction getHash(str) {\n return stringHash(str).toString(36);\n}\nfunction getShadowRoot(parentElement) {\n if (parentElement && parentElement.getRootNode) {\n var rootNode = parentElement.getRootNode();\n if (rootNode.nodeType === 11) {\n return rootNode;\n }\n }\n return;\n}\nfunction replaceStyle(className, css, options) {\n if (options.original) {\n return css;\n }\n return css.replace(/([^};{\\s}][^};{]*|^\\s*){/mg, function (_, selector) {\n var trimmedSelector = selector.trim();\n return (trimmedSelector ? splitComma(trimmedSelector) : [\"\"]).map(function (subSelector) {\n var trimmedSubSelector = subSelector.trim();\n if (trimmedSubSelector.indexOf(\"@\") === 0) {\n return trimmedSubSelector;\n } else if (trimmedSubSelector.indexOf(\":global\") > -1) {\n return trimmedSubSelector.replace(/\\:global/g, \"\");\n } else if (trimmedSubSelector.indexOf(\":host\") > -1) {\n return \"\".concat(trimmedSubSelector.replace(/\\:host/g, \".\".concat(className)));\n } else if (trimmedSubSelector) {\n return \".\".concat(className, \" \").concat(trimmedSubSelector);\n } else {\n return \".\".concat(className);\n }\n }).join(\", \") + \" {\";\n });\n}\nfunction injectStyle(className, css, options, el, shadowRoot) {\n var doc = getDocument(el);\n var style = doc.createElement(\"style\");\n style.setAttribute(\"type\", \"text/css\");\n style.setAttribute(\"data-styled-id\", className);\n style.setAttribute(\"data-styled-count\", \"1\");\n if (options.nonce) {\n style.setAttribute(\"nonce\", options.nonce);\n }\n style.innerHTML = replaceStyle(className, css, options);\n (shadowRoot || doc.head || doc.body).appendChild(style);\n return style;\n}\n\n/**\n * Create an styled object that can be defined and inserted into the css.\n * @param - css styles\n */\nfunction styled(css) {\n var injectClassName = \"rCS\" + getHash(css);\n return {\n className: injectClassName,\n inject: function (el, options) {\n if (options === void 0) {\n options = {};\n }\n var shadowRoot = getShadowRoot(el);\n var styleElement = (shadowRoot || el.ownerDocument || document).querySelector(\"style[data-styled-id=\\\"\".concat(injectClassName, \"\\\"]\"));\n if (!styleElement) {\n styleElement = injectStyle(injectClassName, css, options, el, shadowRoot);\n } else {\n var count = parseFloat(styleElement.getAttribute(\"data-styled-count\")) || 0;\n styleElement.setAttribute(\"data-styled-count\", \"\".concat(count + 1));\n }\n return {\n destroy: function () {\n var _a;\n var injectCount = parseFloat(styleElement.getAttribute(\"data-styled-count\")) || 0;\n if (injectCount <= 1) {\n if (styleElement.remove) {\n styleElement.remove();\n } else {\n (_a = styleElement.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(styleElement);\n }\n styleElement = null;\n } else {\n styleElement.setAttribute(\"data-styled-count\", \"\".concat(injectCount - 1));\n }\n }\n };\n }\n };\n}\n\nexport default styled;\n//# sourceMappingURL=styled.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: croact-css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-styled.git\nversion: 1.1.9\n*/\nimport cssStyled from 'css-styled';\nimport { version, createElement, forwardRef, useRef, useImperativeHandle, useEffect, Component } from 'croact';\nimport { ref } from 'framework-utils';\n\n/*\nCopyright (c) 2019 Daybrush\nname: react-css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/css-styled/tree/master/packages/react-css-styled\nversion: 1.1.9\n*/\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nvar StyledElement = /*#__PURE__*/function (_super) {\n __extends(StyledElement, _super);\n function StyledElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.injectResult = null;\n _this.tag = \"div\";\n return _this;\n }\n var __proto = StyledElement.prototype;\n __proto.render = function () {\n var _a = this.props,\n _b = _a.className,\n className = _b === void 0 ? \"\" : _b,\n cspNonce = _a.cspNonce,\n portalContainer = _a.portalContainer,\n attributes = __rest(_a, [\"className\", \"cspNonce\", \"portalContainer\"]);\n var cssId = this.injector.className;\n var Tag = this.tag;\n var portalAttributes = {};\n if ((version || \"\").indexOf(\"simple\") > -1 && portalContainer) {\n portalAttributes = {\n portalContainer: portalContainer\n };\n }\n return createElement(Tag, __assign(__assign({\n \"ref\": ref(this, \"element\"),\n \"data-styled-id\": cssId,\n \"className\": \"\".concat(className, \" \").concat(cssId)\n }, portalAttributes), attributes));\n };\n __proto.componentDidMount = function () {\n this.injectResult = this.injector.inject(this.element, {\n nonce: this.props.cspNonce\n });\n };\n __proto.componentWillUnmount = function () {\n this.injectResult.destroy();\n this.injectResult = null;\n };\n __proto.getElement = function () {\n return this.element;\n };\n return StyledElement;\n}(Component);\nfunction defaultStyled(tag, css) {\n var injector = cssStyled(css);\n return /*#__PURE__*/function (_super) {\n __extends(Styled, _super);\n function Styled() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.injector = injector;\n _this.tag = tag;\n return _this;\n }\n return Styled;\n }(StyledElement);\n}\nfunction styled(Tag, css) {\n var injector = cssStyled(css);\n var cssId = injector.className;\n return forwardRef(function (props, ref) {\n var _a = props.className,\n className = _a === void 0 ? \"\" : _a,\n cspNonce = props.cspNonce,\n attributes = __rest(props, [\"className\", \"cspNonce\"]);\n var targetRef = useRef();\n useImperativeHandle(ref, function () {\n return targetRef.current;\n }, []);\n useEffect(function () {\n var injectResult = injector.inject(targetRef.current, {\n nonce: props.cspNonce\n });\n return function () {\n injectResult.destroy();\n };\n }, []);\n return createElement(Tag, __assign({\n \"ref\": targetRef,\n \"data-styled-id\": cssId,\n \"className\": \"\".concat(className, \" \").concat(cssId)\n }, attributes));\n });\n}\n\nexport default defaultStyled;\nexport { StyledElement, styled };\n","/*\nCopyright (c) 2019 Daybrush\nname: croact-moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/croact-moveable\nversion: 0.9.0\n*/\nimport getAgent from '@egjs/agent';\nimport { prefixNames, prefixCSS, ref, withMethods, refs } from 'framework-utils';\nimport { getRad, throttle, throttleArray, isString, calculateBoundSize, getKeys, isArray, hasClass, getDist as getDist$1, isObject, decamelize, convertUnitSize, pushSet, find, findIndex, splitSpace, isNumber, isNode, isFunction, isWindow, counter, dot, addClass, requestAnimationFrame, splitBracket, splitComma, splitUnit, cancelAnimationFrame, removeClass, getWindow, TINY_NUM as TINY_NUM$1, flat as flat$1, isUndefined, getDocumentBody, between, getDocumentElement, average } from '@daybrush/utils';\nimport { plus, minus, convertDimension, calculate, convertPositionMatrix, ignoreDimension, invert, createIdentityMatrix, createWarpMatrix, multiply, fromTranslation, createRotateMatrix, getOrigin, rotate, multiplies, createOriginMatrix, convertMatrixtoCSS, createScaleMatrix, convertCSStoMatrix } from '@scena/matrix';\nimport { parseMat, parse, toMat, calculateMatrixDist } from 'css-to-mat';\nimport ChildrenDiffer, { diff } from '@egjs/children-differ';\nimport DragScroll from '@scena/dragscroll';\nimport { getMinMaxs, fitPoints, getOverlapSize, getAreaSize, isInside, getIntersectionPointsByConstants } from 'overlap-area';\nimport * as React from 'croact';\nimport { createElement } from 'croact';\nimport Gesto from 'gesto';\nimport { styled } from 'croact-css-styled';\nimport EventEmitter from '@scena/event-emitter';\nimport { diff as diff$1 } from '@egjs/list-differ';\n\n/*\nCopyright (c) 2019 Daybrush\nname: react-moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/react-moveable\nversion: 0.56.0\n*/\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction makeAble(name, able) {\r\n return __assign({ events: [], props: [], name: name }, able);\r\n}\n\nvar DIRECTIONS4 = [\"n\", \"w\", \"s\", \"e\"];\r\nvar DIRECTIONS = [\"n\", \"w\", \"s\", \"e\", \"nw\", \"ne\", \"sw\", \"se\"];\r\nfunction getSVGCursor(scale, degree) {\r\n return \"data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"\".concat(32 * scale, \"px\\\" height=\\\"\").concat(32 * scale, \"px\\\" viewBox=\\\"0 0 32 32\\\" ><path d=\\\"M 16,5 L 12,10 L 14.5,10 L 14.5,22 L 12,22 L 16,27 L 20,22 L 17.5,22 L 17.5,10 L 20, 10 L 16,5 Z\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"1.2\\\" fill=\\\"black\\\" stroke=\\\"white\\\" style=\\\"transform:rotate(\").concat(degree, \"deg);transform-origin: 16px 16px\\\"></path></svg>\");\r\n}\r\nfunction getCursorCSS(degree) {\r\n var x1 = getSVGCursor(1, degree);\r\n // const x2 = getSVGCursor(2, degree);\r\n var degree45 = (Math.round(degree / 45) * 45) % 180;\r\n var defaultCursor = \"ns-resize\";\r\n if (degree45 === 135) {\r\n defaultCursor = \"nwse-resize\";\r\n }\r\n else if (degree45 === 45) {\r\n defaultCursor = \"nesw-resize\";\r\n }\r\n else if (degree45 === 90) {\r\n defaultCursor = \"ew-resize\";\r\n }\r\n // tslint:disable-next-line: max-line-length\r\n return \"cursor:\".concat(defaultCursor, \";cursor: url('\").concat(x1, \"') 16 16, \").concat(defaultCursor, \";\");\r\n}\r\nvar agent = getAgent();\r\nvar IS_WEBKIT = agent.browser.webkit;\r\nvar IS_WEBKIT605 = IS_WEBKIT && (function () {\r\n var navi = typeof window === \"undefined\" ? { userAgent: \"\" } : window.navigator;\r\n var res = /applewebkit\\/([^\\s]+)/g.exec(navi.userAgent.toLowerCase());\r\n return res ? parseFloat(res[1]) < 605 : false;\r\n})();\r\nvar browserName = agent.browser.name;\r\nvar browserVersion = parseInt(agent.browser.version, 10);\r\nvar IS_CHROME = browserName === \"chrome\";\r\nvar IS_CHROMIUM = agent.browser.chromium;\r\nvar chromiumVersion = parseInt(agent.browser.chromiumVersion, 10) || 0;\r\nvar IS_CHROMIUM109 = (IS_CHROME && browserVersion >= 109)\r\n || (IS_CHROMIUM && chromiumVersion >= 109);\r\nvar IS_FIREFOX = browserName === \"firefox\";\r\nvar IS_SAFARI_ABOVE15 = parseInt(agent.browser.webkitVersion, 10) >= 612\r\n || browserVersion >= 15;\r\nvar PREFIX = \"moveable-\";\r\nvar directionCSS = DIRECTIONS.map(function (dir) {\r\n var top = \"\";\r\n var left = \"\";\r\n var originX = \"center\";\r\n var originY = \"center\";\r\n var offset = \"calc(var(--moveable-control-padding, 20) * -1px)\";\r\n if (dir.indexOf(\"n\") > -1) {\r\n top = \"top: \".concat(offset, \";\");\r\n originY = \"bottom\";\r\n }\r\n if (dir.indexOf(\"s\") > -1) {\r\n top = \"top: 0px;\";\r\n originY = \"top\";\r\n }\r\n if (dir.indexOf(\"w\") > -1) {\r\n left = \"left: \".concat(offset, \";\");\r\n originX = \"right\";\r\n }\r\n if (dir.indexOf(\"e\") > -1) {\r\n left = \"left: 0px;\";\r\n originX = \"left\";\r\n }\r\n return \".around-control[data-direction*=\\\"\".concat(dir, \"\\\"] {\\n \").concat(left).concat(top, \"\\n transform-origin: \").concat(originX, \" \").concat(originY, \";\\n }\");\r\n}).join(\"\\n\");\r\nvar MOVEABLE_CSS = \"\\n{\\nposition: absolute;\\nwidth: 1px;\\nheight: 1px;\\nleft: 0;\\ntop: 0;\\nz-index: 3000;\\n--moveable-color: #4af;\\n--zoom: 1;\\n--zoompx: 1px;\\n--moveable-line-padding: 0;\\n--moveable-control-padding: 0;\\nwill-change: transform;\\noutline: 1px solid transparent;\\n}\\n.control-box {\\nz-index: 0;\\n}\\n.line, .control {\\nposition: absolute;\\nleft: 0;\\ntop: 0;\\nwill-change: transform;\\n}\\n.control {\\nwidth: 14px;\\nheight: 14px;\\nborder-radius: 50%;\\nborder: 2px solid #fff;\\nbox-sizing: border-box;\\nbackground: #4af;\\nbackground: var(--moveable-color);\\nmargin-top: -7px;\\nmargin-left: -7px;\\nborder: 2px solid #fff;\\nz-index: 10;\\n}\\n.around-control {\\nposition: absolute;\\nwill-change: transform;\\nwidth: calc(var(--moveable-control-padding, 20) * 1px);\\nheight: calc(var(--moveable-control-padding, 20) * 1px);\\nleft: calc(var(--moveable-control-padding, 20) * -0.5px);\\ntop: calc(var(--moveable-control-padding, 20) * -0.5px);\\nbox-sizing: border-box;\\nbackground: transparent;\\nz-index: 8;\\ncursor: alias;\\ntransform-origin: center center;\\n}\\n\".concat(directionCSS, \"\\n.padding {\\nposition: absolute;\\ntop: 0px;\\nleft: 0px;\\nwidth: 100px;\\nheight: 100px;\\ntransform-origin: 0 0;\\n}\\n.line {\\nwidth: 1px;\\nheight: 1px;\\nbackground: #4af;\\nbackground: var(--moveable-color);\\ntransform-origin: 0px 50%;\\n}\\n.line.edge {\\nz-index: 1;\\nbackground: transparent;\\n}\\n.line.dashed {\\nbox-sizing: border-box;\\nbackground: transparent;\\n}\\n.line.dashed.horizontal {\\nborder-top: 1px dashed #4af;\\nborder-top-color: #4af;\\nborder-top-color: var(--moveable-color);\\n}\\n.line.dashed.vertical {\\nborder-left: 1px dashed #4af;\\nborder-left-color: #4af;\\nborder-left-color: var(--moveable-color);\\n}\\n.line.vertical {\\ntransform: translateX(-50%);\\n}\\n.line.horizontal {\\ntransform: translateY(-50%);\\n}\\n.line.vertical.bold {\\nwidth: 2px;\\n}\\n.line.horizontal.bold {\\nheight: 2px;\\n}\\n\\n.control.origin {\\nborder-color: #f55;\\nbackground: #fff;\\nwidth: 12px;\\nheight: 12px;\\nmargin-top: -6px;\\nmargin-left: -6px;\\npointer-events: none;\\n}\\n\").concat([0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165].map(function (degree) { return \"\\n.direction[data-rotation=\\\"\".concat(degree, \"\\\"], :global .view-control-rotation\").concat(degree, \" {\\n\").concat(getCursorCSS(degree), \"\\n}\\n\"); }).join(\"\\n\"), \"\\n\\n.line.direction:before {\\ncontent: \\\"\\\";\\nposition: absolute;\\nwidth: 100%;\\nheight: calc(var(--moveable-line-padding, 0) * 1px);\\nbottom: 0;\\nleft: 0;\\n}\\n.group {\\nz-index: -1;\\n}\\n.area {\\nposition: absolute;\\n}\\n.area-pieces {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\ndisplay: none;\\n}\\n.area.avoid, .area.pass {\\npointer-events: none;\\n}\\n.area.avoid+.area-pieces {\\ndisplay: block;\\n}\\n.area-piece {\\nposition: absolute;\\n}\\n\\n\").concat(IS_WEBKIT605 ? \":global svg *:before {\\ncontent:\\\"\\\";\\ntransform-origin: inherit;\\n}\" : \"\", \"\\n\");\r\nvar NEARBY_POS = [\r\n [0, 1, 2],\r\n [1, 0, 3],\r\n [2, 0, 3],\r\n [3, 1, 2],\r\n];\r\nvar FLOAT_POINT_NUM = 0.0001;\r\nvar TINY_NUM = 0.0000001;\r\nvar MIN_SCALE = 0.000000001;\r\nvar MAX_NUM = Math.pow(10, 10);\r\nvar MIN_NUM = -MAX_NUM;\r\nvar DIRECTION_REGION_TO_DIRECTION = {\r\n n: [0, -1],\r\n e: [1, 0],\r\n s: [0, 1],\r\n w: [-1, 0],\r\n nw: [-1, -1],\r\n ne: [1, -1],\r\n sw: [-1, 1],\r\n se: [1, 1],\r\n};\r\nvar DIRECTION_INDEXES = {\r\n n: [0, 1],\r\n e: [1, 3],\r\n s: [3, 2],\r\n w: [2, 0],\r\n nw: [0],\r\n ne: [1],\r\n sw: [2],\r\n se: [3],\r\n};\r\nvar DIRECTION_ROTATIONS = {\r\n n: 0,\r\n s: 180,\r\n w: 270,\r\n e: 90,\r\n nw: 315,\r\n ne: 45,\r\n sw: 225,\r\n se: 135,\r\n};\r\nvar MOVEABLE_METHODS = [\r\n \"isMoveableElement\",\r\n \"updateRect\",\r\n \"updateTarget\",\r\n \"destroy\",\r\n \"dragStart\",\r\n \"isInside\",\r\n \"hitTest\",\r\n \"setState\",\r\n \"getRect\",\r\n \"request\",\r\n \"isDragging\",\r\n \"getManager\",\r\n \"forceUpdate\",\r\n \"waitToChangeTarget\",\r\n \"updateSelectors\",\r\n \"getTargets\",\r\n \"stopDrag\",\r\n \"getControlBoxElement\",\r\n \"getMoveables\",\r\n \"getDragElement\",\r\n];\n\nfunction setCustomDrag(e, state, delta, isPinch, isConvert, ableName) {\r\n var _a, _b;\r\n if (ableName === void 0) { ableName = \"draggable\"; }\r\n var result = (_b = (_a = state.gestos[ableName]) === null || _a === void 0 ? void 0 : _a.move(delta, e.inputEvent)) !== null && _b !== void 0 ? _b : {};\r\n var datas = result.originalDatas || result.datas;\r\n var ableDatas = datas[ableName] || (datas[ableName] = {});\r\n return __assign(__assign({}, (isConvert ? convertDragDist(state, result) : result)), { isPinch: !!isPinch, parentEvent: true, datas: ableDatas, originalDatas: e.originalDatas });\r\n}\r\nvar CustomGesto = /*#__PURE__*/ (function () {\r\n function CustomGesto(ableName) {\r\n var _a;\r\n if (ableName === void 0) { ableName = \"draggable\"; }\r\n this.ableName = ableName;\r\n this.prevX = 0;\r\n this.prevY = 0;\r\n this.startX = 0;\r\n this.startY = 0;\r\n this.isDrag = false;\r\n this.isFlag = false;\r\n this.datas = {\r\n draggable: {},\r\n };\r\n this.datas = (_a = {},\r\n _a[ableName] = {},\r\n _a);\r\n }\r\n CustomGesto.prototype.dragStart = function (client, e) {\r\n this.isDrag = false;\r\n this.isFlag = false;\r\n var originalDatas = e.originalDatas;\r\n this.datas = originalDatas;\r\n if (!originalDatas[this.ableName]) {\r\n originalDatas[this.ableName] = {};\r\n }\r\n return __assign(__assign({}, this.move(client, e.inputEvent)), { type: \"dragstart\" });\r\n };\r\n CustomGesto.prototype.drag = function (client, inputEvent) {\r\n return this.move([\r\n client[0] - this.prevX,\r\n client[1] - this.prevY,\r\n ], inputEvent);\r\n };\r\n CustomGesto.prototype.move = function (delta, inputEvent) {\r\n var clientX;\r\n var clientY;\r\n var isFirstDrag = false;\r\n if (!this.isFlag) {\r\n this.prevX = delta[0];\r\n this.prevY = delta[1];\r\n this.startX = delta[0];\r\n this.startY = delta[1];\r\n clientX = delta[0];\r\n clientY = delta[1];\r\n this.isFlag = true;\r\n }\r\n else {\r\n var isPrevDrag = this.isDrag;\r\n clientX = this.prevX + delta[0];\r\n clientY = this.prevY + delta[1];\r\n if (delta[0] || delta[1]) {\r\n this.isDrag = true;\r\n }\r\n if (!isPrevDrag && this.isDrag) {\r\n isFirstDrag = true;\r\n }\r\n }\r\n this.prevX = clientX;\r\n this.prevY = clientY;\r\n return {\r\n type: \"drag\",\r\n clientX: clientX,\r\n clientY: clientY,\r\n inputEvent: inputEvent,\r\n isFirstDrag: isFirstDrag,\r\n isDrag: this.isDrag,\r\n distX: clientX - this.startX,\r\n distY: clientY - this.startY,\r\n deltaX: delta[0],\r\n deltaY: delta[1],\r\n datas: this.datas[this.ableName],\r\n originalDatas: this.datas,\r\n parentEvent: true,\r\n parentGesto: this,\r\n };\r\n };\r\n return CustomGesto;\r\n}());\n\nfunction calculateElementPosition(matrix, origin, width, height) {\r\n var is3d = matrix.length === 16;\r\n var n = is3d ? 4 : 3;\r\n var poses = calculatePoses(matrix, width, height, n);\r\n var _a = __read(poses, 4), _b = __read(_a[0], 2), x1 = _b[0], y1 = _b[1], _c = __read(_a[1], 2), x2 = _c[0], y2 = _c[1], _d = __read(_a[2], 2), x3 = _d[0], y3 = _d[1], _e = __read(_a[3], 2), x4 = _e[0], y4 = _e[1];\r\n var _f = __read(calculatePosition(matrix, origin, n), 2), originX = _f[0], originY = _f[1];\r\n var left = Math.min(x1, x2, x3, x4);\r\n var top = Math.min(y1, y2, y3, y4);\r\n var right = Math.max(x1, x2, x3, x4);\r\n var bottom = Math.max(y1, y2, y3, y4);\r\n x1 = (x1 - left) || 0;\r\n x2 = (x2 - left) || 0;\r\n x3 = (x3 - left) || 0;\r\n x4 = (x4 - left) || 0;\r\n y1 = (y1 - top) || 0;\r\n y2 = (y2 - top) || 0;\r\n y3 = (y3 - top) || 0;\r\n y4 = (y4 - top) || 0;\r\n originX = (originX - left) || 0;\r\n originY = (originY - top) || 0;\r\n var sx = matrix[0];\r\n var sy = matrix[n + 1];\r\n var direction = sign(sx * sy);\r\n return {\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n origin: [originX, originY],\r\n pos1: [x1, y1],\r\n pos2: [x2, y2],\r\n pos3: [x3, y3],\r\n pos4: [x4, y4],\r\n direction: direction,\r\n };\r\n}\n\nfunction calculatePointerDist(moveable, e) {\r\n var clientX = e.clientX, clientY = e.clientY, datas = e.datas;\r\n var _a = moveable.state, moveableClientRect = _a.moveableClientRect, rootMatrix = _a.rootMatrix, is3d = _a.is3d, pos1 = _a.pos1;\r\n var left = moveableClientRect.left, top = moveableClientRect.top;\r\n var n = is3d ? 4 : 3;\r\n var _b = __read(minus(calculateInversePosition(rootMatrix, [clientX - left, clientY - top], n), pos1), 2), posX = _b[0], posY = _b[1];\r\n var _c = __read(getDragDist({ datas: datas, distX: posX, distY: posY }), 2), distX = _c[0], distY = _c[1];\r\n return [distX, distY];\r\n}\r\nfunction setDragStart(moveable, _a) {\r\n var datas = _a.datas;\r\n var _b = moveable.state, allMatrix = _b.allMatrix, beforeMatrix = _b.beforeMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, origin = _b.origin, offsetMatrix = _b.offsetMatrix, targetMatrix = _b.targetMatrix, transformOrigin = _b.transformOrigin;\r\n var n = is3d ? 4 : 3;\r\n datas.is3d = is3d;\r\n datas.matrix = allMatrix;\r\n datas.targetMatrix = targetMatrix;\r\n datas.beforeMatrix = beforeMatrix;\r\n datas.offsetMatrix = offsetMatrix;\r\n datas.transformOrigin = transformOrigin;\r\n datas.inverseMatrix = invert(allMatrix, n);\r\n datas.inverseBeforeMatrix = invert(beforeMatrix, n);\r\n datas.absoluteOrigin = convertPositionMatrix(plus([left, top], origin), n);\r\n datas.startDragBeforeDist = calculate(datas.inverseBeforeMatrix, datas.absoluteOrigin, n);\r\n datas.startDragDist = calculate(datas.inverseMatrix, datas.absoluteOrigin, n);\r\n}\r\nfunction getTransformDirection(e) {\r\n return calculateElementPosition(e.datas.beforeTransform, [50, 50], 100, 100).direction;\r\n}\r\nfunction resolveTransformEvent(moveable, event, functionName) {\r\n var datas = event.datas, originalDatas = event.originalDatas.beforeRenderable;\r\n var index = datas.transformIndex;\r\n var nextTransforms = originalDatas.nextTransforms;\r\n var length = nextTransforms.length;\r\n var nextTransformAppendedIndexes = originalDatas.nextTransformAppendedIndexes;\r\n var nextIndex = -1;\r\n if (index === -1) {\r\n // translate => rotate => scale\r\n if (functionName === \"translate\") {\r\n nextIndex = 0;\r\n }\r\n else if (functionName === \"rotate\") {\r\n nextIndex = findIndex(nextTransforms, function (text) { return text.match(/scale\\(/g); });\r\n }\r\n if (nextIndex === -1) {\r\n nextIndex = nextTransforms.length;\r\n }\r\n datas.transformIndex = nextIndex;\r\n }\r\n else if (find(nextTransformAppendedIndexes, function (info) { return info.index === index && info.functionName === functionName; })) {\r\n nextIndex = index;\r\n }\r\n else {\r\n nextIndex = index + nextTransformAppendedIndexes.filter(function (info) { return info.index < index; }).length;\r\n }\r\n var result = convertTransformInfo(nextTransforms, moveable.state, nextIndex);\r\n var targetFunction = result.targetFunction;\r\n var matFunctionName = functionName === \"rotate\" ? \"rotateZ\" : functionName;\r\n datas.beforeFunctionTexts = result.beforeFunctionTexts;\r\n datas.afterFunctionTexts = result.afterFunctionTexts;\r\n datas.beforeTransform = result.beforeFunctionMatrix;\r\n datas.beforeTransform2 = result.beforeFunctionMatrix2;\r\n datas.targetTansform = result.targetFunctionMatrix;\r\n datas.afterTransform = result.afterFunctionMatrix;\r\n datas.afterTransform2 = result.afterFunctionMatrix2;\r\n datas.targetAllTransform = result.allFunctionMatrix;\r\n if (targetFunction.functionName === matFunctionName) {\r\n datas.afterFunctionTexts.splice(0, 1);\r\n datas.isAppendTransform = false;\r\n }\r\n else if (length > nextIndex) {\r\n datas.isAppendTransform = true;\r\n originalDatas.nextTransformAppendedIndexes = __spreadArray(__spreadArray([], __read(nextTransformAppendedIndexes), false), [{\r\n functionName: functionName,\r\n index: nextIndex,\r\n isAppend: true,\r\n }], false);\r\n }\r\n}\r\nfunction convertTransformFormat(datas, value, dist) {\r\n return \"\".concat(datas.beforeFunctionTexts.join(\" \"), \" \").concat(datas.isAppendTransform ? dist : value, \" \").concat(datas.afterFunctionTexts.join(\" \"));\r\n}\r\nfunction getTransformDist(_a) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var _b = __read(getBeforeDragDist({ datas: datas, distX: distX, distY: distY }), 2), bx = _b[0], by = _b[1];\r\n // B * [tx, ty] * A = [bx, by] * targetMatrix;\r\n // [tx, ty] = B-1 * [bx, by] * targetMatrix * A-1 * [0, 0];\r\n var res = getTransfromMatrix(datas, fromTranslation([bx, by], 4));\r\n return calculate(res, convertPositionMatrix([0, 0, 0], 4), 4);\r\n}\r\nfunction getTransfromMatrix(datas, targetMatrix, isAfter) {\r\n var beforeTransform = datas.beforeTransform, afterTransform = datas.afterTransform, beforeTransform2 = datas.beforeTransform2, afterTransform2 = datas.afterTransform2, targetAllTransform = datas.targetAllTransform;\r\n // B * afterTargetMatrix * A = (targetMatrix * targetAllTransform)\r\n // afterTargetMatrix = B-1 * targetMatrix * targetAllTransform * A-1\r\n // nextTargetMatrix = (targetMatrix * targetAllTransform)\r\n var nextTargetMatrix = isAfter\r\n ? multiply(targetAllTransform, targetMatrix, 4)\r\n : multiply(targetMatrix, targetAllTransform, 4);\r\n // res1 = B-1 * nextTargetMatrix\r\n var res1 = multiply(invert(isAfter ? beforeTransform2 : beforeTransform, 4), nextTargetMatrix, 4);\r\n // res3 = res2 * A-1\r\n var afterTargetMatrix = multiply(res1, invert(isAfter ? afterTransform2 : afterTransform, 4), 4);\r\n return afterTargetMatrix;\r\n}\r\nfunction getBeforeDragDist(_a) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n // TT = BT\r\n var inverseBeforeMatrix = datas.inverseBeforeMatrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n // ABS_ORIGIN * [distX, distY] = BM * (ORIGIN + [tx, ty])\r\n // BM -1 * ABS_ORIGIN * [distX, distY] - ORIGIN = [tx, ty]\r\n return minus(calculate(inverseBeforeMatrix, plus(absoluteOrigin, [distX, distY]), n), startDragBeforeDist);\r\n}\r\nfunction getDragDist(_a, isBefore) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var inverseBeforeMatrix = datas.inverseBeforeMatrix, inverseMatrix = datas.inverseMatrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, startDragDist = datas.startDragDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n return minus(calculate(isBefore ? inverseBeforeMatrix : inverseMatrix, plus(absoluteOrigin, [distX, distY]), n), isBefore ? startDragBeforeDist : startDragDist);\r\n}\r\nfunction getInverseDragDist(_a, isBefore) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var beforeMatrix = datas.beforeMatrix, matrix = datas.matrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, startDragDist = datas.startDragDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n return minus(calculate(isBefore ? beforeMatrix : matrix, plus(isBefore ? startDragBeforeDist : startDragDist, [distX, distY]), n), absoluteOrigin);\r\n}\r\nfunction calculateTransformOrigin(transformOrigin, width, height, prevWidth, prevHeight, prevOrigin) {\r\n if (prevWidth === void 0) { prevWidth = width; }\r\n if (prevHeight === void 0) { prevHeight = height; }\r\n if (prevOrigin === void 0) { prevOrigin = [0, 0]; }\r\n if (!transformOrigin) {\r\n return prevOrigin;\r\n }\r\n return transformOrigin.map(function (pos, i) {\r\n var _a = splitUnit(pos), value = _a.value, unit = _a.unit;\r\n var prevSize = (i ? prevHeight : prevWidth);\r\n var size = (i ? height : width);\r\n if (pos === \"%\" || isNaN(value)) {\r\n // no value but %\r\n var measureRatio = prevSize ? prevOrigin[i] / prevSize : 0;\r\n return size * measureRatio;\r\n }\r\n else if (unit !== \"%\") {\r\n return value;\r\n }\r\n return size * value / 100;\r\n });\r\n}\r\nfunction getPosIndexesByDirection(direction) {\r\n var indexes = [];\r\n if (direction[1] >= 0) {\r\n if (direction[0] >= 0) {\r\n indexes.push(3);\r\n }\r\n if (direction[0] <= 0) {\r\n indexes.push(2);\r\n }\r\n }\r\n if (direction[1] <= 0) {\r\n if (direction[0] >= 0) {\r\n indexes.push(1);\r\n }\r\n if (direction[0] <= 0) {\r\n indexes.push(0);\r\n }\r\n }\r\n return indexes;\r\n}\r\nfunction getPosesByDirection(poses, direction) {\r\n /*\r\n [-1, -1](pos1) [0, -1](pos1,pos2) [1, -1](pos2)\r\n [-1, 0](pos1, pos3) [1, 0](pos2, pos4)\r\n [-1, 1](pos3) [0, 1](pos3, pos4) [1, 1](pos4)\r\n */\r\n return getPosIndexesByDirection(direction).map(function (index) { return poses[index]; });\r\n}\r\nfunction getPosBySingleDirection(poses, direction) {\r\n var ratio = (direction + 1) / 2;\r\n return [\r\n dot(poses[0][0], poses[1][0], ratio, 1 - ratio),\r\n dot(poses[0][1], poses[1][1], ratio, 1 - ratio),\r\n ];\r\n}\r\nfunction getPosByDirection(poses, direction) {\r\n var top = getPosBySingleDirection([poses[0], poses[1]], direction[0]);\r\n var bottom = getPosBySingleDirection([poses[2], poses[3]], direction[0]);\r\n return getPosBySingleDirection([top, bottom], direction[1]);\r\n}\r\nfunction getDist(startPos, matrix, width, height, n, fixedDirection) {\r\n var poses = calculatePoses(matrix, width, height, n);\r\n var fixedPos = getPosByDirection(poses, fixedDirection);\r\n var distX = startPos[0] - fixedPos[0];\r\n var distY = startPos[1] - fixedPos[1];\r\n return [distX, distY];\r\n}\r\nfunction getNextMatrix(offsetMatrix, targetMatrix, origin, n) {\r\n return multiply(offsetMatrix, getAbsoluteMatrix(targetMatrix, n, origin), n);\r\n}\r\nfunction getNextTransformMatrix(state, datas, transform, isAllTransform) {\r\n var transformOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d;\r\n var n = is3d ? 4 : 3;\r\n var targetTransform;\r\n if (isString(transform)) {\r\n var beforeTransform = datas.beforeTransform, afterTransform = datas.afterTransform;\r\n if (isAllTransform) {\r\n targetTransform = convertDimension(parseMat(transform), 4, n);\r\n }\r\n else {\r\n targetTransform = convertDimension(multiply(multiply(beforeTransform, parseMat([transform]), 4), afterTransform, 4), 4, n);\r\n }\r\n }\r\n else {\r\n targetTransform = transform;\r\n }\r\n return getNextMatrix(offsetMatrix, targetTransform, transformOrigin, n);\r\n}\r\nfunction scaleMatrix(state, scale) {\r\n var transformOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d, targetMatrix = state.targetMatrix, targetAllTransform = state.targetAllTransform;\r\n var n = is3d ? 4 : 3;\r\n return getNextMatrix(offsetMatrix, multiply(targetAllTransform || targetMatrix, createScaleMatrix(scale, n), n), transformOrigin, n);\r\n}\r\nfunction fillTransformStartEvent(moveable, e) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n return {\r\n setTransform: function (transform, index) {\r\n if (index === void 0) { index = -1; }\r\n originalDatas.startTransforms = isArray(transform) ? transform : splitSpace(transform);\r\n setTransformIndex(moveable, e, index);\r\n },\r\n setTransformIndex: function (index) {\r\n setTransformIndex(moveable, e, index);\r\n },\r\n };\r\n}\r\nfunction setDefaultTransformIndex(moveable, e, property) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n var startTransforms = originalDatas.startTransforms;\r\n setTransformIndex(moveable, e, findIndex(startTransforms, function (func) { return func.indexOf(\"\".concat(property, \"(\")) === 0; }));\r\n}\r\nfunction setTransformIndex(moveable, e, index) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n var datas = e.datas;\r\n datas.transformIndex = index;\r\n if (index === -1) {\r\n return;\r\n }\r\n var transform = originalDatas.startTransforms[index];\r\n if (!transform) {\r\n return;\r\n }\r\n var state = moveable.state;\r\n var info = parse([transform], {\r\n \"x%\": function (v) { return v / 100 * state.offsetWidth; },\r\n \"y%\": function (v) { return v / 100 * state.offsetHeight; },\r\n });\r\n datas.startValue = info[0].functionValue;\r\n}\r\nfunction fillOriginalTransform(e, transform) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n originalDatas.nextTransforms = splitSpace(transform);\r\n // originalDatas.nextTargetMatrix = parseMat(transform);\r\n}\r\nfunction getBeforeRenderableDatas(e) {\r\n return e.originalDatas.beforeRenderable;\r\n}\r\nfunction getNextTransforms(e) {\r\n var originalDatas = e.originalDatas.beforeRenderable;\r\n return originalDatas.nextTransforms;\r\n}\r\nfunction getNextTransformText(e) {\r\n return (getNextTransforms(e) || []).join(\" \");\r\n}\r\nfunction getNextStyle(e) {\r\n return getBeforeRenderableDatas(e).nextStyle;\r\n}\r\nfunction fillTransformEvent(moveable, nextTransform, delta, isPinch, e) {\r\n fillOriginalTransform(e, nextTransform);\r\n var drag = Draggable.drag(moveable, setCustomDrag(e, moveable.state, delta, isPinch, false));\r\n var afterTransform = drag ? drag.transform : nextTransform;\r\n return __assign(__assign({ transform: nextTransform, drag: drag }, fillCSSObject({\r\n transform: afterTransform,\r\n }, e)), { afterTransform: afterTransform });\r\n}\r\nfunction getTranslateFixedPosition(moveable, transform, fixedDirection, fixedOffset, datas, isAllTransform) {\r\n var nextMatrix = getNextTransformMatrix(moveable.state, datas, transform, isAllTransform);\r\n var nextFixedPosition = getDirectionOffset(moveable, fixedDirection, fixedOffset, nextMatrix);\r\n return nextFixedPosition;\r\n}\r\nfunction getTranslateDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform) {\r\n var nextFixedPosition = getTranslateFixedPosition(moveable, transform, fixedDirection, fixedOffset, datas, isAllTransform);\r\n var state = moveable.state;\r\n var left = state.left, top = state.top;\r\n var groupable = moveable.props.groupable;\r\n var groupLeft = groupable ? left : 0;\r\n var groupTop = groupable ? top : 0;\r\n var dist = minus(fixedPosition, nextFixedPosition);\r\n return minus(dist, [groupLeft, groupTop]);\r\n}\r\nfunction getScaleDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform) {\r\n var dist = getTranslateDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform);\r\n return dist;\r\n}\r\nfunction getDirectionByPos(pos, width, height) {\r\n return [\r\n width ? -1 + pos[0] / (width / 2) : 0,\r\n height ? -1 + pos[1] / (height / 2) : 0,\r\n ];\r\n}\r\nfunction getDirectionOffset(moveable, fixedDirection, fixedOffset, nextMatrix) {\r\n if (nextMatrix === void 0) { nextMatrix = moveable.state.allMatrix; }\r\n var _a = moveable.state, width = _a.width, height = _a.height, is3d = _a.is3d;\r\n var n = is3d ? 4 : 3;\r\n var fixedOffsetPosition = [\r\n width / 2 * (1 + fixedDirection[0]) + fixedOffset[0],\r\n height / 2 * (1 + fixedDirection[1]) + fixedOffset[1],\r\n ];\r\n return calculatePosition(nextMatrix, fixedOffsetPosition, n);\r\n}\r\nfunction getRotateDist(moveable, rotateDist, datas) {\r\n var fixedDirection = datas.fixedDirection;\r\n var fixedPosition = datas.fixedPosition;\r\n var fixedOffset = datas.fixedOffset;\r\n return getTranslateDist(moveable, \"rotate(\".concat(rotateDist, \"deg)\"), fixedDirection, fixedPosition, fixedOffset, datas);\r\n}\r\nfunction getResizeDist(moveable, width, height, fixedPosition, transformOrigin, datas) {\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var prevOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d, prevWidth = state.width, prevHeight = state.height, left = state.left, top = state.top;\r\n var fixedDirection = datas.fixedDirection;\r\n var targetMatrix = datas.nextTargetMatrix || state.targetMatrix;\r\n var n = is3d ? 4 : 3;\r\n var nextOrigin = calculateTransformOrigin(transformOrigin, width, height, prevWidth, prevHeight, prevOrigin);\r\n var groupLeft = groupable ? left : 0;\r\n var groupTop = groupable ? top : 0;\r\n var nextMatrix = getNextMatrix(offsetMatrix, targetMatrix, nextOrigin, n);\r\n var dist = getDist(fixedPosition, nextMatrix, width, height, n, fixedDirection);\r\n return minus(dist, [groupLeft, groupTop]);\r\n}\r\nfunction getAbsolutePosition(moveable, direction) {\r\n return getPosByDirection(getAbsolutePosesByState(moveable.state), direction);\r\n}\n\nfunction getGestoData(moveable, ableName) {\r\n var targetGesto = moveable.targetGesto;\r\n var controlGesto = moveable.controlGesto;\r\n var data;\r\n if (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag()) {\r\n data = targetGesto.getEventData()[ableName];\r\n }\r\n if (!data && (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag())) {\r\n data = controlGesto.getEventData()[ableName];\r\n }\r\n return data || {};\r\n}\n\nfunction getShadowRoot(parentElement) {\r\n if (parentElement && parentElement.getRootNode) {\r\n var rootNode = parentElement.getRootNode();\r\n if (rootNode.nodeType === 11) {\r\n return rootNode;\r\n }\r\n }\r\n return;\r\n}\r\nfunction getIndividualTransforms(getStyle) {\r\n var scale = getStyle(\"scale\");\r\n var rotate = getStyle(\"rotate\");\r\n var translate = getStyle(\"translate\");\r\n var individualTransforms = [];\r\n if (translate && translate !== \"0px\" && translate !== \"none\") {\r\n individualTransforms.push(\"translate(\".concat(translate.split(/\\s+/).join(\",\"), \")\"));\r\n }\r\n if (rotate && rotate !== \"1\" && rotate !== \"none\") {\r\n individualTransforms.push(\"rotate(\".concat(rotate, \")\"));\r\n }\r\n if (scale && scale !== \"1\" && scale !== \"none\") {\r\n individualTransforms.push(\"scale(\".concat(scale.split(/\\s+/).join(\",\"), \")\"));\r\n }\r\n return individualTransforms;\r\n}\r\nfunction getMatrixStackInfo(target, container, checkContainer) {\r\n var el = target;\r\n var matrixes = [];\r\n var documentElement = getDocumentElement(target) || getDocumentBody(target);\r\n var requestEnd = !checkContainer && target === container || target === documentElement;\r\n var isEnd = requestEnd;\r\n var is3d = false;\r\n var n = 3;\r\n var transformOrigin;\r\n var targetTransformOrigin;\r\n var targetMatrix;\r\n var hasFixed = false;\r\n var offsetContainer = getOffsetInfo(container, container, true).offsetParent;\r\n var zoom = 1;\r\n while (el && !isEnd) {\r\n isEnd = requestEnd;\r\n var getStyle = getCachedStyle(el);\r\n var position = getStyle(\"position\");\r\n var transform = getElementTransform(el);\r\n var isFixed = position === \"fixed\";\r\n var individualTransforms = getIndividualTransforms(getStyle);\r\n var matrix = convertCSStoMatrix(getTransformMatrix(transform));\r\n var offsetParent = void 0;\r\n var isOffsetEnd = false;\r\n var isStatic = false;\r\n var parentClientLeft = 0;\r\n var parentClientTop = 0;\r\n var fixedClientLeft = 0;\r\n var fixedClientTop = 0;\r\n var fixedInfo = {\r\n hasTransform: false,\r\n fixedContainer: null,\r\n };\r\n if (isFixed) {\r\n hasFixed = true;\r\n fixedInfo = getPositionFixedInfo(el);\r\n offsetContainer = fixedInfo.fixedContainer;\r\n }\r\n // convert 3 to 4\r\n var length_1 = matrix.length;\r\n if (!is3d && (length_1 === 16 || individualTransforms.length)) {\r\n is3d = true;\r\n n = 4;\r\n convert3DMatrixes(matrixes);\r\n if (targetMatrix) {\r\n targetMatrix = convertDimension(targetMatrix, 3, 4);\r\n }\r\n }\r\n if (is3d && length_1 === 9) {\r\n matrix = convertDimension(matrix, 3, 4);\r\n }\r\n var _a = getOffsetPosInfo(el, target), tagName = _a.tagName, hasOffset = _a.hasOffset, isSVG = _a.isSVG, origin_1 = _a.origin, targetOrigin = _a.targetOrigin, offsetPos = _a.offset;\r\n var _b = __read(offsetPos, 2), offsetLeft = _b[0], offsetTop = _b[1];\r\n // no target with svg\r\n if (tagName === \"svg\" && !el.ownerSVGElement && targetMatrix) {\r\n // scale matrix for svg's SVGElements.\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getSVGMatrix(el, n),\r\n });\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createIdentityMatrix(n),\r\n });\r\n }\r\n var targetZoom = parseFloat(getStyle(\"zoom\")) || 1;\r\n if (isFixed) {\r\n offsetParent = fixedInfo.fixedContainer;\r\n isOffsetEnd = true;\r\n }\r\n else {\r\n var offsetInfo = getOffsetInfo(el, container, false, true, getStyle);\r\n var offsetZoom = offsetInfo.offsetZoom;\r\n offsetParent = offsetInfo.offsetParent;\r\n isOffsetEnd = offsetInfo.isEnd;\r\n isStatic = offsetInfo.isStatic;\r\n zoom *= offsetZoom;\r\n if ((offsetInfo.isCustomElement || offsetZoom !== 1) && isStatic) {\r\n offsetLeft -= offsetParent.offsetLeft;\r\n offsetTop -= offsetParent.offsetTop;\r\n }\r\n else if (IS_FIREFOX || IS_CHROMIUM109) {\r\n var parentSlotElement = offsetInfo.parentSlotElement;\r\n if (parentSlotElement) {\r\n var customOffsetParent = offsetParent;\r\n var customOffsetLeft = 0;\r\n var customOffsetTop = 0;\r\n while (customOffsetParent) {\r\n if (!getShadowRoot(customOffsetParent)) {\r\n break;\r\n }\r\n customOffsetLeft += customOffsetParent.offsetLeft;\r\n customOffsetTop += customOffsetParent.offsetTop;\r\n customOffsetParent = customOffsetParent.offsetParent;\r\n }\r\n offsetLeft -= customOffsetLeft;\r\n offsetTop -= customOffsetTop;\r\n }\r\n }\r\n }\r\n if (IS_WEBKIT && !IS_SAFARI_ABOVE15\r\n && hasOffset && !isSVG && isStatic\r\n && (position === \"relative\" || position === \"static\")) {\r\n offsetLeft -= offsetParent.offsetLeft;\r\n offsetTop -= offsetParent.offsetTop;\r\n requestEnd = requestEnd || isOffsetEnd;\r\n }\r\n if (isFixed) {\r\n if (hasOffset && fixedInfo.hasTransform) {\r\n // border\r\n fixedClientLeft = offsetParent.clientLeft;\r\n fixedClientTop = offsetParent.clientTop;\r\n }\r\n }\r\n else {\r\n if (hasOffset && offsetContainer !== offsetParent) {\r\n // border\r\n parentClientLeft = offsetParent.clientLeft;\r\n parentClientTop = offsetParent.clientTop;\r\n }\r\n if (hasOffset && offsetParent === documentElement) {\r\n var margin = getBodyOffset(el, false);\r\n offsetLeft += margin[0];\r\n offsetTop += margin[1];\r\n }\r\n }\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(matrix, n, origin_1),\r\n });\r\n if (individualTransforms.length) {\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createIdentityMatrix(n),\r\n });\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(parseMat(individualTransforms), n, origin_1),\r\n });\r\n }\r\n if (hasOffset) {\r\n var isElementTarget = el === target;\r\n var scrollLeft = isElementTarget ? 0 : el.scrollLeft;\r\n var scrollTop = isElementTarget ? 0 : el.scrollTop;\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createOriginMatrix([\r\n offsetLeft - scrollLeft + parentClientLeft - fixedClientLeft,\r\n offsetTop - scrollTop + parentClientTop - fixedClientTop,\r\n ], n),\r\n });\r\n }\r\n else {\r\n // svg\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n origin: origin_1,\r\n });\r\n }\r\n // transform으로 계산되지 않는 zoom을 위한 (0, 0) 을 기준 matrix 추가.\r\n if (targetZoom !== 1) {\r\n matrixes.push({\r\n type: \"zoom\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(createScaleMatrix([targetZoom, targetZoom], n), n, [0, 0]),\r\n });\r\n }\r\n if (!targetMatrix) {\r\n targetMatrix = matrix;\r\n }\r\n if (!transformOrigin) {\r\n transformOrigin = origin_1;\r\n }\r\n if (!targetTransformOrigin) {\r\n targetTransformOrigin = targetOrigin;\r\n }\r\n if (isEnd || isFixed) {\r\n break;\r\n }\r\n else {\r\n el = offsetParent;\r\n requestEnd = isOffsetEnd;\r\n }\r\n if (!checkContainer || el === documentElement) {\r\n isEnd = requestEnd;\r\n }\r\n }\r\n if (!targetMatrix) {\r\n targetMatrix = createIdentityMatrix(n);\r\n }\r\n if (!transformOrigin) {\r\n transformOrigin = [0, 0];\r\n }\r\n if (!targetTransformOrigin) {\r\n targetTransformOrigin = [0, 0];\r\n }\r\n return {\r\n zoom: zoom,\r\n offsetContainer: offsetContainer,\r\n matrixes: matrixes,\r\n targetMatrix: targetMatrix,\r\n transformOrigin: transformOrigin,\r\n targetOrigin: targetTransformOrigin,\r\n is3d: is3d,\r\n hasFixed: hasFixed,\r\n };\r\n}\n\nvar cacheStyleMap = null;\r\nvar clientRectStyleMap = null;\r\nvar matrixContainerInfos = null;\r\nfunction setStoreCache(useCache) {\r\n if (useCache) {\r\n if (window.Map) {\r\n cacheStyleMap = new Map();\r\n clientRectStyleMap = new Map();\r\n }\r\n matrixContainerInfos = [];\r\n }\r\n else {\r\n cacheStyleMap = null;\r\n matrixContainerInfos = null;\r\n clientRectStyleMap = null;\r\n }\r\n}\r\nfunction getCachedClientRect(el) {\r\n var clientRect = clientRectStyleMap === null || clientRectStyleMap === void 0 ? void 0 : clientRectStyleMap.get(el);\r\n if (clientRect) {\r\n return clientRect;\r\n }\r\n var nextClientRect = getClientRect(el, true);\r\n if (clientRectStyleMap) {\r\n clientRectStyleMap.set(el, nextClientRect);\r\n }\r\n return nextClientRect;\r\n}\r\nfunction getCachedMatrixContainerInfo(target, container) {\r\n if (matrixContainerInfos) {\r\n var result_1 = find(matrixContainerInfos, function (info) { return info[0][0] == target && info[0][1] == container; });\r\n if (result_1) {\r\n return result_1[1];\r\n }\r\n }\r\n var result = getMatrixStackInfo(target, container, true);\r\n if (matrixContainerInfos) {\r\n matrixContainerInfos.push([[target, container], result]);\r\n }\r\n return result;\r\n}\r\nfunction getCachedStyle(element) {\r\n var cache = cacheStyleMap === null || cacheStyleMap === void 0 ? void 0 : cacheStyleMap.get(element);\r\n if (!cache) {\r\n var nextStyle_1 = getWindow(element).getComputedStyle(element);\r\n if (!cacheStyleMap) {\r\n return function (property) {\r\n return nextStyle_1[property];\r\n };\r\n }\r\n cache = {\r\n style: nextStyle_1,\r\n cached: {},\r\n };\r\n cacheStyleMap.set(element, cache);\r\n }\r\n var cached = cache.cached;\r\n var style = cache.style;\r\n return function (property) {\r\n if (!(property in cached)) {\r\n cached[property] = style[property];\r\n }\r\n return cached[property];\r\n };\r\n}\n\nfunction fillChildEvents(moveable, name, e) {\r\n var datas = e.originalDatas;\r\n datas.groupable = datas.groupable || {};\r\n var groupableDatas = datas.groupable;\r\n groupableDatas.childDatas = groupableDatas.childDatas || [];\r\n var childDatas = groupableDatas.childDatas;\r\n return moveable.moveables.map(function (_, i) {\r\n childDatas[i] = childDatas[i] || {};\r\n childDatas[i][name] = childDatas[i][name] || {};\r\n return __assign(__assign({}, e), { isRequestChild: true, datas: childDatas[i][name], originalDatas: childDatas[i] });\r\n });\r\n}\r\nfunction triggerChildGesto(moveable, able, type, delta, e, isConvert, ableName) {\r\n var isStart = !!type.match(/Start$/g);\r\n var isEnd = !!type.match(/End$/g);\r\n var isPinch = e.isPinch;\r\n var datas = e.datas;\r\n var events = fillChildEvents(moveable, able.name, e);\r\n var moveables = moveable.moveables;\r\n var childEvents = [];\r\n var eventParams = events.map(function (ev, i) {\r\n var childMoveable = moveables[i];\r\n var state = childMoveable.state;\r\n var gestos = state.gestos;\r\n var childEvent = ev;\r\n if (isStart) {\r\n childEvent = new CustomGesto(ableName).dragStart(delta, ev);\r\n childEvents.push(childEvent);\r\n }\r\n else {\r\n if (!gestos[ableName]) {\r\n gestos[ableName] = datas.childGestos[i];\r\n }\r\n if (!gestos[ableName]) {\r\n return;\r\n }\r\n childEvent = setCustomDrag(ev, state, delta, isPinch, isConvert, ableName);\r\n childEvents.push(childEvent);\r\n }\r\n var result = able[type](childMoveable, __assign(__assign({}, childEvent), { parentFlag: true }));\r\n if (isEnd) {\r\n gestos[ableName] = null;\r\n }\r\n return result;\r\n });\r\n if (isStart) {\r\n datas.childGestos = moveables.map(function (child) { return child.state.gestos[ableName]; });\r\n }\r\n return {\r\n eventParams: eventParams,\r\n childEvents: childEvents,\r\n };\r\n}\r\nfunction triggerChildAbles(moveable, able, type, e, eachEvent, callback) {\r\n if (eachEvent === void 0) { eachEvent = function (_, ev) { return ev; }; }\r\n var isEnd = !!type.match(/End$/g);\r\n var events = fillChildEvents(moveable, able.name, e);\r\n var moveables = moveable.moveables;\r\n var childs = events.map(function (ev, i) {\r\n var childMoveable = moveables[i];\r\n var childEvent = ev;\r\n childEvent = eachEvent(childMoveable, ev);\r\n var result = able[type](childMoveable, __assign(__assign({}, childEvent), { parentFlag: true }));\r\n result && callback && callback(childMoveable, ev, result, i);\r\n if (isEnd) {\r\n childMoveable.state.gestos = {};\r\n }\r\n return result;\r\n });\r\n return childs;\r\n}\r\nfunction startChildDist(moveable, child, parentDatas, childEvent) {\r\n var fixedDirection = parentDatas.fixedDirection;\r\n var fixedPosition = parentDatas.fixedPosition;\r\n var startPositions = childEvent.datas.startPositions || getAbsolutePosesByState(child.state);\r\n var pos = getPosByDirection(startPositions, fixedDirection);\r\n var _a = __read(calculate(createRotateMatrix(-moveable.rotation / 180 * Math.PI, 3), [pos[0] - fixedPosition[0], pos[1] - fixedPosition[1], 1], 3), 2), originalX = _a[0], originalY = _a[1];\r\n childEvent.datas.originalX = originalX;\r\n childEvent.datas.originalY = originalY;\r\n return childEvent;\r\n}\n\nfunction renderDirectionControlsByInfos(moveable, ableName, renderDirections, React) {\r\n var _a = moveable.getState(), renderPoses = _a.renderPoses, rotationRad = _a.rotation, direction = _a.direction;\r\n var zoom = getProps(moveable.props, ableName).zoom;\r\n var degRotation = absDegree(rotationRad / Math.PI * 180);\r\n var directionMap = {};\r\n var renderState = moveable.renderState;\r\n if (!renderState.renderDirectionMap) {\r\n renderState.renderDirectionMap = {};\r\n }\r\n var renderDirectionMap = renderState.renderDirectionMap;\r\n renderDirections.forEach(function (_a) {\r\n var dir = _a.dir;\r\n directionMap[dir] = true;\r\n });\r\n var directionSign = sign(direction);\r\n return renderDirections.map(function (_a) {\r\n var data = _a.data, classNames = _a.classNames, dir = _a.dir;\r\n var indexes = DIRECTION_INDEXES[dir];\r\n if (!indexes || !directionMap[dir]) {\r\n return null;\r\n }\r\n renderDirectionMap[dir] = true;\r\n var directionRotation = (throttle(degRotation, 15) + directionSign * DIRECTION_ROTATIONS[dir] + 720) % 180;\r\n var dataAttrs = {};\r\n getKeys(data).forEach(function (name) {\r\n dataAttrs[\"data-\".concat(name)] = data[name];\r\n });\r\n return (React.createElement(\"div\", __assign({ className: prefix.apply(void 0, __spreadArray([\"control\", \"direction\", dir, ableName], __read(classNames), false)), \"data-rotation\": directionRotation, \"data-direction\": dir }, dataAttrs, { key: \"direction-\".concat(dir), style: getControlTransform.apply(void 0, __spreadArray([rotationRad, zoom], __read(indexes.map(function (index) { return renderPoses[index]; })), false)) })));\r\n });\r\n}\r\nfunction renderDirectionControls(moveable, defaultDirections, ableName, React) {\r\n var _a = getProps(moveable.props, ableName), _b = _a.renderDirections, directions = _b === void 0 ? defaultDirections : _b, displayAroundControls = _a.displayAroundControls;\r\n if (!directions) {\r\n return [];\r\n }\r\n var renderDirections = directions === true ? DIRECTIONS : directions;\r\n return __spreadArray(__spreadArray([], __read((displayAroundControls ? renderAroundControls(moveable, React, ableName, renderDirections) : [])), false), __read(renderDirectionControlsByInfos(moveable, ableName, renderDirections.map(function (dir) {\r\n return {\r\n data: {},\r\n classNames: [],\r\n dir: dir,\r\n };\r\n }), React)), false);\r\n}\r\nfunction renderLine(React, direction, pos1, pos2, zoom, key) {\r\n var classNames = [];\r\n for (var _i = 6; _i < arguments.length; _i++) {\r\n classNames[_i - 6] = arguments[_i];\r\n }\r\n var rad = getRad(pos1, pos2);\r\n var rotation = direction ? (throttle(rad / Math.PI * 180, 15)) % 180 : -1;\r\n return React.createElement(\"div\", { key: \"line-\".concat(key), className: prefix.apply(void 0, __spreadArray([\"line\", \"direction\", direction ? \"edge\" : \"\", direction], __read(classNames), false)), \"data-rotation\": rotation, \"data-line-key\": key, \"data-direction\": direction, style: getLineStyle(pos1, pos2, zoom, rad) });\r\n}\r\nfunction renderEdgeLines(React, ableName, edge, poses, zoom) {\r\n var directions = edge === true ? DIRECTIONS4 : edge;\r\n return directions.map(function (direction, i) {\r\n var _a = __read(DIRECTION_INDEXES[direction], 2), index1 = _a[0], index2 = _a[1];\r\n if (index2 == null) {\r\n return;\r\n }\r\n return renderLine(React, direction, poses[index1], poses[index2], zoom, \"\".concat(ableName, \"Edge\").concat(i), ableName);\r\n }).filter(Boolean);\r\n}\r\nfunction getRenderDirections(ableName) {\r\n return function (moveable, React) {\r\n var edge = getProps(moveable.props, ableName).edge;\r\n if (edge && (edge === true || edge.length)) {\r\n return __spreadArray(__spreadArray([], __read(renderEdgeLines(React, ableName, edge, moveable.getState().renderPoses, moveable.props.zoom)), false), __read(renderDiagonalDirections(moveable, ableName, React)), false);\r\n }\r\n return renderAllDirections(moveable, ableName, React);\r\n };\r\n}\r\nfunction renderAllDirections(moveable, ableName, React) {\r\n return renderDirectionControls(moveable, DIRECTIONS, ableName, React);\r\n}\r\nfunction renderDiagonalDirections(moveable, ableName, React) {\r\n return renderDirectionControls(moveable, [\"nw\", \"ne\", \"sw\", \"se\"], ableName, React);\r\n}\r\nfunction renderAroundControls(moveable, React, ableName, renderDirections) {\r\n var renderState = moveable.renderState;\r\n if (!renderState.renderDirectionMap) {\r\n renderState.renderDirectionMap = {};\r\n }\r\n var _a = moveable.getState(), renderPoses = _a.renderPoses, rotationRad = _a.rotation, direction = _a.direction;\r\n var renderDirectionMap = renderState.renderDirectionMap;\r\n var zoom = moveable.props.zoom;\r\n var directionSign = sign(direction);\r\n var degRotation = rotationRad / Math.PI * 180;\r\n return (renderDirections || getKeys(renderDirectionMap)).map(function (dir) {\r\n var indexes = DIRECTION_INDEXES[dir];\r\n if (!indexes) {\r\n return null;\r\n }\r\n var directionRotation = (throttle(degRotation, 15) + directionSign * DIRECTION_ROTATIONS[dir] + 720) % 180;\r\n var classNames = [\"around-control\"];\r\n if (ableName) {\r\n classNames.push(\"direction\", ableName);\r\n }\r\n return (React.createElement(\"div\", { className: prefix.apply(void 0, __spreadArray([], __read(classNames), false)), \"data-rotation\": directionRotation, \"data-direction\": dir, key: \"direction-around-\".concat(dir), style: getControlTransform.apply(void 0, __spreadArray([rotationRad, zoom], __read(indexes.map(function (index) { return renderPoses[index]; })), false)) }));\r\n });\r\n}\n\nfunction checkBoundPoses(bounds, verticalPoses, horizontalPoses) {\r\n var _a = bounds || {}, _b = _a.position, position = _b === void 0 ? \"client\" : _b, _c = _a.left, left = _c === void 0 ? -Infinity : _c, _d = _a.top, top = _d === void 0 ? -Infinity : _d, _e = _a.right, right = _e === void 0 ? Infinity : _e, _f = _a.bottom, bottom = _f === void 0 ? Infinity : _f;\r\n var nextBounds = {\r\n position: position,\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n };\r\n return {\r\n vertical: checkBounds(nextBounds, verticalPoses, true),\r\n horizontal: checkBounds(nextBounds, horizontalPoses, false),\r\n };\r\n}\r\nfunction getBounds(moveable, externalBounds) {\r\n var _a = moveable.state, _b = _a.containerClientRect, containerHeight = _b.clientHeight, containerWidth = _b.clientWidth, clientLeft = _b.clientLeft, clientTop = _b.clientTop, _c = _a.snapOffset, snapOffsetLeft = _c.left, snapOffsetTop = _c.top, snapOffsetRight = _c.right, snapOffsetBottom = _c.bottom;\r\n var bounds = externalBounds || moveable.props.bounds || {};\r\n var position = bounds.position || \"client\";\r\n var isCSS = position === \"css\";\r\n var _d = bounds.left, left = _d === void 0 ? -Infinity : _d, _e = bounds.top, top = _e === void 0 ? -Infinity : _e;\r\n var _f = bounds.right, right = _f === void 0 ? isCSS ? -Infinity : Infinity : _f, _g = bounds.bottom, bottom = _g === void 0 ? isCSS ? -Infinity : Infinity : _g;\r\n if (isCSS) {\r\n right = containerWidth + snapOffsetRight - snapOffsetLeft - right;\r\n bottom = containerHeight + snapOffsetBottom - snapOffsetTop - bottom;\r\n }\r\n return {\r\n left: left + snapOffsetLeft - clientLeft,\r\n right: right + snapOffsetLeft - clientLeft,\r\n top: top + snapOffsetTop - clientTop,\r\n bottom: bottom + snapOffsetTop - clientTop,\r\n };\r\n}\r\nfunction checkBoundKeepRatio(moveable, startPos, endPos) {\r\n var _a = getBounds(moveable), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var _b = __read(endPos, 2), endX = _b[0], endY = _b[1];\r\n var _c = __read(minus(endPos, startPos), 2), dx = _c[0], dy = _c[1];\r\n if (abs(dx) < TINY_NUM) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM) {\r\n dy = 0;\r\n }\r\n var isBottom = dy > 0;\r\n var isRight = dx > 0;\r\n var verticalInfo = {\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n var horizontalInfo = {\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n if (dx === 0 && dy === 0) {\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n }\r\n else if (dx === 0) {\r\n if (isBottom) {\r\n if (bottom < endY) {\r\n horizontalInfo.pos = bottom;\r\n horizontalInfo.offset = endY - bottom;\r\n }\r\n }\r\n else {\r\n if (top > endY) {\r\n horizontalInfo.pos = top;\r\n horizontalInfo.offset = endY - top;\r\n }\r\n }\r\n }\r\n else if (dy === 0) {\r\n if (isRight) {\r\n if (right < endX) {\r\n verticalInfo.pos = right;\r\n verticalInfo.offset = endX - right;\r\n }\r\n }\r\n else {\r\n if (left > endX) {\r\n verticalInfo.pos = left;\r\n verticalInfo.offset = endX - left;\r\n }\r\n }\r\n }\r\n else {\r\n // y - y1 = a * (x - x1)\r\n var a = dy / dx;\r\n var b = endPos[1] - a * endX;\r\n var y = 0;\r\n var x = 0;\r\n var isBound = false;\r\n if (isRight && right <= endX) {\r\n y = a * right + b;\r\n x = right;\r\n isBound = true;\r\n }\r\n else if (!isRight && endX <= left) {\r\n y = a * left + b;\r\n x = left;\r\n isBound = true;\r\n }\r\n if (isBound) {\r\n if (y < top || y > bottom) {\r\n isBound = false;\r\n }\r\n }\r\n if (!isBound) {\r\n if (isBottom && bottom <= endY) {\r\n y = bottom;\r\n x = (y - b) / a;\r\n isBound = true;\r\n }\r\n else if (!isBottom && endY <= top) {\r\n y = top;\r\n x = (y - b) / a;\r\n isBound = true;\r\n }\r\n }\r\n if (isBound) {\r\n verticalInfo.isBound = true;\r\n verticalInfo.pos = x;\r\n verticalInfo.offset = endX - x;\r\n horizontalInfo.isBound = true;\r\n horizontalInfo.pos = y;\r\n horizontalInfo.offset = endY - y;\r\n }\r\n }\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n}\r\nfunction checkBounds(bounds, poses, isVertical) {\r\n // 0 [100 - 200] 300\r\n var startBoundPos = bounds[isVertical ? \"left\" : \"top\"];\r\n var endBoundPos = bounds[isVertical ? \"right\" : \"bottom\"];\r\n // 450\r\n var minPos = Math.min.apply(Math, __spreadArray([], __read(poses), false));\r\n var maxPos = Math.max.apply(Math, __spreadArray([], __read(poses), false));\r\n var boundInfos = [];\r\n if (startBoundPos + 1 > minPos) {\r\n boundInfos.push({\r\n direction: \"start\",\r\n isBound: true,\r\n offset: minPos - startBoundPos,\r\n pos: startBoundPos,\r\n });\r\n }\r\n if (endBoundPos - 1 < maxPos) {\r\n boundInfos.push({\r\n direction: \"end\",\r\n isBound: true,\r\n offset: maxPos - endBoundPos,\r\n pos: endBoundPos,\r\n });\r\n }\r\n if (!boundInfos.length) {\r\n boundInfos.push({\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n });\r\n }\r\n return boundInfos.sort(function (a, b) { return abs(b.offset) - abs(a.offset); });\r\n}\r\nfunction isBoundRotate$1(relativePoses, boundRect, rad) {\r\n var nextPoses = rad ? relativePoses.map(function (pos) { return rotate(pos, rad); }) : relativePoses;\r\n return nextPoses.some(function (pos) {\r\n return (pos[0] < boundRect.left && abs(pos[0] - boundRect.left) > 0.1)\r\n || (pos[0] > boundRect.right && abs(pos[0] - boundRect.right) > 0.1)\r\n || (pos[1] < boundRect.top && abs(pos[1] - boundRect.top) > 0.1)\r\n || (pos[1] > boundRect.bottom && abs(pos[1] - boundRect.bottom) > 0.1);\r\n });\r\n}\r\nfunction boundRotate(vec, boundPos, index) {\r\n var r = getDistSize(vec);\r\n var nextPos = Math.sqrt(r * r - boundPos * boundPos) || 0;\r\n return [nextPos, -nextPos].sort(function (a, b) {\r\n return abs(a - vec[index ? 0 : 1]) - abs(b - vec[index ? 0 : 1]);\r\n }).map(function (pos) {\r\n return getRad([0, 0], index ? [pos, boundPos] : [boundPos, pos]);\r\n });\r\n}\r\nfunction checkRotateBounds(moveable, prevPoses, nextPoses, origin, rotation) {\r\n if (!moveable.props.bounds) {\r\n return [];\r\n }\r\n var rad = rotation * Math.PI / 180;\r\n var _a = getBounds(moveable), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var relativeLeft = left - origin[0];\r\n var relativeRight = right - origin[0];\r\n var relativeTop = top - origin[1];\r\n var relativeBottom = bottom - origin[1];\r\n var boundRect = {\r\n left: relativeLeft,\r\n top: relativeTop,\r\n right: relativeRight,\r\n bottom: relativeBottom,\r\n };\r\n if (!isBoundRotate$1(nextPoses, boundRect, 0)) {\r\n return [];\r\n }\r\n var result = [];\r\n [\r\n [relativeLeft, 0],\r\n [relativeRight, 0],\r\n [relativeTop, 1],\r\n [relativeBottom, 1],\r\n ].forEach(function (_a) {\r\n var _b = __read(_a, 2), boundPos = _b[0], index = _b[1];\r\n nextPoses.forEach(function (nextPos) {\r\n var relativeRad1 = getRad([0, 0], nextPos);\r\n result.push.apply(result, __spreadArray([], __read(boundRotate(nextPos, boundPos, index)\r\n .map(function (relativeRad2) { return rad + relativeRad2 - relativeRad1; })\r\n .filter(function (nextRad) { return !isBoundRotate$1(prevPoses, boundRect, nextRad); })\r\n .map(function (nextRad) { return throttle(nextRad * 180 / Math.PI, TINY_NUM); })), false));\r\n });\r\n });\r\n return result;\r\n}\n\nvar VERTICAL_NAMES = [\"left\", \"right\", \"center\"];\r\nvar HORIZONTAL_NAMES = [\"top\", \"bottom\", \"middle\"];\r\nvar SNAP_SKIP_NAMES_MAP = {\r\n \"left\": \"start\",\r\n \"right\": \"end\",\r\n \"center\": \"center\",\r\n \"top\": \"start\",\r\n \"bottom\": \"end\",\r\n \"middle\": \"center\",\r\n};\r\nvar VERTICAL_NAMES_MAP = {\r\n start: \"left\",\r\n end: \"right\",\r\n center: \"center\",\r\n};\r\nvar HORIZONTAL_NAMES_MAP = {\r\n start: \"top\",\r\n end: \"bottom\",\r\n center: \"middle\",\r\n};\r\nfunction getInitialBounds() {\r\n return {\r\n left: false,\r\n top: false,\r\n right: false,\r\n bottom: false,\r\n };\r\n}\r\nfunction hasGuidelines(moveable, ableName) {\r\n var _a = moveable.props, snappable = _a.snappable, bounds = _a.bounds, innerBounds = _a.innerBounds, verticalGuidelines = _a.verticalGuidelines, horizontalGuidelines = _a.horizontalGuidelines, snapGridWidth = _a.snapGridWidth, snapGridHeight = _a.snapGridHeight, _b = moveable.state, guidelines = _b.guidelines, enableSnap = _b.enableSnap;\r\n if (!snappable ||\r\n !enableSnap ||\r\n (ableName && snappable !== true && snappable.indexOf(ableName) < 0)) {\r\n return false;\r\n }\r\n if (snapGridWidth ||\r\n snapGridHeight ||\r\n bounds ||\r\n innerBounds ||\r\n (guidelines && guidelines.length) ||\r\n (verticalGuidelines && verticalGuidelines.length) ||\r\n (horizontalGuidelines && horizontalGuidelines.length)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getSnapDirections(snapDirections) {\r\n if (snapDirections === false) {\r\n return {};\r\n }\r\n else if (snapDirections === true || !snapDirections) {\r\n return { left: true, right: true, top: true, bottom: true };\r\n }\r\n return snapDirections;\r\n}\r\nfunction mapSnapDirectionPoses(snapDirections, snapPoses) {\r\n var nextSnapDirections = getSnapDirections(snapDirections);\r\n var nextSnapPoses = {};\r\n for (var name_1 in nextSnapDirections) {\r\n if (name_1 in snapPoses && nextSnapDirections[name_1]) {\r\n nextSnapPoses[name_1] = snapPoses[name_1];\r\n }\r\n }\r\n return nextSnapPoses;\r\n}\r\nfunction splitSnapDirectionPoses(snapDirections, snapPoses) {\r\n var nextSnapPoses = mapSnapDirectionPoses(snapDirections, snapPoses);\r\n var horizontalNames = HORIZONTAL_NAMES.filter(function (name) { return name in nextSnapPoses; });\r\n var verticalNames = VERTICAL_NAMES.filter(function (name) { return name in nextSnapPoses; });\r\n return {\r\n horizontalNames: horizontalNames,\r\n verticalNames: verticalNames,\r\n horizontal: horizontalNames.map(function (name) { return nextSnapPoses[name]; }),\r\n vertical: verticalNames.map(function (name) { return nextSnapPoses[name]; }),\r\n };\r\n}\r\nfunction calculateContainerPos(rootMatrix, containerRect, n) {\r\n var clientPos = calculatePosition(rootMatrix, [containerRect.clientLeft, containerRect.clientTop], n);\r\n return [\r\n containerRect.left + clientPos[0],\r\n containerRect.top + clientPos[1],\r\n ];\r\n}\r\nfunction solveLineConstants(_a) {\r\n var _b = __read(_a, 2), point1 = _b[0], point2 = _b[1];\r\n var dx = point2[0] - point1[0];\r\n var dy = point2[1] - point1[1];\r\n if (Math.abs(dx) < TINY_NUM$1) {\r\n dx = 0;\r\n }\r\n if (Math.abs(dy) < TINY_NUM$1) {\r\n dy = 0;\r\n }\r\n // b > 0\r\n // ax + by + c = 0\r\n var a = 0;\r\n var b = 0;\r\n var c = 0;\r\n if (!dx) {\r\n // -x + 1 = 0\r\n a = -1;\r\n c = point1[0];\r\n }\r\n else if (!dy) {\r\n // y - 1 = 0\r\n b = 1;\r\n c = -point1[1];\r\n }\r\n else {\r\n // y = -a(x - x1) + y1\r\n // ax + y + a * x1 - y1 = 0\r\n a = -dy / dx;\r\n b = 1;\r\n c = a * point1[0] - point1[1];\r\n }\r\n return [a, b, c].map(function (v) { return throttle(v, TINY_NUM$1); });\r\n}\n\nvar NAME_snapRotationThreshold = \"snapRotationThreshold\";\r\nvar NAME_snapRotationDegrees = \"snapRotationDegrees\";\r\nvar NAME_snapHorizontalThreshold = \"snapHorizontalThreshold\";\r\nvar NAME_snapVerticalThreshold = \"snapVerticalThreshold\";\n\nfunction checkMoveableSnapPoses(moveable, posesX, posesY, dirXs, dirYs, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var _a;\r\n if (dirXs === void 0) { dirXs = []; }\r\n if (dirYs === void 0) { dirYs = []; }\r\n var props = moveable.props;\r\n var snapThresholdMultiples = ((_a = moveable.state.snapThresholdInfo) === null || _a === void 0 ? void 0 : _a.multiples) || [1, 1];\r\n var snapHorizontalThreshold = selectValue(customSnapHorizontalThreshold, props[NAME_snapHorizontalThreshold], 5);\r\n var snapVerticalThreshold = selectValue(customSnapVerticalThreshold, props[NAME_snapVerticalThreshold], 5);\r\n return checkSnapPoses(moveable.state.guidelines, posesX, posesY, dirXs, dirYs, snapHorizontalThreshold, snapVerticalThreshold, snapThresholdMultiples);\r\n}\r\nfunction checkSnapPoses(guidelines, posesX, posesY, dirXs, dirYs, snapHorizontalThreshold, snapVerticalThreshold, multiples) {\r\n return {\r\n vertical: checkSnap(guidelines, \"vertical\", posesX, snapVerticalThreshold * multiples[0], dirXs),\r\n horizontal: checkSnap(guidelines, \"horizontal\", posesY, snapHorizontalThreshold * multiples[1], dirYs),\r\n };\r\n}\r\nfunction checkSnapKeepRatio(moveable, startPos, endPos) {\r\n var _a = __read(endPos, 2), endX = _a[0], endY = _a[1];\r\n var _b = __read(startPos, 2), startX = _b[0], startY = _b[1];\r\n var _c = __read(minus(endPos, startPos), 2), dx = _c[0], dy = _c[1];\r\n var isBottom = dy > 0;\r\n var isRight = dx > 0;\r\n dx = getTinyDist(dx);\r\n dy = getTinyDist(dy);\r\n var verticalInfo = {\r\n isSnap: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n var horizontalInfo = {\r\n isSnap: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n if (dx === 0 && dy === 0) {\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n }\r\n var _d = checkMoveableSnapPoses(moveable, dx ? [endX] : [], dy ? [endY] : [], [], [], undefined, undefined), verticalSnapInfo = _d.vertical, horizontalSnapInfo = _d.horizontal;\r\n verticalSnapInfo.posInfos.filter(function (_a) {\r\n var pos = _a.pos;\r\n return isRight ? pos >= startX : pos <= startX;\r\n });\r\n horizontalSnapInfo.posInfos.filter(function (_a) {\r\n var pos = _a.pos;\r\n return isBottom ? pos >= startY : pos <= startY;\r\n });\r\n verticalSnapInfo.isSnap = verticalSnapInfo.posInfos.length > 0;\r\n horizontalSnapInfo.isSnap = horizontalSnapInfo.posInfos.length > 0;\r\n var _e = getNearestSnapGuidelineInfo(verticalSnapInfo), isVerticalSnap = _e.isSnap, verticalGuideline = _e.guideline;\r\n var _f = getNearestSnapGuidelineInfo(horizontalSnapInfo), isHorizontalSnap = _f.isSnap, horizontalGuideline = _f.guideline;\r\n var horizontalPos = isHorizontalSnap ? horizontalGuideline.pos[1] : 0;\r\n var verticalPos = isVerticalSnap ? verticalGuideline.pos[0] : 0;\r\n if (dx === 0) {\r\n if (isHorizontalSnap) {\r\n horizontalInfo.isSnap = true;\r\n horizontalInfo.pos = horizontalGuideline.pos[1];\r\n horizontalInfo.offset = endY - horizontalInfo.pos;\r\n }\r\n }\r\n else if (dy === 0) {\r\n if (isVerticalSnap) {\r\n verticalInfo.isSnap = true;\r\n verticalInfo.pos = verticalPos;\r\n verticalInfo.offset = endX - verticalPos;\r\n }\r\n }\r\n else {\r\n // y - y1 = a * (x - x1)\r\n var a = dy / dx;\r\n var b = endPos[1] - a * endX;\r\n var y = 0;\r\n var x = 0;\r\n var isSnap = false;\r\n if (isVerticalSnap) {\r\n x = verticalPos;\r\n y = a * x + b;\r\n isSnap = true;\r\n }\r\n else if (isHorizontalSnap) {\r\n y = horizontalPos;\r\n x = (y - b) / a;\r\n isSnap = true;\r\n }\r\n if (isSnap) {\r\n verticalInfo.isSnap = true;\r\n verticalInfo.pos = x;\r\n verticalInfo.offset = endX - x;\r\n horizontalInfo.isSnap = true;\r\n horizontalInfo.pos = y;\r\n horizontalInfo.offset = endY - y;\r\n }\r\n }\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n}\r\nfunction getStringDirection(dir) {\r\n var stringDirection = \"\";\r\n if (dir === -1 || dir === \"top\" || dir === \"left\") {\r\n stringDirection = \"start\";\r\n }\r\n else if (dir === 0 || dir === \"center\" || dir === \"middle\") {\r\n stringDirection = \"center\";\r\n }\r\n else if (dir === 1 || dir === \"right\" || dir === \"bottom\") {\r\n stringDirection = \"end\";\r\n }\r\n return stringDirection;\r\n}\r\nfunction checkSnaps(moveable, rect, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var poses = splitSnapDirectionPoses(moveable.props.snapDirections, rect);\r\n var result = checkMoveableSnapPoses(moveable, poses.vertical, poses.horizontal, poses.verticalNames.map(function (name) { return getStringDirection(name); }), poses.horizontalNames.map(function (name) { return getStringDirection(name); }), customSnapVerticalThreshold, customSnapHorizontalThreshold);\r\n var horizontalDirection = getStringDirection(poses.horizontalNames[result.horizontal.index]);\r\n var verticalDirection = getStringDirection(poses.verticalNames[result.vertical.index]);\r\n return {\r\n vertical: __assign(__assign({}, result.vertical), { direction: verticalDirection }),\r\n horizontal: __assign(__assign({}, result.horizontal), { direction: horizontalDirection }),\r\n };\r\n}\r\nfunction getNearestSnapGuidelineInfo(snapInfo) {\r\n var isSnap = snapInfo.isSnap;\r\n if (!isSnap) {\r\n return {\r\n isSnap: false,\r\n offset: 0,\r\n dist: -1,\r\n pos: 0,\r\n guideline: null,\r\n };\r\n }\r\n var posInfo = snapInfo.posInfos[0];\r\n var guidelineInfo = posInfo.guidelineInfos[0];\r\n var offset = guidelineInfo.offset;\r\n var dist = guidelineInfo.dist;\r\n var guideline = guidelineInfo.guideline;\r\n return {\r\n isSnap: isSnap,\r\n offset: offset,\r\n dist: dist,\r\n pos: posInfo.pos,\r\n guideline: guideline,\r\n };\r\n}\r\nfunction checkSnap(guidelines, targetType, targetPoses, snapThreshold, dirs) {\r\n var _a, _b;\r\n if (dirs === void 0) { dirs = []; }\r\n if (!guidelines || !guidelines.length) {\r\n return {\r\n isSnap: false,\r\n index: -1,\r\n direction: \"\",\r\n posInfos: [],\r\n };\r\n }\r\n var isVertical = targetType === \"vertical\";\r\n var posType = isVertical ? 0 : 1;\r\n var snapPosInfos = targetPoses.map(function (targetPos, index) {\r\n var direction = dirs[index] || \"\";\r\n var guidelineInfos = guidelines.map(function (guideline) {\r\n var pos = guideline.pos;\r\n var offset = targetPos - pos[posType];\r\n return {\r\n offset: offset,\r\n dist: abs(offset),\r\n guideline: guideline,\r\n direction: direction,\r\n };\r\n }).filter(function (_a) {\r\n var guideline = _a.guideline, dist = _a.dist;\r\n var type = guideline.type;\r\n if (type !== targetType\r\n || dist > snapThreshold) {\r\n return false;\r\n }\r\n return true;\r\n }).sort(function (a, b) { return a.dist - b.dist; });\r\n return {\r\n pos: targetPos,\r\n index: index,\r\n guidelineInfos: guidelineInfos,\r\n direction: direction,\r\n };\r\n }).filter(function (snapPosInfo) {\r\n return snapPosInfo.guidelineInfos.length > 0;\r\n }).sort(function (a, b) {\r\n return a.guidelineInfos[0].dist - b.guidelineInfos[0].dist;\r\n });\r\n var isSnap = snapPosInfos.length > 0;\r\n return {\r\n isSnap: isSnap,\r\n index: isSnap ? snapPosInfos[0].index : -1,\r\n direction: (_b = (_a = snapPosInfos[0]) === null || _a === void 0 ? void 0 : _a.direction) !== null && _b !== void 0 ? _b : \"\",\r\n posInfos: snapPosInfos,\r\n };\r\n}\r\nfunction getSnapInfosByDirection(moveable, \r\n// pos1 pos2 pos3 pos4\r\nposes, snapDirection, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var dirs = [];\r\n if (snapDirection[0] && snapDirection[1]) {\r\n dirs = [\r\n snapDirection,\r\n [-snapDirection[0], snapDirection[1]],\r\n [snapDirection[0], -snapDirection[1]],\r\n ];\r\n }\r\n else if (!snapDirection[0] && !snapDirection[1]) {\r\n [\r\n [-1, -1],\r\n [1, -1],\r\n [1, 1],\r\n [-1, 1],\r\n ].forEach(function (dir, i, arr) {\r\n var nextDir = (arr[i + 1] || arr[0]);\r\n dirs.push(dir);\r\n dirs.push([\r\n (dir[0] + nextDir[0]) / 2,\r\n (dir[1] + nextDir[1]) / 2,\r\n ]);\r\n });\r\n }\r\n else {\r\n if (moveable.props.keepRatio) {\r\n dirs.push([-1, -1], [-1, 1], [1, -1], [1, 1], snapDirection);\r\n }\r\n else {\r\n dirs.push.apply(dirs, __spreadArray([], __read(getPosesByDirection([\r\n [-1, -1],\r\n [1, -1],\r\n [-1, -1],\r\n [1, 1],\r\n ], snapDirection)), false));\r\n if (dirs.length > 1) {\r\n dirs.push([\r\n (dirs[0][0] + dirs[1][0]) / 2,\r\n (dirs[0][1] + dirs[1][1]) / 2,\r\n ]);\r\n }\r\n }\r\n }\r\n var nextPoses = dirs.map(function (dir) { return getPosByDirection(poses, dir); });\r\n var xs = nextPoses.map(function (pos) { return pos[0]; });\r\n var ys = nextPoses.map(function (pos) { return pos[1]; });\r\n var result = checkMoveableSnapPoses(moveable, xs, ys, dirs.map(function (dir) { return getStringDirection(dir[0]); }), dirs.map(function (dir) { return getStringDirection(dir[1]); }), customSnapVerticalThreshold, customSnapHorizontalThreshold);\r\n var verticalDirection = getStringDirection(dirs.map(function (dir) { return dir[0]; })[result.vertical.index]);\r\n var horizontalDirection = getStringDirection(dirs.map(function (dir) { return dir[1]; })[result.horizontal.index]);\r\n return {\r\n vertical: __assign(__assign({}, result.vertical), { direction: verticalDirection }),\r\n horizontal: __assign(__assign({}, result.horizontal), { direction: horizontalDirection }),\r\n };\r\n}\r\nfunction checkSnapBoundPriority(a, b) {\r\n var aDist = abs(a.offset);\r\n var bDist = abs(b.offset);\r\n if (a.isBound && b.isBound) {\r\n return bDist - aDist;\r\n }\r\n else if (a.isBound) {\r\n return -1;\r\n }\r\n else if (b.isBound) {\r\n return 1;\r\n }\r\n else if (a.isSnap && b.isSnap) {\r\n return bDist - aDist;\r\n }\r\n else if (a.isSnap) {\r\n return -1;\r\n }\r\n else if (b.isSnap) {\r\n return 1;\r\n }\r\n else if (aDist < TINY_NUM) {\r\n return 1;\r\n }\r\n else if (bDist < TINY_NUM) {\r\n return -1;\r\n }\r\n return aDist - bDist;\r\n}\r\nfunction getNearOffsetInfo(offsets, index) {\r\n return offsets.slice().sort(function (a, b) {\r\n var aSign = a.sign[index];\r\n var bSign = b.sign[index];\r\n var aOffset = a.offset[index];\r\n var bOffset = b.offset[index];\r\n // -1 The positions of a and b do not change.\r\n // 1 The positions of a and b are reversed.\r\n if (!aSign) {\r\n return 1;\r\n }\r\n else if (!bSign) {\r\n return -1;\r\n }\r\n return checkSnapBoundPriority({ isBound: a.isBound, isSnap: a.isSnap, offset: aOffset }, { isBound: b.isBound, isSnap: b.isSnap, offset: bOffset });\r\n })[0];\r\n}\r\nfunction getCheckSnapDirections(direction, fixedDirection, keepRatio) {\r\n var directions = [];\r\n // const fixedDirection = [-direction[0], -direction[1]];\r\n if (keepRatio) {\r\n if (abs(fixedDirection[0]) !== 1 || abs(fixedDirection[1]) !== 1) {\r\n directions.push([fixedDirection, [-1, -1]], [fixedDirection, [-1, 1]], [fixedDirection, [1, -1]], [fixedDirection, [1, 1]]);\r\n }\r\n else {\r\n directions.push([fixedDirection, [direction[0], -direction[1]]], [fixedDirection, [-direction[0], direction[1]]]);\r\n }\r\n directions.push([fixedDirection, direction]);\r\n }\r\n else {\r\n if ((direction[0] && direction[1]) || (!direction[0] && !direction[1])) {\r\n var endDirection_1 = direction[0] ? direction : [1, 1];\r\n [1, -1].forEach(function (signX) {\r\n [1, -1].forEach(function (signY) {\r\n var nextDirection = [signX * endDirection_1[0], signY * endDirection_1[1]];\r\n if (fixedDirection[0] === nextDirection[0]\r\n && fixedDirection[1] === nextDirection[1]) {\r\n return;\r\n }\r\n directions.push([fixedDirection, nextDirection]);\r\n });\r\n });\r\n }\r\n else if (direction[0]) {\r\n var signs = abs(fixedDirection[0]) === 1 ? [1] : [1, -1];\r\n signs.forEach(function (sign) {\r\n directions.push([\r\n [fixedDirection[0], -1],\r\n [sign * direction[0], -1],\r\n ], [\r\n [fixedDirection[0], 0],\r\n [sign * direction[0], 0],\r\n ], [\r\n [fixedDirection[0], 1],\r\n [sign * direction[0], 1],\r\n ]);\r\n });\r\n }\r\n else if (direction[1]) {\r\n var signs = abs(fixedDirection[1]) === 1 ? [1] : [1, -1];\r\n signs.forEach(function (sign) {\r\n directions.push([\r\n [-1, fixedDirection[1]],\r\n [-1, sign * direction[1]],\r\n ], [\r\n [0, fixedDirection[1]],\r\n [0, sign * direction[1]],\r\n ], [\r\n [1, fixedDirection[1]],\r\n [1, sign * direction[1]],\r\n ]);\r\n });\r\n }\r\n }\r\n return directions;\r\n}\n\nfunction isStartLine(dot, line) {\r\n // l o => true\r\n // o l => false\r\n var cx = average([line[0][0], line[1][0]]);\r\n var cy = average([line[0][1], line[1][1]]);\r\n return {\r\n vertical: cx <= dot[0],\r\n horizontal: cy <= dot[1],\r\n };\r\n}\r\nfunction hitTestLine(dot, _a) {\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (abs(dx) < TINY_NUM) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM) {\r\n dy = 0;\r\n }\r\n var test1;\r\n var test2;\r\n if (!dx) {\r\n test1 = pos1[0];\r\n test2 = dot[0];\r\n }\r\n else if (!dy) {\r\n test1 = pos1[1];\r\n test2 = dot[1];\r\n }\r\n else {\r\n var a = dy / dx;\r\n // y = a * (x - pos1) + pos1\r\n test1 = a * (dot[0] - pos1[0]) + pos1[1];\r\n test2 = dot[1];\r\n }\r\n return test1 - test2;\r\n}\r\nfunction isSameStartLine(dots, line, centerSign, error) {\r\n if (error === void 0) { error = TINY_NUM; }\r\n return dots.every(function (dot) {\r\n var value = hitTestLine(dot, line);\r\n var sign = value <= 0;\r\n return sign === centerSign || abs(value) <= error;\r\n });\r\n}\r\nfunction checkInnerBoundDot(pos, start, end, isStart, threshold) {\r\n if (threshold === void 0) { threshold = 0; }\r\n if ((isStart && start - threshold <= pos)\r\n || (!isStart && pos <= end + threshold)) {\r\n // false 402 565 602 => 37 ([0, 37])\r\n // true 400 524.9712603540036 600 => 124 ([124, 0])\r\n // true 400 410 600 => 10 ([10, 0])\r\n return {\r\n isBound: true,\r\n offset: isStart ? start - pos : end - pos,\r\n };\r\n }\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n}\r\nfunction checkInnerBound(moveable, _a) {\r\n var line = _a.line, centerSign = _a.centerSign, verticalSign = _a.verticalSign, horizontalSign = _a.horizontalSign, lineConstants = _a.lineConstants;\r\n var bounds = moveable.props.innerBounds;\r\n if (!bounds) {\r\n return {\r\n isAllBound: false,\r\n isBound: false,\r\n isVerticalBound: false,\r\n isHorizontalBound: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var left = bounds.left, top = bounds.top, width = bounds.width, height = bounds.height;\r\n var leftLine = [[left, top], [left, top + height]];\r\n var topLine = [[left, top], [left + width, top]];\r\n var rightLine = [[left + width, top], [left + width, top + height]];\r\n var bottomLine = [[left, top + height], [left + width, top + height]];\r\n if (isSameStartLine([\r\n [left, top],\r\n [left + width, top],\r\n [left, top + height],\r\n [left + width, top + height],\r\n ], line, centerSign)) {\r\n return {\r\n isAllBound: false,\r\n isBound: false,\r\n isVerticalBound: false,\r\n isHorizontalBound: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n // test vertical\r\n var topBoundInfo = checkLineBoundCollision(line, lineConstants, topLine, verticalSign);\r\n var bottomBoundInfo = checkLineBoundCollision(line, lineConstants, bottomLine, verticalSign);\r\n // test horizontal\r\n var leftBoundInfo = checkLineBoundCollision(line, lineConstants, leftLine, horizontalSign);\r\n var rightBoundInfo = checkLineBoundCollision(line, lineConstants, rightLine, horizontalSign);\r\n var isAllVerticalBound = topBoundInfo.isBound && bottomBoundInfo.isBound;\r\n var isVerticalBound = topBoundInfo.isBound || bottomBoundInfo.isBound;\r\n var isAllHorizontalBound = leftBoundInfo.isBound && rightBoundInfo.isBound;\r\n var isHorizontalBound = leftBoundInfo.isBound || rightBoundInfo.isBound;\r\n var verticalOffset = maxOffset(topBoundInfo.offset, bottomBoundInfo.offset);\r\n var horizontalOffset = maxOffset(leftBoundInfo.offset, rightBoundInfo.offset);\r\n var offset = [0, 0];\r\n var isBound = false;\r\n var isAllBound = false;\r\n if (abs(horizontalOffset) < abs(verticalOffset)) {\r\n offset = [verticalOffset, 0];\r\n isBound = isVerticalBound;\r\n isAllBound = isAllVerticalBound;\r\n }\r\n else {\r\n offset = [0, horizontalOffset];\r\n isBound = isHorizontalBound;\r\n isAllBound = isAllHorizontalBound;\r\n }\r\n return {\r\n isAllBound: isAllBound,\r\n isVerticalBound: isVerticalBound,\r\n isHorizontalBound: isHorizontalBound,\r\n isBound: isBound,\r\n offset: offset,\r\n };\r\n}\r\nfunction checkLineBoundCollision(line, _a, boundLine, isStart, threshold, isRender) {\r\n var _b = __read(_a, 2), a = _b[0], b = _b[1];\r\n var dot1 = line[0];\r\n // const dot2 = line[1];\r\n var boundDot1 = boundLine[0];\r\n var boundDot2 = boundLine[1];\r\n // const dy1 = getTinyDist(dot2[1] - dot1[1]);\r\n // const dx1 = getTinyDist(dot2[0] - dot1[0]);\r\n var dy2 = getTinyDist(boundDot2[1] - boundDot1[1]);\r\n var dx2 = getTinyDist(boundDot2[0] - boundDot1[0]);\r\n var hasDx = b;\r\n var hasDy = a;\r\n var slope = -a / b;\r\n // lineConstants\r\n // ax + by + c = 0\r\n // dx2 or dy2 is zero\r\n if (!dx2) {\r\n // vertical\r\n // by + c = 0\r\n if (isRender && !hasDy) {\r\n // 90deg\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n }\r\n else if (hasDx) {\r\n // ax + by + c = 0\r\n // const y = dy1 ? dy1 / dx1 * (boundDot1[0] - dot1[0]) + dot1[1] : dot1[1];\r\n var y = slope * (boundDot1[0] - dot1[0]) + dot1[1];\r\n // boundDot1[1] <= y <= boundDot2[1]\r\n return checkInnerBoundDot(y, boundDot1[1], boundDot2[1], isStart, threshold);\r\n }\r\n else {\r\n // ax + c = 0\r\n var offset = boundDot1[0] - dot1[0];\r\n var isBound = abs(offset) <= (threshold || 0);\r\n return {\r\n isBound: isBound,\r\n offset: isBound ? offset : 0,\r\n };\r\n }\r\n }\r\n else if (!dy2) {\r\n // horizontal\r\n if (isRender && !hasDx) {\r\n // 90deg\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n }\r\n else if (hasDy) {\r\n // y = a * (x - x1) + y1\r\n // x = (y - y1) / a + x1\r\n // const a = dy1 / dx1;\r\n // const x = dx1 ? (boundDot1[1] - dot1[1]) / a + dot1[0] : dot1[0];\r\n var x = (boundDot1[1] - dot1[1]) / slope + dot1[0];\r\n // boundDot1[0] <= x && x <= boundDot2[0]\r\n return checkInnerBoundDot(x, boundDot1[0], boundDot2[0], isStart, threshold);\r\n }\r\n else {\r\n var offset = boundDot1[1] - dot1[1];\r\n var isBound = abs(offset) <= (threshold || 0);\r\n return {\r\n isBound: isBound,\r\n offset: isBound ? offset : 0,\r\n };\r\n }\r\n }\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n}\r\nfunction getInnerBoundInfo(moveable, lineInfos, datas) {\r\n return lineInfos.map(function (info) {\r\n var _a = checkInnerBound(moveable, info), isBound = _a.isBound, offset = _a.offset, isVerticalBound = _a.isVerticalBound, isHorizontalBound = _a.isHorizontalBound;\r\n var multiple = info.multiple;\r\n var sizeOffset = getDragDist({\r\n datas: datas,\r\n distX: offset[0],\r\n distY: offset[1],\r\n }).map(function (size, i) { return size * (multiple[i] ? 2 / multiple[i] : 0); });\r\n return {\r\n sign: multiple,\r\n isBound: isBound,\r\n isVerticalBound: isVerticalBound,\r\n isHorizontalBound: isHorizontalBound,\r\n isSnap: false,\r\n offset: sizeOffset,\r\n };\r\n });\r\n}\r\nfunction getInnerBoundDragInfo(moveable, poses, datas) {\r\n var _a;\r\n var lines = getCheckInnerBoundLineInfos(moveable, poses, [0, 0], false).map(function (info) {\r\n return __assign(__assign({}, info), { multiple: info.multiple.map(function (dir) { return abs(dir) * 2; }) });\r\n });\r\n var innerBoundInfo = getInnerBoundInfo(moveable, lines, datas);\r\n var widthOffsetInfo = getNearOffsetInfo(innerBoundInfo, 0);\r\n var heightOffsetInfo = getNearOffsetInfo(innerBoundInfo, 1);\r\n var verticalOffset = 0;\r\n var horizontalOffset = 0;\r\n var isVerticalBound = widthOffsetInfo.isVerticalBound || heightOffsetInfo.isVerticalBound;\r\n var isHorizontalBound = widthOffsetInfo.isHorizontalBound || heightOffsetInfo.isHorizontalBound;\r\n if (isVerticalBound || isHorizontalBound) {\r\n _a = __read(getInverseDragDist({\r\n datas: datas,\r\n distX: -widthOffsetInfo.offset[0],\r\n distY: -heightOffsetInfo.offset[1],\r\n }), 2), verticalOffset = _a[0], horizontalOffset = _a[1];\r\n }\r\n return {\r\n vertical: {\r\n isBound: isVerticalBound,\r\n offset: verticalOffset,\r\n },\r\n horizontal: {\r\n isBound: isHorizontalBound,\r\n offset: horizontalOffset,\r\n },\r\n };\r\n}\r\nfunction getCheckSnapLineDirections(direction, keepRatio) {\r\n var lineDirections = [];\r\n var x = direction[0];\r\n var y = direction[1];\r\n if (x && y) {\r\n lineDirections.push([[0, y * 2], direction, [-x, y]], [[x * 2, 0], direction, [x, -y]]);\r\n }\r\n else if (x) {\r\n // vertcal\r\n lineDirections.push([[x * 2, 0], [x, 1], [x, -1]]);\r\n if (keepRatio) {\r\n lineDirections.push([[0, -1], [x, -1], [-x, -1]], [[0, 1], [x, 1], [-x, 1]]);\r\n }\r\n }\r\n else if (y) {\r\n // horizontal\r\n lineDirections.push([[0, y * 2], [1, y], [-1, y]]);\r\n if (keepRatio) {\r\n lineDirections.push([[-1, 0], [-1, y], [-1, -y]], [[1, 0], [1, y], [1, -y]]);\r\n }\r\n }\r\n else {\r\n // [0, 0] to all direction\r\n lineDirections.push([[-1, 0], [-1, -1], [-1, 1]], [[1, 0], [1, -1], [1, 1]], [[0, -1], [-1, -1], [1, -1]], [[0, 1], [-1, 1], [1, 1]]);\r\n }\r\n return lineDirections;\r\n}\r\nfunction getCheckInnerBoundLineInfos(moveable, poses, direction, keepRatio) {\r\n var _a = moveable.state, allMatrix = _a.allMatrix, is3d = _a.is3d;\r\n var virtualPoses = calculatePoses(allMatrix, 100, 100, is3d ? 4 : 3);\r\n var center = getPosByDirection(virtualPoses, [0, 0]);\r\n return getCheckSnapLineDirections(direction, keepRatio).map(function (_a) {\r\n var _b = __read(_a, 3), multiple = _b[0], dir1 = _b[1], dir2 = _b[2];\r\n var virtualLine = [\r\n getPosByDirection(virtualPoses, dir1),\r\n getPosByDirection(virtualPoses, dir2),\r\n ];\r\n var lineConstants = solveLineConstants(virtualLine);\r\n var _c = isStartLine(center, virtualLine), verticalSign = _c.vertical, horizontalSign = _c.horizontal;\r\n var centerSign = hitTestLine(center, virtualLine) <= 0;\r\n return {\r\n multiple: multiple,\r\n centerSign: centerSign,\r\n verticalSign: verticalSign,\r\n horizontalSign: horizontalSign,\r\n lineConstants: lineConstants,\r\n line: [\r\n getPosByDirection(poses, dir1),\r\n getPosByDirection(poses, dir2),\r\n ],\r\n };\r\n });\r\n}\r\nfunction isBoundRotate(relativePoses, boundDots, center, rad) {\r\n var nextPoses = rad ? relativePoses.map(function (pos) { return rotate(pos, rad); }) : relativePoses;\r\n return [\r\n [nextPoses[0], nextPoses[1]],\r\n [nextPoses[1], nextPoses[3]],\r\n [nextPoses[3], nextPoses[2]],\r\n [nextPoses[2], nextPoses[0]],\r\n ].some(function (line) {\r\n var centerSign = hitTestLine(center, line) <= 0;\r\n return !isSameStartLine(boundDots, line, centerSign);\r\n });\r\n}\r\nfunction getDistPointLine(_a) {\r\n // x = 0, y = 0\r\n // d = (ax + by + c) / root(a2 + b2)\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (!dx) {\r\n return abs(pos1[0]);\r\n }\r\n if (!dy) {\r\n return abs(pos1[1]);\r\n }\r\n // y - y1 = a(x - x1)\r\n // 0 = ax -y + -a * x1 + y1\r\n var a = dy / dx;\r\n return abs((-a * pos1[0] + pos1[1]) / Math.sqrt(Math.pow(a, 2) + 1));\r\n}\r\nfunction solveReverseLine(_a) {\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (!dx) {\r\n return [pos1[0], 0];\r\n }\r\n if (!dy) {\r\n return [0, pos1[1]];\r\n }\r\n var a = dy / dx;\r\n // y - y1 = a (x - x1)\r\n // y = ax - a * x1 + y1\r\n var b = -a * pos1[0] + pos1[1];\r\n // y = ax + b = -1/a x\r\n // x = -b / (a + 1 / a)\r\n // y = b / (1 + 1 / a^2)\r\n return [\r\n -b / (a + 1 / a),\r\n b / ((a * a) + 1),\r\n ];\r\n}\r\nfunction checkRotateInnerBounds(moveable, prevPoses, nextPoses, origin, rotation) {\r\n var bounds = moveable.props.innerBounds;\r\n var rad = rotation * Math.PI / 180;\r\n if (!bounds) {\r\n return [];\r\n }\r\n var left = bounds.left, top = bounds.top, width = bounds.width, height = bounds.height;\r\n var relativeLeft = left - origin[0];\r\n var relativeRight = left + width - origin[0];\r\n var relativeTop = top - origin[1];\r\n var relativeBottom = top + height - origin[1];\r\n var dots = [\r\n [relativeLeft, relativeTop],\r\n [relativeRight, relativeTop],\r\n [relativeLeft, relativeBottom],\r\n [relativeRight, relativeBottom],\r\n ];\r\n var center = getPosByDirection(nextPoses, [0, 0]);\r\n if (!isBoundRotate(nextPoses, dots, center, 0)) {\r\n return [];\r\n }\r\n var result = [];\r\n var dotInfos = dots.map(function (dot) { return [\r\n getDistSize(dot),\r\n getRad([0, 0], dot),\r\n ]; });\r\n [\r\n [nextPoses[0], nextPoses[1]],\r\n [nextPoses[1], nextPoses[3]],\r\n [nextPoses[3], nextPoses[2]],\r\n [nextPoses[2], nextPoses[0]],\r\n ].forEach(function (line) {\r\n var lineRad = getRad([0, 0], solveReverseLine(line));\r\n var lineDist = getDistPointLine(line);\r\n result.push.apply(result, __spreadArray([], __read(dotInfos\r\n .filter(function (_a) {\r\n var _b = __read(_a, 1), dotDist = _b[0];\r\n return dotDist && lineDist <= dotDist;\r\n })\r\n .map(function (_a) {\r\n var _b = __read(_a, 2), dotDist = _b[0], dotRad = _b[1];\r\n var distRad = Math.acos(dotDist ? lineDist / dotDist : 0);\r\n var nextRad1 = dotRad + distRad;\r\n var nextRad2 = dotRad - distRad;\r\n return [\r\n rad + nextRad1 - lineRad,\r\n rad + nextRad2 - lineRad,\r\n ];\r\n })\r\n .reduce(function (prev, cur) {\r\n prev.push.apply(prev, __spreadArray([], __read(cur), false));\r\n return prev;\r\n }, [])\r\n .filter(function (nextRad) { return !isBoundRotate(prevPoses, dots, center, nextRad); })\r\n .map(function (nextRad) { return throttle(nextRad * 180 / Math.PI, TINY_NUM); })), false));\r\n });\r\n return result;\r\n}\r\nfunction checkInnerBoundPoses(moveable) {\r\n var innerBounds = moveable.props.innerBounds;\r\n var boundMap = getInitialBounds();\r\n if (!innerBounds) {\r\n return {\r\n boundMap: boundMap,\r\n vertical: [],\r\n horizontal: [],\r\n };\r\n }\r\n var _a = moveable.getRect(), pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n var center = getPosByDirection(poses, [0, 0]);\r\n var left = innerBounds.left, top = innerBounds.top, width = innerBounds.width, height = innerBounds.height;\r\n var leftLine = [[left, top], [left, top + height]];\r\n var topLine = [[left, top], [left + width, top]];\r\n var rightLine = [[left + width, top], [left + width, top + height]];\r\n var bottomLine = [[left, top + height], [left + width, top + height]];\r\n var lineInfos = getCheckInnerBoundLineInfos(moveable, poses, [0, 0], false);\r\n var horizontalPoses = [];\r\n var verticalPoses = [];\r\n lineInfos.forEach(function (lineInfo) {\r\n var line = lineInfo.line, lineConstants = lineInfo.lineConstants;\r\n var _a = isStartLine(center, line), isHorizontalStart = _a.horizontal, isVerticalStart = _a.vertical;\r\n // test vertical\r\n var topBoundInfo = checkLineBoundCollision(line, lineConstants, topLine, isVerticalStart, 1, true);\r\n var bottomBoundInfo = checkLineBoundCollision(line, lineConstants, bottomLine, isVerticalStart, 1, true);\r\n // test horizontal\r\n var leftBoundInfo = checkLineBoundCollision(line, lineConstants, leftLine, isHorizontalStart, 1, true);\r\n var rightBoundInfo = checkLineBoundCollision(line, lineConstants, rightLine, isHorizontalStart, 1, true);\r\n if (topBoundInfo.isBound && !boundMap.top) {\r\n horizontalPoses.push(top);\r\n boundMap.top = true;\r\n }\r\n if (bottomBoundInfo.isBound && !boundMap.bottom) {\r\n horizontalPoses.push(top + height);\r\n boundMap.bottom = true;\r\n }\r\n if (leftBoundInfo.isBound && !boundMap.left) {\r\n verticalPoses.push(left);\r\n boundMap.left = true;\r\n }\r\n if (rightBoundInfo.isBound && !boundMap.right) {\r\n verticalPoses.push(left + width);\r\n boundMap.right = true;\r\n }\r\n });\r\n return {\r\n boundMap: boundMap,\r\n horizontal: horizontalPoses,\r\n vertical: verticalPoses,\r\n };\r\n}\n\nfunction solveEquation(pos1, pos2, snapOffset, isVertical) {\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (abs(dx) < TINY_NUM$1) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM$1) {\r\n dy = 0;\r\n }\r\n if (!dx) {\r\n // y = 0 * x + b\r\n // only horizontal\r\n if (!isVertical) {\r\n return [0, snapOffset];\r\n }\r\n return [0, 0];\r\n }\r\n if (!dy) {\r\n // only vertical\r\n if (isVertical) {\r\n return [snapOffset, 0];\r\n }\r\n return [0, 0];\r\n }\r\n // y = ax + b\r\n var a = dy / dx;\r\n var b = pos1[1] - a * pos1[0];\r\n if (isVertical) {\r\n // y = a * x + b\r\n var y = a * (pos2[0] + snapOffset) + b;\r\n return [snapOffset, y - pos2[1]];\r\n }\r\n else {\r\n // x = (y - b) / a\r\n var x = (pos2[1] + snapOffset - b) / a;\r\n return [x - pos2[0], snapOffset];\r\n }\r\n}\r\nfunction solveNextOffset(pos1, pos2, offset, isVertical, datas) {\r\n var sizeOffset = solveEquation(pos1, pos2, offset, isVertical);\r\n if (!sizeOffset) {\r\n return {\r\n isOutside: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var size = getDist$1(pos1, pos2);\r\n var dist1 = getDist$1(sizeOffset, pos1);\r\n var dist2 = getDist$1(sizeOffset, pos2);\r\n var isOutside = dist1 > size || dist2 > size;\r\n var _a = __read(getDragDist({\r\n datas: datas,\r\n distX: sizeOffset[0],\r\n distY: sizeOffset[1],\r\n }), 2), widthOffset = _a[0], heightOffset = _a[1];\r\n return {\r\n offset: [widthOffset, heightOffset],\r\n isOutside: isOutside,\r\n };\r\n}\r\nfunction getSnapBound(boundInfo, snapInfo) {\r\n if (boundInfo.isBound) {\r\n return boundInfo.offset;\r\n }\r\n else if (snapInfo.isSnap) {\r\n return getNearestSnapGuidelineInfo(snapInfo).offset;\r\n }\r\n return 0;\r\n}\r\nfunction checkThrottleDragRotate(throttleDragRotate, _a, _b, _c, _d) {\r\n var _e = __read(_a, 2), distX = _e[0], distY = _e[1];\r\n var _f = __read(_b, 2), isVerticalBound = _f[0], isHorizontalBound = _f[1];\r\n var _g = __read(_c, 2), isVerticalSnap = _g[0], isHorizontalSnap = _g[1];\r\n var _h = __read(_d, 2), verticalOffset = _h[0], horizontalOffset = _h[1];\r\n var offsetX = -verticalOffset;\r\n var offsetY = -horizontalOffset;\r\n if (throttleDragRotate && distX && distY) {\r\n offsetX = 0;\r\n offsetY = 0;\r\n var adjustPoses = [];\r\n if (isVerticalBound && isHorizontalBound) {\r\n adjustPoses.push([0, horizontalOffset], [verticalOffset, 0]);\r\n }\r\n else if (isVerticalBound) {\r\n adjustPoses.push([verticalOffset, 0]);\r\n }\r\n else if (isHorizontalBound) {\r\n adjustPoses.push([0, horizontalOffset]);\r\n }\r\n else if (isVerticalSnap && isHorizontalSnap) {\r\n adjustPoses.push([0, horizontalOffset], [verticalOffset, 0]);\r\n }\r\n else if (isVerticalSnap) {\r\n adjustPoses.push([verticalOffset, 0]);\r\n }\r\n else if (isHorizontalSnap) {\r\n adjustPoses.push([0, horizontalOffset]);\r\n }\r\n if (adjustPoses.length) {\r\n adjustPoses.sort(function (a, b) {\r\n return (getDistSize(minus([distX, distY], a)) -\r\n getDistSize(minus([distX, distY], b)));\r\n });\r\n var adjustPos = adjustPoses[0];\r\n if (adjustPos[0] && abs(distX) > TINY_NUM$1) {\r\n offsetX = -adjustPos[0];\r\n offsetY =\r\n (distY * abs(distX + offsetX)) / abs(distX) -\r\n distY;\r\n }\r\n else if (adjustPos[1] && abs(distY) > TINY_NUM$1) {\r\n var prevDistY = distY;\r\n offsetY = -adjustPos[1];\r\n offsetX =\r\n (distX * abs(distY + offsetY)) / abs(prevDistY) -\r\n distX;\r\n }\r\n if (throttleDragRotate && isHorizontalBound && isVerticalBound) {\r\n if (abs(offsetX) > TINY_NUM$1 &&\r\n abs(offsetX) < abs(verticalOffset)) {\r\n var scale = abs(verticalOffset) / abs(offsetX);\r\n offsetX *= scale;\r\n offsetY *= scale;\r\n }\r\n else if (abs(offsetY) > TINY_NUM$1 &&\r\n abs(offsetY) < abs(horizontalOffset)) {\r\n var scale = abs(horizontalOffset) / abs(offsetY);\r\n offsetX *= scale;\r\n offsetY *= scale;\r\n }\r\n else {\r\n offsetX = maxOffset(-verticalOffset, offsetX);\r\n offsetY = maxOffset(-horizontalOffset, offsetY);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n offsetX = distX || isVerticalBound ? -verticalOffset : 0;\r\n offsetY = distY || isHorizontalBound ? -horizontalOffset : 0;\r\n }\r\n return [offsetX, offsetY];\r\n}\r\nfunction checkSnapBoundsDrag(moveable, distX, distY, throttleDragRotate, ignoreSnap, datas) {\r\n if (!hasGuidelines(moveable, \"draggable\")) {\r\n return [\r\n {\r\n isSnap: false,\r\n isBound: false,\r\n offset: 0,\r\n },\r\n {\r\n isSnap: false,\r\n isBound: false,\r\n offset: 0,\r\n },\r\n ];\r\n }\r\n var poses = getAbsolutePoses(datas.absolutePoses, [distX, distY]);\r\n var _a = getRect(poses), left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;\r\n var boundPoses = {\r\n horizontal: poses.map(function (pos) { return pos[1]; }),\r\n vertical: poses.map(function (pos) { return pos[0]; }),\r\n };\r\n var snapDirections = getSnapDirections(moveable.props.snapDirections);\r\n var snapPoses = splitSnapDirectionPoses(snapDirections, {\r\n left: left,\r\n right: right,\r\n top: top,\r\n bottom: bottom,\r\n center: (left + right) / 2,\r\n middle: (top + bottom) / 2,\r\n });\r\n var _b = checkMoveableSnapBounds(moveable, ignoreSnap, snapPoses, boundPoses), verticalSnapBoundInfo = _b.vertical, horizontalSnapBoundInfo = _b.horizontal;\r\n var _c = getInnerBoundDragInfo(moveable, poses, datas), verticalInnerBoundInfo = _c.vertical, horizontalInnerBoundInfo = _c.horizontal;\r\n var isVerticalSnap = verticalSnapBoundInfo.isSnap;\r\n var isHorizontalSnap = horizontalSnapBoundInfo.isSnap;\r\n var isVerticalBound = verticalSnapBoundInfo.isBound || verticalInnerBoundInfo.isBound;\r\n var isHorizontalBound = horizontalSnapBoundInfo.isBound || horizontalInnerBoundInfo.isBound;\r\n var verticalOffset = maxOffset(verticalSnapBoundInfo.offset, verticalInnerBoundInfo.offset);\r\n var horizontalOffset = maxOffset(horizontalSnapBoundInfo.offset, horizontalInnerBoundInfo.offset);\r\n var _d = __read(checkThrottleDragRotate(throttleDragRotate, [distX, distY], [isVerticalBound, isHorizontalBound], [isVerticalSnap, isHorizontalSnap], [verticalOffset, horizontalOffset]), 2), offsetX = _d[0], offsetY = _d[1];\r\n return [\r\n {\r\n isBound: isVerticalBound,\r\n isSnap: isVerticalSnap,\r\n offset: offsetX,\r\n },\r\n {\r\n isBound: isHorizontalBound,\r\n isSnap: isHorizontalSnap,\r\n offset: offsetY,\r\n },\r\n ];\r\n}\r\nfunction checkMoveableSnapBounds(moveable, ignoreSnap, poses, boundPoses) {\r\n if (boundPoses === void 0) { boundPoses = poses; }\r\n var _a = checkBoundPoses(getBounds(moveable), boundPoses.vertical, boundPoses.horizontal), horizontalBoundInfos = _a.horizontal, verticalBoundInfos = _a.vertical;\r\n var _b = ignoreSnap ? {\r\n horizontal: { isSnap: false, index: -1 },\r\n vertical: { isSnap: false, index: -1 },\r\n } : checkMoveableSnapPoses(moveable, poses.vertical, poses.horizontal, undefined, undefined, undefined, undefined), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBound(horizontalBoundInfos[0], horizontalSnapInfo);\r\n var verticalOffset = getSnapBound(verticalBoundInfos[0], verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfos[0].isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n snapIndex: horizontalSnapInfo.index,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n bounds: horizontalBoundInfos,\r\n snap: horizontalSnapInfo,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfos[0].isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n snapIndex: verticalSnapInfo.index,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n bounds: verticalBoundInfos,\r\n snap: verticalSnapInfo,\r\n },\r\n };\r\n}\r\nfunction checkSnapBounds(guideines, bounds, posesX, posesY, snapHorizontalThreshold, snapVerticalThreshold, multiples) {\r\n if (multiples === void 0) { multiples = [1, 1]; }\r\n var _a = checkBoundPoses(bounds, posesX, posesY), horizontalBoundInfos = _a.horizontal, verticalBoundInfos = _a.vertical;\r\n // options.isRequest ? {\r\n // horizontal: { isSnap: false, index: -1 } as SnapInfo,\r\n // vertical: { isSnap: false, index: -1 } as SnapInfo,\r\n // } :\r\n var _b = checkSnapPoses(guideines, posesX, posesY, [], [], snapHorizontalThreshold, snapVerticalThreshold, multiples), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBound(horizontalBoundInfos[0], horizontalSnapInfo);\r\n var verticalOffset = getSnapBound(verticalBoundInfos[0], verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfos[0].isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n snapIndex: horizontalSnapInfo.index,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n bounds: horizontalBoundInfos,\r\n snap: horizontalSnapInfo,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfos[0].isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n snapIndex: verticalSnapInfo.index,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n bounds: verticalBoundInfos,\r\n snap: verticalSnapInfo,\r\n },\r\n };\r\n}\r\nfunction checkSnapRightLine(startPos, endPos, snapBoundInfo, keepRatio) {\r\n var rad = (getRad(startPos, endPos) / Math.PI) * 180;\r\n var _a = snapBoundInfo.vertical, isVerticalBound = _a.isBound, isVerticalSnap = _a.isSnap, verticalDist = _a.dist, _b = snapBoundInfo.horizontal, isHorizontalBound = _b.isBound, isHorizontalSnap = _b.isSnap, horizontalDist = _b.dist;\r\n var rad180 = rad % 180;\r\n var isHorizontalLine = rad180 < 3 || rad180 > 177;\r\n var isVerticalLine = rad180 > 87 && rad180 < 93;\r\n if (horizontalDist < verticalDist) {\r\n if (isVerticalBound ||\r\n (isVerticalSnap &&\r\n !isVerticalLine &&\r\n (!keepRatio || !isHorizontalLine))) {\r\n return \"vertical\";\r\n }\r\n }\r\n if (isHorizontalBound ||\r\n (isHorizontalSnap &&\r\n !isHorizontalLine &&\r\n (!keepRatio || !isVerticalLine))) {\r\n return \"horizontal\";\r\n }\r\n return \"\";\r\n}\r\nfunction getSnapBoundInfo(moveable, poses, directions, keepRatio, isRequest, datas) {\r\n return directions.map(function (_a) {\r\n var _b = __read(_a, 2), startDirection = _b[0], endDirection = _b[1];\r\n var otherStartPos = getPosByDirection(poses, startDirection);\r\n var otherEndPos = getPosByDirection(poses, endDirection);\r\n var snapBoundInfo = keepRatio\r\n ? checkSnapBoundsKeepRatio(moveable, otherStartPos, otherEndPos, isRequest)\r\n : checkMoveableSnapBounds(moveable, isRequest, {\r\n vertical: [otherEndPos[0]],\r\n horizontal: [otherEndPos[1]],\r\n });\r\n var _c = snapBoundInfo.horizontal, \r\n // dist: otherHorizontalDist,\r\n otherHorizontalOffset = _c.offset, isOtherHorizontalBound = _c.isBound, isOtherHorizontalSnap = _c.isSnap, _d = snapBoundInfo.vertical, \r\n // dist: otherVerticalDist,\r\n otherVerticalOffset = _d.offset, isOtherVerticalBound = _d.isBound, isOtherVerticalSnap = _d.isSnap;\r\n var multiple = minus(endDirection, startDirection);\r\n if (!otherVerticalOffset && !otherHorizontalOffset) {\r\n return {\r\n isBound: isOtherVerticalBound || isOtherHorizontalBound,\r\n isSnap: isOtherVerticalSnap || isOtherHorizontalSnap,\r\n sign: multiple,\r\n offset: [0, 0],\r\n };\r\n }\r\n var snapLine = checkSnapRightLine(otherStartPos, otherEndPos, snapBoundInfo, keepRatio);\r\n if (!snapLine) {\r\n return {\r\n sign: multiple,\r\n isBound: false,\r\n isSnap: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var isVertical = snapLine === \"vertical\";\r\n var sizeOffset = [0, 0];\r\n if (!keepRatio\r\n && abs(endDirection[0]) === 1\r\n && abs(endDirection[1]) === 1\r\n && startDirection[0] !== endDirection[0]\r\n && startDirection[1] !== endDirection[1]) {\r\n sizeOffset = getDragDist({\r\n datas: datas,\r\n distX: -otherVerticalOffset,\r\n distY: -otherHorizontalOffset,\r\n });\r\n }\r\n else {\r\n sizeOffset = solveNextOffset(otherStartPos, otherEndPos, -(isVertical ? otherVerticalOffset : otherHorizontalOffset), isVertical, datas).offset;\r\n }\r\n sizeOffset = sizeOffset.map(function (size, i) { return size * (multiple[i] ? 2 / multiple[i] : 0); });\r\n return {\r\n sign: multiple,\r\n isBound: isVertical ? isOtherVerticalBound : isOtherHorizontalBound,\r\n isSnap: isVertical ? isOtherVerticalSnap : isOtherHorizontalSnap,\r\n offset: sizeOffset,\r\n };\r\n });\r\n}\r\nfunction getSnapBoundOffset(boundInfo, snapInfo) {\r\n if (boundInfo.isBound) {\r\n return boundInfo.offset;\r\n }\r\n else if (snapInfo.isSnap) {\r\n return snapInfo.offset;\r\n }\r\n return 0;\r\n}\r\nfunction checkSnapBoundsKeepRatio(moveable, startPos, endPos, isRequest) {\r\n var _a = checkBoundKeepRatio(moveable, startPos, endPos), horizontalBoundInfo = _a.horizontal, verticalBoundInfo = _a.vertical;\r\n var _b = isRequest ? {\r\n horizontal: { isSnap: false },\r\n vertical: { isSnap: false },\r\n } : checkSnapKeepRatio(moveable, startPos, endPos), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBoundOffset(horizontalBoundInfo, horizontalSnapInfo);\r\n var verticalOffset = getSnapBoundOffset(verticalBoundInfo, verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfo.isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfo.isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n },\r\n };\r\n}\r\nfunction checkMaxBounds(moveable, poses, direction, fixedPosition, datas) {\r\n var fixedDirection = [-direction[0], -direction[1]];\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var bounds = moveable.props.bounds;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n if (bounds) {\r\n var directions = [\r\n [direction[0], -direction[1]],\r\n [-direction[0], direction[1]],\r\n ];\r\n var _b = bounds.left, left_1 = _b === void 0 ? -Infinity : _b, _c = bounds.top, top_1 = _c === void 0 ? -Infinity : _c, _d = bounds.right, right_1 = _d === void 0 ? Infinity : _d, _e = bounds.bottom, bottom_1 = _e === void 0 ? Infinity : _e;\r\n directions.forEach(function (otherDirection) {\r\n var isCheckVertical = otherDirection[0] !== fixedDirection[0];\r\n var isCheckHorizontal = otherDirection[1] !== fixedDirection[1];\r\n var otherPos = getPosByDirection(poses, otherDirection);\r\n var deg = (getRad(fixedPosition, otherPos) * 360) / Math.PI;\r\n if (isCheckHorizontal) {\r\n var nextOtherPos = otherPos.slice();\r\n if (abs(deg - 360) < 2 || abs(deg - 180) < 2) {\r\n nextOtherPos[1] = fixedPosition[1];\r\n }\r\n var _a = solveNextOffset(fixedPosition, nextOtherPos, (fixedPosition[1] < otherPos[1] ? bottom_1 : top_1) -\r\n otherPos[1], false, datas), _b = __read(_a.offset, 2), heightOffset = _b[1], isHeightOutside = _a.isOutside;\r\n if (!isNaN(heightOffset)) {\r\n maxHeight = height + (isHeightOutside ? 1 : -1) * abs(heightOffset);\r\n }\r\n }\r\n if (isCheckVertical) {\r\n var nextOtherPos = otherPos.slice();\r\n if (abs(deg - 90) < 2 || abs(deg - 270) < 2) {\r\n nextOtherPos[0] = fixedPosition[0];\r\n }\r\n var _c = solveNextOffset(fixedPosition, nextOtherPos, (fixedPosition[0] < otherPos[0] ? right_1 : left_1) - otherPos[0], true, datas), _d = __read(_c.offset, 1), widthOffset = _d[0], isWidthOutside = _c.isOutside;\r\n if (!isNaN(widthOffset)) {\r\n maxWidth = width + (isWidthOutside ? 1 : -1) * abs(widthOffset);\r\n }\r\n }\r\n });\r\n }\r\n return {\r\n maxWidth: maxWidth,\r\n maxHeight: maxHeight,\r\n };\r\n}\n\n/**\r\n * @namespace Draggable\r\n * @memberof Moveable\r\n * @description Draggable refers to the ability to drag and move targets.\r\n */\r\nvar Draggable = {\r\n name: \"draggable\",\r\n props: [\r\n \"draggable\",\r\n \"throttleDrag\",\r\n \"throttleDragRotate\",\r\n \"hideThrottleDragRotateLine\",\r\n \"startDragRotate\",\r\n \"edgeDraggable\",\r\n ],\r\n events: [\r\n \"dragStart\",\r\n \"drag\",\r\n \"dragEnd\",\r\n \"dragGroupStart\",\r\n \"dragGroup\",\r\n \"dragGroupEnd\",\r\n ],\r\n requestStyle: function () {\r\n return [\"left\", \"top\", \"right\", \"bottom\"];\r\n },\r\n requestChildStyle: function () {\r\n return [\"left\", \"top\", \"right\", \"bottom\"];\r\n },\r\n render: function (moveable, React) {\r\n var _a = moveable.props, hideThrottleDragRotateLine = _a.hideThrottleDragRotateLine, throttleDragRotate = _a.throttleDragRotate, zoom = _a.zoom;\r\n var _b = moveable.getState(), dragInfo = _b.dragInfo, beforeOrigin = _b.beforeOrigin;\r\n if (hideThrottleDragRotateLine || !throttleDragRotate || !dragInfo) {\r\n return [];\r\n }\r\n var dist = dragInfo.dist;\r\n if (!dist[0] && !dist[1]) {\r\n return [];\r\n }\r\n var width = getDistSize(dist);\r\n var rad = getRad(dist, [0, 0]);\r\n return [React.createElement(\"div\", { className: prefix(\"line\", \"horizontal\", \"dragline\", \"dashed\"), key: \"dragRotateGuideline\", style: {\r\n width: \"\".concat(width, \"px\"),\r\n transform: \"translate(\".concat(beforeOrigin[0], \"px, \").concat(beforeOrigin[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n } })];\r\n },\r\n dragStart: function (moveable, e) {\r\n var datas = e.datas, parentEvent = e.parentEvent, parentGesto = e.parentGesto;\r\n var state = moveable.state;\r\n var gestos = state.gestos, style = state.style;\r\n if (gestos.draggable) {\r\n return false;\r\n }\r\n gestos.draggable = parentGesto || moveable.targetGesto;\r\n datas.datas = {};\r\n datas.left = parseFloat(style.left || \"\") || 0;\r\n datas.top = parseFloat(style.top || \"\") || 0;\r\n datas.bottom = parseFloat(style.bottom || \"\") || 0;\r\n datas.right = parseFloat(style.right || \"\") || 0;\r\n datas.startValue = [0, 0];\r\n setDragStart(moveable, e);\r\n setDefaultTransformIndex(moveable, e, \"translate\");\r\n startCheckSnapDrag(moveable, datas);\r\n datas.prevDist = [0, 0];\r\n datas.prevBeforeDist = [0, 0];\r\n datas.isDrag = false;\r\n datas.deltaOffset = [0, 0];\r\n var params = fillParams(moveable, e, __assign({ set: function (translate) {\r\n datas.startValue = translate;\r\n } }, fillTransformStartEvent(moveable, e)));\r\n var result = parentEvent || triggerEvent(moveable, \"onDragStart\", params);\r\n if (result !== false) {\r\n datas.isDrag = true;\r\n moveable.state.dragInfo = {\r\n startRect: moveable.getRect(),\r\n dist: [0, 0],\r\n };\r\n }\r\n else {\r\n gestos.draggable = null;\r\n datas.isPinch = false;\r\n }\r\n return datas.isDrag ? params : false;\r\n },\r\n drag: function (moveable, e) {\r\n if (!e) {\r\n return;\r\n }\r\n resolveTransformEvent(moveable, e, \"translate\");\r\n var datas = e.datas, parentEvent = e.parentEvent, parentFlag = e.parentFlag, isPinch = e.isPinch, deltaOffset = e.deltaOffset, useSnap = e.useSnap, isRequest = e.isRequest, isGroup = e.isGroup, parentThrottleDrag = e.parentThrottleDrag;\r\n var distX = e.distX, distY = e.distY;\r\n var isDrag = datas.isDrag, prevDist = datas.prevDist, prevBeforeDist = datas.prevBeforeDist, startValue = datas.startValue;\r\n if (!isDrag) {\r\n return;\r\n }\r\n if (deltaOffset) {\r\n distX += deltaOffset[0];\r\n distY += deltaOffset[1];\r\n }\r\n var props = moveable.props;\r\n var parentMoveable = props.parentMoveable;\r\n var throttleDrag = isGroup ? 0 : (props.throttleDrag || parentThrottleDrag || 0);\r\n var throttleDragRotate = parentEvent ? 0 : (props.throttleDragRotate || 0);\r\n var dragRotateRad = 0;\r\n var isVerticalSnap = false;\r\n var isVerticalBound = false;\r\n var isHorizontalSnap = false;\r\n var isHorizontalBound = false;\r\n if (!parentEvent && throttleDragRotate > 0 && (distX || distY)) {\r\n var startDragRotate = props.startDragRotate || 0;\r\n var deg = throttle(startDragRotate + getRad([0, 0], [distX, distY]) * 180 / Math.PI, throttleDragRotate)\r\n - startDragRotate;\r\n var ry = distY * Math.abs(Math.cos((deg - 90) / 180 * Math.PI));\r\n var rx = distX * Math.abs(Math.cos(deg / 180 * Math.PI));\r\n var r = getDistSize([rx, ry]);\r\n dragRotateRad = deg * Math.PI / 180;\r\n distX = r * Math.cos(dragRotateRad);\r\n distY = r * Math.sin(dragRotateRad);\r\n }\r\n if (!isPinch && !parentEvent && !parentFlag) {\r\n var _a = __read(checkSnapBoundsDrag(moveable, distX, distY, throttleDragRotate, (!useSnap && isRequest) || deltaOffset, datas), 2), verticalInfo = _a[0], horizontalInfo = _a[1];\r\n isVerticalSnap = verticalInfo.isSnap;\r\n isVerticalBound = verticalInfo.isBound;\r\n isHorizontalSnap = horizontalInfo.isSnap;\r\n isHorizontalBound = horizontalInfo.isBound;\r\n var verticalOffset = verticalInfo.offset;\r\n var horizontalOffset = horizontalInfo.offset;\r\n distX += verticalOffset;\r\n distY += horizontalOffset;\r\n }\r\n var beforeTranslate = plus(getBeforeDragDist({ datas: datas, distX: distX, distY: distY }), startValue);\r\n var translate = plus(getTransformDist({ datas: datas, distX: distX, distY: distY }), startValue);\r\n throttleArray(translate, TINY_NUM);\r\n throttleArray(beforeTranslate, TINY_NUM);\r\n if (!throttleDragRotate) {\r\n if (!isVerticalSnap && !isVerticalBound) {\r\n translate[0] = throttle(translate[0], throttleDrag);\r\n beforeTranslate[0] = throttle(beforeTranslate[0], throttleDrag);\r\n }\r\n if (!isHorizontalSnap && !isHorizontalBound) {\r\n translate[1] = throttle(translate[1], throttleDrag);\r\n beforeTranslate[1] = throttle(beforeTranslate[1], throttleDrag);\r\n }\r\n }\r\n var beforeDist = minus(beforeTranslate, startValue);\r\n var dist = minus(translate, startValue);\r\n var delta = minus(dist, prevDist);\r\n var beforeDelta = minus(beforeDist, prevBeforeDist);\r\n datas.prevDist = dist;\r\n datas.prevBeforeDist = beforeDist;\r\n datas.passDelta = delta; //distX - (datas.passDistX || 0);\r\n // datas.passDeltaY = distY - (datas.passDistY || 0);\r\n datas.passDist = dist; //distX;\r\n // datas.passDistY = distY;\r\n var left = datas.left + beforeDist[0];\r\n var top = datas.top + beforeDist[1];\r\n var right = datas.right - beforeDist[0];\r\n var bottom = datas.bottom - beforeDist[1];\r\n var nextTransform = convertTransformFormat(datas, \"translate(\".concat(translate[0], \"px, \").concat(translate[1], \"px)\"), \"translate(\".concat(dist[0], \"px, \").concat(dist[1], \"px)\"));\r\n fillOriginalTransform(e, nextTransform);\r\n moveable.state.dragInfo.dist = parentEvent ? [0, 0] : dist;\r\n if (!parentEvent && !parentMoveable && delta.every(function (num) { return !num; }) && beforeDelta.some(function (num) { return !num; })) {\r\n return;\r\n }\r\n var _b = moveable.state, width = _b.width, height = _b.height;\r\n var params = fillParams(moveable, e, __assign({ transform: nextTransform, dist: dist, delta: delta, translate: translate, beforeDist: beforeDist, beforeDelta: beforeDelta, beforeTranslate: beforeTranslate, left: left, top: top, right: right, bottom: bottom, width: width, height: height, isPinch: isPinch }, fillCSSObject({\r\n transform: nextTransform,\r\n }, e)));\r\n !parentEvent && triggerEvent(moveable, \"onDrag\", params);\r\n return params;\r\n },\r\n dragAfter: function (moveable, e) {\r\n var datas = e.datas;\r\n var deltaOffset = datas.deltaOffset;\r\n if (deltaOffset[0] || deltaOffset[1]) {\r\n datas.deltaOffset = [0, 0];\r\n return this.drag(moveable, __assign(__assign({}, e), { deltaOffset: deltaOffset }));\r\n }\r\n return false;\r\n },\r\n dragEnd: function (moveable, e) {\r\n var parentEvent = e.parentEvent, datas = e.datas;\r\n moveable.state.dragInfo = null;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n datas.isDrag = false;\r\n var param = fillEndParams(moveable, e, {});\r\n !parentEvent && triggerEvent(moveable, \"onDragEnd\", param);\r\n return param;\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n var _a, _b;\r\n var datas = e.datas, clientX = e.clientX, clientY = e.clientY;\r\n var params = this.dragStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n var _c = triggerChildGesto(moveable, this, \"dragStart\", [\r\n clientX || 0,\r\n clientY || 0,\r\n ], e, false, \"draggable\"), childEvents = _c.childEvents, eventParams = _c.eventParams;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: eventParams });\r\n var result = triggerEvent(moveable, \"onDragGroupStart\", nextParams);\r\n datas.isDrag = result !== false;\r\n // find data.startValue and based on first child moveable\r\n var startValue = (_b = (_a = childEvents[0]) === null || _a === void 0 ? void 0 : _a.datas.startValue) !== null && _b !== void 0 ? _b : [0, 0];\r\n datas.throttleOffset = [startValue[0] % 1, startValue[1] % 1];\r\n return datas.isDrag ? params : false;\r\n },\r\n dragGroup: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n var params = this.drag(moveable, __assign(__assign({}, e), { parentThrottleDrag: moveable.props.throttleDrag }));\r\n var passDelta = e.datas.passDelta;\r\n var eventParams = triggerChildGesto(moveable, this, \"drag\", passDelta, e, false, \"draggable\").eventParams;\r\n if (!params) {\r\n return;\r\n }\r\n var nextParams = __assign({ targets: moveable.props.targets, events: eventParams }, params);\r\n triggerEvent(moveable, \"onDragGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n this.dragEnd(moveable, e);\r\n var eventParams = triggerChildGesto(moveable, this, \"dragEnd\", [0, 0], e, false, \"draggable\").eventParams;\r\n triggerEvent(moveable, \"onDragGroupEnd\", fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: eventParams,\r\n }));\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Draggable#request\r\n * @param {object} [e] - the draggable's request parameter\r\n * @param {number} [e.x] - x position\r\n * @param {number} [e.y] - y position\r\n * @param {number} [e.deltaX] - X number to move\r\n * @param {number} [e.deltaY] - Y number to move\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"draggable\", { deltaX: 10, deltaY: 10 }, true);\r\n * // Use Absolute Value\r\n * moveable.request(\"draggable\", { x: 200, y: 100 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"draggable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * // Use Absolute Value\r\n * moveable.request(\"draggable\", { x: 200, y: 100 });\r\n * moveable.request(\"draggable\", { x: 220, y: 100 });\r\n * moveable.request(\"draggable\", { x: 240, y: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var rect = moveable.getRect();\r\n var distX = 0;\r\n var distY = 0;\r\n var useSnap = false;\r\n return {\r\n isControl: false,\r\n requestStart: function (e) {\r\n useSnap = e.useSnap;\r\n return { datas: datas, useSnap: useSnap };\r\n },\r\n request: function (e) {\r\n if (\"x\" in e) {\r\n distX = e.x - rect.left;\r\n }\r\n else if (\"deltaX\" in e) {\r\n distX += e.deltaX;\r\n }\r\n if (\"y\" in e) {\r\n distY = e.y - rect.top;\r\n }\r\n else if (\"deltaY\" in e) {\r\n distY += e.deltaY;\r\n }\r\n return { datas: datas, distX: distX, distY: distY, useSnap: useSnap };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n unset: function (moveable) {\r\n moveable.state.gestos.draggable = null;\r\n moveable.state.dragInfo = null;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be dragged. (default: false)\r\n * @name Moveable.Draggable#draggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.draggable = true;\r\n */\r\n/**\r\n * throttle of x, y when drag.\r\n * @name Moveable.Draggable#throttleDrag\r\n * @default 0\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleDrag = 1;\r\n */\r\n/**\r\n* throttle of angle of x, y when drag.\r\n* @name Moveable.Draggable#throttleDragRotate\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body);\r\n*\r\n* moveable.throttleDragRotate = 45;\r\n*/\r\n/**\r\n* start angle of throttleDragRotate of x, y when drag.\r\n* @name Moveable.Draggable#startDragRotate\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body);\r\n*\r\n* // 45, 135, 225, 315\r\n* moveable.throttleDragRotate = 90;\r\n* moveable.startDragRotate = 45;\r\n*/\r\n/**\r\n * When the drag starts, the dragStart event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragStart\r\n * @param {Moveable.Draggable.OnDragStart} - Parameters for the dragStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"dragStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When dragging, the drag event is called.\r\n * @memberof Moveable.Draggable\r\n * @event drag\r\n * @param {Moveable.Draggable.OnDrag} - Parameters for the drag event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"drag\", ({ target, transform }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When the drag finishes, the dragEnd event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragEnd\r\n * @param {Moveable.Draggable.OnDragEnd} - Parameters for the dragEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"dragEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group drag starts, the `dragGroupStart` event is called.\r\n* @memberof Moveable.Draggable\r\n* @event dragGroupStart\r\n* @param {Moveable.Draggable.OnDragGroupStart} - Parameters for the `dragGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* draggable: true\r\n* });\r\n* moveable.on(\"dragGroupStart\", ({ targets }) => {\r\n* console.log(\"onDragGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group drag, the `dragGroup` event is called.\r\n* @memberof Moveable.Draggable\r\n* @event dragGroup\r\n* @param {Moveable.Draggable.OnDragGroup} - Parameters for the `dragGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* draggable: true\r\n* });\r\n* moveable.on(\"dragGroup\", ({ targets, events }) => {\r\n* console.log(\"onDragGroup\", targets);\r\n* events.forEach(ev => {\r\n* // drag event\r\n* console.log(\"onDrag left, top\", ev.left, ev.top);\r\n* // ev.target!.style.left = `${ev.left}px`;\r\n* // ev.target!.style.top = `${ev.top}px`;\r\n* console.log(\"onDrag translate\", ev.dist);\r\n* ev.target!.style.transform = ev.transform;)\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group drag finishes, the `dragGroupEnd` event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragGroupEnd\r\n * @param {Moveable.Draggable.OnDragGroupEnd} - Parameters for the `dragGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * draggable: true\r\n * });\r\n * moveable.on(\"dragGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onDragGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction getFixedDirectionInfo(startPositions, fixedDirection) {\r\n var fixedPosition = getPosByDirection(startPositions, fixedDirection);\r\n var fixedOffset = [0, 0];\r\n return {\r\n fixedPosition: fixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\r\nfunction getOffsetFixedDirectionInfo(state, fixedDirection) {\r\n // for start\r\n var allMatrix = state.allMatrix, is3d = state.is3d, width = state.width, height = state.height;\r\n var n = is3d ? 4 : 3;\r\n var nextFixedOffset = [\r\n width / 2 * (1 + fixedDirection[0]),\r\n height / 2 * (1 + fixedDirection[1]),\r\n ];\r\n var fixedPosition = calculatePosition(allMatrix, nextFixedOffset, n);\r\n var fixedOffset = [0, 0];\r\n return {\r\n fixedPosition: fixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\r\nfunction getOffsetFixedPositionInfo(state, offsetFixedPosition) {\r\n // for start\r\n var allMatrix = state.allMatrix, is3d = state.is3d, width = state.width, height = state.height;\r\n var n = is3d ? 4 : 3;\r\n var fixedDirection = getDirectionByPos(offsetFixedPosition, width, height);\r\n var nextFixedPosition = calculatePosition(allMatrix, offsetFixedPosition, n);\r\n var fixedOffset = [\r\n width ? 0 : offsetFixedPosition[0],\r\n height ? 0 : offsetFixedPosition[1],\r\n ];\r\n return {\r\n fixedPosition: nextFixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\n\n/**\r\n * @namespace Resizable\r\n * @memberof Moveable\r\n * @description Resizable indicates whether the target's width and height can be increased or decreased.\r\n */\r\nvar directionCondition$2 = getDirectionCondition(\"resizable\");\r\nvar Resizable = {\r\n name: \"resizable\",\r\n ableGroup: \"size\",\r\n canPinch: true,\r\n props: [\r\n \"resizable\",\r\n \"throttleResize\",\r\n \"renderDirections\",\r\n \"displayAroundControls\",\r\n \"keepRatio\",\r\n \"resizeFormat\",\r\n \"keepRatioFinally\",\r\n \"edge\",\r\n \"checkResizableError\",\r\n ],\r\n events: [\r\n \"resizeStart\",\r\n \"beforeResize\",\r\n \"resize\",\r\n \"resizeEnd\",\r\n \"resizeGroupStart\",\r\n \"beforeResizeGroup\",\r\n \"resizeGroup\",\r\n \"resizeGroupEnd\",\r\n ],\r\n render: getRenderDirections(\"resizable\"),\r\n dragControlCondition: directionCondition$2,\r\n viewClassName: getDirectionViewClassName(\"resizable\"),\r\n dragControlStart: function (moveable, e) {\r\n var _a;\r\n var inputEvent = e.inputEvent, isPinch = e.isPinch, isGroup = e.isGroup, parentDirection = e.parentDirection, parentGesto = e.parentGesto, datas = e.datas, parentFixedDirection = e.parentFixedDirection, parentEvent = e.parentEvent;\r\n var direction = getTotalDirection(parentDirection, isPinch, inputEvent, datas);\r\n var state = moveable.state;\r\n var target = state.target, width = state.width, height = state.height, gestos = state.gestos;\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n if (gestos.resizable) {\r\n return false;\r\n }\r\n gestos.resizable = parentGesto || moveable.controlGesto;\r\n !isPinch && setDragStart(moveable, e);\r\n datas.datas = {};\r\n datas.direction = direction;\r\n datas.startOffsetWidth = width;\r\n datas.startOffsetHeight = height;\r\n datas.prevWidth = 0;\r\n datas.prevHeight = 0;\r\n datas.minSize = [0, 0];\r\n datas.startWidth = state.inlineCSSWidth || state.cssWidth;\r\n datas.startHeight = state.inlineCSSHeight || state.cssHeight;\r\n datas.maxSize = [Infinity, Infinity];\r\n if (!isGroup) {\r\n datas.minSize = [\r\n state.minOffsetWidth,\r\n state.minOffsetHeight,\r\n ];\r\n datas.maxSize = [\r\n state.maxOffsetWidth,\r\n state.maxOffsetHeight,\r\n ];\r\n }\r\n var transformOrigin = moveable.props.transformOrigin || \"% %\";\r\n datas.transformOrigin = transformOrigin && isString(transformOrigin)\r\n ? transformOrigin.split(\" \")\r\n : transformOrigin;\r\n datas.startOffsetMatrix = state.offsetMatrix;\r\n datas.startTransformOrigin = state.transformOrigin;\r\n datas.isWidth = (_a = e === null || e === void 0 ? void 0 : e.parentIsWidth) !== null && _a !== void 0 ? _a : ((!direction[0] && !direction[1]) || direction[0] || !direction[1]);\r\n function setRatio(ratio) {\r\n datas.ratio = ratio && isFinite(ratio) ? ratio : 0;\r\n }\r\n datas.startPositions = getAbsolutePosesByState(moveable.state);\r\n function setFixedDirection(fixedDirection) {\r\n var result = getFixedDirectionInfo(datas.startPositions, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n function setFixedPosition(fixedPosition) {\r\n var result = getOffsetFixedPositionInfo(moveable.state, fixedPosition);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n function setMin(minSize) {\r\n datas.minSize = [\r\n convertUnitSize(\"\".concat(minSize[0]), 0) || 0,\r\n convertUnitSize(\"\".concat(minSize[1]), 0) || 0,\r\n ];\r\n }\r\n function setMax(maxSize) {\r\n var nextMaxSize = [\r\n maxSize[0] || Infinity,\r\n maxSize[1] || Infinity,\r\n ];\r\n if (!isNumber(nextMaxSize[0]) || isFinite(nextMaxSize[0])) {\r\n nextMaxSize[0] = convertUnitSize(\"\".concat(nextMaxSize[0]), 0) || Infinity;\r\n }\r\n if (!isNumber(nextMaxSize[1]) || isFinite(nextMaxSize[1])) {\r\n nextMaxSize[1] = convertUnitSize(\"\".concat(nextMaxSize[1]), 0) || Infinity;\r\n }\r\n datas.maxSize = nextMaxSize;\r\n }\r\n setRatio(width / height);\r\n setFixedDirection(parentFixedDirection || [-direction[0], -direction[1]]);\r\n datas.setFixedDirection = setFixedDirection;\r\n datas.setFixedPosition = setFixedPosition;\r\n datas.setMin = setMin;\r\n datas.setMax = setMax;\r\n var params = fillParams(moveable, e, {\r\n direction: direction,\r\n startRatio: datas.ratio,\r\n set: function (_a) {\r\n var _b = __read(_a, 2), startWidth = _b[0], startHeight = _b[1];\r\n datas.startWidth = startWidth;\r\n datas.startHeight = startHeight;\r\n },\r\n setMin: setMin,\r\n setMax: setMax,\r\n setRatio: setRatio,\r\n setFixedDirection: setFixedDirection,\r\n setFixedPosition: setFixedPosition,\r\n setOrigin: function (origin) {\r\n datas.transformOrigin = origin;\r\n },\r\n dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)),\r\n });\r\n var result = parentEvent || triggerEvent(moveable, \"onResizeStart\", params);\r\n datas.startFixedDirection = datas.fixedDirection;\r\n datas.startFixedPosition = datas.fixedPosition;\r\n if (result !== false) {\r\n datas.isResize = true;\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n }\r\n return datas.isResize ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a;\r\n var datas = e.datas, parentFlag = e.parentFlag, isPinch = e.isPinch, parentKeepRatio = e.parentKeepRatio, dragClient = e.dragClient, parentDist = e.parentDist, useSnap = e.useSnap, isRequest = e.isRequest, isGroup = e.isGroup, parentEvent = e.parentEvent, resolveMatrix = e.resolveMatrix;\r\n var isResize = datas.isResize, transformOrigin = datas.transformOrigin, startWidth = datas.startWidth, startHeight = datas.startHeight, prevWidth = datas.prevWidth, prevHeight = datas.prevHeight, minSize = datas.minSize, maxSize = datas.maxSize, ratio = datas.ratio, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, isWidth = datas.isWidth;\r\n if (!isResize) {\r\n return;\r\n }\r\n if (resolveMatrix) {\r\n var is3d = moveable.state.is3d;\r\n var startOffsetMatrix = datas.startOffsetMatrix, startTransformOrigin = datas.startTransformOrigin;\r\n var n = is3d ? 4 : 3;\r\n var targetMatrix = parseMat(getNextTransforms(e));\r\n var targetN = Math.sqrt(targetMatrix.length);\r\n if (n !== targetN) {\r\n targetMatrix = convertDimension(targetMatrix, targetN, n);\r\n }\r\n var nextAllMatrix = getNextMatrix(startOffsetMatrix, targetMatrix, startTransformOrigin, n);\r\n var poses = calculatePoses(nextAllMatrix, startOffsetWidth, startOffsetHeight, n);\r\n datas.startPositions = poses;\r\n datas.nextTargetMatrix = targetMatrix;\r\n datas.nextAllMatrix = nextAllMatrix;\r\n }\r\n var props = getProps(moveable.props, \"resizable\");\r\n var resizeFormat = props.resizeFormat, _b = props.throttleResize, throttleResize = _b === void 0 ? parentFlag ? 0 : 1 : _b, parentMoveable = props.parentMoveable, keepRatioFinally = props.keepRatioFinally;\r\n var direction = datas.direction;\r\n var sizeDirection = direction;\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n if (!direction[0] && !direction[1]) {\r\n sizeDirection = [1, 1];\r\n }\r\n var keepRatio = (ratio && (parentKeepRatio != null ? parentKeepRatio : props.keepRatio)) || false;\r\n function getNextBoundingSize() {\r\n var fixedDirection = datas.fixedDirection;\r\n var nextSize = getOffsetSizeDist(sizeDirection, keepRatio, datas, e);\r\n distWidth = nextSize.distWidth;\r\n distHeight = nextSize.distHeight;\r\n var nextWidth = (sizeDirection[0] - fixedDirection[0]) || keepRatio\r\n ? Math.max(startOffsetWidth + distWidth, TINY_NUM) : startOffsetWidth;\r\n var nextHeight = (sizeDirection[1] - fixedDirection[1]) || keepRatio\r\n ? Math.max(startOffsetHeight + distHeight, TINY_NUM) : startOffsetHeight;\r\n if (keepRatio && startOffsetWidth && startOffsetHeight) {\r\n // startOffsetWidth : startOffsetHeight = nextWidth : nextHeight\r\n if (isWidth) {\r\n nextHeight = nextWidth / ratio;\r\n }\r\n else {\r\n nextWidth = nextHeight * ratio;\r\n }\r\n }\r\n return [nextWidth, nextHeight];\r\n }\r\n var _c = __read(getNextBoundingSize(), 2), boundingWidth = _c[0], boundingHeight = _c[1];\r\n if (!parentEvent) {\r\n datas.setFixedDirection(datas.fixedDirection);\r\n triggerEvent(moveable, \"onBeforeResize\", fillParams(moveable, e, {\r\n startFixedDirection: datas.startFixedDirection,\r\n startFixedPosition: datas.startFixedPosition,\r\n setFixedDirection: function (nextFixedDirection) {\r\n var _a;\r\n datas.setFixedDirection(nextFixedDirection);\r\n _a = __read(getNextBoundingSize(), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n return [boundingWidth, boundingHeight];\r\n },\r\n setFixedPosition: function (nextFixedPosition) {\r\n var _a;\r\n datas.setFixedPosition(nextFixedPosition);\r\n _a = __read(getNextBoundingSize(), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n return [boundingWidth, boundingHeight];\r\n },\r\n boundingWidth: boundingWidth,\r\n boundingHeight: boundingHeight,\r\n setSize: function (size) {\r\n var _a;\r\n _a = __read(size, 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n },\r\n }, true));\r\n }\r\n var fixedPosition = dragClient;\r\n if (!dragClient) {\r\n if (!parentFlag && isPinch) {\r\n fixedPosition = getAbsolutePosition(moveable, [0, 0]);\r\n }\r\n else {\r\n fixedPosition = datas.fixedPosition;\r\n }\r\n }\r\n var snapDist = [0, 0];\r\n if (!isPinch) {\r\n snapDist = checkSnapResize(moveable, boundingWidth, boundingHeight, direction, fixedPosition, !useSnap && isRequest, datas);\r\n }\r\n if (parentDist) {\r\n !parentDist[0] && (snapDist[0] = 0);\r\n !parentDist[1] && (snapDist[1] = 0);\r\n }\r\n function computeSize() {\r\n var _a;\r\n if (resizeFormat) {\r\n _a = __read(resizeFormat([boundingWidth, boundingHeight]), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n }\r\n boundingWidth = throttle(boundingWidth, throttleResize);\r\n boundingHeight = throttle(boundingHeight, throttleResize);\r\n }\r\n if (keepRatio) {\r\n if (sizeDirection[0] && sizeDirection[1] && snapDist[0] && snapDist[1]) {\r\n if (abs(snapDist[0]) > abs(snapDist[1])) {\r\n snapDist[1] = 0;\r\n }\r\n else {\r\n snapDist[0] = 0;\r\n }\r\n }\r\n var isNoSnap = !snapDist[0] && !snapDist[1];\r\n if (isNoSnap) {\r\n // pre-compute before maintaining the ratio\r\n computeSize();\r\n }\r\n if ((sizeDirection[0] && !sizeDirection[1])\r\n || (snapDist[0] && !snapDist[1])\r\n || (isNoSnap && isWidth)) {\r\n boundingWidth += snapDist[0];\r\n boundingHeight = boundingWidth / ratio;\r\n }\r\n else if ((!sizeDirection[0] && sizeDirection[1])\r\n || (!snapDist[0] && snapDist[1])\r\n || (isNoSnap && !isWidth)) {\r\n boundingHeight += snapDist[1];\r\n boundingWidth = boundingHeight * ratio;\r\n }\r\n }\r\n else {\r\n boundingWidth += snapDist[0];\r\n boundingHeight += snapDist[1];\r\n boundingWidth = Math.max(0, boundingWidth);\r\n boundingHeight = Math.max(0, boundingHeight);\r\n }\r\n _a = __read(calculateBoundSize([boundingWidth, boundingHeight], minSize, maxSize, keepRatio ? ratio : false), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n computeSize();\r\n if (keepRatio && (isGroup || keepRatioFinally)) {\r\n if (isWidth) {\r\n boundingHeight = boundingWidth / ratio;\r\n }\r\n else {\r\n boundingWidth = boundingHeight * ratio;\r\n }\r\n }\r\n distWidth = boundingWidth - startOffsetWidth;\r\n distHeight = boundingHeight - startOffsetHeight;\r\n var delta = [distWidth - prevWidth, distHeight - prevHeight];\r\n datas.prevWidth = distWidth;\r\n datas.prevHeight = distHeight;\r\n var inverseDelta = getResizeDist(moveable, boundingWidth, boundingHeight, fixedPosition, transformOrigin, datas);\r\n if (!parentMoveable && delta.every(function (num) { return !num; }) && inverseDelta.every(function (num) { return !num; })) {\r\n return;\r\n }\r\n var drag = Draggable.drag(moveable, setCustomDrag(e, moveable.state, inverseDelta, !!isPinch, false, \"draggable\"));\r\n var transform = drag.transform;\r\n var nextWidth = startWidth + distWidth;\r\n var nextHeight = startHeight + distHeight;\r\n var params = fillParams(moveable, e, __assign({ width: nextWidth, height: nextHeight, offsetWidth: Math.round(boundingWidth), offsetHeight: Math.round(boundingHeight), startRatio: ratio, boundingWidth: boundingWidth, boundingHeight: boundingHeight, direction: direction, dist: [distWidth, distHeight], delta: delta, isPinch: !!isPinch, drag: drag }, fillAfterTransform({\r\n style: {\r\n width: \"\".concat(nextWidth, \"px\"),\r\n height: \"\".concat(nextHeight, \"px\"),\r\n },\r\n transform: transform,\r\n }, drag, e)));\r\n !parentEvent && triggerEvent(moveable, \"onResize\", params);\r\n return params;\r\n },\r\n dragControlAfter: function (moveable, e) {\r\n var datas = e.datas;\r\n var isResize = datas.isResize, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, prevWidth = datas.prevWidth, prevHeight = datas.prevHeight;\r\n if (!isResize || moveable.props.checkResizableError === false) {\r\n return;\r\n }\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var errorWidth = width - (startOffsetWidth + prevWidth);\r\n var errorHeight = height - (startOffsetHeight + prevHeight);\r\n var isErrorWidth = abs(errorWidth) > 3;\r\n var isErrorHeight = abs(errorHeight) > 3;\r\n if (isErrorWidth) {\r\n datas.startWidth += errorWidth;\r\n datas.startOffsetWidth += errorWidth;\r\n datas.prevWidth += errorWidth;\r\n }\r\n if (isErrorHeight) {\r\n datas.startHeight += errorHeight;\r\n datas.startOffsetHeight += errorHeight;\r\n datas.prevHeight += errorHeight;\r\n }\r\n if (isErrorWidth || isErrorHeight) {\r\n return this.dragControl(moveable, e);\r\n }\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas, parentEvent = e.parentEvent;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n datas.isResize = false;\r\n var params = fillEndParams(moveable, e, {});\r\n !parentEvent && triggerEvent(moveable, \"onResizeEnd\", params);\r\n return params;\r\n },\r\n dragGroupControlCondition: directionCondition$2,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var params = this.dragControlStart(moveable, __assign(__assign({}, e), { isGroup: true }));\r\n if (!params) {\r\n return false;\r\n }\r\n var originalEvents = fillChildEvents(moveable, \"resizable\", e);\r\n var parentStartOffsetWidth = datas.startOffsetWidth, parentStartOffsetHeight = datas.startOffsetHeight;\r\n function updateGroupMin() {\r\n var originalMinSize = datas.minSize;\r\n originalEvents.forEach(function (ev) {\r\n var _a = ev.datas, childMinSize = _a.minSize, childStartOffsetWidth = _a.startOffsetWidth, childStartOffsetHeight = _a.startOffsetHeight;\r\n var parentMinWidth = parentStartOffsetWidth\r\n * (childStartOffsetWidth ? childMinSize[0] / childStartOffsetWidth : 0);\r\n var parentMinHeight = parentStartOffsetHeight\r\n * (childStartOffsetHeight ? childMinSize[1] / childStartOffsetHeight : 0);\r\n originalMinSize[0] = Math.max(originalMinSize[0], parentMinWidth);\r\n originalMinSize[1] = Math.max(originalMinSize[1], parentMinHeight);\r\n });\r\n }\r\n function updateGroupMax() {\r\n var originalMaxSize = datas.maxSize;\r\n originalEvents.forEach(function (ev) {\r\n var _a = ev.datas, childMaxSize = _a.maxSize, childStartOffsetWidth = _a.startOffsetWidth, childStartOffsetHeight = _a.startOffsetHeight;\r\n var parentMaxWidth = parentStartOffsetWidth\r\n * (childStartOffsetWidth ? childMaxSize[0] / childStartOffsetWidth : 0);\r\n var parentMaxHeight = parentStartOffsetHeight\r\n * (childStartOffsetHeight ? childMaxSize[1] / childStartOffsetHeight : 0);\r\n originalMaxSize[0] = Math.min(originalMaxSize[0], parentMaxWidth);\r\n originalMaxSize[1] = Math.min(originalMaxSize[1], parentMaxHeight);\r\n });\r\n }\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n return startChildDist(moveable, child, datas, ev);\r\n });\r\n updateGroupMin();\r\n updateGroupMax();\r\n var setFixedDirection = function (fixedDirection) {\r\n params.setFixedDirection(fixedDirection);\r\n events.forEach(function (ev, i) {\r\n ev.setFixedDirection(fixedDirection);\r\n startChildDist(moveable, ev.moveable, datas, originalEvents[i]);\r\n });\r\n };\r\n datas.setFixedDirection = setFixedDirection;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events.map(function (ev) {\r\n return __assign(__assign({}, ev), { setMin: function (minSize) {\r\n ev.setMin(minSize);\r\n updateGroupMin();\r\n }, setMax: function (maxSize) {\r\n ev.setMax(maxSize);\r\n updateGroupMax();\r\n } });\r\n }), setFixedDirection: setFixedDirection, setMin: function (minSize) {\r\n params.setMin(minSize);\r\n updateGroupMin();\r\n }, setMax: function (maxSize) {\r\n params.setMax(maxSize);\r\n updateGroupMax();\r\n } });\r\n var result = triggerEvent(moveable, \"onResizeGroupStart\", nextParams);\r\n datas.isResize = result !== false;\r\n return datas.isResize ? params : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n var props = getProps(moveable.props, \"resizable\");\r\n catchEvent(moveable, \"onBeforeResize\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeResizeGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, __assign(__assign({}, e), { isGroup: true }));\r\n if (!params) {\r\n return;\r\n }\r\n var boundingWidth = params.boundingWidth, boundingHeight = params.boundingHeight, dist = params.dist;\r\n var keepRatio = props.keepRatio;\r\n var parentScale = [\r\n boundingWidth / (boundingWidth - dist[0]),\r\n boundingHeight / (boundingHeight - dist[1]),\r\n ];\r\n var fixedPosition = datas.fixedPosition;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var _a = __read(calculate(createRotateMatrix(moveable.rotation / 180 * Math.PI, 3), [\r\n ev.datas.originalX * parentScale[0],\r\n ev.datas.originalY * parentScale[1],\r\n 1,\r\n ], 3), 2), clientX = _a[0], clientY = _a[1];\r\n return __assign(__assign({}, ev), { parentDist: null, parentScale: parentScale, dragClient: plus(fixedPosition, [clientX, clientY]), parentKeepRatio: keepRatio });\r\n });\r\n var nextParams = __assign({ targets: props.targets, events: events }, params);\r\n triggerEvent(moveable, \"onResizeGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onResizeGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Resizable#request\r\n * @param {Moveable.Resizable.ResizableRequestParam} e - the Resizable's request parameter\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"resizable\", { deltaWidth: 10, deltaHeight: 10 }, true);\r\n *\r\n * // Use Absolute Value\r\n * moveable.request(\"resizable\", { offsetWidth: 100, offsetHeight: 100 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"resizable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n *\r\n * // Use Absolute Value\r\n * moveable.request(\"resizable\", { offsetWidth: 100, offsetHeight: 100 });\r\n * moveable.request(\"resizable\", { offsetWidth: 110, offsetHeight: 100 });\r\n * moveable.request(\"resizable\", { offsetWidth: 120, offsetHeight: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var useSnap = false;\r\n var rect = moveable.getRect();\r\n return {\r\n isControl: true,\r\n requestStart: function (e) {\r\n var _a;\r\n useSnap = e.useSnap;\r\n return {\r\n datas: datas,\r\n parentDirection: e.direction || [1, 1],\r\n parentIsWidth: (_a = e === null || e === void 0 ? void 0 : e.horizontal) !== null && _a !== void 0 ? _a : true,\r\n useSnap: useSnap,\r\n };\r\n },\r\n request: function (e) {\r\n if (\"offsetWidth\" in e) {\r\n distWidth = e.offsetWidth - rect.offsetWidth;\r\n }\r\n else if (\"deltaWidth\" in e) {\r\n distWidth += e.deltaWidth;\r\n }\r\n if (\"offsetHeight\" in e) {\r\n distHeight = e.offsetHeight - rect.offsetHeight;\r\n }\r\n else if (\"deltaHeight\" in e) {\r\n distHeight += e.deltaHeight;\r\n }\r\n return {\r\n datas: datas,\r\n parentDist: [distWidth, distHeight],\r\n parentKeepRatio: e.keepRatio,\r\n useSnap: useSnap,\r\n };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n unset: function (moveable) {\r\n moveable.state.gestos.resizable = null;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be resized.\r\n * @name Moveable.Resizable#resizable\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: false,\r\n * });\r\n *\r\n * moveable.resizable = true;\r\n */\r\n/**\r\n * throttle of width, height when resize. If throttleResize is set to less than 1, the target may shake.\r\n * @name Moveable.Resizable#throttleResize\r\n * @default 1\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * throttleResize: 1,\r\n * });\r\n *\r\n * moveable.throttleResize = 0;\r\n */\r\n/**\r\n * When resize or scale, keeps a ratio of the width, height.\r\n * @name Moveable.Resizable#keepRatio\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * });\r\n *\r\n * moveable.keepRatio = true;\r\n */\r\n/**\r\n * Set directions to show the control box.\r\n * @name Moveable.Resizable#renderDirections\r\n * @default [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"]\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n * });\r\n *\r\n * moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n */\r\n/**\r\n * Function to convert size for resize\r\n * @name Moveable.Resizable#resizeFormat\r\n * @default oneself\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * resizeFormat: v => v,\r\n * });\r\n *\r\n * moveable.resizeFormat = (size: number[]) => ([Math.trunc(size[0]), Math.trunc(size[1])];\r\n */\r\n/**\r\n * When the resize starts, the resizeStart event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeStart\r\n * @param {Moveable.Resizable.OnResizeStart} - Parameters for the resizeStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resizeStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When resizing, `beforeResize` is called before `resize` occurs. In `beforeResize`, you can get and set the pre-value before resizing.\r\n * @memberof Moveable.Resizable\r\n * @event beforeResize\r\n * @param {Moveable.Resizable.OnBeforeResize} - Parameters for the `beforeResize` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"beforeResize\", ({ setFixedDirection }) => {\r\n * if (shiftKey) {\r\n * setFixedDirection([0, 0]);\r\n * }\r\n * });\r\n * moveable.on(\"resize\", ({ target, width, height, drag }) => {\r\n * target.style.width = `${width}px`;\r\n * target.style.height = `${height}px`;\r\n * target.style.transform = drag.transform;\r\n * });\r\n */\r\n/**\r\n * When resizing, the resize event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resize\r\n * @param {Moveable.Resizable.OnResize} - Parameters for the resize event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resize\", ({ target, width, height }) => {\r\n * target.style.width = `${e.width}px`;\r\n * target.style.height = `${e.height}px`;\r\n * });\r\n */\r\n/**\r\n * When the resize finishes, the resizeEnd event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeEnd\r\n * @param {Moveable.Resizable.OnResizeEnd} - Parameters for the resizeEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resizeEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group resize starts, the `resizeGroupStart` event is called.\r\n* @memberof Moveable.Resizable\r\n* @event resizeGroupStart\r\n* @param {Moveable.Resizable.OnResizeGroupStart} - Parameters for the `resizeGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* resizable: true\r\n* });\r\n* moveable.on(\"resizeGroupStart\", ({ targets }) => {\r\n* console.log(\"onResizeGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group resize, the `resizeGroup` event is called.\r\n* @memberof Moveable.Resizable\r\n* @event resizeGroup\r\n* @param {Moveable.Resizable.onResizeGroup} - Parameters for the `resizeGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* resizable: true\r\n* });\r\n* moveable.on(\"resizeGroup\", ({ targets, events }) => {\r\n* console.log(\"onResizeGroup\", targets);\r\n* events.forEach(ev => {\r\n* const offset = [\r\n* direction[0] < 0 ? -ev.delta[0] : 0,\r\n* direction[1] < 0 ? -ev.delta[1] : 0,\r\n* ];\r\n* // ev.drag is a drag event that occurs when the group resize.\r\n* const left = offset[0] + ev.drag.beforeDist[0];\r\n* const top = offset[1] + ev.drag.beforeDist[1];\r\n* const width = ev.width;\r\n* const top = ev.top;\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group resize finishes, the `resizeGroupEnd` event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeGroupEnd\r\n * @param {Moveable.Resizable.OnResizeGroupEnd} - Parameters for the `resizeGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * resizable: true\r\n * });\r\n * moveable.on(\"resizeGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onResizeGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\n/**\r\n * @namespace Rotatable\r\n * @memberof Moveable\r\n * @description Rotatable indicates whether the target can be rotated.\r\n */\r\nfunction setRotateStartInfo(moveable, datas, clientX, clientY, rect) {\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var n = state.is3d ? 4 : 3;\r\n var origin = datas.origin;\r\n var nextOrigin = calculatePosition(moveable.state.rootMatrix, \r\n // TO-DO #710\r\n minus([origin[0], origin[1]], groupable ? [0, 0] : [state.left, state.top]), n);\r\n var startAbsoluteOrigin = plus([rect.left, rect.top], nextOrigin);\r\n datas.startAbsoluteOrigin = startAbsoluteOrigin;\r\n datas.prevDeg = getRad(startAbsoluteOrigin, [clientX, clientY]) / Math.PI * 180;\r\n datas.defaultDeg = datas.prevDeg;\r\n datas.prevSnapDeg = 0;\r\n datas.loop = 0;\r\n datas.startDist = getDist$1(startAbsoluteOrigin, [clientX, clientY]);\r\n}\r\nfunction getAbsoluteDist(deg, direction, datas) {\r\n var defaultDeg = datas.defaultDeg, prevDeg = datas.prevDeg;\r\n var normalizedPrevDeg = prevDeg % 360;\r\n var loop = Math.floor(prevDeg / 360);\r\n if (normalizedPrevDeg < 0) {\r\n normalizedPrevDeg += 360;\r\n }\r\n if (normalizedPrevDeg > deg && normalizedPrevDeg > 270 && deg < 90) {\r\n // 360 => 0\r\n ++loop;\r\n }\r\n else if (normalizedPrevDeg < deg && normalizedPrevDeg < 90 && deg > 270) {\r\n // 0 => 360\r\n --loop;\r\n }\r\n var dist = direction * (loop * 360 + deg - defaultDeg);\r\n datas.prevDeg = defaultDeg + dist;\r\n return dist;\r\n}\r\nfunction getAbsoluteDistByClient(clientX, clientY, direction, datas) {\r\n return getAbsoluteDist(getRad(datas.startAbsoluteOrigin, [clientX, clientY]) / Math.PI * 180, direction, datas);\r\n}\r\nfunction getRotateInfo(moveable, moveableRect, datas, dist, startValue, checkSnap) {\r\n var _a = moveable.props.throttleRotate, throttleRotate = _a === void 0 ? 0 : _a;\r\n var prevSnapDeg = datas.prevSnapDeg;\r\n var snapRotation = 0;\r\n var isSnap = false;\r\n if (checkSnap) {\r\n var result = checkSnapRotate(moveable, moveableRect, dist, startValue + dist);\r\n isSnap = result.isSnap;\r\n snapRotation = startValue + result.dist;\r\n }\r\n if (!isSnap) {\r\n snapRotation = throttle(startValue + dist, throttleRotate);\r\n }\r\n var snapDeg = snapRotation - startValue;\r\n datas.prevSnapDeg = snapDeg;\r\n return [snapDeg - prevSnapDeg, snapDeg, snapRotation];\r\n}\r\nfunction getRotationPositions(rotationPosition, _a, direction) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n if (rotationPosition === \"none\") {\r\n return [];\r\n }\r\n if (isArray(rotationPosition)) {\r\n return rotationPosition.map(function (child) { return getRotationPositions(child, [pos1, pos2, pos3, pos4], direction)[0]; });\r\n }\r\n var _c = __read((rotationPosition || \"top\").split(\"-\"), 2), dir1 = _c[0], dir2 = _c[1];\r\n var radPoses = [pos1, pos2];\r\n if (dir1 === \"left\") {\r\n radPoses = [pos3, pos1];\r\n }\r\n else if (dir1 === \"right\") {\r\n radPoses = [pos2, pos4];\r\n }\r\n else if (dir1 === \"bottom\") {\r\n radPoses = [pos4, pos3];\r\n }\r\n var pos = [\r\n (radPoses[0][0] + radPoses[1][0]) / 2,\r\n (radPoses[0][1] + radPoses[1][1]) / 2,\r\n ];\r\n var rad = getRotationRad(radPoses, direction);\r\n if (dir2) {\r\n var isStart = dir2 === \"top\" || dir2 === \"left\";\r\n var isReverse = dir1 === \"bottom\" || dir1 === \"left\";\r\n pos = radPoses[(isStart && !isReverse) || (!isStart && isReverse) ? 0 : 1];\r\n }\r\n return [[pos, rad]];\r\n}\r\nfunction dragControlCondition(moveable, e) {\r\n if (e.isRequest) {\r\n return e.requestAble === \"rotatable\";\r\n }\r\n var target = e.inputEvent.target;\r\n if (hasClass(target, prefix(\"rotation-control\"))\r\n || (moveable.props.rotateAroundControls && hasClass(target, prefix(\"around-control\")))\r\n || (hasClass(target, prefix(\"control\")) && hasClass(target, prefix(\"rotatable\")))) {\r\n return true;\r\n }\r\n var rotationTarget = moveable.props.rotationTarget;\r\n if (rotationTarget) {\r\n return getRefTargets(rotationTarget, true).some(function (element) {\r\n if (!element) {\r\n return false;\r\n }\r\n return target === element || target.contains(element);\r\n });\r\n }\r\n return false;\r\n}\r\nvar css = \".rotation {\\nposition: absolute;\\nheight: 40px;\\nwidth: 1px;\\ntransform-origin: 50% 100%;\\nheight: calc(40px * var(--zoom));\\ntop: auto;\\nleft: 0;\\nbottom: 100%;\\nwill-change: transform;\\n}\\n.rotation .rotation-line {\\ndisplay: block;\\nwidth: 100%;\\nheight: 100%;\\ntransform-origin: 50% 50%;\\n}\\n.rotation .rotation-control {\\nborder-color: #4af;\\nborder-color: var(--moveable-color);\\nbackground:#fff;\\ncursor: alias;\\n}\\n:global .view-rotation-dragging, .rotatable.direction.control {\\ncursor: alias;\\n}\\n.rotatable.direction.control.move {\\ncursor: move;\\n}\\n\";\r\nvar Rotatable = {\r\n name: \"rotatable\",\r\n canPinch: true,\r\n props: [\r\n \"rotatable\",\r\n \"rotationPosition\",\r\n \"throttleRotate\",\r\n \"renderDirections\",\r\n \"rotationTarget\",\r\n \"rotateAroundControls\",\r\n \"edge\",\r\n \"resolveAblesWithRotatable\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"rotateStart\",\r\n \"beforeRotate\",\r\n \"rotate\",\r\n \"rotateEnd\",\r\n \"rotateGroupStart\",\r\n \"beforeRotateGroup\",\r\n \"rotateGroup\",\r\n \"rotateGroupEnd\",\r\n ],\r\n css: [css],\r\n viewClassName: function (moveable) {\r\n if (!moveable.isDragging(\"rotatable\")) {\r\n return \"\";\r\n }\r\n return prefix(\"view-rotation-dragging\");\r\n },\r\n render: function (moveable, React) {\r\n var _a = getProps(moveable.props, \"rotatable\"), rotatable = _a.rotatable, rotationPosition = _a.rotationPosition, zoom = _a.zoom, renderDirections = _a.renderDirections, rotateAroundControls = _a.rotateAroundControls, resolveAblesWithRotatable = _a.resolveAblesWithRotatable;\r\n var _b = moveable.getState(), renderPoses = _b.renderPoses, direction = _b.direction;\r\n if (!rotatable) {\r\n return null;\r\n }\r\n var positions = getRotationPositions(rotationPosition, renderPoses, direction);\r\n var jsxs = [];\r\n positions.forEach(function (_a, i) {\r\n var _b = __read(_a, 2), pos = _b[0], rad = _b[1];\r\n jsxs.push(React.createElement(\"div\", { key: \"rotation\".concat(i), className: prefix(\"rotation\"), style: {\r\n // tslint:disable-next-line: max-line-length\r\n transform: \"translate(-50%) translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rad, \"rad)\"),\r\n } },\r\n React.createElement(\"div\", { className: prefix(\"line rotation-line\"), style: {\r\n transform: \"scaleX(\".concat(zoom, \")\"),\r\n } }),\r\n React.createElement(\"div\", { className: prefix(\"control rotation-control\"), style: {\r\n transform: \"translate(0.5px) scale(\".concat(zoom, \")\"),\r\n } })));\r\n });\r\n if (renderDirections) {\r\n var ables = getKeys(resolveAblesWithRotatable || {});\r\n var resolveMap_1 = {};\r\n ables.forEach(function (name) {\r\n resolveAblesWithRotatable[name].forEach(function (direction) {\r\n resolveMap_1[direction] = name;\r\n });\r\n });\r\n var directionControlInfos = [];\r\n if (isArray(renderDirections)) {\r\n directionControlInfos = renderDirections.map(function (dir) {\r\n var able = resolveMap_1[dir];\r\n return {\r\n data: able ? { resolve: able } : {},\r\n classNames: able ? [\"move\"] : [],\r\n dir: dir,\r\n };\r\n });\r\n }\r\n jsxs.push.apply(jsxs, __spreadArray([], __read(renderDirectionControlsByInfos(moveable, \"rotatable\", directionControlInfos, React)), false));\r\n }\r\n if (rotateAroundControls) {\r\n jsxs.push.apply(jsxs, __spreadArray([], __read(renderAroundControls(moveable, React)), false));\r\n }\r\n return jsxs;\r\n },\r\n dragControlCondition: dragControlCondition,\r\n dragControlStart: function (moveable, e) {\r\n var _a;\r\n var _b;\r\n var datas = e.datas, clientX = e.clientX, clientY = e.clientY, parentRotate = e.parentRotate, parentFlag = e.parentFlag, isPinch = e.isPinch, isRequest = e.isRequest;\r\n var state = moveable.state;\r\n var target = state.target, left = state.left, top = state.top, direction = state.direction, beforeDirection = state.beforeDirection, targetTransform = state.targetTransform, moveableClientRect = state.moveableClientRect, offsetMatrix = state.offsetMatrix, targetMatrix = state.targetMatrix, allMatrix = state.allMatrix, width = state.width, height = state.height;\r\n if (!isRequest && !target) {\r\n return false;\r\n }\r\n var rect = moveable.getRect();\r\n datas.rect = rect;\r\n datas.transform = targetTransform;\r\n datas.left = left;\r\n datas.top = top;\r\n var setFixedPosition = function (fixedPosition) {\r\n var result = getOffsetFixedPositionInfo(moveable.state, fixedPosition);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedOffset = result.fixedOffset;\r\n datas.fixedPosition = result.fixedPosition;\r\n if (resizeStart) {\r\n resizeStart.setFixedPosition(fixedPosition);\r\n }\r\n };\r\n var setFixedDirection = function (fixedDirection) {\r\n var result = getOffsetFixedDirectionInfo(moveable.state, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedOffset = result.fixedOffset;\r\n datas.fixedPosition = result.fixedPosition;\r\n if (resizeStart) {\r\n resizeStart.setFixedDirection(fixedDirection);\r\n }\r\n };\r\n var startClientX = clientX;\r\n var startClientY = clientY;\r\n if (isRequest || isPinch || parentFlag) {\r\n var externalRotate = parentRotate || 0;\r\n datas.beforeInfo = {\r\n origin: rect.beforeOrigin,\r\n prevDeg: externalRotate,\r\n defaultDeg: externalRotate,\r\n prevSnapDeg: 0,\r\n startDist: 0,\r\n };\r\n datas.afterInfo = __assign(__assign({}, datas.beforeInfo), { origin: rect.origin });\r\n datas.absoluteInfo = __assign(__assign({}, datas.beforeInfo), { origin: rect.origin, startValue: externalRotate });\r\n }\r\n else {\r\n var inputTarget = (_b = e.inputEvent) === null || _b === void 0 ? void 0 : _b.target;\r\n if (inputTarget) {\r\n var regionDirection = inputTarget.getAttribute(\"data-direction\") || \"\";\r\n var controlDirection = DIRECTION_REGION_TO_DIRECTION[regionDirection];\r\n if (controlDirection) {\r\n datas.isControl = true;\r\n datas.isAroundControl = hasClass(inputTarget, prefix(\"around-control\"));\r\n datas.controlDirection = controlDirection;\r\n var resolve = inputTarget.getAttribute(\"data-resolve\");\r\n if (resolve) {\r\n datas.resolveAble = resolve;\r\n }\r\n var clientPoses = calculateMoveableClientPositions(state.rootMatrix, state.renderPoses, moveableClientRect);\r\n _a = __read(getPosByDirection(clientPoses, controlDirection), 2), startClientX = _a[0], startClientY = _a[1];\r\n }\r\n }\r\n datas.beforeInfo = { origin: rect.beforeOrigin };\r\n datas.afterInfo = { origin: rect.origin };\r\n datas.absoluteInfo = {\r\n origin: rect.origin,\r\n startValue: rect.rotation,\r\n };\r\n var originalFixedPosition_1 = setFixedPosition;\r\n setFixedPosition = function (fixedPosition) {\r\n var n = state.is3d ? 4 : 3;\r\n var _a = __read(plus(getOrigin(targetMatrix, n), fixedPosition), 2), originX = _a[0], originY = _a[1];\r\n var fixedBeforeOrigin = calculate(offsetMatrix, convertPositionMatrix([originX, originY], n));\r\n var fixedAfterOrigin = calculate(allMatrix, convertPositionMatrix([fixedPosition[0], fixedPosition[1]], n));\r\n originalFixedPosition_1(fixedPosition);\r\n var posDelta = state.posDelta;\r\n datas.beforeInfo.origin = minus(fixedBeforeOrigin, posDelta);\r\n datas.afterInfo.origin = minus(fixedAfterOrigin, posDelta);\r\n datas.absoluteInfo.origin = minus(fixedAfterOrigin, posDelta);\r\n setRotateStartInfo(moveable, datas.beforeInfo, startClientX, startClientY, moveableClientRect);\r\n setRotateStartInfo(moveable, datas.afterInfo, startClientX, startClientY, moveableClientRect);\r\n setRotateStartInfo(moveable, datas.absoluteInfo, startClientX, startClientY, moveableClientRect);\r\n };\r\n setFixedDirection = function (fixedDirection) {\r\n var fixedPosition = getPosByDirection([\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ], fixedDirection);\r\n setFixedPosition(fixedPosition);\r\n };\r\n }\r\n datas.startClientX = startClientX;\r\n datas.startClientY = startClientY;\r\n datas.direction = direction;\r\n datas.beforeDirection = beforeDirection;\r\n datas.startValue = 0;\r\n datas.datas = {};\r\n setDefaultTransformIndex(moveable, e, \"rotate\");\r\n var dragStart = false;\r\n var resizeStart = false;\r\n if (datas.isControl && datas.resolveAble) {\r\n var resolveAble = datas.resolveAble;\r\n if (resolveAble === \"resizable\") {\r\n resizeStart = Resizable.dragControlStart(moveable, __assign(__assign({}, (new CustomGesto(\"resizable\").dragStart([0, 0], e))), { parentPosition: datas.controlPosition, parentFixedPosition: datas.fixedPosition }));\r\n }\r\n }\r\n if (!resizeStart) {\r\n dragStart = Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e));\r\n }\r\n setFixedPosition(getTotalOrigin(moveable));\r\n var params = fillParams(moveable, e, __assign(__assign({ set: function (rotatation) {\r\n datas.startValue = rotatation * Math.PI / 180;\r\n }, setFixedDirection: setFixedDirection, setFixedPosition: setFixedPosition }, fillTransformStartEvent(moveable, e)), { dragStart: dragStart, resizeStart: resizeStart }));\r\n var result = triggerEvent(moveable, \"onRotateStart\", params);\r\n datas.isRotate = result !== false;\r\n state.snapRenderInfo = {\r\n request: e.isRequest,\r\n };\r\n return datas.isRotate ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a, _b, _c;\r\n var datas = e.datas, clientDistX = e.clientDistX, clientDistY = e.clientDistY, parentRotate = e.parentRotate, parentFlag = e.parentFlag, isPinch = e.isPinch, groupDelta = e.groupDelta, resolveMatrix = e.resolveMatrix;\r\n var beforeDirection = datas.beforeDirection, beforeInfo = datas.beforeInfo, afterInfo = datas.afterInfo, absoluteInfo = datas.absoluteInfo, isRotate = datas.isRotate, startValue = datas.startValue, rect = datas.rect, startClientX = datas.startClientX, startClientY = datas.startClientY;\r\n if (!isRotate) {\r\n return;\r\n }\r\n resolveTransformEvent(moveable, e, \"rotate\");\r\n var targetDirection = getTransformDirection(e);\r\n var direction = beforeDirection * targetDirection;\r\n var parentMoveable = moveable.props.parentMoveable;\r\n var beforeDelta = 0;\r\n var beforeDist;\r\n var beforeRotation;\r\n var delta = 0;\r\n var dist;\r\n var rotation;\r\n var absoluteDelta = 0;\r\n var absoluteDist;\r\n var absoluteRotation;\r\n var startRotation = 180 / Math.PI * startValue;\r\n var absoluteStartRotation = absoluteInfo.startValue;\r\n var isSnap = false;\r\n var nextClientX = startClientX + clientDistX;\r\n var nextClientY = startClientY + clientDistY;\r\n if (!parentFlag && \"parentDist\" in e) {\r\n var parentDist = e.parentDist;\r\n beforeDist = parentDist;\r\n dist = parentDist;\r\n absoluteDist = parentDist;\r\n }\r\n else if (isPinch || parentFlag) {\r\n beforeDist = getAbsoluteDist(parentRotate, beforeDirection, beforeInfo);\r\n dist = getAbsoluteDist(parentRotate, direction, afterInfo);\r\n absoluteDist = getAbsoluteDist(parentRotate, direction, absoluteInfo);\r\n }\r\n else {\r\n beforeDist = getAbsoluteDistByClient(nextClientX, nextClientY, beforeDirection, beforeInfo);\r\n dist = getAbsoluteDistByClient(nextClientX, nextClientY, direction, afterInfo);\r\n absoluteDist = getAbsoluteDistByClient(nextClientX, nextClientY, direction, absoluteInfo);\r\n isSnap = true;\r\n }\r\n beforeRotation = startRotation + beforeDist;\r\n rotation = startRotation + dist;\r\n absoluteRotation = absoluteStartRotation + absoluteDist;\r\n triggerEvent(moveable, \"onBeforeRotate\", fillParams(moveable, e, {\r\n beforeRotation: beforeRotation,\r\n rotation: rotation,\r\n absoluteRotation: absoluteRotation,\r\n setRotation: function (nextRotation) {\r\n dist = nextRotation - startRotation;\r\n beforeDist = dist;\r\n absoluteDist = dist;\r\n },\r\n }, true));\r\n _a = __read(getRotateInfo(moveable, rect, beforeInfo, beforeDist, startRotation, isSnap), 3), beforeDelta = _a[0], beforeDist = _a[1], beforeRotation = _a[2];\r\n _b = __read(getRotateInfo(moveable, rect, afterInfo, dist, startRotation, isSnap), 3), delta = _b[0], dist = _b[1], rotation = _b[2];\r\n _c = __read(getRotateInfo(moveable, rect, absoluteInfo, absoluteDist, absoluteStartRotation, isSnap), 3), absoluteDelta = _c[0], absoluteDist = _c[1], absoluteRotation = _c[2];\r\n if (!absoluteDelta && !delta && !beforeDelta && !parentMoveable && !resolveMatrix) {\r\n return;\r\n }\r\n var nextTransform = convertTransformFormat(datas, \"rotate(\".concat(rotation, \"deg)\"), \"rotate(\".concat(dist, \"deg)\"));\r\n if (resolveMatrix) {\r\n datas.fixedPosition = getTranslateFixedPosition(moveable, datas.targetAllTransform, datas.fixedDirection, datas.fixedOffset, datas);\r\n }\r\n var inverseDist = getRotateDist(moveable, dist, datas);\r\n var inverseDelta = minus(plus(groupDelta || [0, 0], inverseDist), datas.prevInverseDist || [0, 0]);\r\n datas.prevInverseDist = inverseDist;\r\n datas.requestValue = null;\r\n var dragEvent = fillTransformEvent(moveable, nextTransform, inverseDelta, isPinch, e);\r\n var transformEvent = dragEvent;\r\n var parentDistance = getDist$1([nextClientX, nextClientY], absoluteInfo.startAbsoluteOrigin) - absoluteInfo.startDist;\r\n var resize = undefined;\r\n if (datas.resolveAble === \"resizable\") {\r\n var resizeEvent = Resizable.dragControl(moveable, __assign(__assign({}, setCustomDrag(e, moveable.state, [e.deltaX, e.deltaY], !!isPinch, false, \"resizable\")), { resolveMatrix: true, parentDistance: parentDistance }));\r\n if (resizeEvent) {\r\n resize = resizeEvent;\r\n transformEvent = fillAfterTransform(transformEvent, resizeEvent, e);\r\n }\r\n }\r\n var params = fillParams(moveable, e, __assign(__assign({ delta: delta, dist: dist, rotate: rotation, rotation: rotation, beforeDist: beforeDist, beforeDelta: beforeDelta, beforeRotate: beforeRotation, beforeRotation: beforeRotation, absoluteDist: absoluteDist, absoluteDelta: absoluteDelta, absoluteRotate: absoluteRotation, absoluteRotation: absoluteRotation, isPinch: !!isPinch, resize: resize }, dragEvent), transformEvent));\r\n triggerEvent(moveable, \"onRotate\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n datas.isRotate = false;\r\n var params = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onRotateEnd\", params);\r\n return params;\r\n },\r\n dragGroupControlCondition: dragControlCondition,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var _a = moveable.state, parentLeft = _a.left, parentTop = _a.top, parentBeforeOrigin = _a.beforeOrigin;\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n params.set(datas.beforeDirection * moveable.rotation);\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n var _a = child.state, left = _a.left, top = _a.top, beforeOrigin = _a.beforeOrigin;\r\n var childClient = plus(minus([left, top], [parentLeft, parentTop]), minus(beforeOrigin, parentBeforeOrigin));\r\n ev.datas.startGroupClient = childClient;\r\n ev.datas.groupClient = childClient;\r\n return __assign(__assign({}, ev), { parentRotate: 0 });\r\n });\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events });\r\n var result = triggerEvent(moveable, \"onRotateGroupStart\", nextParams);\r\n datas.isRotate = result !== false;\r\n return datas.isRotate ? params : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n catchEvent(moveable, \"onBeforeRotate\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeRotateGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: moveable.props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return;\r\n }\r\n var direction = datas.beforeDirection;\r\n var parentRotate = params.beforeDist;\r\n var rad = parentRotate / 180 * Math.PI;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var startGroupClient = ev.datas.startGroupClient;\r\n var _a = __read(ev.datas.groupClient, 2), prevClientX = _a[0], prevClientY = _a[1];\r\n var _b = __read(rotate(startGroupClient, rad * direction), 2), clientX = _b[0], clientY = _b[1];\r\n var delta = [clientX - prevClientX, clientY - prevClientY];\r\n ev.datas.groupClient = [clientX, clientY];\r\n return __assign(__assign({}, ev), { parentRotate: parentRotate, groupDelta: delta });\r\n });\r\n moveable.rotation = direction * params.beforeRotation;\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events, set: function (rotation) {\r\n moveable.rotation = rotation;\r\n }, setGroupRotation: function (rotation) {\r\n moveable.rotation = rotation;\r\n } }, params);\r\n triggerEvent(moveable, \"onRotateGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onRotateGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Rotatable#request\r\n * @param {object} [e] - the Resizable's request parameter\r\n * @param {number} [e.deltaRotate=0] - delta number of rotation\r\n * @param {number} [e.rotate=0] - absolute number of moveable's rotation\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"rotatable\", { deltaRotate: 10 }, true);\r\n *\r\n * * moveable.request(\"rotatable\", { rotate: 10 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"rotatable\");\r\n *\r\n * // request\r\n * requester.request({ deltaRotate: 10 });\r\n * requester.request({ deltaRotate: 10 });\r\n * requester.request({ deltaRotate: 10 });\r\n *\r\n * requester.request({ rotate: 10 });\r\n * requester.request({ rotate: 20 });\r\n * requester.request({ rotate: 30 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var distRotate = 0;\r\n var startRotation = moveable.getRotation();\r\n return {\r\n isControl: true,\r\n requestStart: function () {\r\n return { datas: datas };\r\n },\r\n request: function (e) {\r\n if (\"deltaRotate\" in e) {\r\n distRotate += e.deltaRotate;\r\n }\r\n else if (\"rotate\" in e) {\r\n distRotate = e.rotate - startRotation;\r\n }\r\n return { datas: datas, parentDist: distRotate };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether or not target can be rotated. (default: false)\r\n * @name Moveable.Rotatable#rotatable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.rotatable = true;\r\n */\r\n/**\r\n * You can specify the position of the rotation. (default: \"top\")\r\n * @name Moveable.Rotatable#rotationPosition\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotationPosition: \"top\",\r\n * });\r\n *\r\n * moveable.rotationPosition = \"bottom\"\r\n */\r\n/**\r\n * throttle of angle(degree) when rotate.\r\n * @name Moveable.Rotatable#throttleRotate\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleRotate = 1;\r\n */\r\n/**\r\n * When the rotate starts, the rotateStart event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateStart\r\n * @param {Moveable.Rotatable.OnRotateStart} - Parameters for the rotateStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { rotatable: true });\r\n * moveable.on(\"rotateStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n* When rotating, the rotate event is called.\r\n* @memberof Moveable.Rotatable\r\n* @event rotate\r\n* @param {Moveable.Rotatable.OnRotate} - Parameters for the rotate event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, { rotatable: true });\r\n* moveable.on(\"rotate\", ({ target, transform, dist }) => {\r\n* target.style.transform = transform;\r\n* });\r\n*/\r\n/**\r\n * When the rotate finishes, the rotateEnd event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateEnd\r\n * @param {Moveable.Rotatable.OnRotateEnd} - Parameters for the rotateEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { rotatable: true });\r\n * moveable.on(\"rotateEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n * When the group rotate starts, the `rotateGroupStart` event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateGroupStart\r\n * @param {Moveable.Rotatable.OnRotateGroupStart} - Parameters for the `rotateGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * rotatable: true\r\n * });\r\n * moveable.on(\"rotateGroupStart\", ({ targets }) => {\r\n * console.log(\"onRotateGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n* When the group rotate, the `rotateGroup` event is called.\r\n* @memberof Moveable.Rotatable\r\n* @event rotateGroup\r\n* @param {Moveable.Rotatable.OnRotateGroup} - Parameters for the `rotateGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* rotatable: true\r\n* });\r\n* moveable.on(\"rotateGroup\", ({ targets, events }) => {\r\n* console.log(\"onRotateGroup\", targets);\r\n* events.forEach(ev => {\r\n* const target = ev.target;\r\n* // ev.drag is a drag event that occurs when the group rotate.\r\n* const left = ev.drag.beforeDist[0];\r\n* const top = ev.drag.beforeDist[1];\r\n* const deg = ev.beforeDist;\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group rotate finishes, the `rotateGroupEnd` event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateGroupEnd\r\n * @param {Moveable.Rotatable.OnRotateGroupEnd} - Parameters for the `rotateGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * rotatable: true\r\n * });\r\n * moveable.on(\"rotateGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onRotateGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction renderGuideline(info, React) {\r\n var _a;\r\n var direction = info.direction, classNames = info.classNames, size = info.size, pos = info.pos, zoom = info.zoom, key = info.key;\r\n var isHorizontal = direction === \"horizontal\";\r\n var scaleType = isHorizontal ? \"Y\" : \"X\";\r\n // const scaleType2 = isHorizontal ? \"Y\" : \"X\";\r\n return React.createElement(\"div\", {\r\n key: key,\r\n className: classNames.join(\" \"),\r\n style: (_a = {},\r\n _a[isHorizontal ? \"width\" : \"height\"] = \"\".concat(size),\r\n _a.transform = \"translate(\".concat(pos[0], \", \").concat(pos[1], \") translate\").concat(scaleType, \"(-50%) scale\").concat(scaleType, \"(\").concat(zoom, \")\"),\r\n _a),\r\n });\r\n}\r\nfunction renderInnerGuideline(info, React) {\r\n return renderGuideline(__assign(__assign({}, info), { classNames: __spreadArray([\r\n prefix(\"line\", \"guideline\", info.direction)\r\n ], __read(info.classNames), false).filter(function (className) { return className; }), size: info.size || \"\".concat(info.sizeValue, \"px\"), pos: info.pos || info.posValue.map(function (v) { return \"\".concat(throttle(v, 0.1), \"px\"); }) }), React);\r\n}\r\nfunction renderSnapPoses(moveable, direction, snapPoses, minPos, targetPos, size, index, React) {\r\n var zoom = moveable.props.zoom;\r\n return snapPoses.map(function (_a, i) {\r\n var type = _a.type, pos = _a.pos;\r\n var renderPos = [0, 0];\r\n renderPos[index] = minPos;\r\n renderPos[index ? 0 : 1] = -targetPos + pos;\r\n return renderInnerGuideline({\r\n key: \"\".concat(direction, \"TargetGuideline\").concat(i),\r\n classNames: [prefix(\"target\", \"bold\", type)],\r\n posValue: renderPos,\r\n sizeValue: size,\r\n zoom: zoom,\r\n direction: direction,\r\n }, React);\r\n });\r\n}\r\nfunction renderGuidelines(moveable, type, guidelines, targetPos, targetRect, React) {\r\n var _a = moveable.props, zoom = _a.zoom, isDisplayInnerSnapDigit = _a.isDisplayInnerSnapDigit;\r\n var mainNames = type === \"horizontal\" ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n return guidelines.filter(function (_a) {\r\n var hide = _a.hide, elementRect = _a.elementRect;\r\n if (hide) {\r\n return false;\r\n }\r\n if (isDisplayInnerSnapDigit && elementRect) {\r\n // inner\r\n var rect = elementRect.rect;\r\n if (rect[mainNames.start] <= targetStart && targetEnd <= rect[mainNames.end]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }).map(function (guideline, i) {\r\n var pos = guideline.pos, size = guideline.size, element = guideline.element, className = guideline.className;\r\n var renderPos = [\r\n -targetPos[0] + pos[0],\r\n -targetPos[1] + pos[1],\r\n ];\r\n return renderInnerGuideline({\r\n key: \"\".concat(type, \"-default-guideline-\").concat(i),\r\n classNames: element ? [prefix(\"bold\"), className] : [prefix(\"normal\"), className],\r\n direction: type,\r\n posValue: renderPos,\r\n sizeValue: size,\r\n zoom: zoom,\r\n }, React);\r\n });\r\n}\r\nfunction renderDigitLine(moveable, type, lineType, index, gap, renderPos, className, React) {\r\n var _a;\r\n var _b = moveable.props, _c = _b.snapDigit, snapDigit = _c === void 0 ? 0 : _c, _d = _b.isDisplaySnapDigit, isDisplaySnapDigit = _d === void 0 ? true : _d, _e = _b.snapDistFormat, snapDistFormat = _e === void 0 ? function (v, type) {\r\n // Type can be used render different values.\r\n if (type === 'vertical') {\r\n return v;\r\n }\r\n return v;\r\n } : _e, zoom = _b.zoom;\r\n var scaleType = type === \"horizontal\" ? \"X\" : \"Y\";\r\n var sizeName = type === \"vertical\" ? \"height\" : \"width\";\r\n var absGap = Math.abs(gap);\r\n var snapSize = isDisplaySnapDigit\r\n ? parseFloat(absGap.toFixed(snapDigit))\r\n : 0;\r\n return React.createElement(\"div\", { key: \"\".concat(type, \"-\").concat(lineType, \"-guideline-\").concat(index), className: prefix(\"guideline-group\", type), style: (_a = {\r\n left: \"\".concat(renderPos[0], \"px\"),\r\n top: \"\".concat(renderPos[1], \"px\")\r\n },\r\n _a[sizeName] = \"\".concat(absGap, \"px\"),\r\n _a) },\r\n renderInnerGuideline({\r\n direction: type,\r\n classNames: [prefix(lineType), className],\r\n size: \"100%\",\r\n posValue: [0, 0],\r\n sizeValue: absGap,\r\n zoom: zoom,\r\n }, React),\r\n React.createElement(\"div\", { className: prefix(\"size-value\", \"gap\"), style: {\r\n transform: \"translate\".concat(scaleType, \"(-50%) scale(\").concat(zoom, \")\"),\r\n } }, snapSize > 0 ? snapDistFormat(snapSize, type) : \"\"));\r\n}\r\nfunction groupByElementGuidelines(type, guidelines, targetRect, isDisplayInnerSnapDigit) {\r\n var index = type === \"vertical\" ? 0 : 1;\r\n var otherIndex = type === \"vertical\" ? 1 : 0;\r\n var names = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[names.start];\r\n var targetEnd = targetRect[names.end];\r\n return groupBy(guidelines, function (guideline) {\r\n return guideline.pos[index];\r\n }).map(function (nextGuidelines) {\r\n var start = [];\r\n var end = [];\r\n var inner = [];\r\n nextGuidelines.forEach(function (guideline) {\r\n var _a, _b;\r\n var element = guideline.element;\r\n var rect = guideline.elementRect.rect;\r\n if (rect[names.end] < targetStart) {\r\n start.push(guideline);\r\n }\r\n else if (targetEnd < rect[names.start]) {\r\n end.push(guideline);\r\n }\r\n else if (rect[names.start] <= targetStart && targetEnd <= rect[names.end] && isDisplayInnerSnapDigit) {\r\n var pos = guideline.pos;\r\n var elementRect1 = { element: element, rect: __assign(__assign({}, rect), (_a = {}, _a[names.end] = rect[names.start], _a)) };\r\n var elementRect2 = { element: element, rect: __assign(__assign({}, rect), (_b = {}, _b[names.start] = rect[names.end], _b)) };\r\n var nextPos1 = [0, 0];\r\n var nextPos2 = [0, 0];\r\n nextPos1[index] = pos[index];\r\n nextPos1[otherIndex] = pos[otherIndex];\r\n nextPos2[index] = pos[index];\r\n nextPos2[otherIndex] = pos[otherIndex] + guideline.size;\r\n start.push({\r\n type: type,\r\n pos: nextPos1,\r\n size: 0,\r\n elementRect: elementRect1,\r\n direction: \"\",\r\n elementDirection: \"end\",\r\n });\r\n end.push({\r\n type: type,\r\n pos: nextPos2,\r\n size: 0,\r\n elementRect: elementRect2,\r\n direction: \"\",\r\n elementDirection: \"start\",\r\n });\r\n // inner.push(guideline);\r\n }\r\n });\r\n start.sort(function (a, b) {\r\n return b.pos[otherIndex] - a.pos[otherIndex];\r\n });\r\n end.sort(function (a, b) {\r\n return a.pos[otherIndex] - b.pos[otherIndex];\r\n });\r\n return {\r\n total: nextGuidelines,\r\n start: start,\r\n end: end,\r\n inner: inner,\r\n };\r\n });\r\n}\r\nfunction renderDashedGuidelines(moveable, guidelines, targetPos, targetRect, React) {\r\n var isDisplayInnerSnapDigit = moveable.props.isDisplayInnerSnapDigit;\r\n var rendered = [];\r\n [\"vertical\", \"horizontal\"].forEach(function (type) {\r\n var nextGuidelines = guidelines.filter(function (guideline) { return guideline.type === type; });\r\n var index = type === \"vertical\" ? 1 : 0;\r\n var otherIndex = index ? 0 : 1;\r\n var groups = groupByElementGuidelines(type, nextGuidelines, targetRect, isDisplayInnerSnapDigit);\r\n var mainNames = index ? HORIZONTAL_NAMES_MAP : VERTICAL_NAMES_MAP;\r\n var sideNames = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n groups.forEach(function (_a) {\r\n var total = _a.total, start = _a.start, end = _a.end, inner = _a.inner;\r\n var sidePos = targetPos[otherIndex] + total[0].pos[otherIndex] - targetRect[sideNames.start];\r\n var prevRect = targetRect;\r\n start.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size = prevRect[mainNames.start] - nextRect[mainNames.end];\r\n if (size > 0) {\r\n var renderPos = [0, 0];\r\n renderPos[index] = targetPos[index] + prevRect[mainNames.start] - targetStart - size;\r\n renderPos[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size, renderPos, guideline.className, React));\r\n }\r\n prevRect = nextRect;\r\n });\r\n prevRect = targetRect;\r\n end.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size = nextRect[mainNames.start] - prevRect[mainNames.end];\r\n if (size > 0) {\r\n var renderPos = [0, 0];\r\n renderPos[index] = targetPos[index] + prevRect[mainNames.end] - targetStart;\r\n renderPos[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size, renderPos, guideline.className, React));\r\n }\r\n prevRect = nextRect;\r\n });\r\n inner.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size1 = targetStart - nextRect[mainNames.start];\r\n var size2 = nextRect[mainNames.end] - targetEnd;\r\n var renderPos1 = [0, 0];\r\n var renderPos2 = [0, 0];\r\n renderPos1[index] = targetPos[index] - size1;\r\n renderPos1[otherIndex] = sidePos;\r\n renderPos2[index] = targetPos[index] + targetEnd - targetStart;\r\n renderPos2[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size1, renderPos1, guideline.className, React));\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size2, renderPos2, guideline.className, React));\r\n });\r\n });\r\n });\r\n return rendered;\r\n}\r\nfunction renderGapGuidelines(moveable, guidelines, targetPos, targetRect, React) {\r\n var rendered = [];\r\n [\"horizontal\", \"vertical\"].forEach(function (type) {\r\n var nextGuidelines = guidelines.filter(function (guideline) { return guideline.type === type; }).slice(0, 1);\r\n var index = type === \"vertical\" ? 0 : 1;\r\n var otherIndex = index ? 0 : 1;\r\n var mainNames = index ? HORIZONTAL_NAMES_MAP : VERTICAL_NAMES_MAP;\r\n var sideNames = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n var targetSideStart = targetRect[sideNames.start];\r\n var targetSideEnd = targetRect[sideNames.end];\r\n nextGuidelines.forEach(function (_a) {\r\n var gap = _a.gap, gapRects = _a.gapRects;\r\n var sideStartPos = Math.max.apply(Math, __spreadArray([targetSideStart], __read(gapRects.map(function (_a) {\r\n var rect = _a.rect;\r\n return rect[sideNames.start];\r\n })), false));\r\n var sideEndPos = Math.min.apply(Math, __spreadArray([targetSideEnd], __read(gapRects.map(function (_a) {\r\n var rect = _a.rect;\r\n return rect[sideNames.end];\r\n })), false));\r\n var sideCenterPos = (sideStartPos + sideEndPos) / 2;\r\n if (sideStartPos === sideEndPos || sideCenterPos === (targetSideStart + targetSideEnd) / 2) {\r\n return;\r\n }\r\n gapRects.forEach(function (_a) {\r\n var rect = _a.rect, className = _a.className;\r\n var renderPos = [targetPos[0], targetPos[1]];\r\n if (rect[mainNames.end] < targetStart) {\r\n renderPos[index] += rect[mainNames.end] - targetStart;\r\n }\r\n else if (targetEnd < rect[mainNames.start]) {\r\n renderPos[index] += rect[mainNames.start] - targetStart - gap;\r\n }\r\n else {\r\n return;\r\n }\r\n renderPos[otherIndex] += sideCenterPos - targetSideStart;\r\n rendered.push(renderDigitLine(moveable, index ? \"vertical\" : \"horizontal\", \"gap\", rendered.length, gap, renderPos, className, React));\r\n });\r\n });\r\n });\r\n return rendered;\r\n}\n\nfunction getTotalGuidelines(moveable) {\r\n var _a, _b;\r\n var state = moveable.state;\r\n var containerClientRect = state.containerClientRect, hasFixed = state.hasFixed;\r\n var overflow = containerClientRect.overflow, containerHeight = containerClientRect.scrollHeight, containerWidth = containerClientRect.scrollWidth, containerClientHeight = containerClientRect.clientHeight, containerClientWidth = containerClientRect.clientWidth, clientLeft = containerClientRect.clientLeft, clientTop = containerClientRect.clientTop;\r\n var _c = moveable.props, _d = _c.snapGap, snapGap = _d === void 0 ? true : _d, verticalGuidelines = _c.verticalGuidelines, horizontalGuidelines = _c.horizontalGuidelines, _e = _c.snapThreshold, snapThreshold = _e === void 0 ? 5 : _e, _f = _c.maxSnapElementGuidelineDistance, maxSnapElementGuidelineDistance = _f === void 0 ? Infinity : _f, isDisplayGridGuidelines = _c.isDisplayGridGuidelines;\r\n var _g = getRect(getAbsolutePosesByState(moveable.state)), top = _g.top, left = _g.left, bottom = _g.bottom, right = _g.right;\r\n var targetRect = { top: top, left: left, bottom: bottom, right: right, center: (left + right) / 2, middle: (top + bottom) / 2 };\r\n var elementGuidelines = getElementGuidelines(moveable);\r\n var totalGuidelines = __spreadArray([], __read(elementGuidelines), false);\r\n var snapThresholdMultiples = ((_b = (_a = state.snapThresholdInfo) === null || _a === void 0 ? void 0 : _a.multiples) !== null && _b !== void 0 ? _b : [1, 1]).map(function (n) { return n * snapThreshold; });\r\n if (snapGap) {\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getGapGuidelines(moveable, targetRect, snapThresholdMultiples)), false));\r\n }\r\n var snapOffset = __assign({}, (state.snapOffset || {\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n }));\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getGridGuidelines(moveable, overflow ? containerWidth : containerClientWidth, overflow ? containerHeight : containerClientHeight, clientLeft, clientTop, snapOffset, isDisplayGridGuidelines)), false));\r\n if (hasFixed) {\r\n var left_1 = containerClientRect.left, top_1 = containerClientRect.top;\r\n snapOffset.left += left_1;\r\n snapOffset.top += top_1;\r\n snapOffset.right += left_1;\r\n snapOffset.bottom += top_1;\r\n }\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getDefaultGuidelines(horizontalGuidelines || false, verticalGuidelines || false, overflow ? containerWidth : containerClientWidth, overflow ? containerHeight : containerClientHeight, clientLeft, clientTop, snapOffset)), false));\r\n totalGuidelines = totalGuidelines.filter(function (_a) {\r\n var element = _a.element, elementRect = _a.elementRect, type = _a.type;\r\n if (!element || !elementRect) {\r\n return true;\r\n }\r\n var rect = elementRect.rect;\r\n return checkBetweenRects(targetRect, rect, type, maxSnapElementGuidelineDistance);\r\n });\r\n return totalGuidelines;\r\n}\r\nfunction getGapGuidelines(moveable, targetRect, snapThresholds) {\r\n var _a = moveable.props, _b = _a.maxSnapElementGuidelineDistance, maxSnapElementGuidelineDistance = _b === void 0 ? Infinity : _b, _c = _a.maxSnapElementGapDistance, maxSnapElementGapDistance = _c === void 0 ? Infinity : _c;\r\n var elementRects = moveable.state.elementRects;\r\n var gapGuidelines = [];\r\n [\r\n [\"vertical\", VERTICAL_NAMES_MAP, HORIZONTAL_NAMES_MAP],\r\n [\"horizontal\", HORIZONTAL_NAMES_MAP, VERTICAL_NAMES_MAP],\r\n ].forEach(function (_a) {\r\n var _b = __read(_a, 3), type = _b[0], mainNames = _b[1], sideNames = _b[2];\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n var targetCenter = targetRect[mainNames.center];\r\n var targetStart2 = targetRect[sideNames.start];\r\n var targetEnd2 = targetRect[sideNames.end];\r\n // element : moveable\r\n var snapThresholdMap = {\r\n left: snapThresholds[0],\r\n top: snapThresholds[1],\r\n };\r\n function getDist(elementRect) {\r\n var rect = elementRect.rect;\r\n var snapThreshold = snapThresholdMap[mainNames.start];\r\n if (rect[mainNames.end] < targetStart + snapThreshold) {\r\n return targetStart - rect[mainNames.end];\r\n }\r\n else if (targetEnd - snapThreshold < rect[mainNames.start]) {\r\n return rect[mainNames.start] - targetEnd;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n var nextElementRects = elementRects.filter(function (elementRect) {\r\n var rect = elementRect.rect;\r\n if (rect[sideNames.start] > targetEnd2 || rect[sideNames.end] < targetStart2) {\r\n return false;\r\n }\r\n return getDist(elementRect) > 0;\r\n }).sort(function (a, b) {\r\n return getDist(a) - getDist(b);\r\n });\r\n var groups = [];\r\n nextElementRects.forEach(function (snapRect1) {\r\n nextElementRects.forEach(function (snapRect2) {\r\n if (snapRect1 === snapRect2) {\r\n return;\r\n }\r\n var rect1 = snapRect1.rect;\r\n var rect2 = snapRect2.rect;\r\n var rect1Start = rect1[sideNames.start];\r\n var rect1End = rect1[sideNames.end];\r\n var rect2Start = rect2[sideNames.start];\r\n var rect2End = rect2[sideNames.end];\r\n if (rect1Start > rect2End || rect2Start > rect1End) {\r\n return;\r\n }\r\n groups.push([snapRect1, snapRect2]);\r\n });\r\n });\r\n groups.forEach(function (_a) {\r\n var _b = __read(_a, 2), snapRect1 = _b[0], snapRect2 = _b[1];\r\n var rect1 = snapRect1.rect;\r\n var rect2 = snapRect2.rect;\r\n var rect1Start = rect1[mainNames.start];\r\n var rect1End = rect1[mainNames.end];\r\n var rect2Start = rect2[mainNames.start];\r\n var rect2End = rect2[mainNames.end];\r\n var snapThreshold = snapThresholdMap[mainNames.start];\r\n var gap = 0;\r\n var pos = 0;\r\n var isStart = false;\r\n var isCenter = false;\r\n var isEnd = false;\r\n if (rect1End <= targetStart && targetEnd <= rect2Start) {\r\n // (l)element1(r) : (l)target(r) : (l)element2(r)\r\n isCenter = true;\r\n gap = ((rect2Start - rect1End) - (targetEnd - targetStart)) / 2;\r\n pos = rect1End + gap + (targetEnd - targetStart) / 2;\r\n if (abs(pos - targetCenter) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else if (rect1End < rect2Start && rect2End < targetStart + snapThreshold) {\r\n // (l)element1(r) : (l)element2(r) : (l)target\r\n isStart = true;\r\n gap = rect2Start - rect1End;\r\n pos = rect2End + gap;\r\n if (abs(pos - targetStart) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else if (rect1End < rect2Start && targetEnd - snapThreshold < rect1Start) {\r\n // target(r) : (l)element1(r) : (l)element2(r)\r\n isEnd = true;\r\n gap = rect2Start - rect1End;\r\n pos = rect1Start - gap;\r\n if (abs(pos - targetEnd) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n if (!gap) {\r\n return;\r\n }\r\n if (!checkBetweenRects(targetRect, rect2, type, maxSnapElementGuidelineDistance)) {\r\n return;\r\n }\r\n if (gap > maxSnapElementGapDistance) {\r\n return;\r\n }\r\n gapGuidelines.push({\r\n type: type,\r\n pos: type === \"vertical\" ? [pos, 0] : [0, pos],\r\n element: snapRect2.element,\r\n size: 0,\r\n className: snapRect2.className,\r\n isStart: isStart,\r\n isCenter: isCenter,\r\n isEnd: isEnd,\r\n gap: gap,\r\n hide: true,\r\n gapRects: [snapRect1, snapRect2],\r\n direction: \"\",\r\n elementDirection: \"\",\r\n });\r\n });\r\n });\r\n return gapGuidelines;\r\n}\r\nfunction startGridGroupGuidelines(moveable, clientLeft, clientTop, snapOffset) {\r\n var _a, _b;\r\n var props = moveable.props;\r\n var state = moveable.state;\r\n var snapGridAll = props.snapGridAll;\r\n var _c = props.snapGridWidth, snapGridWidth = _c === void 0 ? 0 : _c, _d = props.snapGridHeight, snapGridHeight = _d === void 0 ? 0 : _d;\r\n var snapRenderInfo = state.snapRenderInfo;\r\n var hasDirection = snapRenderInfo && (((_a = snapRenderInfo.direction) === null || _a === void 0 ? void 0 : _a[0]) || ((_b = snapRenderInfo.direction) === null || _b === void 0 ? void 0 : _b[1]));\r\n var moveables = moveable.moveables;\r\n // snap group's all child to grid.\r\n if (snapGridAll\r\n && moveables\r\n && hasDirection\r\n && (snapGridWidth || snapGridHeight)) {\r\n if (state.snapThresholdInfo) {\r\n return;\r\n }\r\n state.snapThresholdInfo = {\r\n multiples: [1, 1],\r\n offset: [0, 0],\r\n };\r\n var rect_1 = moveable.getRect();\r\n var children_1 = rect_1.children;\r\n var direction = snapRenderInfo.direction;\r\n if (children_1) {\r\n var result = direction.map(function (dir, i) {\r\n var _a = i === 0 ? {\r\n snapSize: snapGridWidth,\r\n posName: \"left\",\r\n sizeName: \"width\",\r\n clientOffset: snapOffset.left - clientLeft,\r\n } : {\r\n snapSize: snapGridHeight,\r\n posName: \"top\",\r\n sizeName: \"height\",\r\n clientOffset: snapOffset.top - clientTop,\r\n }, snapSize = _a.snapSize, posName = _a.posName, sizeName = _a.sizeName, clientOffset = _a.clientOffset;\r\n if (!snapSize) {\r\n return {\r\n dir: dir,\r\n multiple: 1,\r\n snapSize: snapSize,\r\n snapOffset: 0,\r\n };\r\n }\r\n var rectSize = rect_1[sizeName];\r\n var rectPos = rect_1[posName];\r\n // 사이즈보다 만약 작다면 어떻게 해야되죠?\r\n var childSizes = flat$1(children_1.map(function (child) {\r\n return [\r\n (child[posName] - rectPos),\r\n (child[sizeName]),\r\n (rectSize - child[sizeName] - child[posName] + rectPos),\r\n ];\r\n })).filter(function (v) { return v; }).sort(function (a, b) {\r\n return a - b;\r\n });\r\n var firstChildSize = childSizes[0];\r\n var childSnapSizes = childSizes.map(function (size) { return throttle(size / firstChildSize, 0.1) * snapSize; });\r\n var n = 1;\r\n var rectRatio = throttle(rectSize / firstChildSize, 0.1);\r\n for (n = 1; n <= 10; ++n) {\r\n if (childSnapSizes.every(function (childSize) {\r\n return childSize * n % 1 === 0;\r\n })) {\r\n break;\r\n }\r\n }\r\n // dir 1 (fixed -1)\r\n // dir 0 (fixed 0)\r\n // dir -1 (fixed 1)\r\n var ratio = (-dir + 1) / 2;\r\n var offsetPos = dot(rectPos - clientOffset, rectPos - clientOffset + rectSize, ratio, 1 - ratio);\r\n return {\r\n multiple: rectRatio * n,\r\n dir: dir,\r\n snapSize: snapSize,\r\n snapOffset: Math.round(offsetPos / snapSize),\r\n };\r\n });\r\n var multiples = result.map(function (r) { return r.multiple || 1; });\r\n state.snapThresholdInfo.multiples = multiples;\r\n state.snapThresholdInfo.offset = result.map(function (r) { return r.snapOffset; });\r\n result.forEach(function (r, i) {\r\n if (r.snapSize) ;\r\n });\r\n }\r\n }\r\n else {\r\n state.snapThresholdInfo = null;\r\n }\r\n}\r\nfunction getGridGuidelines(moveable, containerWidth, containerHeight, clientLeft, clientTop, snapOffset, isDisplayGridGuidelines) {\r\n if (clientLeft === void 0) { clientLeft = 0; }\r\n if (clientTop === void 0) { clientTop = 0; }\r\n var props = moveable.props;\r\n var state = moveable.state;\r\n var _a = props.snapGridWidth, snapGridWidth = _a === void 0 ? 0 : _a, _b = props.snapGridHeight, snapGridHeight = _b === void 0 ? 0 : _b;\r\n var guidelines = [];\r\n var snapOffsetLeft = snapOffset.left, snapOffsetTop = snapOffset.top;\r\n var startOffset = [0, 0];\r\n startGridGroupGuidelines(moveable, clientLeft, clientTop, snapOffset);\r\n var snapThresholdInfo = state.snapThresholdInfo;\r\n var defaultSnapGridWidth = snapGridWidth;\r\n var defaultSnapGridHeight = snapGridHeight;\r\n if (snapThresholdInfo) {\r\n snapGridWidth *= snapThresholdInfo.multiples[0] || 1;\r\n snapGridHeight *= snapThresholdInfo.multiples[1] || 1;\r\n startOffset = snapThresholdInfo.offset;\r\n }\r\n if (snapGridHeight) {\r\n var pushGuideline = function (pos) {\r\n guidelines.push({\r\n type: \"horizontal\",\r\n pos: [\r\n snapOffsetLeft,\r\n throttle(startOffset[1] * defaultSnapGridHeight + pos - clientTop + snapOffsetTop, 0.1),\r\n ],\r\n className: prefix(\"grid-guideline\"),\r\n size: containerWidth,\r\n hide: !isDisplayGridGuidelines,\r\n direction: \"\",\r\n grid: true,\r\n });\r\n };\r\n for (var pos = 0; pos <= containerHeight * 2; pos += snapGridHeight) {\r\n pushGuideline(pos);\r\n }\r\n for (var pos = -snapGridHeight; pos >= -containerHeight; pos -= snapGridHeight) {\r\n pushGuideline(pos);\r\n }\r\n }\r\n if (snapGridWidth) {\r\n var pushGuideline = function (pos) {\r\n guidelines.push({\r\n type: \"vertical\",\r\n pos: [\r\n throttle(startOffset[0] * defaultSnapGridWidth + pos - clientLeft + snapOffsetLeft, 0.1),\r\n snapOffsetTop,\r\n ],\r\n className: prefix(\"grid-guideline\"),\r\n size: containerHeight,\r\n hide: !isDisplayGridGuidelines,\r\n direction: \"\",\r\n grid: true,\r\n });\r\n };\r\n for (var pos = 0; pos <= containerWidth * 2; pos += snapGridWidth) {\r\n pushGuideline(pos);\r\n }\r\n for (var pos = -snapGridWidth; pos >= -containerWidth; pos -= snapGridWidth) {\r\n pushGuideline(pos);\r\n }\r\n }\r\n return guidelines;\r\n}\r\nfunction checkBetweenRects(rect1, rect2, type, distance) {\r\n if (type === \"horizontal\") {\r\n return abs(rect1.right - rect2.left) <= distance\r\n || abs(rect1.left - rect2.right) <= distance\r\n || rect1.left <= rect2.right && rect2.left <= rect1.right;\r\n }\r\n else if (type === \"vertical\") {\r\n return abs(rect1.bottom - rect2.top) <= distance\r\n || abs(rect1.top - rect2.bottom) <= distance\r\n || rect1.top <= rect2.bottom && rect2.top <= rect1.bottom;\r\n }\r\n return true;\r\n}\r\nfunction getElementGuidelines(moveable) {\r\n var state = moveable.state;\r\n var _a = moveable.props.elementGuidelines, elementGuidelines = _a === void 0 ? [] : _a;\r\n if (!elementGuidelines.length) {\r\n state.elementRects = [];\r\n return [];\r\n }\r\n var prevValues = (state.elementRects || []).filter(function (snapRect) { return !snapRect.refresh; });\r\n var nextElementGuidelines = elementGuidelines.map(function (el) {\r\n if (isObject(el) && \"element\" in el) {\r\n return __assign(__assign({}, el), { element: getRefTarget(el.element, true) });\r\n }\r\n return {\r\n element: getRefTarget(el, true),\r\n };\r\n }).filter(function (value) {\r\n return value.element;\r\n });\r\n var _b = diff(prevValues.map(function (v) { return v.element; }), nextElementGuidelines.map(function (v) { return v.element; })), maintained = _b.maintained, added = _b.added;\r\n var nextValues = [];\r\n maintained.forEach(function (_a) {\r\n var _b = __read(_a, 2), prevIndex = _b[0], nextIndex = _b[1];\r\n nextValues[nextIndex] = prevValues[prevIndex];\r\n });\r\n getSnapElementRects(moveable, added.map(function (index) { return nextElementGuidelines[index]; })).map(function (rect, i) {\r\n nextValues[added[i]] = rect;\r\n });\r\n state.elementRects = nextValues;\r\n var elementSnapDirections = getSnapDirections(moveable.props.elementSnapDirections);\r\n var nextGuidelines = [];\r\n nextValues.forEach(function (snapRect) {\r\n var element = snapRect.element, _a = snapRect.top, topValue = _a === void 0 ? elementSnapDirections.top : _a, _b = snapRect.left, leftValue = _b === void 0 ? elementSnapDirections.left : _b, _c = snapRect.right, rightValue = _c === void 0 ? elementSnapDirections.right : _c, _d = snapRect.bottom, bottomValue = _d === void 0 ? elementSnapDirections.bottom : _d, _e = snapRect.center, centerValue = _e === void 0 ? elementSnapDirections.center : _e, _f = snapRect.middle, middleValue = _f === void 0 ? elementSnapDirections.middle : _f, className = snapRect.className, rect = snapRect.rect;\r\n var _g = splitSnapDirectionPoses({\r\n top: topValue,\r\n right: rightValue,\r\n left: leftValue,\r\n bottom: bottomValue,\r\n center: centerValue,\r\n middle: middleValue,\r\n }, rect), horizontal = _g.horizontal, vertical = _g.vertical, horizontalNames = _g.horizontalNames, verticalNames = _g.verticalNames;\r\n var rectTop = rect.top;\r\n var rectLeft = rect.left;\r\n var width = rect.right - rectLeft;\r\n var height = rect.bottom - rectTop;\r\n var sizes = [width, height];\r\n vertical.forEach(function (pos, i) {\r\n nextGuidelines.push({\r\n type: \"vertical\",\r\n element: element,\r\n pos: [\r\n throttle(pos, 0.1),\r\n rectTop,\r\n ], size: height,\r\n sizes: sizes,\r\n className: className,\r\n elementRect: snapRect,\r\n elementDirection: SNAP_SKIP_NAMES_MAP[verticalNames[i]] || verticalNames[i],\r\n direction: \"\",\r\n });\r\n });\r\n horizontal.forEach(function (pos, i) {\r\n nextGuidelines.push({\r\n type: \"horizontal\",\r\n element: element,\r\n pos: [\r\n rectLeft,\r\n throttle(pos, 0.1),\r\n ],\r\n size: width,\r\n sizes: sizes,\r\n className: className,\r\n elementRect: snapRect,\r\n elementDirection: SNAP_SKIP_NAMES_MAP[horizontalNames[i]] || horizontalNames[i],\r\n direction: \"\",\r\n });\r\n });\r\n });\r\n return nextGuidelines;\r\n}\r\nfunction getObjectGuidelines(guidelines, containerSize) {\r\n return guidelines ? guidelines.map(function (info) {\r\n var posGuideline = isObject(info) ? info : { pos: info };\r\n var pos = posGuideline.pos;\r\n if (isNumber(pos)) {\r\n return posGuideline;\r\n }\r\n else {\r\n return __assign(__assign({}, posGuideline), { pos: convertUnitSize(pos, containerSize) });\r\n }\r\n }) : [];\r\n}\r\nfunction getDefaultGuidelines(horizontalGuidelines, verticalGuidelines, width, height, clientLeft, clientTop, snapOffset) {\r\n if (clientLeft === void 0) { clientLeft = 0; }\r\n if (clientTop === void 0) { clientTop = 0; }\r\n if (snapOffset === void 0) { snapOffset = { left: 0, top: 0, right: 0, bottom: 0 }; }\r\n var guidelines = [];\r\n var snapOffsetLeft = snapOffset.left, snapOffsetTop = snapOffset.top, snapOffsetBottom = snapOffset.bottom, snapOffsetRight = snapOffset.right;\r\n var snapWidth = width + snapOffsetRight - snapOffsetLeft;\r\n var snapHeight = height + snapOffsetBottom - snapOffsetTop;\r\n getObjectGuidelines(horizontalGuidelines, snapHeight).forEach(function (posInfo) {\r\n guidelines.push({\r\n type: \"horizontal\",\r\n pos: [\r\n snapOffsetLeft,\r\n throttle(posInfo.pos - clientTop + snapOffsetTop, 0.1),\r\n ],\r\n size: snapWidth,\r\n className: posInfo.className,\r\n direction: \"\",\r\n });\r\n });\r\n getObjectGuidelines(verticalGuidelines, snapWidth).forEach(function (posInfo) {\r\n guidelines.push({\r\n type: \"vertical\",\r\n pos: [\r\n throttle(posInfo.pos - clientLeft + snapOffsetLeft, 0.1),\r\n snapOffsetTop,\r\n ],\r\n size: snapHeight,\r\n className: posInfo.className,\r\n direction: \"\",\r\n });\r\n });\r\n return guidelines;\r\n}\r\nfunction getSnapElementRects(moveable, values) {\r\n if (!values.length) {\r\n return [];\r\n }\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var containerClientRect = state.containerClientRect, \r\n // targetClientRect: {\r\n // top: clientTop,\r\n // left: clientLeft,\r\n // },\r\n rootMatrix = state.rootMatrix, is3d = state.is3d, offsetDelta = state.offsetDelta;\r\n var n = is3d ? 4 : 3;\r\n var _a = __read(calculateContainerPos(rootMatrix, containerClientRect, n), 2), containerLeft = _a[0], containerTop = _a[1];\r\n // const poses = getAbsolutePosesByState(state);\r\n // const {\r\n // minX: targetLeft,\r\n // minY: targetTop,\r\n // } = getMinMaxs(poses);\r\n // const [distLeft, distTop] = minus([targetLeft, targetTop], calculateInversePosition(rootMatrix, [\r\n // clientLeft - containerLeft,\r\n // clientTop - containerTop,\r\n // ], n)).map(pos => roundSign(pos));\r\n var offsetLeft = groupable ? 0 : offsetDelta[0];\r\n var offsetTop = groupable ? 0 : offsetDelta[1];\r\n return values.map(function (value) {\r\n var rect = value.element.getBoundingClientRect();\r\n var left = rect.left - containerLeft - offsetLeft;\r\n var top = rect.top - containerTop - offsetTop;\r\n var bottom = top + rect.height;\r\n var right = left + rect.width;\r\n var _a = __read(calculateInversePosition(rootMatrix, [left, top], n), 2), elementLeft = _a[0], elementTop = _a[1];\r\n var _b = __read(calculateInversePosition(rootMatrix, [right, bottom], n), 2), elementRight = _b[0], elementBottom = _b[1];\r\n return __assign(__assign({}, value), { rect: {\r\n left: elementLeft,\r\n right: elementRight,\r\n top: elementTop,\r\n bottom: elementBottom,\r\n center: (elementLeft + elementRight) / 2,\r\n middle: (elementTop + elementBottom) / 2,\r\n } });\r\n });\r\n}\n\nfunction checkSnapInfo(moveable) {\r\n var state = moveable.state;\r\n var container = state.container;\r\n var snapContainer = moveable.props.snapContainer || container;\r\n if (state.snapContainer === snapContainer && state.guidelines && state.guidelines.length) {\r\n return false;\r\n }\r\n var containerClientRect = state.containerClientRect;\r\n var snapOffset = {\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n };\r\n if (container !== snapContainer) {\r\n var snapContainerTarget = getRefTarget(snapContainer, true);\r\n if (snapContainerTarget) {\r\n var snapContainerRect = getClientRect(snapContainerTarget);\r\n var offset1 = getDragDistByState(state, [\r\n snapContainerRect.left - containerClientRect.left,\r\n snapContainerRect.top - containerClientRect.top,\r\n ]);\r\n var offset2 = getDragDistByState(state, [\r\n snapContainerRect.right - containerClientRect.right,\r\n snapContainerRect.bottom - containerClientRect.bottom,\r\n ]);\r\n snapOffset.left = throttle(offset1[0], 0.00001);\r\n snapOffset.top = throttle(offset1[1], 0.00001);\r\n snapOffset.right = throttle(offset2[0], 0.00001);\r\n snapOffset.bottom = throttle(offset2[1], 0.00001);\r\n }\r\n }\r\n state.snapContainer = snapContainer;\r\n state.snapOffset = snapOffset;\r\n state.guidelines = getTotalGuidelines(moveable);\r\n state.enableSnap = true;\r\n return true;\r\n}\r\nfunction getNextFixedPoses(matrix, width, height, fixedDirection, fixedPos, is3d) {\r\n var nextPoses = calculatePoses(matrix, width, height, is3d ? 4 : 3);\r\n var nextFixedPos = getPosByDirection(nextPoses, fixedDirection);\r\n return getAbsolutePoses(nextPoses, minus(fixedPos, nextFixedPos));\r\n}\r\nfunction normalized(value) {\r\n return value ? value / abs(value) : 0;\r\n}\r\nfunction getSizeOffsetInfo(moveable, poses, direction, keepRatio, isRequest, datas) {\r\n var fixedDirection = datas.fixedDirection;\r\n var directions = getCheckSnapDirections(direction, fixedDirection, keepRatio);\r\n var innerBoundLineInfos = getCheckInnerBoundLineInfos(moveable, poses, direction, keepRatio);\r\n var offsets = __spreadArray(__spreadArray([], __read(getSnapBoundInfo(moveable, poses, directions, keepRatio, isRequest, datas)), false), __read(getInnerBoundInfo(moveable, innerBoundLineInfos, datas)), false);\r\n var widthOffsetInfo = getNearOffsetInfo(offsets, 0);\r\n var heightOffsetInfo = getNearOffsetInfo(offsets, 1);\r\n return {\r\n width: {\r\n isBound: widthOffsetInfo.isBound,\r\n offset: widthOffsetInfo.offset[0],\r\n },\r\n height: {\r\n isBound: heightOffsetInfo.isBound,\r\n offset: heightOffsetInfo.offset[1],\r\n },\r\n };\r\n}\r\nfunction recheckSizeByTwoDirection(moveable, poses, width, height, maxWidth, maxHeight, direction, isRequest, datas) {\r\n var snapPos = getPosByDirection(poses, direction);\r\n var _a = checkMoveableSnapBounds(moveable, isRequest, {\r\n vertical: [snapPos[0]],\r\n horizontal: [snapPos[1]],\r\n }), horizontalOffset = _a.horizontal.offset, verticalOffset = _a.vertical.offset;\r\n if (throttle(verticalOffset, FLOAT_POINT_NUM) || throttle(horizontalOffset, FLOAT_POINT_NUM)) {\r\n var _b = __read(getDragDist({\r\n datas: datas,\r\n distX: -verticalOffset,\r\n distY: -horizontalOffset,\r\n }), 2), nextWidthOffset = _b[0], nextHeightOffset = _b[1];\r\n var nextWidth = Math.min(maxWidth || Infinity, width + direction[0] * nextWidthOffset);\r\n var nextHeight = Math.min(maxHeight || Infinity, height + direction[1] * nextHeightOffset);\r\n return [nextWidth - width, nextHeight - height];\r\n }\r\n return [0, 0];\r\n}\r\nfunction checkSizeDist(moveable, getNextPoses, width, height, direction, fixedPosition, isRequest, datas) {\r\n var poses = getAbsolutePosesByState(moveable.state);\r\n var keepRatio = moveable.props.keepRatio;\r\n var widthOffset = 0;\r\n var heightOffset = 0;\r\n for (var i = 0; i < 2; ++i) {\r\n var nextPoses = getNextPoses(widthOffset, heightOffset);\r\n var _a = getSizeOffsetInfo(moveable, nextPoses, direction, keepRatio, isRequest, datas), widthOffsetInfo = _a.width, heightOffsetInfo = _a.height;\r\n var isWidthBound = widthOffsetInfo.isBound;\r\n var isHeightBound = heightOffsetInfo.isBound;\r\n var nextWidthOffset = widthOffsetInfo.offset;\r\n var nextHeightOffset = heightOffsetInfo.offset;\r\n if (i === 1) {\r\n if (!isWidthBound) {\r\n nextWidthOffset = 0;\r\n }\r\n if (!isHeightBound) {\r\n nextHeightOffset = 0;\r\n }\r\n }\r\n if (i === 0 && isRequest && !isWidthBound && !isHeightBound) {\r\n return [0, 0];\r\n }\r\n if (keepRatio) {\r\n var widthDist = abs(nextWidthOffset) * (width ? 1 / width : 1);\r\n var heightDist = abs(nextHeightOffset) * (height ? 1 / height : 1);\r\n var isGetWidthOffset = isWidthBound && isHeightBound\r\n ? widthDist < heightDist\r\n : isHeightBound ||\r\n (!isWidthBound && widthDist < heightDist);\r\n if (isGetWidthOffset) {\r\n // width : height = ? : heightOffset\r\n nextWidthOffset = (width * nextHeightOffset) / height;\r\n }\r\n else {\r\n // width : height = widthOffset : ?\r\n nextHeightOffset = (height * nextWidthOffset) / width;\r\n }\r\n }\r\n widthOffset += nextWidthOffset;\r\n heightOffset += nextHeightOffset;\r\n }\r\n if (!keepRatio && direction[0] && direction[1]) {\r\n var _b = checkMaxBounds(moveable, poses, direction, fixedPosition, datas), maxWidth = _b.maxWidth, maxHeight = _b.maxHeight;\r\n var _c = __read(recheckSizeByTwoDirection(moveable, getNextPoses(widthOffset, heightOffset).map(function (pos) { return pos.map(function (p) { return throttle(p, FLOAT_POINT_NUM); }); }), width + widthOffset, height + heightOffset, maxWidth, maxHeight, direction, isRequest, datas), 2), nextWidthOffset = _c[0], nextHeightOffset = _c[1];\r\n widthOffset += nextWidthOffset;\r\n heightOffset += nextHeightOffset;\r\n }\r\n return [widthOffset, heightOffset];\r\n}\r\nfunction absDegree(deg) {\r\n if (deg < 0) {\r\n deg = deg % 360 + 360;\r\n }\r\n deg %= 360;\r\n return deg;\r\n}\r\nfunction bumpDegree(baseDeg, snapDeg) {\r\n // baseDeg -80\r\n // snapDeg 270\r\n // return -90\r\n snapDeg = absDegree(snapDeg);\r\n var count = Math.floor(baseDeg / 360);\r\n var deg1 = count * 360 + 360 - snapDeg;\r\n var deg2 = count * 360 + snapDeg;\r\n return abs(baseDeg - deg1) < abs(baseDeg - deg2) ? deg1 : deg2;\r\n}\r\nfunction getMinDegreeDistance(deg1, deg2) {\r\n deg1 = absDegree(deg1);\r\n deg2 = absDegree(deg2);\r\n var deg3 = absDegree(deg1 - deg2);\r\n return Math.min(deg3, 360 - deg3);\r\n}\r\nfunction checkSnapRotate(moveable, rect, dist, rotation) {\r\n var _a;\r\n var props = moveable.props;\r\n var snapRotationThreshold = (_a = props[NAME_snapRotationThreshold]) !== null && _a !== void 0 ? _a : 5;\r\n var snapRotationDegrees = props[NAME_snapRotationDegrees];\r\n if (hasGuidelines(moveable, \"rotatable\")) {\r\n var pos1 = rect.pos1, pos2 = rect.pos2, pos3 = rect.pos3, pos4 = rect.pos4, origin2_1 = rect.origin;\r\n var rad_1 = (dist * Math.PI) / 180;\r\n var prevPoses = [pos1, pos2, pos3, pos4].map(function (pos) { return minus(pos, origin2_1); });\r\n var nextPoses = prevPoses.map(function (pos) { return rotate(pos, rad_1); });\r\n // console.log(moveable.state.left, moveable.state.top, moveable.state.origin);\r\n // console.log(pos1, pos2, pos3, pos4, origin, rad, prevPoses, nextPoses);\r\n var result = __spreadArray(__spreadArray([], __read(checkRotateBounds(moveable, prevPoses, nextPoses, origin2_1, dist)), false), __read(checkRotateInnerBounds(moveable, prevPoses, nextPoses, origin2_1, dist)), false);\r\n result.sort(function (a, b) { return abs(a - dist) - abs(b - dist); });\r\n var isSnap = result.length > 0;\r\n if (isSnap) {\r\n return {\r\n isSnap: isSnap,\r\n dist: isSnap ? result[0] : dist,\r\n };\r\n }\r\n }\r\n if ((snapRotationDegrees === null || snapRotationDegrees === void 0 ? void 0 : snapRotationDegrees.length) && snapRotationThreshold) {\r\n var sorted = snapRotationDegrees.slice().sort(function (a, b) {\r\n return getMinDegreeDistance(a, rotation) - getMinDegreeDistance(b, rotation);\r\n });\r\n var firstDegree = sorted[0];\r\n if (getMinDegreeDistance(firstDegree, rotation) <= snapRotationThreshold) {\r\n return {\r\n isSnap: true,\r\n dist: dist + bumpDegree(rotation, firstDegree) - rotation,\r\n };\r\n }\r\n }\r\n return {\r\n isSnap: false,\r\n dist: dist,\r\n };\r\n}\r\nfunction checkSnapResize(moveable, width, height, direction, fixedPosition, isRequest, datas) {\r\n if (!hasGuidelines(moveable, \"resizable\")) {\r\n return [0, 0];\r\n }\r\n var fixedDirection = datas.fixedDirection, nextAllMatrix = datas.nextAllMatrix;\r\n var _a = moveable.state, allMatrix = _a.allMatrix, is3d = _a.is3d;\r\n return checkSizeDist(moveable, function (widthOffset, heightOffset) {\r\n return getNextFixedPoses(nextAllMatrix || allMatrix, width + widthOffset, height + heightOffset, fixedDirection, fixedPosition, is3d);\r\n }, width, height, direction, fixedPosition, isRequest, datas);\r\n}\r\nfunction checkSnapScale(moveable, scale, direction, isRequest, datas) {\r\n if (!hasGuidelines(moveable, \"scalable\")) {\r\n return [0, 0];\r\n }\r\n var startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, fixedPosition = datas.fixedPosition, fixedDirection = datas.fixedDirection, is3d = datas.is3d;\r\n var sizeDist = checkSizeDist(moveable, function (widthOffset, heightOffset) {\r\n return getNextFixedPoses(scaleMatrix(datas, plus(scale, [widthOffset / startOffsetWidth, heightOffset / startOffsetHeight])), startOffsetWidth, startOffsetHeight, fixedDirection, fixedPosition, is3d);\r\n }, startOffsetWidth, startOffsetHeight, direction, fixedPosition, isRequest, datas);\r\n return [sizeDist[0] / startOffsetWidth, sizeDist[1] / startOffsetHeight];\r\n}\r\nfunction startCheckSnapDrag(moveable, datas) {\r\n datas.absolutePoses = getAbsolutePosesByState(moveable.state);\r\n}\r\nfunction getSnapGuidelines(posInfos) {\r\n var guidelines = [];\r\n posInfos.forEach(function (posInfo) {\r\n posInfo.guidelineInfos.forEach(function (_a) {\r\n var guideline = _a.guideline;\r\n if (find(guidelines, function (info) { return info.guideline === guideline; })) {\r\n return;\r\n }\r\n guideline.direction = \"\";\r\n guidelines.push({ guideline: guideline, posInfo: posInfo });\r\n });\r\n });\r\n return guidelines.map(function (_a) {\r\n var guideline = _a.guideline, posInfo = _a.posInfo;\r\n return __assign(__assign({}, guideline), { direction: posInfo.direction });\r\n });\r\n}\r\nfunction addBoundGuidelines(moveable, verticalPoses, horizontalPoses, verticalSnapPoses, horizontalSnapPoses, externalBounds) {\r\n var _a = checkBoundPoses(getBounds(moveable, externalBounds), verticalPoses, horizontalPoses), verticalBoundInfos = _a.vertical, horizontalBoundInfos = _a.horizontal;\r\n var boundMap = getInitialBounds();\r\n verticalBoundInfos.forEach(function (info) {\r\n if (info.isBound) {\r\n if (info.direction === \"start\") {\r\n boundMap.left = true;\r\n }\r\n if (info.direction === \"end\") {\r\n boundMap.right = true;\r\n }\r\n verticalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: info.pos,\r\n });\r\n }\r\n });\r\n horizontalBoundInfos.forEach(function (info) {\r\n if (info.isBound) {\r\n if (info.direction === \"start\") {\r\n boundMap.top = true;\r\n }\r\n if (info.direction === \"end\") {\r\n boundMap.bottom = true;\r\n }\r\n horizontalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: info.pos,\r\n });\r\n }\r\n });\r\n var _b = checkInnerBoundPoses(moveable), innerBoundMap = _b.boundMap, verticalInnerBoundPoses = _b.vertical, horizontalInnerBoundPoses = _b.horizontal;\r\n verticalInnerBoundPoses.forEach(function (innerPos) {\r\n if (findIndex(verticalSnapPoses, function (_a) {\r\n var type = _a.type, pos = _a.pos;\r\n return type === \"bounds\" && pos === innerPos;\r\n }) >= 0) {\r\n return;\r\n }\r\n verticalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: innerPos,\r\n });\r\n });\r\n horizontalInnerBoundPoses.forEach(function (innerPos) {\r\n if (findIndex(horizontalSnapPoses, function (_a) {\r\n var type = _a.type, pos = _a.pos;\r\n return type === \"bounds\" && pos === innerPos;\r\n }) >= 0) {\r\n return;\r\n }\r\n horizontalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: innerPos,\r\n });\r\n });\r\n return {\r\n boundMap: boundMap,\r\n innerBoundMap: innerBoundMap,\r\n };\r\n}\r\nvar directionCondition$1 = getDirectionCondition(\"\", [\"resizable\", \"scalable\"]);\r\n/**\r\n * @namespace Moveable.Snappable\r\n * @description Whether or not target can be snapped to the guideline. (default: false)\r\n * @sort 2\r\n */\r\nvar Snappable = {\r\n name: \"snappable\",\r\n dragRelation: \"strong\",\r\n props: [\r\n \"snappable\",\r\n \"snapContainer\",\r\n \"snapDirections\",\r\n \"elementSnapDirections\",\r\n \"snapGap\",\r\n \"snapGridWidth\",\r\n \"snapGridHeight\",\r\n \"isDisplaySnapDigit\",\r\n \"isDisplayInnerSnapDigit\",\r\n \"isDisplayGridGuidelines\",\r\n \"snapDigit\",\r\n \"snapThreshold\",\r\n \"snapRenderThreshold\",\r\n \"snapGridAll\",\r\n NAME_snapRotationThreshold,\r\n NAME_snapRotationDegrees,\r\n NAME_snapHorizontalThreshold,\r\n NAME_snapVerticalThreshold,\r\n \"horizontalGuidelines\",\r\n \"verticalGuidelines\",\r\n \"elementGuidelines\",\r\n \"bounds\",\r\n \"innerBounds\",\r\n \"snapDistFormat\",\r\n \"maxSnapElementGuidelineDistance\",\r\n \"maxSnapElementGapDistance\",\r\n ],\r\n events: [\"snap\", \"bound\"],\r\n css: [\r\n \":host {\\n--bounds-color: #d66;\\n}\\n.guideline {\\npointer-events: none;\\nz-index: 2;\\n}\\n.guideline.bounds {\\nbackground: #d66;\\nbackground: var(--bounds-color);\\n}\\n.guideline-group {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\n}\\n.guideline-group .size-value {\\nposition: absolute;\\ncolor: #f55;\\nfont-size: 12px;\\nfont-size: calc(12px * var(--zoom));\\nfont-weight: bold;\\n}\\n.guideline-group.horizontal .size-value {\\ntransform-origin: 50% 100%;\\ntransform: translateX(-50%);\\nleft: 50%;\\nbottom: 5px;\\nbottom: calc(2px + 3px * var(--zoom));\\n}\\n.guideline-group.vertical .size-value {\\ntransform-origin: 0% 50%;\\ntop: 50%;\\ntransform: translateY(-50%);\\nleft: 5px;\\nleft: calc(2px + 3px * var(--zoom));\\n}\\n.guideline.gap {\\nbackground: #f55;\\n}\\n.size-value.gap {\\ncolor: #f55;\\n}\\n\",\r\n ],\r\n render: function (moveable, React) {\r\n var state = moveable.state;\r\n var targetTop = state.top, targetLeft = state.left, pos1 = state.pos1, pos2 = state.pos2, pos3 = state.pos3, pos4 = state.pos4, snapRenderInfo = state.snapRenderInfo;\r\n var _a = moveable.props.snapRenderThreshold, snapRenderThreshold = _a === void 0 ? 1 : _a;\r\n if (!snapRenderInfo || !snapRenderInfo.render || !hasGuidelines(moveable, \"\")) {\r\n // reset store\r\n watchValue(moveable, \"boundMap\", getInitialBounds(), function (v) { return JSON.stringify(v); });\r\n watchValue(moveable, \"innerBoundMap\", getInitialBounds(), function (v) { return JSON.stringify(v); });\r\n return [];\r\n }\r\n state.guidelines = getTotalGuidelines(moveable);\r\n var minLeft = Math.min(pos1[0], pos2[0], pos3[0], pos4[0]);\r\n var minTop = Math.min(pos1[1], pos2[1], pos3[1], pos4[1]);\r\n var externalPoses = snapRenderInfo.externalPoses || [];\r\n var poses = getAbsolutePosesByState(moveable.state);\r\n var verticalSnapPoses = [];\r\n var horizontalSnapPoses = [];\r\n var verticalGuidelines = [];\r\n var horizontalGuidelines = [];\r\n var snapInfos = [];\r\n var _b = getRect(poses), width = _b.width, height = _b.height, top = _b.top, left = _b.left, bottom = _b.bottom, right = _b.right;\r\n var targetRect = { left: left, right: right, top: top, bottom: bottom, center: (left + right) / 2, middle: (top + bottom) / 2 };\r\n var hasExternalPoses = externalPoses.length > 0;\r\n var externalRect = hasExternalPoses\r\n ? getRect(externalPoses)\r\n : {};\r\n if (!snapRenderInfo.request) {\r\n if (snapRenderInfo.direction) {\r\n snapInfos.push(getSnapInfosByDirection(moveable, poses, snapRenderInfo.direction, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n if (snapRenderInfo.snap) {\r\n var rect = getRect(poses);\r\n if (snapRenderInfo.center) {\r\n rect.middle = (rect.top + rect.bottom) / 2;\r\n rect.center = (rect.left + rect.right) / 2;\r\n }\r\n snapInfos.push(checkSnaps(moveable, rect, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n if (hasExternalPoses) {\r\n if (snapRenderInfo.center) {\r\n externalRect.middle =\r\n (externalRect.top + externalRect.bottom) / 2;\r\n externalRect.center =\r\n (externalRect.left + externalRect.right) / 2;\r\n }\r\n snapInfos.push(checkSnaps(moveable, externalRect, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n snapInfos.forEach(function (snapInfo) {\r\n var verticalPosInfos = snapInfo.vertical.posInfos, horizontalPosInfos = snapInfo.horizontal.posInfos;\r\n verticalSnapPoses.push.apply(verticalSnapPoses, __spreadArray([], __read(verticalPosInfos.filter(function (_a) {\r\n var guidelineInfos = _a.guidelineInfos;\r\n return guidelineInfos.some(function (_a) {\r\n var guideline = _a.guideline;\r\n return !guideline.hide;\r\n });\r\n }).map(function (posInfo) { return ({\r\n type: \"snap\",\r\n pos: posInfo.pos,\r\n }); })), false));\r\n horizontalSnapPoses.push.apply(horizontalSnapPoses, __spreadArray([], __read(horizontalPosInfos.filter(function (_a) {\r\n var guidelineInfos = _a.guidelineInfos;\r\n return guidelineInfos.some(function (_a) {\r\n var guideline = _a.guideline;\r\n return !guideline.hide;\r\n });\r\n }).map(function (posInfo) { return ({\r\n type: \"snap\",\r\n pos: posInfo.pos,\r\n }); })), false));\r\n verticalGuidelines.push.apply(verticalGuidelines, __spreadArray([], __read(getSnapGuidelines(verticalPosInfos)), false));\r\n horizontalGuidelines.push.apply(horizontalGuidelines, __spreadArray([], __read(getSnapGuidelines(horizontalPosInfos)), false));\r\n });\r\n }\r\n var _c = addBoundGuidelines(moveable, [left, right], [top, bottom], verticalSnapPoses, horizontalSnapPoses), boundMap = _c.boundMap, innerBoundMap = _c.innerBoundMap;\r\n if (hasExternalPoses) {\r\n addBoundGuidelines(moveable, [externalRect.left, externalRect.right], [externalRect.top, externalRect.bottom], verticalSnapPoses, horizontalSnapPoses, snapRenderInfo.externalBounds);\r\n }\r\n var allGuidelines = __spreadArray(__spreadArray([], __read(verticalGuidelines), false), __read(horizontalGuidelines), false);\r\n var elementGuidelines = allGuidelines.filter(function (guideline) { return guideline.element && !guideline.gapRects; });\r\n var gapGuidelines = allGuidelines.filter(function (guideline) { return guideline.gapRects; }).sort(function (a, b) {\r\n return a.gap - b.gap;\r\n });\r\n triggerEvent(moveable, \"onSnap\", {\r\n guidelines: allGuidelines.filter(function (_a) {\r\n var element = _a.element;\r\n return !element;\r\n }),\r\n elements: elementGuidelines,\r\n gaps: gapGuidelines,\r\n }, true);\r\n var nextBoundMap = watchValue(moveable, \"boundMap\", boundMap, function (v) { return JSON.stringify(v); }, getInitialBounds());\r\n var nextInnerBoundMap = watchValue(moveable, \"innerBoundMap\", innerBoundMap, function (v) { return JSON.stringify(v); }, getInitialBounds());\r\n if (boundMap === nextBoundMap || innerBoundMap === nextInnerBoundMap) {\r\n triggerEvent(moveable, \"onBound\", {\r\n bounds: boundMap,\r\n innerBounds: innerBoundMap,\r\n }, true);\r\n }\r\n // verticalSnapPoses.\r\n return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(renderDashedGuidelines(moveable, elementGuidelines, [minLeft, minTop], targetRect, React)), false), __read(renderGapGuidelines(moveable, gapGuidelines, [minLeft, minTop], targetRect, React)), false), __read(renderGuidelines(moveable, \"horizontal\", horizontalGuidelines, [targetLeft, targetTop], targetRect, React)), false), __read(renderGuidelines(moveable, \"vertical\", verticalGuidelines, [targetLeft, targetTop], targetRect, React)), false), __read(renderSnapPoses(moveable, \"horizontal\", horizontalSnapPoses, minLeft, targetTop, width, 0, React)), false), __read(renderSnapPoses(moveable, \"vertical\", verticalSnapPoses, minTop, targetLeft, height, 1, React)), false);\r\n },\r\n dragStart: function (moveable, e) {\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n snap: true,\r\n center: true,\r\n };\r\n checkSnapInfo(moveable);\r\n },\r\n drag: function (moveable) {\r\n var state = moveable.state;\r\n if (!checkSnapInfo(moveable)) {\r\n state.guidelines = getTotalGuidelines(moveable);\r\n }\r\n if (state.snapRenderInfo) {\r\n state.snapRenderInfo.render = true;\r\n }\r\n },\r\n pinchStart: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (directionCondition$1(moveable, e) || dragControlCondition(moveable, e)) {\r\n return true;\r\n }\r\n if (!e.isRequest && e.inputEvent) {\r\n return hasClass(e.inputEvent.target, prefix(\"snap-control\"));\r\n }\r\n },\r\n dragControlStart: function (moveable) {\r\n moveable.state.snapRenderInfo = null;\r\n checkSnapInfo(moveable);\r\n },\r\n dragControl: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragControlEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n this.dragStart(moveable, e);\r\n },\r\n dragGroup: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragGroupEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragGroupControlStart: function (moveable) {\r\n moveable.state.snapRenderInfo = null;\r\n checkSnapInfo(moveable);\r\n },\r\n dragGroupControl: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragGroupControlEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n unset: function (moveable) {\r\n var state = moveable.state;\r\n state.enableSnap = false;\r\n state.guidelines = [];\r\n state.snapRenderInfo = null;\r\n state.elementRects = [];\r\n },\r\n};\r\n/**\r\n * Whether or not target can be snapped to the guideline. (default: false)\r\n * @name Moveable.Snappable#snappable\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snappable = true;\r\n */\r\n/**\r\n * A snap container that is the basis for snap, bounds, and innerBounds. (default: null = container)\r\n * @name Moveable.Snappable#snapContainer\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.querySelector(\".container\"));\r\n *\r\n * moveable.snapContainer = document.body;\r\n */\r\n/**\r\n * You can specify the directions to snap to the target. (default: { left: true, top: true, right: true, bottom: true })\r\n * @name Moveable.Snappable#snapDirections\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapDirections: true,\r\n * });\r\n * // snap center\r\n * moveable.snapDirections = { left: true, top: true, right: true, bottom: true, center: true, middle: true };\r\n */\r\n/**\r\n * You can specify the snap directions of elements. (default: { left: true, ftrue, right: true, bottom: true })\r\n * @name Moveable.Snappable#elementSnapDirections\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * elementSnapDirections: true,\r\n * });\r\n * // snap center\r\n * moveable.elementSnapDirections = { left: true, top: true, right: true, bottom: true, center: true, middle: true };\r\n */\r\n/**\r\n * When you drag, make the gap snap in the element guidelines. (default: true)\r\n * @name Moveable.Snappable#snapGap\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapElement: true,\r\n * snapGap: true,\r\n * });\r\n *\r\n * moveable.snapGap = false;\r\n */\r\n/**\r\n * Distance value that can snap to guidelines. (default: 5)\r\n * @name Moveable.Snappable#snapThreshold\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapThreshold = 5;\r\n */\r\n/**\r\n * Add guidelines in the horizontal direction. (default: [])\r\n * @name Moveable.Snappable#horizontalGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.horizontalGuidelines = [100, 200, 500];\r\n */\r\n/**\r\n * Add guidelines in the vertical direction. (default: [])\r\n * @name Moveable.Snappable#verticalGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.verticalGuidelines = [100, 200, 500];\r\n */\r\n/**\r\n * Add guidelines for the element. (default: [])\r\n * @name Moveable.Snappable#elementGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.elementGuidelines = [\r\n * document.querySelector(\".element\"),\r\n * ];\r\n */\r\n/**\r\n * You can set up boundaries.\r\n * @name Moveable.Snappable#bounds\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.bounds = { left: 0, right: 1000, top: 0, bottom: 1000};\r\n */\r\n/**\r\n * You can set up inner boundaries.\r\n * @name Moveable.Snappable#innerBounds\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.innerBounds = { left: 500, top: 500, width: 100, height: 100};\r\n */\r\n/**\r\n * snap distance digits (default: 0)\r\n * @name Moveable.Snappable#snapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapDigit = 0\r\n */\r\n/**\r\n * If width size is greater than 0, you can vertical snap to the grid. (default: 0)\r\n * @name Moveable.Snappable#snapGridWidth\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapGridWidth = 5;\r\n */\r\n/**\r\n * If height size is greater than 0, you can horizontal snap to the grid. (default: 0)\r\n * @name Moveable.Snappable#snapGridHeight\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapGridHeight = 5;\r\n */\r\n/**\r\n * Whether to show snap distance (default: true)\r\n * @name Moveable.Snappable#isDisplaySnapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.isDisplaySnapDigit = true;\r\n */\r\n/**\r\n * Whether to show element inner snap distance (default: false)\r\n * @name Moveable.Snappable#isDisplayInnerSnapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.isDisplayInnerSnapDigit = true;\r\n */\r\n/**\r\n * You can set the text format of the distance shown in the guidelines. (default: self)\r\n * @name Moveable.Snappable#snapDistFormat\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapDistFormat: (v, type) => v,\r\n * });\r\n * moveable.snapDistFormat = (v, type) => `${v}px`;\r\n */\r\n/**\r\n * When you drag or dragControl, the `snap` event is called.\r\n * @memberof Moveable.Snappable\r\n * @event snap\r\n * @param {Moveable.Snappable.OnSnap} - Parameters for the `snap` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true\r\n * });\r\n * moveable.on(\"snap\", e => {\r\n * console.log(\"onSnap\", e);\r\n * });\r\n */\n\nfunction multiply2(pos1, pos2) {\r\n return [\r\n pos1[0] * pos2[0],\r\n pos1[1] * pos2[1],\r\n ];\r\n}\r\nfunction prefix() {\r\n var classNames = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n classNames[_i] = arguments[_i];\r\n }\r\n return prefixNames.apply(void 0, __spreadArray([PREFIX], __read(classNames), false));\r\n}\r\nfunction defaultSync(fn) {\r\n fn();\r\n}\r\nfunction getTransformMatrix(transform) {\r\n if (!transform || transform === \"none\") {\r\n return [1, 0, 0, 1, 0, 0];\r\n }\r\n if (isObject(transform)) {\r\n return transform;\r\n }\r\n return parseMat(transform);\r\n}\r\nfunction getAbsoluteMatrix(matrix, n, origin) {\r\n return multiplies(n, createOriginMatrix(origin, n), matrix, createOriginMatrix(origin.map(function (a) { return -a; }), n));\r\n}\r\nfunction measureSVGSize(el, unit, isHorizontal) {\r\n if (unit === \"%\") {\r\n var viewBox = getSVGViewBox(el.ownerSVGElement);\r\n return viewBox[isHorizontal ? \"width\" : \"height\"] / 100;\r\n }\r\n return 1;\r\n}\r\nfunction getBeforeTransformOrigin(el) {\r\n var relativeOrigin = getTransformOrigin(getComputedStyle(el, \":before\"));\r\n return relativeOrigin.map(function (o, i) {\r\n var _a = splitUnit(o), value = _a.value, unit = _a.unit;\r\n return value * measureSVGSize(el, unit, i === 0);\r\n });\r\n}\r\nfunction getTransformOriginArray(transformOrigin) {\r\n return transformOrigin ? transformOrigin.split(\" \") : [\"0\", \"0\"];\r\n}\r\nfunction getTransformOrigin(style) {\r\n return getTransformOriginArray(style.transformOrigin);\r\n}\r\nfunction getElementTransform(target) {\r\n var getStyle = getCachedStyle(target);\r\n var computedTransform = getStyle(\"transform\");\r\n if (computedTransform && computedTransform !== \"none\") {\r\n return computedTransform;\r\n }\r\n if (\"transform\" in target) {\r\n var list = target.transform;\r\n var baseVal = list.baseVal;\r\n if (!baseVal) {\r\n return \"\";\r\n }\r\n var length_1 = baseVal.length;\r\n if (!length_1) {\r\n return \"\";\r\n }\r\n var matrixes = [];\r\n var _loop_1 = function (i) {\r\n var matrix = baseVal[i].matrix;\r\n matrixes.push(\"matrix(\".concat([\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"].map(function (chr) { return matrix[chr]; }).join(\", \"), \")\"));\r\n };\r\n for (var i = 0; i < length_1; ++i) {\r\n _loop_1(i);\r\n }\r\n return matrixes.join(\" \");\r\n }\r\n return \"\";\r\n}\r\nfunction getOffsetInfo(el, lastParent, isParent, checkZoom, getTargetStyle) {\r\n var _a, _b;\r\n var documentElement = getDocumentElement(el) || getDocumentBody(el);\r\n var hasSlot = false;\r\n var target;\r\n var parentSlotElement;\r\n if (!el || isParent) {\r\n target = el;\r\n }\r\n else {\r\n var assignedSlotParentElement = (_a = el === null || el === void 0 ? void 0 : el.assignedSlot) === null || _a === void 0 ? void 0 : _a.parentElement;\r\n var parentElement = el.parentElement;\r\n if (assignedSlotParentElement) {\r\n hasSlot = true;\r\n parentSlotElement = parentElement;\r\n target = assignedSlotParentElement;\r\n }\r\n else {\r\n target = parentElement;\r\n }\r\n }\r\n var isCustomElement = false;\r\n var isEnd = el === lastParent || target === lastParent;\r\n var position = \"relative\";\r\n var offsetZoom = 1;\r\n var targetZoom = parseFloat(getTargetStyle === null || getTargetStyle === void 0 ? void 0 : getTargetStyle(\"zoom\")) || 1;\r\n var targetPosition = getTargetStyle === null || getTargetStyle === void 0 ? void 0 : getTargetStyle(\"position\");\r\n while (target && target !== documentElement) {\r\n if (lastParent === target) {\r\n isEnd = true;\r\n }\r\n var getStyle = getCachedStyle(target);\r\n var tagName = target.tagName.toLowerCase();\r\n var transform = getElementTransform(target);\r\n var willChange = getStyle(\"willChange\");\r\n var zoom = parseFloat(getStyle(\"zoom\")) || 1;\r\n position = getStyle(\"position\");\r\n if (checkZoom && zoom !== 1) {\r\n offsetZoom = zoom;\r\n break;\r\n }\r\n if (\r\n // offsetParent is the parentElement if the target's zoom is not 1 and not absolute.\r\n !isParent && checkZoom && targetZoom !== 1 && targetPosition && targetPosition !== \"absolute\"\r\n || tagName === \"svg\"\r\n || tagName === \"foreignobject\"\r\n || position !== \"static\"\r\n || (transform && transform !== \"none\")\r\n || willChange === \"transform\") {\r\n break;\r\n }\r\n var slotParentNode = (_b = el === null || el === void 0 ? void 0 : el.assignedSlot) === null || _b === void 0 ? void 0 : _b.parentNode;\r\n var targetParentNode = target.parentNode;\r\n if (slotParentNode) {\r\n hasSlot = true;\r\n parentSlotElement = targetParentNode;\r\n }\r\n var parentNode = targetParentNode;\r\n if (parentNode && parentNode.nodeType === 11) {\r\n // Shadow Root\r\n target = parentNode.host;\r\n isCustomElement = true;\r\n position = getCachedStyle(target)(\"position\");\r\n break;\r\n }\r\n target = parentNode;\r\n position = \"relative\";\r\n }\r\n return {\r\n offsetZoom: offsetZoom,\r\n hasSlot: hasSlot,\r\n parentSlotElement: parentSlotElement,\r\n isCustomElement: isCustomElement,\r\n isStatic: position === \"static\",\r\n isEnd: isEnd || !target || target === documentElement,\r\n offsetParent: target || documentElement,\r\n };\r\n}\r\nfunction getOffsetPosInfo(el, target) {\r\n var _a;\r\n var tagName = el.tagName.toLowerCase();\r\n var offsetLeft = el.offsetLeft;\r\n var offsetTop = el.offsetTop;\r\n var getStyle = getCachedStyle(el);\r\n // svg\r\n var isSVG = isUndefined(offsetLeft);\r\n var hasOffset = !isSVG;\r\n var origin;\r\n var targetOrigin;\r\n // inner svg element\r\n if (!hasOffset && (tagName !== \"svg\" || el.ownerSVGElement)) {\r\n origin = IS_WEBKIT605\r\n ? getBeforeTransformOrigin(el)\r\n : getTransformOriginArray(getStyle(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); });\r\n targetOrigin = origin.slice();\r\n hasOffset = true;\r\n if (tagName === \"svg\") {\r\n offsetLeft = 0;\r\n offsetTop = 0;\r\n }\r\n else {\r\n _a = __read(getSVGGraphicsOffset(el, origin, el === target && target.tagName.toLowerCase() === \"g\"), 4), offsetLeft = _a[0], offsetTop = _a[1], origin[0] = _a[2], origin[1] = _a[3];\r\n }\r\n }\r\n else {\r\n origin = getTransformOriginArray(getStyle(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); });\r\n targetOrigin = origin.slice();\r\n // console.log(getStyle(\"transformOrigin\"), targetOrigin);\r\n }\r\n return {\r\n tagName: tagName,\r\n isSVG: isSVG,\r\n hasOffset: hasOffset,\r\n offset: [offsetLeft || 0, offsetTop || 0],\r\n origin: origin,\r\n targetOrigin: targetOrigin,\r\n };\r\n}\r\nfunction getBodyOffset(el, isSVG) {\r\n var getStyle = getCachedStyle(el);\r\n var getBodyStyle = getCachedStyle(getDocumentBody(el));\r\n var bodyPosition = getBodyStyle(\"position\");\r\n if (!isSVG && (!bodyPosition || bodyPosition === \"static\")) {\r\n return [0, 0];\r\n }\r\n var marginLeft = parseInt(getBodyStyle(\"marginLeft\"), 10);\r\n var marginTop = parseInt(getBodyStyle(\"marginTop\"), 10);\r\n if (getStyle(\"position\") === \"absolute\") {\r\n if (getStyle(\"top\") !== \"auto\" || getStyle(\"bottom\") !== \"auto\") {\r\n marginTop = 0;\r\n }\r\n if (getStyle(\"left\") !== \"auto\" || getStyle(\"right\") !== \"auto\") {\r\n marginLeft = 0;\r\n }\r\n }\r\n return [marginLeft, marginTop];\r\n}\r\nfunction convert3DMatrixes(matrixes) {\r\n matrixes.forEach(function (info) {\r\n var matrix = info.matrix;\r\n if (matrix) {\r\n info.matrix = convertDimension(matrix, 3, 4);\r\n }\r\n });\r\n}\r\nfunction getPositionFixedInfo(el) {\r\n var fixedContainer = el.parentElement;\r\n var hasTransform = false;\r\n var body = getDocumentBody(el);\r\n while (fixedContainer) {\r\n var transform = getComputedStyle(fixedContainer).transform;\r\n if (transform && transform !== \"none\") {\r\n hasTransform = true;\r\n break;\r\n }\r\n if (fixedContainer === body) {\r\n break;\r\n }\r\n fixedContainer = fixedContainer.parentElement;\r\n }\r\n return {\r\n fixedContainer: fixedContainer || body,\r\n hasTransform: hasTransform,\r\n };\r\n}\r\nfunction makeMatrixCSS(matrix, is3d) {\r\n if (is3d === void 0) { is3d = matrix.length > 9; }\r\n return \"\".concat(is3d ? \"matrix3d\" : \"matrix\", \"(\").concat(convertMatrixtoCSS(matrix, !is3d).join(\",\"), \")\");\r\n}\r\nfunction getSVGViewBox(el) {\r\n var clientWidth = el.clientWidth;\r\n var clientHeight = el.clientHeight;\r\n if (!el) {\r\n return { x: 0, y: 0, width: 0, height: 0, clientWidth: clientWidth, clientHeight: clientHeight };\r\n }\r\n var viewBox = el.viewBox;\r\n var baseVal = (viewBox && viewBox.baseVal) || { x: 0, y: 0, width: 0, height: 0 };\r\n return {\r\n x: baseVal.x,\r\n y: baseVal.y,\r\n width: baseVal.width || clientWidth,\r\n height: baseVal.height || clientHeight,\r\n clientWidth: clientWidth,\r\n clientHeight: clientHeight,\r\n };\r\n}\r\nfunction getSVGMatrix(el, n) {\r\n var _a;\r\n var _b = getSVGViewBox(el), viewBoxWidth = _b.width, viewBoxHeight = _b.height, clientWidth = _b.clientWidth, clientHeight = _b.clientHeight;\r\n var scaleX = clientWidth / viewBoxWidth;\r\n var scaleY = clientHeight / viewBoxHeight;\r\n var preserveAspectRatio = el.preserveAspectRatio.baseVal;\r\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\r\n var align = preserveAspectRatio.align;\r\n // 1 : meet 2: slice\r\n var meetOrSlice = preserveAspectRatio.meetOrSlice;\r\n var svgOrigin = [0, 0];\r\n var scale = [scaleX, scaleY];\r\n var translate = [0, 0];\r\n if (align !== 1) {\r\n var xAlign = (align - 2) % 3;\r\n var yAlign = Math.floor((align - 2) / 3);\r\n svgOrigin[0] = viewBoxWidth * xAlign / 2;\r\n svgOrigin[1] = viewBoxHeight * yAlign / 2;\r\n var scaleDimension = meetOrSlice === 2 ? Math.max(scaleY, scaleX) : Math.min(scaleX, scaleY);\r\n scale[0] = scaleDimension;\r\n scale[1] = scaleDimension;\r\n translate[0] = (clientWidth - viewBoxWidth) / 2 * xAlign;\r\n translate[1] = (clientHeight - viewBoxHeight) / 2 * yAlign;\r\n }\r\n var scaleMatrix = createScaleMatrix(scale, n);\r\n _a = __read(translate, 2), scaleMatrix[n * (n - 1)] = _a[0], scaleMatrix[n * (n - 1) + 1] = _a[1];\r\n return getAbsoluteMatrix(scaleMatrix, n, svgOrigin);\r\n}\r\nfunction getSVGGraphicsOffset(el, origin, isGTarget) {\r\n var tagName = el.tagName.toLowerCase();\r\n if (!el.getBBox || !isGTarget && tagName === \"g\") {\r\n return [0, 0, 0, 0];\r\n }\r\n var getStyle = getCachedStyle(el);\r\n var isFillBox = getStyle(\"transform-box\") === \"fill-box\";\r\n var bbox = el.getBBox();\r\n var viewBox = getSVGViewBox(el.ownerSVGElement);\r\n var x = bbox.x;\r\n var y = bbox.y;\r\n // x, y가 0으로 나타나는 버그\r\n if (tagName === \"foreignobject\" && (!x && !y)) {\r\n x = parseFloat(el.getAttribute(\"x\")) || 0;\r\n y = parseFloat(el.getAttribute(\"y\")) || 0;\r\n }\r\n var left = x - viewBox.x;\r\n var top = y - viewBox.y;\r\n var originX = isFillBox ? origin[0] : origin[0] - left;\r\n var originY = isFillBox ? origin[1] : origin[1] - top;\r\n // if (isFillBox) {\r\n // const bbox = (el as SVGGraphicsElement).getBBox();\r\n // const x = parseFloat(getStyle(\"x\")) || bbox.x;\r\n // const y = parseFloat(getStyle(\"y\")) || bbox.y;\r\n // const xScale = bbox.x / x;\r\n // const yScale = bbox.y / y;\r\n // console.log(x, y);\r\n // originX *= xScale;\r\n // originY *= yScale;\r\n // }\r\n return [left, top, originX, originY];\r\n}\r\nfunction calculatePosition(matrix, pos, n) {\r\n return calculate(matrix, convertPositionMatrix(pos, n), n);\r\n}\r\nfunction calculatePoses(matrix, width, height, n) {\r\n return [[0, 0], [width, 0], [0, height], [width, height]].map(function (pos) { return calculatePosition(matrix, pos, n); });\r\n}\r\nfunction getRect(poses) {\r\n var posesX = poses.map(function (pos) { return pos[0]; });\r\n var posesY = poses.map(function (pos) { return pos[1]; });\r\n var left = Math.min.apply(Math, __spreadArray([], __read(posesX), false));\r\n var top = Math.min.apply(Math, __spreadArray([], __read(posesY), false));\r\n var right = Math.max.apply(Math, __spreadArray([], __read(posesX), false));\r\n var bottom = Math.max.apply(Math, __spreadArray([], __read(posesY), false));\r\n var rectWidth = right - left;\r\n var rectHeight = bottom - top;\r\n return {\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n width: rectWidth,\r\n height: rectHeight,\r\n };\r\n}\r\nfunction calculateRect(matrix, width, height, n) {\r\n var poses = calculatePoses(matrix, width, height, n);\r\n return getRect(poses);\r\n}\r\nfunction getSVGOffset(offsetInfo, targetInfo, container, n, beforeMatrix) {\r\n var _a;\r\n var target = offsetInfo.target;\r\n var origin = offsetInfo.origin;\r\n var targetMatrix = targetInfo.matrix;\r\n var _b = getSize(target), width = _b.offsetWidth, height = _b.offsetHeight;\r\n var containerClientRect = container.getBoundingClientRect();\r\n var margin = [0, 0];\r\n if (container === getDocumentBody(container)) {\r\n margin = getBodyOffset(target, true);\r\n }\r\n var rect = target.getBoundingClientRect();\r\n var rectLeft = rect.left - containerClientRect.left + container.scrollLeft\r\n - (container.clientLeft || 0) + margin[0];\r\n var rectTop = rect.top - containerClientRect.top + container.scrollTop\r\n - (container.clientTop || 0) + margin[1];\r\n var rectWidth = rect.width;\r\n var rectHeight = rect.height;\r\n var mat = multiplies(n, beforeMatrix, targetMatrix);\r\n var _c = calculateRect(mat, width, height, n), prevLeft = _c.left, prevTop = _c.top, prevWidth = _c.width, prevHeight = _c.height;\r\n var posOrigin = calculatePosition(mat, origin, n);\r\n var prevOrigin = minus(posOrigin, [prevLeft, prevTop]);\r\n var rectOrigin = [\r\n rectLeft + prevOrigin[0] * rectWidth / prevWidth,\r\n rectTop + prevOrigin[1] * rectHeight / prevHeight,\r\n ];\r\n var offset = [0, 0];\r\n var count = 0;\r\n while (++count < 10) {\r\n var inverseBeforeMatrix = invert(beforeMatrix, n);\r\n _a = __read(minus(calculatePosition(inverseBeforeMatrix, rectOrigin, n), calculatePosition(inverseBeforeMatrix, posOrigin, n)), 2), offset[0] = _a[0], offset[1] = _a[1];\r\n var mat2 = multiplies(n, beforeMatrix, createOriginMatrix(offset, n), targetMatrix);\r\n var _d = calculateRect(mat2, width, height, n), nextLeft = _d.left, nextTop = _d.top;\r\n var distLeft = nextLeft - rectLeft;\r\n var distTop = nextTop - rectTop;\r\n if (abs(distLeft) < 2 && abs(distTop) < 2) {\r\n break;\r\n }\r\n rectOrigin[0] -= distLeft;\r\n rectOrigin[1] -= distTop;\r\n }\r\n return offset.map(function (p) { return Math.round(p); });\r\n}\r\nfunction calculateMoveableClientPositions(rootMatrix, poses, rootClientRect) {\r\n var is3d = rootMatrix.length === 16;\r\n var n = is3d ? 4 : 3;\r\n var rootPoses = poses.map(function (pos) { return calculatePosition(rootMatrix, pos, n); });\r\n var left = rootClientRect.left, top = rootClientRect.top;\r\n return rootPoses.map(function (pos) {\r\n return [pos[0] + left, pos[1] + top];\r\n });\r\n}\r\nfunction getDistSize(vec) {\r\n return Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]);\r\n}\r\nfunction getDiagonalSize(pos1, pos2) {\r\n return getDistSize([\r\n pos2[0] - pos1[0],\r\n pos2[1] - pos1[1],\r\n ]);\r\n}\r\nfunction getLineStyle(pos1, pos2, zoom, rad) {\r\n if (zoom === void 0) { zoom = 1; }\r\n if (rad === void 0) { rad = getRad(pos1, pos2); }\r\n var width = getDiagonalSize(pos1, pos2);\r\n return {\r\n transform: \"translateY(-50%) translate(\".concat(pos1[0], \"px, \").concat(pos1[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n width: \"\".concat(width, \"px\"),\r\n };\r\n}\r\nfunction getControlTransform(rotation, zoom) {\r\n var poses = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n poses[_i - 2] = arguments[_i];\r\n }\r\n var length = poses.length;\r\n var x = poses.reduce(function (prev, pos) { return prev + pos[0]; }, 0) / length;\r\n var y = poses.reduce(function (prev, pos) { return prev + pos[1]; }, 0) / length;\r\n return {\r\n transform: \"translateZ(0px) translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"rad) scale(\").concat(zoom, \")\"),\r\n };\r\n}\r\nfunction getProps(props, ableName) {\r\n var self = props[ableName];\r\n if (isObject(self)) {\r\n return __assign(__assign({}, props), self);\r\n }\r\n return props;\r\n}\r\nfunction getSize(target) {\r\n var hasOffset = target && !isUndefined(target.offsetWidth);\r\n var offsetWidth = 0;\r\n var offsetHeight = 0;\r\n var clientWidth = 0;\r\n var clientHeight = 0;\r\n var cssWidth = 0;\r\n var cssHeight = 0;\r\n var contentWidth = 0;\r\n var contentHeight = 0;\r\n var minWidth = 0;\r\n var minHeight = 0;\r\n var minOffsetWidth = 0;\r\n var minOffsetHeight = 0;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n var maxOffsetWidth = Infinity;\r\n var maxOffsetHeight = Infinity;\r\n var inlineCSSWidth = 0;\r\n var inlineCSSHeight = 0;\r\n var svg = false;\r\n if (target) {\r\n if (!hasOffset && target.ownerSVGElement) {\r\n // check svg elements\r\n var bbox = target.getBBox();\r\n svg = true;\r\n offsetWidth = bbox.width;\r\n offsetHeight = bbox.height;\r\n cssWidth = offsetWidth;\r\n cssHeight = offsetHeight;\r\n contentWidth = offsetWidth;\r\n contentHeight = offsetHeight;\r\n clientWidth = offsetWidth;\r\n clientHeight = offsetHeight;\r\n }\r\n else {\r\n // check html elements\r\n var getStyle = getCachedStyle(target);\r\n var targetStyle = target.style;\r\n var boxSizing = getStyle(\"boxSizing\") === \"border-box\";\r\n var borderLeft = parseFloat(getStyle(\"borderLeftWidth\")) || 0;\r\n var borderRight = parseFloat(getStyle(\"borderRightWidth\")) || 0;\r\n var borderTop = parseFloat(getStyle(\"borderTopWidth\")) || 0;\r\n var borderBottom = parseFloat(getStyle(\"borderBottomWidth\")) || 0;\r\n var paddingLeft = parseFloat(getStyle(\"paddingLeft\")) || 0;\r\n var paddingRight = parseFloat(getStyle(\"paddingRight\")) || 0;\r\n var paddingTop = parseFloat(getStyle(\"paddingTop\")) || 0;\r\n var paddingBottom = parseFloat(getStyle(\"paddingBottom\")) || 0;\r\n var horizontalPadding = paddingLeft + paddingRight;\r\n var verticalPadding = paddingTop + paddingBottom;\r\n var horizontalBorder = borderLeft + borderRight;\r\n var verticalBorder = borderTop + borderBottom;\r\n var horizontalOffset = horizontalPadding + horizontalBorder;\r\n var verticalOffset = verticalPadding + verticalBorder;\r\n var position = getStyle(\"position\");\r\n var containerWidth = 0;\r\n var containerHeight = 0;\r\n // SVGSVGElement, HTMLElement\r\n if (\"clientLeft\" in target) {\r\n var parentElement = null;\r\n if (position === \"absolute\") {\r\n var offsetInfo = getOffsetInfo(target, getDocumentBody(target));\r\n parentElement = offsetInfo.offsetParent;\r\n }\r\n else {\r\n parentElement = target.parentElement;\r\n }\r\n if (parentElement) {\r\n var getParentStyle = getCachedStyle(parentElement);\r\n containerWidth = parseFloat(getParentStyle(\"width\"));\r\n containerHeight = parseFloat(getParentStyle(\"height\"));\r\n }\r\n }\r\n minWidth = Math.max(horizontalPadding, convertUnitSize(getStyle(\"minWidth\"), containerWidth) || 0);\r\n minHeight = Math.max(verticalPadding, convertUnitSize(getStyle(\"minHeight\"), containerHeight) || 0);\r\n maxWidth = convertUnitSize(getStyle(\"maxWidth\"), containerWidth);\r\n maxHeight = convertUnitSize(getStyle(\"maxHeight\"), containerHeight);\r\n if (isNaN(maxWidth)) {\r\n maxWidth = Infinity;\r\n }\r\n if (isNaN(maxHeight)) {\r\n maxHeight = Infinity;\r\n }\r\n inlineCSSWidth = convertUnitSize(targetStyle.width, 0) || 0;\r\n inlineCSSHeight = convertUnitSize(targetStyle.height, 0) || 0;\r\n cssWidth = parseFloat(getStyle(\"width\")) || 0;\r\n cssHeight = parseFloat(getStyle(\"height\")) || 0;\r\n contentWidth = abs(cssWidth - inlineCSSWidth) < 1\r\n ? between(minWidth, inlineCSSWidth || cssWidth, maxWidth)\r\n : cssWidth;\r\n contentHeight = abs(cssHeight - inlineCSSHeight) < 1\r\n ? between(minHeight, inlineCSSHeight || cssHeight, maxHeight)\r\n : cssHeight;\r\n offsetWidth = contentWidth;\r\n offsetHeight = contentHeight;\r\n clientWidth = contentWidth;\r\n clientHeight = contentHeight;\r\n if (boxSizing) {\r\n maxOffsetWidth = maxWidth;\r\n maxOffsetHeight = maxHeight;\r\n minOffsetWidth = minWidth;\r\n minOffsetHeight = minHeight;\r\n contentWidth = offsetWidth - horizontalOffset;\r\n contentHeight = offsetHeight - verticalOffset;\r\n }\r\n else {\r\n maxOffsetWidth = maxWidth + horizontalOffset;\r\n maxOffsetHeight = maxHeight + verticalOffset;\r\n minOffsetWidth = minWidth + horizontalOffset;\r\n minOffsetHeight = minHeight + verticalOffset;\r\n offsetWidth = contentWidth + horizontalOffset;\r\n offsetHeight = contentHeight + verticalOffset;\r\n }\r\n clientWidth = contentWidth + horizontalPadding;\r\n clientHeight = contentHeight + verticalPadding;\r\n }\r\n }\r\n return {\r\n svg: svg,\r\n offsetWidth: offsetWidth,\r\n offsetHeight: offsetHeight,\r\n clientWidth: clientWidth,\r\n clientHeight: clientHeight,\r\n contentWidth: contentWidth,\r\n contentHeight: contentHeight,\r\n inlineCSSWidth: inlineCSSWidth,\r\n inlineCSSHeight: inlineCSSHeight,\r\n cssWidth: cssWidth,\r\n cssHeight: cssHeight,\r\n minWidth: minWidth,\r\n minHeight: minHeight,\r\n maxWidth: maxWidth,\r\n maxHeight: maxHeight,\r\n minOffsetWidth: minOffsetWidth,\r\n minOffsetHeight: minOffsetHeight,\r\n maxOffsetWidth: maxOffsetWidth,\r\n maxOffsetHeight: maxOffsetHeight,\r\n };\r\n}\r\nfunction getRotationRad(poses, direction) {\r\n return getRad(direction > 0 ? poses[0] : poses[1], direction > 0 ? poses[1] : poses[0]);\r\n}\r\nfunction resetClientRect() {\r\n return {\r\n left: 0, top: 0,\r\n width: 0, height: 0,\r\n right: 0,\r\n bottom: 0,\r\n clientLeft: 0, clientTop: 0,\r\n clientWidth: 0, clientHeight: 0,\r\n scrollWidth: 0, scrollHeight: 0,\r\n };\r\n}\r\nfunction getExtendsRect(el, rect) {\r\n var isRoot = el === getDocumentBody(el) || el === getDocumentElement(el);\r\n var extendsRect = {\r\n clientLeft: el.clientLeft,\r\n clientTop: el.clientTop,\r\n clientWidth: el.clientWidth,\r\n clientHeight: el.clientHeight,\r\n scrollWidth: el.scrollWidth,\r\n scrollHeight: el.scrollHeight,\r\n overflow: false,\r\n };\r\n if (isRoot) {\r\n extendsRect.clientHeight = Math.max(rect.height, extendsRect.clientHeight);\r\n extendsRect.scrollHeight = Math.max(rect.height, extendsRect.scrollHeight);\r\n }\r\n extendsRect.overflow = getCachedStyle(el)(\"overflow\") !== \"visible\";\r\n return __assign(__assign({}, rect), extendsRect);\r\n}\r\nfunction getClientRectByPosition(position, base, el, isExtends) {\r\n var left = position.left, right = position.right, top = position.top, bottom = position.bottom;\r\n var baseTop = base.top;\r\n var baseLeft = base.left;\r\n var rect = {\r\n left: baseLeft + left,\r\n top: baseTop + top,\r\n right: baseLeft + right,\r\n bottom: baseTop + bottom,\r\n width: right - left,\r\n height: bottom - top,\r\n };\r\n if (el && isExtends) {\r\n return getExtendsRect(el, rect);\r\n }\r\n return rect;\r\n}\r\nfunction getClientRect(el, isExtends) {\r\n var left = 0;\r\n var top = 0;\r\n var width = 0;\r\n var height = 0;\r\n // let isRoot = false;\r\n if (el) {\r\n var clientRect = el.getBoundingClientRect();\r\n left = clientRect.left;\r\n top = clientRect.top;\r\n width = clientRect.width;\r\n height = clientRect.height;\r\n }\r\n var rect = {\r\n left: left,\r\n top: top,\r\n width: width,\r\n height: height,\r\n right: left + width,\r\n bottom: top + height,\r\n };\r\n if (el && isExtends) {\r\n return getExtendsRect(el, rect);\r\n }\r\n return rect;\r\n}\r\nfunction getTotalOrigin(moveable) {\r\n var _a = moveable.props, groupable = _a.groupable, svgOrigin = _a.svgOrigin;\r\n var _b = moveable.getState(), offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight, svg = _b.svg, transformOrigin = _b.transformOrigin;\r\n if (!groupable && svg && svgOrigin) {\r\n return convertTransformOriginArray(svgOrigin, offsetWidth, offsetHeight);\r\n }\r\n return transformOrigin;\r\n}\r\nfunction getTotalDirection(parentDirection, isPinch, inputEvent, datas) {\r\n var direction;\r\n if (parentDirection) {\r\n direction = parentDirection;\r\n }\r\n else if (isPinch) {\r\n direction = [0, 0];\r\n }\r\n else {\r\n var target = inputEvent.target;\r\n direction = getDirection(target, datas);\r\n }\r\n return direction;\r\n}\r\nfunction getDirection(target, datas) {\r\n if (!target) {\r\n return;\r\n }\r\n var deg = target.getAttribute(\"data-rotation\") || \"\";\r\n var direciton = target.getAttribute(\"data-direction\");\r\n datas.deg = deg;\r\n if (!direciton) {\r\n return;\r\n }\r\n var dir = [0, 0];\r\n (direciton.indexOf(\"w\") > -1) && (dir[0] = -1);\r\n (direciton.indexOf(\"e\") > -1) && (dir[0] = 1);\r\n (direciton.indexOf(\"n\") > -1) && (dir[1] = -1);\r\n (direciton.indexOf(\"s\") > -1) && (dir[1] = 1);\r\n return dir;\r\n}\r\nfunction getAbsolutePoses(poses, dist) {\r\n return [\r\n plus(dist, poses[0]),\r\n plus(dist, poses[1]),\r\n plus(dist, poses[2]),\r\n plus(dist, poses[3]),\r\n ];\r\n}\r\nfunction getAbsolutePosesByState(_a) {\r\n var left = _a.left, top = _a.top, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n return getAbsolutePoses([pos1, pos2, pos3, pos4], [left, top]);\r\n}\r\nfunction unsetAbles(self, isControl) {\r\n self[isControl ? \"controlAbles\" : \"targetAbles\"].forEach(function (able) {\r\n able.unset && able.unset(self);\r\n });\r\n}\r\nfunction unsetGesto(self, isControl) {\r\n var gestoName = isControl ? \"controlGesto\" : \"targetGesto\";\r\n var gesto = self[gestoName];\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(self, isControl);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.unset();\r\n self[gestoName] = null;\r\n}\r\nfunction fillCSSObject(style, resolvedEvent) {\r\n if (resolvedEvent) {\r\n var originalDatas = getBeforeRenderableDatas(resolvedEvent);\r\n originalDatas.nextStyle = __assign(__assign({}, originalDatas.nextStyle), style);\r\n }\r\n return {\r\n style: style,\r\n cssText: getKeys(style).map(function (name) { return \"\".concat(decamelize(name, \"-\"), \": \").concat(style[name], \";\"); }).join(\"\"),\r\n };\r\n}\r\nfunction fillAfterTransform(prevEvent, nextEvent, resolvedEvent) {\r\n var afterTransform = nextEvent.afterTransform || nextEvent.transform;\r\n return __assign(__assign({}, fillCSSObject(__assign(__assign(__assign({}, prevEvent.style), nextEvent.style), { transform: afterTransform }), resolvedEvent)), { afterTransform: afterTransform, transform: prevEvent.transform });\r\n}\r\nfunction fillParams(moveable, e, params, isBeforeEvent) {\r\n var datas = e.datas;\r\n if (!datas.datas) {\r\n datas.datas = {};\r\n }\r\n var nextParams = __assign(__assign({}, params), { target: moveable.state.target, clientX: e.clientX, clientY: e.clientY, inputEvent: e.inputEvent, currentTarget: moveable, moveable: moveable, datas: datas.datas, isRequest: e.isRequest, isRequestChild: e.isRequestChild, isFirstDrag: !!e.isFirstDrag, isTrusted: e.isTrusted !== false, stopAble: function () {\r\n datas.isEventStart = false;\r\n }, stopDrag: function () {\r\n var _a;\r\n (_a = e.stop) === null || _a === void 0 ? void 0 : _a.call(e);\r\n } });\r\n if (!datas.isStartEvent) {\r\n datas.isStartEvent = true;\r\n }\r\n else if (!isBeforeEvent) {\r\n datas.lastEvent = nextParams;\r\n }\r\n return nextParams;\r\n}\r\nfunction fillEndParams(moveable, e, params) {\r\n var datas = e.datas;\r\n var isDrag = \"isDrag\" in params ? params.isDrag : e.isDrag;\r\n if (!datas.datas) {\r\n datas.datas = {};\r\n }\r\n return __assign(__assign({ isDrag: isDrag }, params), { moveable: moveable, target: moveable.state.target, clientX: e.clientX, clientY: e.clientY, inputEvent: e.inputEvent, currentTarget: moveable, lastEvent: datas.lastEvent, isDouble: e.isDouble, datas: datas.datas, isFirstDrag: !!e.isFirstDrag });\r\n}\r\nfunction catchEvent(moveable, name, callback) {\r\n moveable._emitter.on(name, callback);\r\n}\r\nfunction triggerEvent(moveable, name, params, isManager, isRequest) {\r\n return moveable.triggerEvent(name, params, isManager, isRequest);\r\n}\r\nfunction getComputedStyle(el, pseudoElt) {\r\n return getWindow(el).getComputedStyle(el, pseudoElt);\r\n}\r\nfunction filterAbles(ables, methods, triggerAblesSimultaneously) {\r\n var enabledAbles = {};\r\n var ableGroups = {};\r\n return ables.filter(function (able) {\r\n var name = able.name;\r\n if (enabledAbles[name] || !methods.some(function (method) { return able[method]; })) {\r\n return false;\r\n }\r\n if (!triggerAblesSimultaneously && able.ableGroup) {\r\n if (ableGroups[able.ableGroup]) {\r\n return false;\r\n }\r\n ableGroups[able.ableGroup] = true;\r\n }\r\n enabledAbles[name] = true;\r\n return true;\r\n });\r\n}\r\nfunction equals(a1, a2) {\r\n return a1 === a2 || (a1 == null && a2 == null);\r\n}\r\nfunction selectValue() {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n var length = values.length - 1;\r\n for (var i = 0; i < length; ++i) {\r\n var value = values[i];\r\n if (!isUndefined(value)) {\r\n return value;\r\n }\r\n }\r\n return values[length];\r\n}\r\nfunction groupBy(arr, func) {\r\n var groups = [];\r\n var groupKeys = [];\r\n arr.forEach(function (el, index) {\r\n var groupKey = func(el, index, arr);\r\n var keyIndex = groupKeys.indexOf(groupKey);\r\n var group = groups[keyIndex] || [];\r\n if (keyIndex === -1) {\r\n groupKeys.push(groupKey);\r\n groups.push(group);\r\n }\r\n group.push(el);\r\n });\r\n return groups;\r\n}\r\nfunction groupByMap(arr, func) {\r\n var groups = [];\r\n var groupKeys = {};\r\n arr.forEach(function (el, index) {\r\n var groupKey = func(el, index, arr);\r\n var group = groupKeys[groupKey];\r\n if (!group) {\r\n group = [];\r\n groupKeys[groupKey] = group;\r\n groups.push(group);\r\n }\r\n group.push(el);\r\n });\r\n return groups;\r\n}\r\nfunction flat(arr) {\r\n return arr.reduce(function (prev, cur) {\r\n return prev.concat(cur);\r\n }, []);\r\n}\r\nfunction maxOffset() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n args.sort(function (a, b) { return abs(b) - abs(a); });\r\n return args[0];\r\n}\r\nfunction calculateInversePosition(matrix, pos, n) {\r\n return calculate(invert(matrix, n), convertPositionMatrix(pos, n), n);\r\n}\r\nfunction convertDragDist(state, e) {\r\n var _a;\r\n var is3d = state.is3d, rootMatrix = state.rootMatrix;\r\n var n = is3d ? 4 : 3;\r\n _a = __read(calculateInversePosition(rootMatrix, [e.distX, e.distY], n), 2), e.distX = _a[0], e.distY = _a[1];\r\n return e;\r\n}\r\nfunction calculatePadding(matrix, pos, added, n) {\r\n if (!added[0] && !added[1]) {\r\n return pos;\r\n }\r\n var xAdded = calculatePosition(matrix, [normalized(added[0] || 1), 0], n);\r\n var yAdded = calculatePosition(matrix, [0, normalized(added[1] || 1)], n);\r\n var nextAdded = calculatePosition(matrix, [\r\n added[0] / getDistSize(xAdded),\r\n added[1] / getDistSize(yAdded),\r\n ], n);\r\n return plus(pos, nextAdded);\r\n}\r\nfunction convertCSSSize(value, size, isRelative) {\r\n return isRelative ? \"\".concat(value / size * 100, \"%\") : \"\".concat(value, \"px\");\r\n}\r\nfunction getTinyDist(v) {\r\n return abs(v) <= TINY_NUM ? 0 : v;\r\n}\r\nfunction getDirectionViewClassName(ableName) {\r\n return function (moveable) {\r\n if (!moveable.isDragging(ableName)) {\r\n return \"\";\r\n }\r\n var data = getGestoData(moveable, ableName);\r\n var deg = data.deg;\r\n if (!deg) {\r\n return \"\";\r\n }\r\n return prefix(\"view-control-rotation\".concat(deg));\r\n };\r\n}\r\nfunction getDirectionCondition(ableName, checkAbles) {\r\n if (checkAbles === void 0) { checkAbles = [ableName]; }\r\n return function (moveable, e) {\r\n if (e.isRequest) {\r\n if (checkAbles.some(function (name) { return e.requestAble === name; })) {\r\n return e.parentDirection;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n var target = e.inputEvent.target;\r\n return hasClass(target, prefix(\"direction\")) && (!ableName || hasClass(target, prefix(ableName)));\r\n };\r\n}\r\nfunction convertTransformInfo(transforms, state, index) {\r\n var _a;\r\n var matrixInfos = parse(transforms, {\r\n \"x%\": function (v) { return v / 100 * state.offsetWidth; },\r\n \"y%\": function (v) { return v / 100 * state.offsetHeight; },\r\n });\r\n var beforeFunctionTexts = transforms.slice(0, index < 0 ? undefined : index);\r\n var beforeFunctionTexts2 = transforms.slice(0, index < 0 ? undefined : index + 1);\r\n var targetFunctionText = transforms[index] || \"\";\r\n var afterFunctionTexts = index < 0 ? [] : transforms.slice(index);\r\n var afterFunctionTexts2 = index < 0 ? [] : transforms.slice(index + 1);\r\n var beforeFunctions = matrixInfos.slice(0, index < 0 ? undefined : index);\r\n var beforeFunctions2 = matrixInfos.slice(0, index < 0 ? undefined : index + 1);\r\n var targetFunction = (_a = matrixInfos[index]) !== null && _a !== void 0 ? _a : parse([\"\"])[0];\r\n var afterFunctions = index < 0 ? [] : matrixInfos.slice(index);\r\n var afterFunctions2 = index < 0 ? [] : matrixInfos.slice(index + 1);\r\n var targetFunctions = targetFunction ? [targetFunction] : [];\r\n var beforeFunctionMatrix = toMat(beforeFunctions);\r\n var beforeFunctionMatrix2 = toMat(beforeFunctions2);\r\n var afterFunctionMatrix = toMat(afterFunctions);\r\n var afterFunctionMatrix2 = toMat(afterFunctions2);\r\n var allFunctionMatrix = multiply(beforeFunctionMatrix, afterFunctionMatrix, 4);\r\n return {\r\n transforms: transforms,\r\n beforeFunctionMatrix: beforeFunctionMatrix,\r\n beforeFunctionMatrix2: beforeFunctionMatrix2,\r\n targetFunctionMatrix: toMat(targetFunctions),\r\n afterFunctionMatrix: afterFunctionMatrix,\r\n afterFunctionMatrix2: afterFunctionMatrix2,\r\n allFunctionMatrix: allFunctionMatrix,\r\n beforeFunctions: beforeFunctions,\r\n beforeFunctions2: beforeFunctions2,\r\n targetFunction: targetFunctions[0],\r\n afterFunctions: afterFunctions,\r\n afterFunctions2: afterFunctions2,\r\n beforeFunctionTexts: beforeFunctionTexts,\r\n beforeFunctionTexts2: beforeFunctionTexts2,\r\n targetFunctionText: targetFunctionText,\r\n afterFunctionTexts: afterFunctionTexts,\r\n afterFunctionTexts2: afterFunctionTexts2,\r\n };\r\n}\r\nfunction isArrayFormat(arr) {\r\n if (!arr || !isObject(arr)) {\r\n return false;\r\n }\r\n if (isNode(arr)) {\r\n return false;\r\n }\r\n return isArray(arr) || \"length\" in arr;\r\n}\r\nfunction getRefTarget(target, isSelector) {\r\n if (!target) {\r\n return null;\r\n }\r\n if (isNode(target)) {\r\n return target;\r\n }\r\n if (isString(target)) {\r\n if (isSelector) {\r\n return document.querySelector(target);\r\n }\r\n return target;\r\n }\r\n if (isFunction(target)) {\r\n return target();\r\n }\r\n if (isWindow(target)) {\r\n return target;\r\n }\r\n if (\"current\" in target) {\r\n return target.current;\r\n }\r\n return target;\r\n}\r\nfunction getRefTargets(targets, isSelector) {\r\n if (!targets) {\r\n return [];\r\n }\r\n var userTargets = isArrayFormat(targets) ? [].slice.call(targets) : [targets];\r\n return userTargets.reduce(function (prev, target) {\r\n if (isString(target) && isSelector) {\r\n return __spreadArray(__spreadArray([], __read(prev), false), __read([].slice.call(document.querySelectorAll(target))), false);\r\n }\r\n if (isArray(target)) {\r\n prev.push(getRefTargets(target, isSelector));\r\n }\r\n else {\r\n prev.push(getRefTarget(target, isSelector));\r\n }\r\n return prev;\r\n }, []);\r\n}\r\nfunction getAbsoluteRotation(pos1, pos2, direction) {\r\n var deg = getRad(pos1, pos2) / Math.PI * 180;\r\n deg = direction >= 0 ? deg : 180 - deg;\r\n deg = deg >= 0 ? deg : 360 + deg;\r\n return deg;\r\n}\r\nfunction getDragDistByState(state, dist) {\r\n var rootMatrix = state.rootMatrix, is3d = state.is3d;\r\n var n = is3d ? 4 : 3;\r\n var inverseMatrix = invert(rootMatrix, n);\r\n if (!is3d) {\r\n inverseMatrix = convertDimension(inverseMatrix, 3, 4);\r\n }\r\n inverseMatrix[12] = 0;\r\n inverseMatrix[13] = 0;\r\n inverseMatrix[14] = 0;\r\n return calculateMatrixDist(inverseMatrix, dist);\r\n}\r\nfunction getSizeDistByDist(startSize, dist, ratio, direction, keepRatio) {\r\n var _a = __read(startSize, 2), startOffsetWidth = _a[0], startOffsetHeight = _a[1];\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n if (keepRatio && startOffsetWidth && startOffsetHeight) {\r\n var rad = getRad([0, 0], dist);\r\n var standardRad = getRad([0, 0], direction);\r\n var size = getDistSize(dist);\r\n var signSize = Math.cos(rad - standardRad) * size;\r\n if (!direction[0]) {\r\n // top, bottom\r\n distHeight = signSize;\r\n distWidth = distHeight * ratio;\r\n }\r\n else if (!direction[1]) {\r\n // left, right\r\n distWidth = signSize;\r\n distHeight = distWidth / ratio;\r\n }\r\n else {\r\n // two-way\r\n var startWidthSize = direction[0] * startOffsetWidth;\r\n var startHeightSize = direction[1] * startOffsetHeight;\r\n var secondRad = Math.atan2(startWidthSize + dist[0], startHeightSize + dist[1]);\r\n var firstRad = Math.atan2(startWidthSize, startHeightSize);\r\n if (secondRad < 0) {\r\n secondRad += Math.PI * 2;\r\n }\r\n if (firstRad < 0) {\r\n firstRad += Math.PI * 2;\r\n }\r\n var rad_1 = 0;\r\n if (abs(secondRad - firstRad) < Math.PI / 2 || abs(secondRad - firstRad) > Math.PI / 2 * 3) {\r\n rad_1 = secondRad - firstRad;\r\n }\r\n else {\r\n firstRad += Math.PI;\r\n rad_1 = secondRad - firstRad;\r\n }\r\n if (rad_1 > Math.PI * 2) {\r\n rad_1 -= Math.PI * 2;\r\n }\r\n else if (rad_1 > Math.PI) {\r\n rad_1 = 2 * Math.PI - rad_1;\r\n }\r\n else if (rad_1 < -Math.PI) {\r\n rad_1 = -2 * Math.PI - rad_1;\r\n }\r\n // 180\r\n // -1, -1, // 1, -1\r\n // 270 90\r\n // -1, 1 // 1, 1\r\n // 0\r\n var distSize = getDistSize([startWidthSize + dist[0], startHeightSize + dist[1]]) * Math.cos(rad_1);\r\n distWidth = distSize * Math.sin(firstRad) - startWidthSize;\r\n distHeight = distSize * Math.cos(firstRad) - startHeightSize;\r\n if (direction[0] < 0) {\r\n distWidth *= -1;\r\n }\r\n if (direction[1] < 0) {\r\n distHeight *= -1;\r\n }\r\n }\r\n }\r\n else {\r\n distWidth = direction[0] * dist[0];\r\n distHeight = direction[1] * dist[1];\r\n }\r\n return [distWidth, distHeight];\r\n}\r\nfunction getOffsetSizeDist(sizeDirection, keepRatio, datas, e) {\r\n var _a;\r\n var ratio = datas.ratio, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight;\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var distX = e.distX, distY = e.distY, pinchScale = e.pinchScale, parentDistance = e.parentDistance, parentDist = e.parentDist, parentScale = e.parentScale;\r\n var startFixedDirection = datas.fixedDirection;\r\n var directionsDists = [0, 1].map(function (index) {\r\n return abs(sizeDirection[index] - startFixedDirection[index]);\r\n });\r\n var directionRatios = [0, 1].map(function (index) {\r\n var dist = directionsDists[index];\r\n if (dist !== 0) {\r\n dist = 2 / dist;\r\n }\r\n return dist;\r\n });\r\n if (parentDist) {\r\n distWidth = parentDist[0];\r\n distHeight = parentDist[1];\r\n if (keepRatio) {\r\n if (!distWidth) {\r\n distWidth = distHeight * ratio;\r\n }\r\n else if (!distHeight) {\r\n distHeight = distWidth / ratio;\r\n }\r\n }\r\n }\r\n else if (isNumber(pinchScale)) {\r\n distWidth = (pinchScale - 1) * startOffsetWidth;\r\n distHeight = (pinchScale - 1) * startOffsetHeight;\r\n }\r\n else if (parentScale) {\r\n distWidth = (parentScale[0] - 1) * startOffsetWidth;\r\n distHeight = (parentScale[1] - 1) * startOffsetHeight;\r\n }\r\n else if (parentDistance) {\r\n var scaleX = startOffsetWidth * directionsDists[0];\r\n var scaleY = startOffsetHeight * directionsDists[1];\r\n var ratioDistance = getDistSize([scaleX, scaleY]);\r\n distWidth = parentDistance / ratioDistance * scaleX * directionRatios[0];\r\n distHeight = parentDistance / ratioDistance * scaleY * directionRatios[1];\r\n }\r\n else {\r\n var dist_1 = getDragDist({ datas: datas, distX: distX, distY: distY });\r\n dist_1 = directionRatios.map(function (ratio, i) {\r\n return dist_1[i] * ratio;\r\n });\r\n _a = __read(getSizeDistByDist([startOffsetWidth, startOffsetHeight], dist_1, ratio, sizeDirection, keepRatio), 2), distWidth = _a[0], distHeight = _a[1];\r\n }\r\n return {\r\n // direction,\r\n // sizeDirection,\r\n distWidth: distWidth,\r\n distHeight: distHeight,\r\n };\r\n}\r\nfunction convertTransformUnit(origin, xy) {\r\n if (xy) {\r\n if (origin === \"left\") {\r\n return { x: \"0%\", y: \"50%\" };\r\n }\r\n else if (origin === \"top\") {\r\n return { x: \"50%\", y: \"50%\" };\r\n }\r\n else if (origin === \"center\") {\r\n return { x: \"50%\", y: \"50%\" };\r\n }\r\n else if (origin === \"right\") {\r\n return { x: \"100%\", y: \"50%\" };\r\n }\r\n else if (origin === \"bottom\") {\r\n return { x: \"50%\", y: \"100%\" };\r\n }\r\n var _a = __read(origin.split(\" \"), 2), left = _a[0], right = _a[1];\r\n var leftOrigin = convertTransformUnit(left || \"\");\r\n var rightOrigin = convertTransformUnit(right || \"\");\r\n var originObject = __assign(__assign({}, leftOrigin), rightOrigin);\r\n var nextOriginObject = {\r\n x: \"50%\",\r\n y: \"50%\",\r\n };\r\n if (originObject.x) {\r\n nextOriginObject.x = originObject.x;\r\n }\r\n if (originObject.y) {\r\n nextOriginObject.y = originObject.y;\r\n }\r\n if (originObject.value) {\r\n if (originObject.x && !originObject.y) {\r\n nextOriginObject.y = originObject.value;\r\n }\r\n if (!originObject.x && originObject.y) {\r\n nextOriginObject.x = originObject.value;\r\n }\r\n }\r\n return nextOriginObject;\r\n }\r\n if (origin === \"left\") {\r\n return { x: \"0%\" };\r\n }\r\n if (origin === \"right\") {\r\n return { x: \"100%\" };\r\n }\r\n if (origin === \"top\") {\r\n return { y: \"0%\" };\r\n }\r\n if (origin === \"bottom\") {\r\n return { y: \"100%\" };\r\n }\r\n if (!origin) {\r\n return {};\r\n }\r\n if (origin === \"center\") {\r\n return { value: \"50%\" };\r\n }\r\n return { value: origin };\r\n}\r\nfunction convertTransformOriginArray(transformOrigin, width, height) {\r\n var _a = convertTransformUnit(transformOrigin, true), x = _a.x, y = _a.y;\r\n return [\r\n convertUnitSize(x, width) || 0,\r\n convertUnitSize(y, height) || 0,\r\n ];\r\n}\r\nfunction rotatePosesInfo(poses, origin, rad) {\r\n var prevPoses = poses.map(function (pos) { return minus(pos, origin); });\r\n var nextPoses = prevPoses.map(function (pos) { return rotate(pos, rad); });\r\n return {\r\n prev: prevPoses,\r\n next: nextPoses,\r\n result: nextPoses.map(function (pos) { return plus(pos, origin); }),\r\n };\r\n}\r\nfunction isDeepArrayEquals(arr1, arr2) {\r\n return arr1.length === arr2.length && arr1.every(function (value1, i) {\r\n var value2 = arr2[i];\r\n var isArray1 = isArray(value1);\r\n var isArray2 = isArray(value2);\r\n if (isArray1 && isArray2) {\r\n return isDeepArrayEquals(value1, value2);\r\n }\r\n else if (!isArray1 && !isArray2) {\r\n return value1 === value2;\r\n }\r\n return false;\r\n });\r\n}\r\nfunction watchValue(moveable, property, nextValue, valueKey, defaultValue) {\r\n var store = moveable._store;\r\n var prevValue = store[property];\r\n if (!(property in store)) {\r\n if (defaultValue != null) {\r\n store[property] = defaultValue;\r\n prevValue = defaultValue;\r\n }\r\n else {\r\n store[property] = nextValue;\r\n return nextValue;\r\n }\r\n }\r\n if (prevValue === nextValue || valueKey(prevValue) === valueKey(nextValue)) {\r\n return prevValue;\r\n }\r\n store[property] = nextValue;\r\n return nextValue;\r\n}\r\nfunction sign(value) {\r\n return value >= 0 ? 1 : -1;\r\n}\r\nfunction abs(value) {\r\n return Math.abs(value);\r\n}\r\nfunction countEach(count, callback) {\r\n return counter(count).map(function (index) { return callback(index); });\r\n}\r\nfunction getPaddingBox(padding) {\r\n if (isNumber(padding)) {\r\n return {\r\n top: padding,\r\n left: padding,\r\n right: padding,\r\n bottom: padding,\r\n };\r\n }\r\n return {\r\n left: padding.left || 0,\r\n top: padding.top || 0,\r\n right: padding.right || 0,\r\n bottom: padding.bottom || 0,\r\n };\r\n}\n\n/**\r\n * @namespace Moveable.Pinchable\r\n * @description Whether or not target can be pinched with draggable, resizable, scalable, rotatable (default: false)\r\n */\r\nvar Pinchable = makeAble(\"pinchable\", {\r\n props: [\r\n \"pinchable\",\r\n ],\r\n events: [\r\n \"pinchStart\",\r\n \"pinch\",\r\n \"pinchEnd\",\r\n \"pinchGroupStart\",\r\n \"pinchGroup\",\r\n \"pinchGroupEnd\",\r\n ],\r\n dragStart: function () {\r\n return true;\r\n },\r\n pinchStart: function (moveable, e) {\r\n var datas = e.datas, targets = e.targets, angle = e.angle, originalDatas = e.originalDatas;\r\n var _a = moveable.props, pinchable = _a.pinchable, ables = _a.ables;\r\n if (!pinchable) {\r\n return false;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\", \"Start\");\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"ControlStart\");\r\n var pinchAbles = (pinchable === true ? moveable.controlAbles : ables.filter(function (able) {\r\n return pinchable.indexOf(able.name) > -1;\r\n })).filter(function (able) { return able.canPinch && able[controlEventName]; });\r\n var params = fillParams(moveable, e, {});\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n var result = triggerEvent(moveable, eventName, params);\r\n datas.isPinch = result !== false;\r\n datas.ables = pinchAbles;\r\n var isPinch = datas.isPinch;\r\n if (!isPinch) {\r\n return false;\r\n }\r\n pinchAbles.forEach(function (able) {\r\n originalDatas[able.name] = originalDatas[able.name] || {};\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n var ableEvent = __assign(__assign({}, e), { datas: originalDatas[able.name], parentRotate: angle, isPinch: true });\r\n able[controlEventName](moveable, ableEvent);\r\n });\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: [0, 0],\r\n };\r\n return isPinch;\r\n },\r\n pinch: function (moveable, e) {\r\n var datas = e.datas, pinchScale = e.scale, distance = e.distance, originalDatas = e.originalDatas, inputEvent = e.inputEvent, targets = e.targets, angle = e.angle;\r\n if (!datas.isPinch) {\r\n return;\r\n }\r\n var parentDistance = distance * (1 - 1 / pinchScale);\r\n var params = fillParams(moveable, e, {});\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\");\r\n triggerEvent(moveable, eventName, params);\r\n var ables = datas.ables;\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"Control\");\r\n ables.forEach(function (able) {\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n able[controlEventName](moveable, __assign(__assign({}, e), { datas: originalDatas[able.name], inputEvent: inputEvent, resolveMatrix: true, pinchScale: pinchScale, parentDistance: parentDistance, parentRotate: angle, isPinch: true }));\r\n });\r\n return params;\r\n },\r\n pinchEnd: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, inputEvent = e.inputEvent, targets = e.targets, originalDatas = e.originalDatas;\r\n if (!datas.isPinch) {\r\n return;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\", \"End\");\r\n var params = fillEndParams(moveable, e, { isDrag: isPinch });\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n triggerEvent(moveable, eventName, params);\r\n var ables = datas.ables;\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"ControlEnd\");\r\n ables.forEach(function (able) {\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n able[controlEventName](moveable, __assign(__assign({}, e), { isDrag: isPinch, datas: originalDatas[able.name], inputEvent: inputEvent, isPinch: true }));\r\n });\r\n return isPinch;\r\n },\r\n pinchGroupStart: function (moveable, e) {\r\n return this.pinchStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n pinchGroup: function (moveable, e) {\r\n return this.pinch(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n pinchGroupEnd: function (moveable, e) {\r\n return this.pinchEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n});\r\n/**\r\n * Whether or not target can be pinched with draggable, resizable, scalable, rotatable (default: false)\r\n * @name Moveable.Pinchable#pinchable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.pinchable = true;\r\n */\r\n/**\r\n * When the pinch starts, the pinchStart event is called with part of scaleStart, rotateStart, resizeStart\r\n * @memberof Moveable.Pinchable\r\n * @event pinchStart\r\n * @param {Moveable.Pinchable.OnPinchStart} - Parameters for the pinchStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinchStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotateStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scaleStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When pinching, the pinch event is called with part of scale, rotate, resize\r\n * @memberof Moveable.Pinchable\r\n * @event pinch\r\n * @param {Moveable.Pinchable.OnPinch} - Parameters for the pinch event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinch\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotate\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scale\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When the pinch finishes, the pinchEnd event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchEnd\r\n * @param {Moveable.Pinchable.OnPinchEnd} - Parameters for the pinchEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinchEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotateEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scaleEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When the group pinch starts, the `pinchGroupStart` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroupStart\r\n * @param {Moveable.Pinchable.OnPinchGroupStart} - Parameters for the `pinchGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroupStart\", ({ targets }) => {\r\n * console.log(\"onPinchGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n * When the group pinch, the `pinchGroup` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroup\r\n * @param {Moveable.Pinchable.OnPinchGroup} - Parameters for the `pinchGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroup\", ({ targets, events }) => {\r\n * console.log(\"onPinchGroup\", targets);\r\n * });\r\n */\r\n/**\r\n * When the group pinch finishes, the `pinchGroupEnd` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroupEnd\r\n * @param {Moveable.Pinchable.OnPinchGroupEnd} - Parameters for the `pinchGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onPinchGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nvar directionCondition = getDirectionCondition(\"scalable\");\r\n/**\r\n * @namespace Scalable\r\n * @memberof Moveable\r\n * @description Scalable indicates whether the target's x and y can be scale of transform.\r\n */\r\nvar Scalable = {\r\n name: \"scalable\",\r\n ableGroup: \"size\",\r\n canPinch: true,\r\n props: [\r\n \"scalable\",\r\n \"throttleScale\",\r\n \"renderDirections\",\r\n \"keepRatio\",\r\n \"edge\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"scaleStart\",\r\n \"beforeScale\",\r\n \"scale\",\r\n \"scaleEnd\",\r\n \"scaleGroupStart\",\r\n \"beforeScaleGroup\",\r\n \"scaleGroup\",\r\n \"scaleGroupEnd\",\r\n ],\r\n render: getRenderDirections(\"scalable\"),\r\n dragControlCondition: directionCondition,\r\n viewClassName: getDirectionViewClassName(\"scalable\"),\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, inputEvent = e.inputEvent, parentDirection = e.parentDirection;\r\n var direction = getTotalDirection(parentDirection, isPinch, inputEvent, datas);\r\n var _a = moveable.state, width = _a.width, height = _a.height, targetTransform = _a.targetTransform, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos4 = _a.pos4;\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n if (!isPinch) {\r\n setDragStart(moveable, e);\r\n }\r\n datas.datas = {};\r\n datas.transform = targetTransform;\r\n datas.prevDist = [1, 1];\r\n datas.direction = direction;\r\n datas.startOffsetWidth = width;\r\n datas.startOffsetHeight = height;\r\n datas.startValue = [1, 1];\r\n // const scaleWidth = getDist(pos1, pos2);\r\n // const scaleHeight = getDist(pos2, pos4);\r\n var isWidth = (!direction[0] && !direction[1]) || direction[0] || !direction[1];\r\n // datas.scaleWidth = scaleWidth;\r\n // datas.scaleHeight = scaleHeight;\r\n // datas.scaleXRatio = scaleWidth / width;\r\n // datas.scaleYRatio = scaleHeight / height;\r\n setDefaultTransformIndex(moveable, e, \"scale\");\r\n datas.isWidth = isWidth;\r\n function setRatio(ratio) {\r\n datas.ratio = ratio && isFinite(ratio) ? ratio : 0;\r\n }\r\n datas.startPositions = getAbsolutePosesByState(moveable.state);\r\n function setFixedDirection(fixedDirection) {\r\n var result = getFixedDirectionInfo(datas.startPositions, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n datas.setFixedDirection = setFixedDirection;\r\n setRatio(getDist$1(pos1, pos2) / getDist$1(pos2, pos4));\r\n setFixedDirection([-direction[0], -direction[1]]);\r\n var setMinScaleSize = function (min) {\r\n datas.minScaleSize = min;\r\n };\r\n var setMaxScaleSize = function (max) {\r\n datas.maxScaleSize = max;\r\n };\r\n // const setMinScale = (min: number[]) => {\r\n // };\r\n // const setMaxScale = (max: number[]) => {\r\n // };\r\n setMinScaleSize([-Infinity, -Infinity]);\r\n setMaxScaleSize([Infinity, Infinity]);\r\n var params = fillParams(moveable, e, __assign(__assign({ direction: direction, set: function (scale) {\r\n datas.startValue = scale;\r\n }, setRatio: setRatio, setFixedDirection: setFixedDirection, setMinScaleSize: setMinScaleSize, setMaxScaleSize: setMaxScaleSize }, fillTransformStartEvent(moveable, e)), { dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)) }));\r\n var result = triggerEvent(moveable, \"onScaleStart\", params);\r\n datas.startFixedDirection = datas.fixedDirection;\r\n if (result !== false) {\r\n datas.isScale = true;\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n }\r\n return datas.isScale ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n resolveTransformEvent(moveable, e, \"scale\");\r\n var datas = e.datas, parentKeepRatio = e.parentKeepRatio, parentFlag = e.parentFlag, isPinch = e.isPinch, dragClient = e.dragClient, isRequest = e.isRequest, useSnap = e.useSnap, resolveMatrix = e.resolveMatrix;\r\n var prevDist = datas.prevDist, direction = datas.direction, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, isScale = datas.isScale, startValue = datas.startValue, isWidth = datas.isWidth, ratio = datas.ratio;\r\n if (!isScale) {\r\n return false;\r\n }\r\n var props = moveable.props;\r\n var throttleScale = props.throttleScale, parentMoveable = props.parentMoveable;\r\n var sizeDirection = direction;\r\n if (!direction[0] && !direction[1]) {\r\n sizeDirection = [1, 1];\r\n }\r\n var keepRatio = (ratio && (parentKeepRatio != null ? parentKeepRatio : props.keepRatio)) || false;\r\n var state = moveable.state;\r\n var tempScaleValue = [\r\n startValue[0],\r\n startValue[1],\r\n ];\r\n function getNextScale() {\r\n var _a = getOffsetSizeDist(sizeDirection, keepRatio, datas, e), distWidth = _a.distWidth, distHeight = _a.distHeight;\r\n var distX = startOffsetWidth ? (startOffsetWidth + distWidth) / startOffsetWidth : 1;\r\n var distY = startOffsetHeight ? (startOffsetHeight + distHeight) / startOffsetHeight : 1;\r\n if (!startValue[0]) {\r\n tempScaleValue[0] = distWidth / startOffsetWidth;\r\n }\r\n if (!startValue[1]) {\r\n tempScaleValue[1] = distHeight / startOffsetHeight;\r\n }\r\n var scaleX = (sizeDirection[0] || keepRatio ? distX : 1) * tempScaleValue[0];\r\n var scaleY = (sizeDirection[1] || keepRatio ? distY : 1) * tempScaleValue[1];\r\n if (scaleX === 0) {\r\n scaleX = sign(prevDist[0]) * MIN_SCALE;\r\n }\r\n if (scaleY === 0) {\r\n scaleY = sign(prevDist[1]) * MIN_SCALE;\r\n }\r\n return [scaleX, scaleY];\r\n }\r\n var scale = getNextScale();\r\n if (!isPinch && moveable.props.groupable) {\r\n var snapRenderInfo = state.snapRenderInfo || {};\r\n var stateDirection = snapRenderInfo.direction;\r\n if (isArray(stateDirection) && (stateDirection[0] || stateDirection[1])) {\r\n state.snapRenderInfo = { direction: direction, request: e.isRequest };\r\n }\r\n }\r\n triggerEvent(moveable, \"onBeforeScale\", fillParams(moveable, e, {\r\n scale: scale,\r\n setFixedDirection: function (nextFixedDirection) {\r\n datas.setFixedDirection(nextFixedDirection);\r\n scale = getNextScale();\r\n return scale;\r\n },\r\n startFixedDirection: datas.startFixedDirection,\r\n setScale: function (nextScale) {\r\n scale = nextScale;\r\n },\r\n }, true));\r\n var dist = [\r\n scale[0] / tempScaleValue[0],\r\n scale[1] / tempScaleValue[1],\r\n ];\r\n var fixedPosition = dragClient;\r\n var snapDist = [0, 0];\r\n var distSign = sign(dist[0] * dist[1]);\r\n var isSelfPinch = !dragClient && !parentFlag && isPinch;\r\n if (isSelfPinch || resolveMatrix) {\r\n fixedPosition = getTranslateFixedPosition(moveable, datas.targetAllTransform, [0, 0], [0, 0], datas);\r\n }\r\n else if (!dragClient) {\r\n fixedPosition = datas.fixedPosition;\r\n }\r\n if (!isPinch) {\r\n snapDist = checkSnapScale(moveable, dist, direction, !useSnap && isRequest, datas);\r\n }\r\n if (keepRatio) {\r\n if (sizeDirection[0] && sizeDirection[1] && snapDist[0] && snapDist[1]) {\r\n if (Math.abs(snapDist[0] * startOffsetWidth) > Math.abs(snapDist[1] * startOffsetHeight)) {\r\n snapDist[1] = 0;\r\n }\r\n else {\r\n snapDist[0] = 0;\r\n }\r\n }\r\n var isNoSnap = !snapDist[0] && !snapDist[1];\r\n if (isNoSnap) {\r\n // throttle scale value (not absolute scale size)\r\n if (isWidth) {\r\n dist[0] = throttle(dist[0] * tempScaleValue[0], throttleScale) / tempScaleValue[0];\r\n }\r\n else {\r\n dist[1] = throttle(dist[1] * tempScaleValue[1], throttleScale) / tempScaleValue[1];\r\n }\r\n }\r\n if ((sizeDirection[0] && !sizeDirection[1])\r\n || (snapDist[0] && !snapDist[1])\r\n || (isNoSnap && isWidth)) {\r\n dist[0] += snapDist[0];\r\n var snapHeight = startOffsetWidth * dist[0] * tempScaleValue[0] / ratio;\r\n dist[1] = sign(distSign * dist[0]) * abs(snapHeight / startOffsetHeight / tempScaleValue[1]);\r\n }\r\n else if ((!sizeDirection[0] && sizeDirection[1])\r\n || (!snapDist[0] && snapDist[1])\r\n || (isNoSnap && !isWidth)) {\r\n dist[1] += snapDist[1];\r\n var snapWidth = startOffsetHeight * dist[1] * tempScaleValue[1] * ratio;\r\n dist[0] = sign(distSign * dist[1]) * abs(snapWidth / startOffsetWidth / tempScaleValue[0]);\r\n }\r\n }\r\n else {\r\n dist[0] += snapDist[0];\r\n dist[1] += snapDist[1];\r\n if (!snapDist[0]) {\r\n dist[0] = throttle(dist[0] * tempScaleValue[0], throttleScale) / tempScaleValue[0];\r\n }\r\n if (!snapDist[1]) {\r\n dist[1] = throttle(dist[1] * tempScaleValue[1], throttleScale) / tempScaleValue[1];\r\n }\r\n }\r\n if (dist[0] === 0) {\r\n dist[0] = sign(prevDist[0]) * MIN_SCALE;\r\n }\r\n if (dist[1] === 0) {\r\n dist[1] = sign(prevDist[1]) * MIN_SCALE;\r\n }\r\n scale = multiply2(dist, [tempScaleValue[0], tempScaleValue[1]]);\r\n var startOffsetSize = [\r\n startOffsetWidth,\r\n startOffsetHeight,\r\n ];\r\n var scaleSize = [\r\n startOffsetWidth * scale[0],\r\n startOffsetHeight * scale[1],\r\n ];\r\n scaleSize = calculateBoundSize(scaleSize, datas.minScaleSize, datas.maxScaleSize, keepRatio ? ratio : false);\r\n // if (keepRatio && (isGroup || keepRatioFinally)) {\r\n // if (isWidth) {\r\n // boundingHeight = boundingWidth / ratio;\r\n // } else {\r\n // boundingWidth = boundingHeight * ratio;\r\n // }\r\n // }\r\n scale = countEach(2, function (i) {\r\n return startOffsetSize[i] ? scaleSize[i] / startOffsetSize[i] : scaleSize[i];\r\n });\r\n dist = countEach(2, function (i) {\r\n return scale[i] / tempScaleValue[i];\r\n });\r\n var delta = countEach(2, function (i) { return prevDist[i] ? dist[i] / prevDist[i] : dist[i]; });\r\n var distText = \"scale(\".concat(dist.join(\", \"), \")\");\r\n var scaleText = \"scale(\".concat(scale.join(\", \"), \")\");\r\n var nextTransform = convertTransformFormat(datas, scaleText, distText);\r\n var isZeroScale = !startValue[0] || !startValue[1];\r\n var inverseDist = getScaleDist(moveable, isZeroScale ? scaleText : distText, datas.fixedDirection, fixedPosition, datas.fixedOffset, datas, isZeroScale);\r\n var inverseDelta = isSelfPinch ? inverseDist : minus(inverseDist, datas.prevInverseDist || [0, 0]);\r\n datas.prevDist = dist;\r\n datas.prevInverseDist = inverseDist;\r\n if (scale[0] === prevDist[0] && scale[1] === prevDist[1]\r\n && inverseDelta.every(function (num) { return !num; })\r\n && !parentMoveable\r\n && !isSelfPinch) {\r\n return false;\r\n }\r\n var params = fillParams(moveable, e, __assign({ offsetWidth: startOffsetWidth, offsetHeight: startOffsetHeight, direction: direction, scale: scale, dist: dist, delta: delta, isPinch: !!isPinch }, fillTransformEvent(moveable, nextTransform, inverseDelta, isPinch, e)));\r\n triggerEvent(moveable, \"onScale\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isScale) {\r\n return false;\r\n }\r\n datas.isScale = false;\r\n var scaleEndParam = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onScaleEnd\", scaleEndParam);\r\n return scaleEndParam;\r\n },\r\n dragGroupControlCondition: directionCondition,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n var originalEvents = fillChildEvents(moveable, \"resizable\", e);\r\n datas.moveableScale = moveable.scale;\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n return startChildDist(moveable, child, datas, ev);\r\n });\r\n var setFixedDirection = function (fixedDirection) {\r\n params.setFixedDirection(fixedDirection);\r\n events.forEach(function (ev, i) {\r\n ev.setFixedDirection(fixedDirection);\r\n startChildDist(moveable, ev.moveable, datas, originalEvents[i]);\r\n });\r\n };\r\n datas.setFixedDirection = setFixedDirection;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events, setFixedDirection: setFixedDirection });\r\n var result = triggerEvent(moveable, \"onScaleGroupStart\", nextParams);\r\n datas.isScale = result !== false;\r\n return datas.isScale ? nextParams : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isScale) {\r\n return;\r\n }\r\n catchEvent(moveable, \"onBeforeScale\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeScaleGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: moveable.props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return;\r\n }\r\n var dist = params.dist;\r\n var moveableScale = datas.moveableScale;\r\n moveable.scale = [\r\n dist[0] * moveableScale[0],\r\n dist[1] * moveableScale[1],\r\n ];\r\n var keepRatio = moveable.props.keepRatio;\r\n var fixedPosition = datas.fixedPosition;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var _a = __read(calculate(createRotateMatrix(moveable.rotation / 180 * Math.PI, 3), [\r\n ev.datas.originalX * dist[0],\r\n ev.datas.originalY * dist[1],\r\n 1,\r\n ], 3), 2), clientX = _a[0], clientY = _a[1];\r\n return __assign(__assign({}, ev), { parentDist: null, parentScale: dist, parentKeepRatio: keepRatio, \r\n // recalculate child fixed position for parent group's dragging.\r\n dragClient: plus(fixedPosition, [clientX, clientY]) });\r\n });\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events }, params);\r\n triggerEvent(moveable, \"onScaleGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isScale) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onScaleGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Scalable#request\r\n * @param {Moveable.Scalable.ScalableRequestParam} e - the Scalable's request parameter\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"scalable\", { deltaWidth: 10, deltaHeight: 10 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"scalable\");\r\n *\r\n * // request\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function () {\r\n var datas = {};\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var useSnap = false;\r\n return {\r\n isControl: true,\r\n requestStart: function (e) {\r\n useSnap = e.useSnap;\r\n return {\r\n datas: datas,\r\n parentDirection: e.direction || [1, 1],\r\n useSnap: useSnap,\r\n };\r\n },\r\n request: function (e) {\r\n distWidth += e.deltaWidth;\r\n distHeight += e.deltaHeight;\r\n return {\r\n datas: datas,\r\n parentDist: [distWidth, distHeight],\r\n parentKeepRatio: e.keepRatio,\r\n useSnap: useSnap,\r\n };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether or not target can scaled.\r\n *\r\n * @name Moveable.Scalable#scalable\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.scalable = true;\r\n */\r\n/**\r\n * throttle of scaleX, scaleY when scale.\r\n * @name Moveable.Scalable#throttleScale\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleScale = 0.1;\r\n */\r\n/**\r\n * Set directions to show the control box. (default: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"])\r\n * @name Moveable.Scalable#renderDirections\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * scalable: true,\r\n * renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n * });\r\n *\r\n * moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n */\r\n/**\r\n * When resize or scale, keeps a ratio of the width, height. (default: false)\r\n * @name Moveable.Scalable#keepRatio\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * scalable: true,\r\n * });\r\n *\r\n * moveable.keepRatio = true;\r\n */\r\n/**\r\n * When the scale starts, the scaleStart event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleStart\r\n * @param {Moveable.Scalable.OnScaleStart} - Parameters for the scaleStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scaleStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When scaling, `beforeScale` is called before `scale` occurs. In `beforeScale`, you can get and set the pre-value before scaling.\r\n * @memberof Moveable.Scalable\r\n * @event beforeScale\r\n * @param {Moveable.Scalable.OnBeforeScale} - Parameters for the `beforeScale` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"beforeScale\", ({ setFixedDirection }) => {\r\n * if (shiftKey) {\r\n * setFixedDirection([0, 0]);\r\n * }\r\n * });\r\n * moveable.on(\"scale\", ({ target, transform, dist }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When scaling, the `scale` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scale\r\n * @param {Moveable.Scalable.OnScale} - Parameters for the `scale` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scale\", ({ target, transform, dist }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When the scale finishes, the `scaleEnd` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleEnd\r\n * @param {Moveable.Scalable.OnScaleEnd} - Parameters for the `scaleEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scaleEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group scale starts, the `scaleGroupStart` event is called.\r\n* @memberof Moveable.Scalable\r\n* @event scaleGroupStart\r\n* @param {Moveable.Scalable.OnScaleGroupStart} - Parameters for the `scaleGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* scalable: true\r\n* });\r\n* moveable.on(\"scaleGroupStart\", ({ targets }) => {\r\n* console.log(\"onScaleGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group scale, the `scaleGroup` event is called.\r\n* @memberof Moveable.Scalable\r\n* @event scaleGroup\r\n* @param {Moveable.Scalable.OnScaleGroup} - Parameters for the `scaleGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* scalable: true\r\n* });\r\n* moveable.on(\"scaleGroup\", ({ targets, events }) => {\r\n* console.log(\"onScaleGroup\", targets);\r\n* events.forEach(ev => {\r\n* const target = ev.target;\r\n* // ev.drag is a drag event that occurs when the group scale.\r\n* const left = ev.drag.beforeDist[0];\r\n* const top = ev.drag.beforeDist[1];\r\n* const scaleX = ev.scale[0];\r\n* const scaleY = ev.scale[1];\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group scale finishes, the `scaleGroupEnd` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleGroupEnd\r\n * @param {Moveable.Scalable.OnScaleGroupEnd} - Parameters for the `scaleGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * scalable: true\r\n * });\r\n * moveable.on(\"scaleGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onScaleGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction getMiddleLinePos(pos1, pos2) {\r\n return pos1.map(function (pos, i) { return dot(pos, pos2[i], 1, 2); });\r\n}\r\nfunction getTriangleRad(pos1, pos2, pos3) {\r\n // pos1 Rad\r\n var rad1 = getRad(pos1, pos2);\r\n var rad2 = getRad(pos1, pos3);\r\n var rad = rad2 - rad1;\r\n return rad >= 0 ? rad : rad + 2 * Math.PI;\r\n}\r\nfunction isValidPos(poses1, poses2) {\r\n var rad1 = getTriangleRad(poses1[0], poses1[1], poses1[2]);\r\n var rad2 = getTriangleRad(poses2[0], poses2[1], poses2[2]);\r\n var pi = Math.PI;\r\n if ((rad1 >= pi && rad2 <= pi) || (rad1 <= pi && rad2 >= pi)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * @namespace Moveable.Warpable\r\n * @description Warpable indicates whether the target can be warped(distorted, bented).\r\n */\r\nvar Warpable = {\r\n name: \"warpable\",\r\n ableGroup: \"size\",\r\n props: [\r\n \"warpable\",\r\n \"renderDirections\",\r\n \"edge\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"warpStart\",\r\n \"warp\",\r\n \"warpEnd\",\r\n ],\r\n viewClassName: getDirectionViewClassName(\"warpable\"),\r\n render: function (moveable, React) {\r\n var _a = moveable.props, resizable = _a.resizable, scalable = _a.scalable, warpable = _a.warpable, zoom = _a.zoom;\r\n if (resizable || scalable || !warpable) {\r\n return [];\r\n }\r\n var _b = moveable.state, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4;\r\n var linePosFrom1 = getMiddleLinePos(pos1, pos2);\r\n var linePosFrom2 = getMiddleLinePos(pos2, pos1);\r\n var linePosFrom3 = getMiddleLinePos(pos1, pos3);\r\n var linePosFrom4 = getMiddleLinePos(pos3, pos1);\r\n var linePosTo1 = getMiddleLinePos(pos3, pos4);\r\n var linePosTo2 = getMiddleLinePos(pos4, pos3);\r\n var linePosTo3 = getMiddleLinePos(pos2, pos4);\r\n var linePosTo4 = getMiddleLinePos(pos4, pos2);\r\n return __spreadArray([\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine1\", style: getLineStyle(linePosFrom1, linePosTo1, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine2\", style: getLineStyle(linePosFrom2, linePosTo2, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine3\", style: getLineStyle(linePosFrom3, linePosTo3, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine4\", style: getLineStyle(linePosFrom4, linePosTo4, zoom) })\r\n ], __read(renderAllDirections(moveable, \"warpable\", React)), false);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (e.isRequest) {\r\n return false;\r\n }\r\n var target = e.inputEvent.target;\r\n return hasClass(target, prefix(\"direction\")) && hasClass(target, prefix(\"warpable\"));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas, inputEvent = e.inputEvent;\r\n var target = moveable.props.target;\r\n var inputTarget = inputEvent.target;\r\n var direction = getDirection(inputTarget, datas);\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n var state = moveable.state;\r\n var transformOrigin = state.transformOrigin, is3d = state.is3d, targetTransform = state.targetTransform, targetMatrix = state.targetMatrix, width = state.width, height = state.height, left = state.left, top = state.top;\r\n datas.datas = {};\r\n datas.targetTransform = targetTransform;\r\n datas.warpTargetMatrix = is3d ? targetMatrix : convertDimension(targetMatrix, 3, 4);\r\n datas.targetInverseMatrix = ignoreDimension(invert(datas.warpTargetMatrix, 4), 3, 4);\r\n datas.direction = direction;\r\n datas.left = left;\r\n datas.top = top;\r\n datas.poses = [\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ].map(function (p) { return minus(p, transformOrigin); });\r\n datas.nextPoses = datas.poses.map(function (_a) {\r\n var _b = __read(_a, 2), x = _b[0], y = _b[1];\r\n return calculate(datas.warpTargetMatrix, [x, y, 0, 1], 4);\r\n });\r\n datas.startValue = createIdentityMatrix(4);\r\n datas.prevMatrix = createIdentityMatrix(4);\r\n datas.absolutePoses = getAbsolutePosesByState(state);\r\n datas.posIndexes = getPosIndexesByDirection(direction);\r\n setDragStart(moveable, e);\r\n setDefaultTransformIndex(moveable, e, \"matrix3d\");\r\n state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n var params = fillParams(moveable, e, __assign({ set: function (matrix) {\r\n datas.startValue = matrix;\r\n } }, fillTransformStartEvent(moveable, e)));\r\n var result = triggerEvent(moveable, \"onWarpStart\", params);\r\n if (result !== false) {\r\n datas.isWarp = true;\r\n }\r\n return datas.isWarp;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas, isRequest = e.isRequest;\r\n var distX = e.distX, distY = e.distY;\r\n var targetInverseMatrix = datas.targetInverseMatrix, prevMatrix = datas.prevMatrix, isWarp = datas.isWarp, startValue = datas.startValue, poses = datas.poses, posIndexes = datas.posIndexes, absolutePoses = datas.absolutePoses;\r\n if (!isWarp) {\r\n return false;\r\n }\r\n resolveTransformEvent(moveable, e, \"matrix3d\");\r\n if (hasGuidelines(moveable, \"warpable\")) {\r\n var selectedPoses = posIndexes.map(function (index) { return absolutePoses[index]; });\r\n if (selectedPoses.length > 1) {\r\n selectedPoses.push([\r\n (selectedPoses[0][0] + selectedPoses[1][0]) / 2,\r\n (selectedPoses[0][1] + selectedPoses[1][1]) / 2,\r\n ]);\r\n }\r\n var _a = checkMoveableSnapBounds(moveable, isRequest, {\r\n horizontal: selectedPoses.map(function (pos) { return pos[1] + distY; }),\r\n vertical: selectedPoses.map(function (pos) { return pos[0] + distX; }),\r\n }), horizontalSnapInfo = _a.horizontal, verticalSnapInfo = _a.vertical;\r\n distY -= horizontalSnapInfo.offset;\r\n distX -= verticalSnapInfo.offset;\r\n }\r\n var dist = getDragDist({ datas: datas, distX: distX, distY: distY }, true);\r\n var nextPoses = datas.nextPoses.slice();\r\n posIndexes.forEach(function (index) {\r\n nextPoses[index] = plus(nextPoses[index], dist);\r\n });\r\n if (!NEARBY_POS.every(function (nearByPoses) { return isValidPos(nearByPoses.map(function (i) { return poses[i]; }), nearByPoses.map(function (i) { return nextPoses[i]; })); })) {\r\n return false;\r\n }\r\n var h = createWarpMatrix(poses[0], poses[2], poses[1], poses[3], nextPoses[0], nextPoses[2], nextPoses[1], nextPoses[3]);\r\n if (!h.length) {\r\n return false;\r\n }\r\n // B * A * M\r\n var afterMatrix = multiply(targetInverseMatrix, h, 4);\r\n // B * M * A\r\n var matrix = getTransfromMatrix(datas, afterMatrix, true);\r\n var delta = multiply(invert(prevMatrix, 4), matrix, 4);\r\n datas.prevMatrix = matrix;\r\n var totalMatrix = multiply(startValue, matrix, 4);\r\n var nextTransform = convertTransformFormat(datas, \"matrix3d(\".concat(totalMatrix.join(\", \"), \")\"), \"matrix3d(\".concat(matrix.join(\", \"), \")\"));\r\n fillOriginalTransform(e, nextTransform);\r\n triggerEvent(moveable, \"onWarp\", fillParams(moveable, e, __assign({ delta: delta, matrix: totalMatrix, dist: matrix, multiply: multiply, transform: nextTransform }, fillCSSObject({\r\n transform: nextTransform,\r\n }, e))));\r\n return true;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas, isDrag = e.isDrag;\r\n if (!datas.isWarp) {\r\n return false;\r\n }\r\n datas.isWarp = false;\r\n triggerEvent(moveable, \"onWarpEnd\", fillEndParams(moveable, e, {}));\r\n return isDrag;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be warped. (default: false)\r\n * @name Moveable.Warpable#warpable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.warpable = true;\r\n */\r\n/**\r\n* Set directions to show the control box. (default: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"])\r\n* @name Moveable.Warpable#renderDirections\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* warpable: true,\r\n* renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n* });\r\n*\r\n* moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n*/\r\n/**\r\n* When the warp starts, the warpStart event is called.\r\n* @memberof Moveable.Warpable\r\n* @event warpStart\r\n* @param {Moveable.Warpable.OnWarpStart} - Parameters for the warpStart event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, { warpable: true });\r\n* moveable.on(\"warpStart\", ({ target }) => {\r\n* console.log(target);\r\n* });\r\n*/\r\n/**\r\n * When warping, the warp event is called.\r\n * @memberof Moveable.Warpable\r\n * @event warp\r\n * @param {Moveable.Warpable.OnWarp} - Parameters for the warp event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n * let matrix = [\r\n * 1, 0, 0, 0,\r\n * 0, 1, 0, 0,\r\n * 0, 0, 1, 0,\r\n * 0, 0, 0, 1,\r\n * ];\r\n * const moveable = new Moveable(document.body, { warpable: true });\r\n * moveable.on(\"warp\", ({ target, transform, delta, multiply }) => {\r\n * // target.style.transform = transform;\r\n * matrix = multiply(matrix, delta);\r\n * target.style.transform = `matrix3d(${matrix.join(\",\")})`;\r\n * });\r\n */\r\n/**\r\n * When the warp finishes, the warpEnd event is called.\r\n * @memberof Moveable.Warpable\r\n * @event warpEnd\r\n * @param {Moveable.Warpable.OnWarpEnd} - Parameters for the warpEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { warpable: true });\r\n * moveable.on(\"warpEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\n\nvar AREA_PIECES = /*#__PURE__*/ prefix(\"area-pieces\");\r\nvar AREA_PIECE = /*#__PURE__*/ prefix(\"area-piece\");\r\nvar AVOID = /*#__PURE__*/ prefix(\"avoid\");\r\nvar VIEW_DRAGGING = prefix(\"view-dragging\");\n\nfunction restoreStyle(moveable) {\r\n var el = moveable.areaElement;\r\n if (!el) {\r\n return;\r\n }\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n removeClass(el, AVOID);\r\n el.style.cssText += \"left: 0px; top: 0px; width: \".concat(width, \"px; height: \").concat(height, \"px\");\r\n}\r\nfunction renderPieces(React) {\r\n return (React.createElement(\"div\", { key: \"area_pieces\", className: AREA_PIECES },\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE })));\r\n}\r\nvar DragArea = {\r\n name: \"dragArea\",\r\n props: [\r\n \"dragArea\",\r\n \"passDragArea\",\r\n ],\r\n events: [\r\n \"click\",\r\n \"clickGroup\",\r\n ],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, target = _a.target, dragArea = _a.dragArea, groupable = _a.groupable, passDragArea = _a.passDragArea;\r\n var _b = moveable.getState(), width = _b.width, height = _b.height, renderPoses = _b.renderPoses;\r\n var className = passDragArea ? prefix(\"area\", \"pass\") : prefix(\"area\");\r\n if (groupable) {\r\n return [\r\n React.createElement(\"div\", { key: \"area\", ref: ref(moveable, \"areaElement\"), className: className }),\r\n renderPieces(React),\r\n ];\r\n }\r\n if (!target || !dragArea) {\r\n return [];\r\n }\r\n var h = createWarpMatrix([0, 0], [width, 0], [0, height], [width, height], renderPoses[0], renderPoses[1], renderPoses[2], renderPoses[3]);\r\n var transform = h.length ? makeMatrixCSS(h, true) : \"none\";\r\n return [\r\n React.createElement(\"div\", { key: \"area\", ref: ref(moveable, \"areaElement\"), className: className, style: {\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"\".concat(width, \"px\"),\r\n height: \"\".concat(height, \"px\"),\r\n transformOrigin: \"0 0\",\r\n transform: transform,\r\n } }),\r\n renderPieces(React),\r\n ];\r\n },\r\n dragStart: function (moveable, _a) {\r\n var datas = _a.datas, clientX = _a.clientX, clientY = _a.clientY, inputEvent = _a.inputEvent;\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n datas.isDragArea = false;\r\n var areaElement = moveable.areaElement;\r\n var state = moveable.state;\r\n var moveableClientRect = state.moveableClientRect, renderPoses = state.renderPoses, rootMatrix = state.rootMatrix, is3d = state.is3d;\r\n var left = moveableClientRect.left, top = moveableClientRect.top;\r\n var _b = getRect(renderPoses), relativeLeft = _b.left, relativeTop = _b.top, width = _b.width, height = _b.height;\r\n var n = is3d ? 4 : 3;\r\n var _c = __read(calculateInversePosition(rootMatrix, [clientX - left, clientY - top], n), 2), posX = _c[0], posY = _c[1];\r\n posX -= relativeLeft;\r\n posY -= relativeTop;\r\n var rects = [\r\n { left: relativeLeft, top: relativeTop, width: width, height: posY - 10 },\r\n { left: relativeLeft, top: relativeTop, width: posX - 10, height: height },\r\n { left: relativeLeft, top: relativeTop + posY + 10, width: width, height: height - posY - 10 },\r\n { left: relativeLeft + posX + 10, top: relativeTop, width: width - posX - 10, height: height },\r\n ];\r\n var children = [].slice.call(areaElement.nextElementSibling.children);\r\n rects.forEach(function (rect, i) {\r\n children[i].style.cssText\r\n = \"left: \".concat(rect.left, \"px;top: \").concat(rect.top, \"px; width: \").concat(rect.width, \"px; height: \").concat(rect.height, \"px;\");\r\n });\r\n addClass(areaElement, AVOID);\r\n state.disableNativeEvent = true;\r\n return;\r\n },\r\n drag: function (moveable, _a) {\r\n var datas = _a.datas, inputEvent = _a.inputEvent;\r\n this.enableNativeEvent(moveable);\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n if (!datas.isDragArea) {\r\n datas.isDragArea = true;\r\n restoreStyle(moveable);\r\n }\r\n },\r\n dragEnd: function (moveable, e) {\r\n this.enableNativeEvent(moveable);\r\n var inputEvent = e.inputEvent, datas = e.datas;\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n if (!datas.isDragArea) {\r\n restoreStyle(moveable);\r\n }\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragGroup: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n unset: function (moveable) {\r\n restoreStyle(moveable);\r\n moveable.state.disableNativeEvent = false;\r\n },\r\n enableNativeEvent: function (moveable) {\r\n var state = moveable.state;\r\n if (state.disableNativeEvent) {\r\n requestAnimationFrame(function () {\r\n state.disableNativeEvent = false;\r\n });\r\n }\r\n },\r\n};\r\n/**\r\n * Add an event to the moveable area instead of the target for stopPropagation. (default: false, true in group)\r\n * @name Moveable#dragArea\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * dragArea: false,\r\n * });\r\n */\r\n/**\r\n * Set `pointerEvents: none;` css to pass events in dragArea. (default: false)\r\n * @name Moveable#passDragArea\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * dragArea: false,\r\n * });\r\n */\n\nvar Origin = makeAble(\"origin\", {\r\n props: [\"origin\", \"svgOrigin\"],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, zoom = _a.zoom, svgOrigin = _a.svgOrigin, groupable = _a.groupable;\r\n var _b = moveable.getState(), beforeOrigin = _b.beforeOrigin, rotation = _b.rotation, svg = _b.svg, allMatrix = _b.allMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\r\n var originStyle;\r\n if (!groupable && svg && svgOrigin) {\r\n var _c = __read(convertTransformOriginArray(svgOrigin, offsetWidth, offsetHeight), 2), originX = _c[0], originY = _c[1];\r\n var n = is3d ? 4 : 3;\r\n var result = calculatePosition(allMatrix, [originX, originY], n);\r\n originStyle = getControlTransform(rotation, zoom, minus(result, [left, top]));\r\n }\r\n else {\r\n originStyle = getControlTransform(rotation, zoom, beforeOrigin);\r\n }\r\n return [\r\n React.createElement(\"div\", { className: prefix(\"control\", \"origin\"), style: originStyle, key: \"beforeOrigin\" }),\r\n ];\r\n },\r\n});\r\n/**\r\n * Whether or not the origin controlbox will be visible or not (default: true)\r\n * @name Moveable#origin\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.origin = true;\r\n */\n\nfunction getDefaultScrollPosition(e) {\r\n var scrollContainer = e.scrollContainer;\r\n return [\r\n scrollContainer.scrollLeft,\r\n scrollContainer.scrollTop,\r\n ];\r\n}\r\n/**\r\n * @namespace Moveable.Scrollable\r\n * @description Whether or not target can be scrolled to the scroll container (default: false)\r\n */\r\nvar Scrollable = {\r\n name: \"scrollable\",\r\n canPinch: true,\r\n props: [\r\n \"scrollable\",\r\n \"scrollContainer\",\r\n \"scrollThreshold\",\r\n \"scrollThrottleTime\",\r\n \"getScrollPosition\",\r\n \"scrollOptions\",\r\n ],\r\n events: [\r\n \"scroll\",\r\n \"scrollGroup\",\r\n ],\r\n dragRelation: \"strong\",\r\n dragStart: function (moveable, e) {\r\n var props = moveable.props;\r\n var _a = props.scrollContainer, scrollContainer = _a === void 0 ? moveable.getContainer() : _a, scrollOptions = props.scrollOptions;\r\n var dragScroll = new DragScroll();\r\n var scrollContainerElement = getRefTarget(scrollContainer, true);\r\n e.datas.dragScroll = dragScroll;\r\n moveable.state.dragScroll = dragScroll;\r\n var gestoName = e.isControl ? \"controlGesto\" : \"targetGesto\";\r\n var targets = e.targets;\r\n dragScroll.on(\"scroll\", function (_a) {\r\n var container = _a.container, direction = _a.direction;\r\n var params = fillParams(moveable, e, {\r\n scrollContainer: container,\r\n direction: direction,\r\n });\r\n var eventName = targets ? \"onScrollGroup\" : \"onScroll\";\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n triggerEvent(moveable, eventName, params);\r\n }).on(\"move\", function (_a) {\r\n var offsetX = _a.offsetX, offsetY = _a.offsetY, inputEvent = _a.inputEvent;\r\n moveable[gestoName].scrollBy(offsetX, offsetY, inputEvent.inputEvent, false);\r\n }).on(\"scrollDrag\", function (_a) {\r\n var next = _a.next;\r\n next(moveable[gestoName].getCurrentEvent());\r\n });\r\n dragScroll.dragStart(e, __assign({ container: scrollContainerElement }, scrollOptions));\r\n },\r\n checkScroll: function (moveable, e) {\r\n var dragScroll = e.datas.dragScroll;\r\n if (!dragScroll) {\r\n return;\r\n }\r\n var _a = moveable.props, _b = _a.scrollContainer, scrollContainer = _b === void 0 ? moveable.getContainer() : _b, _c = _a.scrollThreshold, scrollThreshold = _c === void 0 ? 0 : _c, _d = _a.scrollThrottleTime, scrollThrottleTime = _d === void 0 ? 0 : _d, _e = _a.getScrollPosition, getScrollPosition = _e === void 0 ? getDefaultScrollPosition : _e, scrollOptions = _a.scrollOptions;\r\n dragScroll.drag(e, __assign({ container: scrollContainer, threshold: scrollThreshold, throttleTime: scrollThrottleTime, getScrollPosition: function (ev) {\r\n return getScrollPosition({ scrollContainer: ev.container, direction: ev.direction });\r\n } }, scrollOptions));\r\n return true;\r\n },\r\n drag: function (moveable, e) {\r\n return this.checkScroll(moveable, e);\r\n },\r\n dragEnd: function (moveable, e) {\r\n e.datas.dragScroll.dragEnd();\r\n e.datas.dragScroll = null;\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { isControl: true }));\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n return this.drag(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets, isControl: true }));\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.drag(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupControEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n unset: function (moveable) {\r\n var _a;\r\n var state = moveable.state;\r\n (_a = state.dragScroll) === null || _a === void 0 ? void 0 : _a.dragEnd();\r\n state.dragScroll = null;\r\n },\r\n};\r\n/**\r\n * When the drag cursor leaves the scrollContainer, the `scroll` event occur to scroll.\r\n * @memberof Moveable.Scrollable\r\n * @event scroll\r\n * @param {Moveable.Scrollable.OnScroll} - Parameters for the `scroll` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"scroll\", ({ scrollContainer, direction }) => {\r\n * scrollContainer.scrollLeft += direction[0] * 10;\r\n * scrollContainer.scrollTop += direction[1] * 10;\r\n * });\r\n */\r\n/**\r\n * When the drag cursor leaves the scrollContainer, the `scrollGroup` event occur to scroll in group.\r\n * @memberof Moveable.Scrollable\r\n * @event scrollGroup\r\n * @param {Moveable.Scrollable.OnScrollGroup} - Parameters for the `scrollGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"scroll\", ({ scrollContainer, direction }) => {\r\n * scrollContainer.scrollLeft += direction[0] * 10;\r\n * scrollContainer.scrollTop += direction[1] * 10;\r\n * });\r\n */\n\nvar Default = {\r\n name: \"\",\r\n props: [\r\n \"target\",\r\n \"dragTargetSelf\",\r\n \"dragTarget\",\r\n \"dragContainer\",\r\n \"container\",\r\n \"warpSelf\",\r\n \"rootContainer\",\r\n \"useResizeObserver\",\r\n \"useMutationObserver\",\r\n \"zoom\",\r\n \"dragFocusedInput\",\r\n \"transformOrigin\",\r\n \"ables\",\r\n \"className\",\r\n \"pinchThreshold\",\r\n \"pinchOutside\",\r\n \"triggerAblesSimultaneously\",\r\n \"checkInput\",\r\n \"cspNonce\",\r\n \"translateZ\",\r\n \"hideDefaultLines\",\r\n \"props\",\r\n \"flushSync\",\r\n \"stopPropagation\",\r\n \"preventClickEventOnDrag\",\r\n \"preventClickDefault\",\r\n \"viewContainer\",\r\n \"persistData\",\r\n \"useAccuratePosition\",\r\n \"firstRenderState\",\r\n \"linePadding\",\r\n \"controlPadding\",\r\n \"preventDefault\",\r\n \"preventRightClick\",\r\n \"preventWheelClick\",\r\n \"requestStyles\",\r\n ],\r\n events: [\r\n \"changeTargets\",\r\n ],\r\n};\n\nvar Padding = makeAble(\"padding\", {\r\n props: [\"padding\"],\r\n render: function (moveable, React) {\r\n var props = moveable.props;\r\n if (props.dragArea) {\r\n return [];\r\n }\r\n var _a = getPaddingBox(props.padding || {}), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var _b = moveable.getState(), renderPoses = _b.renderPoses, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n var paddingDirections = [];\r\n if (left > 0) {\r\n paddingDirections.push([0, 2]);\r\n }\r\n if (top > 0) {\r\n paddingDirections.push([0, 1]);\r\n }\r\n if (right > 0) {\r\n paddingDirections.push([1, 3]);\r\n }\r\n if (bottom > 0) {\r\n paddingDirections.push([2, 3]);\r\n }\r\n return paddingDirections.map(function (_a, i) {\r\n var _b = __read(_a, 2), dir1 = _b[0], dir2 = _b[1];\r\n var paddingPos1 = poses[dir1];\r\n var paddingPos2 = poses[dir2];\r\n var paddingPos3 = renderPoses[dir1];\r\n var paddingPos4 = renderPoses[dir2];\r\n var h = createWarpMatrix([0, 0], [100, 0], [0, 100], [100, 100], paddingPos1, paddingPos2, paddingPos3, paddingPos4);\r\n if (!h.length) {\r\n return undefined;\r\n }\r\n return (React.createElement(\"div\", { key: \"padding\".concat(i), className: prefix(\"padding\"), style: {\r\n transform: makeMatrixCSS(h, true),\r\n } }));\r\n });\r\n },\r\n});\r\n/**\r\n * Add padding around the target to increase the drag area.\r\n * @name Moveable#padding\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * padding: { left: 0, top: 0, right: 0, bottom: 0 },\r\n * });\r\n * moveable.padding = { left: 10, top: 10, right: 10, bottom: 10 },\r\n * moveable.updateRect();\r\n */\n\nvar RADIUS_DIRECTIONS = [\"nw\", \"ne\", \"se\", \"sw\"];\r\nfunction calculateRatio(values, size) {\r\n var sumSize = values[0] + values[1];\r\n var sumRatio = sumSize > size ? size / sumSize : 1;\r\n values[0] *= sumRatio;\r\n values[1] = size - values[1] * sumRatio;\r\n return values;\r\n}\r\nvar HORIZONTAL_RADIUS_ORDER = [1, 2, 5, 6];\r\nvar VERTICAL_RADIUS_ORDER = [0, 3, 4, 7];\r\nvar HORIZONTAL_RADIUS_DIRECTIONS = [1, -1, -1, 1];\r\nvar VERTICAL_RADIUS_DIRECTIONS = [1, 1, -1, -1];\r\nfunction getRadiusStyles(nextPoses, isRelative, width, height, left, top, right, bottom) {\r\n if (left === void 0) { left = 0; }\r\n if (top === void 0) { top = 0; }\r\n if (right === void 0) { right = width; }\r\n if (bottom === void 0) { bottom = height; }\r\n var clipStyles = [];\r\n var isVertical = false;\r\n var radiusPoses = nextPoses.filter(function (pos) { return !pos.virtual; });\r\n var raws = radiusPoses.map(function (posInfo) {\r\n var horizontal = posInfo.horizontal, vertical = posInfo.vertical, pos = posInfo.pos;\r\n if (vertical && !isVertical) {\r\n isVertical = true;\r\n clipStyles.push(\"/\");\r\n }\r\n if (isVertical) {\r\n var rawPos = Math.max(0, vertical === 1 ? pos[1] - top : bottom - pos[1]);\r\n clipStyles.push(convertCSSSize(rawPos, height, isRelative));\r\n return rawPos;\r\n }\r\n else {\r\n var rawPos = Math.max(0, horizontal === 1 ? pos[0] - left : right - pos[0]);\r\n clipStyles.push(convertCSSSize(rawPos, width, isRelative));\r\n return rawPos;\r\n }\r\n });\r\n return {\r\n radiusPoses: radiusPoses,\r\n styles: clipStyles,\r\n raws: raws,\r\n };\r\n}\r\nfunction getRadiusRange(controlPoses) {\r\n // [start, length]\r\n var horizontalRange = [0, 0];\r\n var verticalRange = [0, 0];\r\n var length = controlPoses.length;\r\n for (var i = 0; i < length; ++i) {\r\n var clipPose = controlPoses[i];\r\n if (!clipPose.sub) {\r\n continue;\r\n }\r\n if (clipPose.horizontal) {\r\n if (horizontalRange[1] === 0) {\r\n horizontalRange[0] = i;\r\n }\r\n horizontalRange[1] = i - horizontalRange[0] + 1;\r\n verticalRange[0] = i + 1;\r\n }\r\n if (clipPose.vertical) {\r\n if (verticalRange[1] === 0) {\r\n verticalRange[0] = i;\r\n }\r\n verticalRange[1] = i - verticalRange[0] + 1;\r\n }\r\n }\r\n return {\r\n horizontalRange: horizontalRange,\r\n verticalRange: verticalRange,\r\n };\r\n}\r\nfunction getRadiusValues(values, width, height, left, top, minCounts, full) {\r\n var _a, _b, _c, _d;\r\n if (minCounts === void 0) { minCounts = [0, 0]; }\r\n if (full === void 0) { full = false; }\r\n var splitIndex = values.indexOf(\"/\");\r\n var splitLength = (splitIndex > -1 ? values.slice(0, splitIndex) : values).length;\r\n var horizontalValues = values.slice(0, splitLength);\r\n var verticalValues = values.slice(splitLength + 1);\r\n var horizontalValuesLength = horizontalValues.length;\r\n var verticalValuesLength = verticalValues.length;\r\n var hasVerticalValues = verticalValuesLength > 0;\r\n var _e = __read(horizontalValues, 4), _f = _e[0], nwValue = _f === void 0 ? \"0px\" : _f, _g = _e[1], neValue = _g === void 0 ? nwValue : _g, _h = _e[2], seValue = _h === void 0 ? nwValue : _h, _j = _e[3], swValue = _j === void 0 ? neValue : _j;\r\n var _k = __read(verticalValues, 4), _l = _k[0], wnValue = _l === void 0 ? nwValue : _l, _m = _k[1], enValue = _m === void 0 ? hasVerticalValues ? wnValue : neValue : _m, _o = _k[2], esValue = _o === void 0 ? hasVerticalValues ? wnValue : seValue : _o, _p = _k[3], wsValue = _p === void 0 ? hasVerticalValues ? enValue : swValue : _p;\r\n var horizontalRawPoses = [nwValue, neValue, seValue, swValue].map(function (pos) { return convertUnitSize(pos, width); });\r\n var verticalRawPoses = [wnValue, enValue, esValue, wsValue].map(function (pos) { return convertUnitSize(pos, height); });\r\n var horizontalPoses = horizontalRawPoses.slice();\r\n var verticalPoses = verticalRawPoses.slice();\r\n _a = __read(calculateRatio([horizontalPoses[0], horizontalPoses[1]], width), 2), horizontalPoses[0] = _a[0], horizontalPoses[1] = _a[1];\r\n _b = __read(calculateRatio([horizontalPoses[3], horizontalPoses[2]], width), 2), horizontalPoses[3] = _b[0], horizontalPoses[2] = _b[1];\r\n _c = __read(calculateRatio([verticalPoses[0], verticalPoses[3]], height), 2), verticalPoses[0] = _c[0], verticalPoses[3] = _c[1];\r\n _d = __read(calculateRatio([verticalPoses[1], verticalPoses[2]], height), 2), verticalPoses[1] = _d[0], verticalPoses[2] = _d[1];\r\n var nextHorizontalPoses = full\r\n ? horizontalPoses\r\n : horizontalPoses.slice(0, Math.max(minCounts[0], horizontalValuesLength));\r\n var nextVerticalPoses = full\r\n ? verticalPoses\r\n : verticalPoses.slice(0, Math.max(minCounts[1], verticalValuesLength));\r\n return __spreadArray(__spreadArray([], __read(nextHorizontalPoses.map(function (pos, i) {\r\n var direction = RADIUS_DIRECTIONS[i];\r\n return {\r\n virtual: i >= horizontalValuesLength,\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[i],\r\n vertical: 0,\r\n pos: [left + pos, top + (VERTICAL_RADIUS_DIRECTIONS[i] === -1 ? height : 0)],\r\n sub: true,\r\n raw: horizontalRawPoses[i],\r\n direction: direction,\r\n };\r\n })), false), __read(nextVerticalPoses.map(function (pos, i) {\r\n var direction = RADIUS_DIRECTIONS[i];\r\n return {\r\n virtual: i >= verticalValuesLength,\r\n horizontal: 0,\r\n vertical: VERTICAL_RADIUS_DIRECTIONS[i],\r\n pos: [left + (HORIZONTAL_RADIUS_DIRECTIONS[i] === -1 ? width : 0), top + pos],\r\n sub: true,\r\n raw: verticalRawPoses[i],\r\n direction: direction,\r\n };\r\n })), false);\r\n}\r\nfunction removeRadiusPos(controlPoses, poses, index, startIndex, length) {\r\n if (length === void 0) { length = poses.length; }\r\n var _a = getRadiusRange(controlPoses.slice(startIndex)), horizontalRange = _a.horizontalRange, verticalRange = _a.verticalRange;\r\n var radiuslIndex = index - startIndex;\r\n var deleteCount = 0;\r\n if (radiuslIndex === 0) {\r\n deleteCount = length;\r\n }\r\n else if (radiuslIndex > 0 && radiuslIndex < horizontalRange[1]) {\r\n deleteCount = horizontalRange[1] - radiuslIndex;\r\n }\r\n else if (radiuslIndex >= verticalRange[0]) {\r\n deleteCount = verticalRange[0] + verticalRange[1] - radiuslIndex;\r\n }\r\n else {\r\n return;\r\n }\r\n controlPoses.splice(index, deleteCount);\r\n poses.splice(index, deleteCount);\r\n}\r\nfunction addRadiusPos(controlPoses, poses, startIndex, horizontalIndex, verticalIndex, distX, distY, right, bottom, left, top) {\r\n if (left === void 0) { left = 0; }\r\n if (top === void 0) { top = 0; }\r\n var _a = getRadiusRange(controlPoses.slice(startIndex)), horizontalRange = _a.horizontalRange, verticalRange = _a.verticalRange;\r\n if (horizontalIndex > -1) {\r\n var radiusX = HORIZONTAL_RADIUS_DIRECTIONS[horizontalIndex] === 1\r\n ? distX - left\r\n : right - distX;\r\n for (var i = horizontalRange[1]; i <= horizontalIndex; ++i) {\r\n var y = VERTICAL_RADIUS_DIRECTIONS[i] === 1 ? top : bottom;\r\n var x = 0;\r\n if (horizontalIndex === i) {\r\n x = distX;\r\n }\r\n else if (i === 0) {\r\n x = left + radiusX;\r\n }\r\n else if (HORIZONTAL_RADIUS_DIRECTIONS[i] === -1) {\r\n x = right - (poses[startIndex][0] - left);\r\n }\r\n controlPoses.splice(startIndex + i, 0, {\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[i],\r\n vertical: 0,\r\n pos: [x, y],\r\n });\r\n poses.splice(startIndex + i, 0, [x, y]);\r\n if (i === 0) {\r\n break;\r\n }\r\n }\r\n }\r\n else if (verticalIndex > -1) {\r\n var radiusY = VERTICAL_RADIUS_DIRECTIONS[verticalIndex] === 1\r\n ? distY - top\r\n : bottom - distY;\r\n if (horizontalRange[1] === 0 && verticalRange[1] === 0) {\r\n var pos = [\r\n left + radiusY,\r\n top,\r\n ];\r\n controlPoses.push({\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[0],\r\n vertical: 0,\r\n pos: pos,\r\n });\r\n poses.push(pos);\r\n }\r\n var startVerticalIndex = verticalRange[0];\r\n for (var i = verticalRange[1]; i <= verticalIndex; ++i) {\r\n var x = HORIZONTAL_RADIUS_DIRECTIONS[i] === 1 ? left : right;\r\n var y = 0;\r\n if (verticalIndex === i) {\r\n y = distY;\r\n }\r\n else if (i === 0) {\r\n y = top + radiusY;\r\n }\r\n else if (VERTICAL_RADIUS_DIRECTIONS[i] === 1) {\r\n y = poses[startIndex + startVerticalIndex][1];\r\n }\r\n else if (VERTICAL_RADIUS_DIRECTIONS[i] === -1) {\r\n y = bottom - (poses[startIndex + startVerticalIndex][1] - top);\r\n }\r\n controlPoses.push({\r\n horizontal: 0,\r\n vertical: VERTICAL_RADIUS_DIRECTIONS[i],\r\n pos: [x, y],\r\n });\r\n poses.push([x, y]);\r\n if (i === 0) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\nfunction splitRadiusPoses(controlPoses, raws) {\r\n if (raws === void 0) { raws = controlPoses.map(function (pos) { return pos.raw; }); }\r\n var horizontals = controlPoses\r\n .map(function (pos, i) { return pos.horizontal ? raws[i] : null; }).filter(function (pos) { return pos != null; });\r\n var verticals = controlPoses\r\n .map(function (pos, i) { return pos.vertical ? raws[i] : null; }).filter(function (pos) { return pos != null; });\r\n return {\r\n horizontals: horizontals,\r\n verticals: verticals,\r\n };\r\n}\n\nvar CLIP_DIRECTIONS = [\r\n [0, -1, \"n\"],\r\n [1, 0, \"e\"],\r\n];\r\nvar CLIP_RECT_DIRECTIONS = [\r\n [-1, -1, \"nw\"],\r\n [0, -1, \"n\"],\r\n [1, -1, \"ne\"],\r\n [1, 0, \"e\"],\r\n [1, 1, \"se\"],\r\n [0, 1, \"s\"],\r\n [-1, 1, \"sw\"],\r\n [-1, 0, \"w\"],\r\n];\r\n// 1 2 5 6 0 3 4 7\r\n// 0 1 2 3 4 5 6 7\r\nfunction getClipStyles(moveable, clipPath, poses) {\r\n var clipRelative = moveable.props.clipRelative;\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var _b = clipPath, clipType = _b.type, clipPoses = _b.poses;\r\n var isRect = clipType === \"rect\";\r\n var isCircle = clipType === \"circle\";\r\n if (clipType === \"polygon\") {\r\n return poses.map(function (pos) { return \"\".concat(convertCSSSize(pos[0], width, clipRelative), \" \").concat(convertCSSSize(pos[1], height, clipRelative)); });\r\n }\r\n else if (isRect || clipType === \"inset\") {\r\n var top_1 = poses[1][1];\r\n var right = poses[3][0];\r\n var left = poses[7][0];\r\n var bottom = poses[5][1];\r\n if (isRect) {\r\n return [\r\n top_1,\r\n right,\r\n bottom,\r\n left,\r\n ].map(function (pos) { return \"\".concat(pos, \"px\"); });\r\n }\r\n var clipStyles = [top_1, width - right, height - bottom, left]\r\n .map(function (pos, i) { return convertCSSSize(pos, i % 2 ? width : height, clipRelative); });\r\n if (poses.length > 8) {\r\n var _c = __read(minus(poses[4], poses[0]), 2), subWidth = _c[0], subHeight = _c[1];\r\n clipStyles.push.apply(clipStyles, __spreadArray([\"round\"], __read(getRadiusStyles(clipPoses.slice(8).map(function (info, i) {\r\n return __assign(__assign({}, info), { pos: poses[i] });\r\n }), clipRelative, subWidth, subHeight, left, top_1, right, bottom).styles), false));\r\n }\r\n return clipStyles;\r\n }\r\n else if (isCircle || clipType === \"ellipse\") {\r\n var center = poses[0];\r\n var ry = convertCSSSize(abs(poses[1][1] - center[1]), isCircle ? Math.sqrt((width * width + height * height) / 2) : height, clipRelative);\r\n var clipStyles = isCircle ? [ry]\r\n : [convertCSSSize(abs(poses[2][0] - center[0]), width, clipRelative), ry];\r\n clipStyles.push(\"at\", convertCSSSize(center[0], width, clipRelative), convertCSSSize(center[1], height, clipRelative));\r\n return clipStyles;\r\n }\r\n}\r\nfunction getRectPoses(top, right, bottom, left) {\r\n var xs = [left, (left + right) / 2, right];\r\n var ys = [top, (top + bottom) / 2, bottom];\r\n return CLIP_RECT_DIRECTIONS.map(function (_a) {\r\n var _b = __read(_a, 3), dirx = _b[0], diry = _b[1], dir = _b[2];\r\n var x = xs[dirx + 1];\r\n var y = ys[diry + 1];\r\n return {\r\n vertical: abs(diry),\r\n horizontal: abs(dirx),\r\n direction: dir,\r\n pos: [x, y],\r\n };\r\n });\r\n}\r\nfunction getControlSize(controlPoses) {\r\n var xRange = [Infinity, -Infinity];\r\n var yRange = [Infinity, -Infinity];\r\n controlPoses.forEach(function (_a) {\r\n var pos = _a.pos;\r\n xRange[0] = Math.min(xRange[0], pos[0]);\r\n xRange[1] = Math.max(xRange[1], pos[0]);\r\n yRange[0] = Math.min(yRange[0], pos[1]);\r\n yRange[1] = Math.max(yRange[1], pos[1]);\r\n });\r\n return [\r\n abs(xRange[1] - xRange[0]),\r\n abs(yRange[1] - yRange[0]),\r\n ];\r\n}\r\nfunction getClipPath(target, width, height, defaultClip, customClip) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n if (!target) {\r\n return;\r\n }\r\n var clipText = customClip;\r\n if (!clipText) {\r\n var getStyle = getCachedStyle(target);\r\n var clipPath = getStyle(\"clipPath\");\r\n clipText = clipPath !== \"none\" ? clipPath : getStyle(\"clip\");\r\n }\r\n if (!clipText || clipText === \"none\" || clipText === \"auto\") {\r\n clipText = defaultClip;\r\n if (!clipText) {\r\n return;\r\n }\r\n }\r\n var _k = splitBracket(clipText), _l = _k.prefix, clipPrefix = _l === void 0 ? clipText : _l, _m = _k.value, value = _m === void 0 ? \"\" : _m;\r\n var isCircle = clipPrefix === \"circle\";\r\n var splitter = \" \";\r\n if (clipPrefix === \"polygon\") {\r\n var values = splitComma(value || \"0% 0%, 100% 0%, 100% 100%, 0% 100%\");\r\n splitter = \",\";\r\n var poses = values.map(function (pos) {\r\n var _a = __read(pos.split(\" \"), 2), xPos = _a[0], yPos = _a[1];\r\n return {\r\n vertical: 1,\r\n horizontal: 1,\r\n pos: [\r\n convertUnitSize(xPos, width),\r\n convertUnitSize(yPos, height),\r\n ],\r\n };\r\n });\r\n var minMaxs = getMinMaxs(poses.map(function (pos) { return pos.pos; }));\r\n return {\r\n type: clipPrefix,\r\n clipText: clipText,\r\n poses: poses,\r\n splitter: splitter,\r\n left: minMaxs.minX,\r\n right: minMaxs.maxX,\r\n top: minMaxs.minY,\r\n bottom: minMaxs.maxY,\r\n };\r\n }\r\n else if (isCircle || clipPrefix === \"ellipse\") {\r\n var xPos = \"\";\r\n var yPos = \"\";\r\n var radiusX_1 = 0;\r\n var radiusY_1 = 0;\r\n var values = splitSpace(value);\r\n if (isCircle) {\r\n var radius = \"\";\r\n _a = __read(values, 4), _b = _a[0], radius = _b === void 0 ? \"50%\" : _b, _c = _a[2], xPos = _c === void 0 ? \"50%\" : _c, _d = _a[3], yPos = _d === void 0 ? \"50%\" : _d;\r\n radiusX_1 = convertUnitSize(radius, Math.sqrt((width * width + height * height) / 2));\r\n radiusY_1 = radiusX_1;\r\n }\r\n else {\r\n var xRadius = \"\";\r\n var yRadius = \"\";\r\n _e = __read(values, 5), _f = _e[0], xRadius = _f === void 0 ? \"50%\" : _f, _g = _e[1], yRadius = _g === void 0 ? \"50%\" : _g, _h = _e[3], xPos = _h === void 0 ? \"50%\" : _h, _j = _e[4], yPos = _j === void 0 ? \"50%\" : _j;\r\n radiusX_1 = convertUnitSize(xRadius, width);\r\n radiusY_1 = convertUnitSize(yRadius, height);\r\n }\r\n var centerPos_1 = [\r\n convertUnitSize(xPos, width),\r\n convertUnitSize(yPos, height),\r\n ];\r\n var poses = __spreadArray([\r\n {\r\n vertical: 1,\r\n horizontal: 1,\r\n pos: centerPos_1,\r\n direction: \"nesw\",\r\n }\r\n ], __read(CLIP_DIRECTIONS.slice(0, isCircle ? 1 : 2).map(function (dir) { return ({\r\n vertical: abs(dir[1]),\r\n horizontal: dir[0],\r\n direction: dir[2],\r\n sub: true,\r\n pos: [\r\n centerPos_1[0] + dir[0] * radiusX_1,\r\n centerPos_1[1] + dir[1] * radiusY_1,\r\n ],\r\n }); })), false);\r\n return {\r\n type: clipPrefix,\r\n clipText: clipText,\r\n radiusX: radiusX_1,\r\n radiusY: radiusY_1,\r\n left: centerPos_1[0] - radiusX_1,\r\n top: centerPos_1[1] - radiusY_1,\r\n right: centerPos_1[0] + radiusX_1,\r\n bottom: centerPos_1[1] + radiusY_1,\r\n poses: poses,\r\n splitter: splitter,\r\n };\r\n }\r\n else if (clipPrefix === \"inset\") {\r\n var values = splitSpace(value || \"0 0 0 0\");\r\n var roundIndex = values.indexOf(\"round\");\r\n var rectLength = (roundIndex > -1 ? values.slice(0, roundIndex) : values).length;\r\n var radiusValues = values.slice(rectLength + 1);\r\n var _o = __read(values.slice(0, rectLength), 4), topValue = _o[0], _p = _o[1], rightValue = _p === void 0 ? topValue : _p, _q = _o[2], bottomValue = _q === void 0 ? topValue : _q, _r = _o[3], leftValue = _r === void 0 ? rightValue : _r;\r\n var _s = __read([topValue, bottomValue].map(function (pos) { return convertUnitSize(pos, height); }), 2), top_2 = _s[0], bottom = _s[1];\r\n var _t = __read([leftValue, rightValue].map(function (pos) { return convertUnitSize(pos, width); }), 2), left = _t[0], right = _t[1];\r\n var nextRight = width - right;\r\n var nextBottom = height - bottom;\r\n var radiusPoses = getRadiusValues(radiusValues, nextRight - left, nextBottom - top_2, left, top_2);\r\n var poses = __spreadArray(__spreadArray([], __read(getRectPoses(top_2, nextRight, nextBottom, left)), false), __read(radiusPoses), false);\r\n return {\r\n type: \"inset\",\r\n clipText: clipText,\r\n poses: poses,\r\n top: top_2,\r\n left: left,\r\n right: nextRight,\r\n bottom: nextBottom,\r\n radius: radiusValues,\r\n splitter: splitter,\r\n };\r\n }\r\n else if (clipPrefix === \"rect\") {\r\n // top right bottom left\r\n var values = splitComma(value || \"0px, \".concat(width, \"px, \").concat(height, \"px, 0px\"));\r\n splitter = \",\";\r\n var _u = __read(values.map(function (pos) {\r\n var posValue = splitUnit(pos).value;\r\n return posValue;\r\n }), 4), top_3 = _u[0], right = _u[1], bottom = _u[2], left = _u[3];\r\n var poses = getRectPoses(top_3, right, bottom, left);\r\n return {\r\n type: \"rect\",\r\n clipText: clipText,\r\n poses: poses,\r\n top: top_3,\r\n right: right,\r\n bottom: bottom,\r\n left: left,\r\n values: values,\r\n splitter: splitter,\r\n };\r\n }\r\n return;\r\n}\n\nfunction moveControlPos(controlPoses, index, dist, isRect, keepRatio) {\r\n var _a = controlPoses[index], direction = _a.direction, sub = _a.sub;\r\n var dists = controlPoses.map(function () { return [0, 0]; });\r\n var directions = direction ? direction.split(\"\") : [];\r\n if (isRect && index < 8) {\r\n var verticalDirections = directions.filter(function (dir) { return dir === \"w\" || dir === \"e\"; });\r\n var horizontalDirections = directions.filter(function (dir) { return dir === \"n\" || dir === \"s\"; });\r\n var verticalDirection_1 = verticalDirections[0];\r\n var horizontalDirection_1 = horizontalDirections[0];\r\n dists[index] = dist;\r\n var _b = __read(getControlSize(controlPoses), 2), width = _b[0], height = _b[1];\r\n var ratio = width && height ? width / height : 0;\r\n if (ratio && keepRatio) {\r\n // 0 1 2\r\n // 7 3\r\n // 6 5 4\r\n var fixedIndex = (index + 4) % 8;\r\n var fixedPosition = controlPoses[fixedIndex].pos;\r\n var sizeDirection = [0, 0];\r\n if (direction.indexOf(\"w\") > -1) {\r\n sizeDirection[0] = -1;\r\n }\r\n else if (direction.indexOf(\"e\") > -1) {\r\n sizeDirection[0] = 1;\r\n }\r\n if (direction.indexOf(\"n\") > -1) {\r\n sizeDirection[1] = -1;\r\n }\r\n else if (direction.indexOf(\"s\") > -1) {\r\n sizeDirection[1] = 1;\r\n }\r\n var nextDist = getSizeDistByDist([width, height], dist, ratio, sizeDirection, true);\r\n var nextWidth = width + nextDist[0];\r\n var nextHeight = height + nextDist[1];\r\n var top_1 = fixedPosition[1];\r\n var bottom = fixedPosition[1];\r\n var left = fixedPosition[0];\r\n var right = fixedPosition[0];\r\n if (sizeDirection[0] === -1) {\r\n left = right - nextWidth;\r\n }\r\n else if (sizeDirection[0] === 1) {\r\n right = left + nextWidth;\r\n }\r\n else {\r\n left = left - nextWidth / 2;\r\n right = right + nextWidth / 2;\r\n }\r\n if (sizeDirection[1] === -1) {\r\n top_1 = bottom - nextHeight;\r\n }\r\n else if (sizeDirection[1] === 1) {\r\n bottom = top_1 + nextHeight;\r\n }\r\n else {\r\n top_1 = bottom - nextHeight / 2;\r\n bottom = top_1 + nextHeight;\r\n }\r\n var nextControlPoses_1 = getRectPoses(top_1, right, bottom, left);\r\n controlPoses.forEach(function (controlPose, i) {\r\n dists[i][0] = nextControlPoses_1[i].pos[0] - controlPose.pos[0];\r\n dists[i][1] = nextControlPoses_1[i].pos[1] - controlPose.pos[1];\r\n });\r\n }\r\n else {\r\n controlPoses.forEach(function (controlPose, i) {\r\n var controlDir = controlPose.direction;\r\n if (!controlDir) {\r\n return;\r\n }\r\n if (controlDir.indexOf(verticalDirection_1) > -1) {\r\n dists[i][0] = dist[0];\r\n }\r\n if (controlDir.indexOf(horizontalDirection_1) > -1) {\r\n dists[i][1] = dist[1];\r\n }\r\n });\r\n if (verticalDirection_1) {\r\n dists[1][0] = dist[0] / 2;\r\n dists[5][0] = dist[0] / 2;\r\n }\r\n if (horizontalDirection_1) {\r\n dists[3][1] = dist[1] / 2;\r\n dists[7][1] = dist[1] / 2;\r\n }\r\n }\r\n }\r\n else if (direction && !sub) {\r\n directions.forEach(function (dir) {\r\n var isVertical = dir === \"n\" || dir === \"s\";\r\n controlPoses.forEach(function (controlPose, i) {\r\n var dirDir = controlPose.direction, dirHorizontal = controlPose.horizontal, dirVertical = controlPose.vertical;\r\n if (!dirDir || dirDir.indexOf(dir) === -1) {\r\n return;\r\n }\r\n dists[i] = [\r\n isVertical || !dirHorizontal ? 0 : dist[0],\r\n !isVertical || !dirVertical ? 0 : dist[1],\r\n ];\r\n });\r\n });\r\n }\r\n else {\r\n dists[index] = dist;\r\n }\r\n return dists;\r\n}\r\nfunction addClipPath(moveable, e) {\r\n var _a = __read(calculatePointerDist(moveable, e), 2), distX = _a[0], distY = _a[1];\r\n var _b = e.datas, clipPath = _b.clipPath, clipIndex = _b.clipIndex;\r\n var _c = clipPath, clipType = _c.type, clipPoses = _c.poses, splitter = _c.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n if (clipType === \"polygon\") {\r\n poses.splice(clipIndex, 0, [distX, distY]);\r\n }\r\n else if (clipType === \"inset\") {\r\n var horizontalIndex = HORIZONTAL_RADIUS_ORDER.indexOf(clipIndex);\r\n var verticalIndex = VERTICAL_RADIUS_ORDER.indexOf(clipIndex);\r\n var length_1 = clipPoses.length;\r\n addRadiusPos(clipPoses, poses, 8, horizontalIndex, verticalIndex, distX, distY, poses[4][0], poses[4][1], poses[0][0], poses[0][1]);\r\n if (length_1 === clipPoses.length) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n var clipStyles = getClipStyles(moveable, clipPath, poses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(clipStyles.join(splitter), \")\");\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"added\", clipType: clipType, poses: poses, clipStyles: clipStyles, clipStyle: clipStyle, distX: 0, distY: 0 }, fillCSSObject({\r\n clipPath: clipStyle,\r\n }, e))));\r\n}\r\nfunction removeClipPath(moveable, e) {\r\n var _a = e.datas, clipPath = _a.clipPath, clipIndex = _a.clipIndex;\r\n var _b = clipPath, clipType = _b.type, clipPoses = _b.poses, splitter = _b.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n var length = poses.length;\r\n if (clipType === \"polygon\") {\r\n clipPoses.splice(clipIndex, 1);\r\n poses.splice(clipIndex, 1);\r\n }\r\n else if (clipType === \"inset\") {\r\n if (clipIndex < 8) {\r\n return;\r\n }\r\n removeRadiusPos(clipPoses, poses, clipIndex, 8, length);\r\n if (length === clipPoses.length) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n var clipStyles = getClipStyles(moveable, clipPath, poses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(clipStyles.join(splitter), \")\");\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"removed\", clipType: clipType, poses: poses, clipStyles: clipStyles, clipStyle: clipStyle, distX: 0, distY: 0 }, fillCSSObject({\r\n clipPath: clipStyle,\r\n }, e))));\r\n}\r\n/**\r\n * @namespace Moveable.Clippable\r\n * @description Whether to clip the target.\r\n */\r\nvar Clippable = {\r\n name: \"clippable\",\r\n props: [\r\n \"clippable\",\r\n \"defaultClipPath\",\r\n \"customClipPath\",\r\n \"keepRatio\",\r\n \"clipRelative\",\r\n \"clipArea\",\r\n \"dragWithClip\",\r\n \"clipTargetBounds\",\r\n \"clipVerticalGuidelines\",\r\n \"clipHorizontalGuidelines\",\r\n \"clipSnapThreshold\",\r\n ],\r\n events: [\r\n \"clipStart\",\r\n \"clip\",\r\n \"clipEnd\",\r\n ],\r\n css: [\r\n \".control.clip-control {\\nbackground: #6d6;\\ncursor: pointer;\\n}\\n.control.clip-control.clip-radius {\\nbackground: #d66;\\n}\\n.line.clip-line {\\nbackground: #6e6;\\ncursor: move;\\nz-index: 1;\\n}\\n.clip-area {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\n}\\n.clip-ellipse {\\nposition: absolute;\\ncursor: move;\\nborder: 1px solid #6d6;\\nborder: var(--zoompx) solid #6d6;\\nborder-radius: 50%;\\ntransform-origin: 0px 0px;\\n}\",\r\n \":host {\\n--bounds-color: #d66;\\n}\",\r\n \".guideline {\\npointer-events: none;\\nz-index: 2;\\n}\",\r\n \".line.guideline.bounds {\\nbackground: #d66;\\nbackground: var(--bounds-color);\\n}\",\r\n ],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, customClipPath = _a.customClipPath, defaultClipPath = _a.defaultClipPath, clipArea = _a.clipArea, zoom = _a.zoom, groupable = _a.groupable;\r\n var _b = moveable.getState(), target = _b.target, width = _b.width, height = _b.height, allMatrix = _b.allMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4, clipPathState = _b.clipPathState, snapBoundInfos = _b.snapBoundInfos, rotationRad = _b.rotation;\r\n if (!target || groupable) {\r\n return [];\r\n }\r\n var clipPath = getClipPath(target, width, height, defaultClipPath || \"inset\", clipPathState || customClipPath);\r\n if (!clipPath) {\r\n return [];\r\n }\r\n var n = is3d ? 4 : 3;\r\n var type = clipPath.type;\r\n var clipPoses = clipPath.poses;\r\n var poses = clipPoses.map(function (pos) {\r\n // return [x, y];\r\n var calculatedPos = calculatePosition(allMatrix, pos.pos, n);\r\n return [\r\n calculatedPos[0] - left,\r\n calculatedPos[1] - top,\r\n ];\r\n });\r\n var controls = [];\r\n var lines = [];\r\n var isRect = type === \"rect\";\r\n var isInset = type === \"inset\";\r\n var isPolygon = type === \"polygon\";\r\n if (isRect || isInset || isPolygon) {\r\n var linePoses_1 = isInset ? poses.slice(0, 8) : poses;\r\n lines = linePoses_1.map(function (to, i) {\r\n var from = i === 0 ? linePoses_1[linePoses_1.length - 1] : linePoses_1[i - 1];\r\n var rad = getRad(from, to);\r\n var dist = getDiagonalSize(from, to);\r\n return React.createElement(\"div\", { key: \"clipLine\".concat(i), className: prefix(\"line\", \"clip-line\", \"snap-control\"), \"data-clip-index\": i, style: {\r\n width: \"\".concat(dist, \"px\"),\r\n transform: \"translate(\".concat(from[0], \"px, \").concat(from[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n }\r\n controls = poses.map(function (pos, i) {\r\n return React.createElement(\"div\", { key: \"clipControl\".concat(i), className: prefix(\"control\", \"clip-control\", \"snap-control\"), \"data-clip-index\": i, style: {\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rotationRad, \"rad) scale(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n if (isInset) {\r\n controls.push.apply(controls, __spreadArray([], __read(poses.slice(8).map(function (pos, i) {\r\n return React.createElement(\"div\", { key: \"clipRadiusControl\".concat(i), className: prefix(\"control\", \"clip-control\", \"clip-radius\", \"snap-control\"), \"data-clip-index\": 8 + i, style: {\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rotationRad, \"rad) scale(\").concat(zoom, \")\"),\r\n } });\r\n })), false));\r\n }\r\n if (type === \"circle\" || type === \"ellipse\") {\r\n var clipLeft = clipPath.left, clipTop = clipPath.top, radiusX = clipPath.radiusX, radiusY = clipPath.radiusY;\r\n var _c = __read(minus(calculatePosition(allMatrix, [clipLeft, clipTop], n), calculatePosition(allMatrix, [0, 0], n)), 2), distLeft = _c[0], distTop = _c[1];\r\n var ellipseClipPath = \"none\";\r\n if (!clipArea) {\r\n var piece = Math.max(10, radiusX / 5, radiusY / 5);\r\n var areaPoses = [];\r\n for (var i = 0; i <= piece; ++i) {\r\n var rad = Math.PI * 2 / piece * i;\r\n areaPoses.push([\r\n radiusX + (radiusX - zoom) * Math.cos(rad),\r\n radiusY + (radiusY - zoom) * Math.sin(rad),\r\n ]);\r\n }\r\n areaPoses.push([radiusX, -2]);\r\n areaPoses.push([-2, -2]);\r\n areaPoses.push([-2, radiusY * 2 + 2]);\r\n areaPoses.push([radiusX * 2 + 2, radiusY * 2 + 2]);\r\n areaPoses.push([radiusX * 2 + 2, -2]);\r\n areaPoses.push([radiusX, -2]);\r\n ellipseClipPath = \"polygon(\".concat(areaPoses.map(function (pos) { return \"\".concat(pos[0], \"px \").concat(pos[1], \"px\"); }).join(\", \"), \")\");\r\n }\r\n controls.push(React.createElement(\"div\", { key: \"clipEllipse\", className: prefix(\"clip-ellipse\", \"snap-control\"), style: {\r\n width: \"\".concat(radiusX * 2, \"px\"),\r\n height: \"\".concat(radiusY * 2, \"px\"),\r\n clipPath: ellipseClipPath,\r\n transform: \"translate(\".concat(-left + distLeft, \"px, \").concat(-top + distTop, \"px) \").concat(makeMatrixCSS(allMatrix)),\r\n } }));\r\n }\r\n if (clipArea) {\r\n var _d = getRect(__spreadArray([pos1, pos2, pos3, pos4], __read(poses), false)), allWidth = _d.width, allHeight = _d.height, allLeft_1 = _d.left, allTop_1 = _d.top;\r\n if (isPolygon || isRect || isInset) {\r\n var areaPoses = isInset ? poses.slice(0, 8) : poses;\r\n controls.push(React.createElement(\"div\", { key: \"clipArea\", className: prefix(\"clip-area\", \"snap-control\"), style: {\r\n width: \"\".concat(allWidth, \"px\"),\r\n height: \"\".concat(allHeight, \"px\"),\r\n transform: \"translate(\".concat(allLeft_1, \"px, \").concat(allTop_1, \"px)\"),\r\n clipPath: \"polygon(\".concat(areaPoses.map(function (pos) { return \"\".concat(pos[0] - allLeft_1, \"px \").concat(pos[1] - allTop_1, \"px\"); }).join(\", \"), \")\"),\r\n } }));\r\n }\r\n }\r\n if (snapBoundInfos) {\r\n [\"vertical\", \"horizontal\"].forEach(function (directionType) {\r\n var info = snapBoundInfos[directionType];\r\n var isHorizontal = directionType === \"horizontal\";\r\n if (info.isSnap) {\r\n lines.push.apply(lines, __spreadArray([], __read(info.snap.posInfos.map(function (_a, i) {\r\n var pos = _a.pos;\r\n var snapPos1 = minus(calculatePosition(allMatrix, isHorizontal ? [0, pos] : [pos, 0], n), [left, top]);\r\n var snapPos2 = minus(calculatePosition(allMatrix, isHorizontal ? [width, pos] : [pos, height], n), [left, top]);\r\n return renderLine(React, \"\", snapPos1, snapPos2, zoom, \"clip\".concat(directionType, \"snap\").concat(i), \"guideline\");\r\n })), false));\r\n }\r\n if (info.isBound) {\r\n lines.push.apply(lines, __spreadArray([], __read(info.bounds.map(function (_a, i) {\r\n var pos = _a.pos;\r\n var snapPos1 = minus(calculatePosition(allMatrix, isHorizontal ? [0, pos] : [pos, 0], n), [left, top]);\r\n var snapPos2 = minus(calculatePosition(allMatrix, isHorizontal ? [width, pos] : [pos, height], n), [left, top]);\r\n return renderLine(React, \"\", snapPos1, snapPos2, zoom, \"clip\".concat(directionType, \"bounds\").concat(i), \"guideline\", \"bounds\", \"bold\");\r\n })), false));\r\n }\r\n });\r\n }\r\n return __spreadArray(__spreadArray([], __read(controls), false), __read(lines), false);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n return e.inputEvent && (e.inputEvent.target.getAttribute(\"class\") || \"\").indexOf(\"clip\") > -1;\r\n },\r\n dragStart: function (moveable, e) {\r\n var props = moveable.props;\r\n var _a = props.dragWithClip, dragWithClip = _a === void 0 ? true : _a;\r\n if (dragWithClip) {\r\n return false;\r\n }\r\n return this.dragControlStart(moveable, e);\r\n },\r\n drag: function (moveable, e) {\r\n return this.dragControl(moveable, __assign(__assign({}, e), { isDragTarget: true }));\r\n },\r\n dragEnd: function (moveable, e) {\r\n return this.dragControlEnd(moveable, e);\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var state = moveable.state;\r\n var _a = moveable.props, defaultClipPath = _a.defaultClipPath, customClipPath = _a.customClipPath;\r\n var target = state.target, width = state.width, height = state.height;\r\n var inputTarget = e.inputEvent ? e.inputEvent.target : null;\r\n var className = (inputTarget && inputTarget.getAttribute(\"class\")) || \"\";\r\n var datas = e.datas;\r\n var clipPath = getClipPath(target, width, height, defaultClipPath || \"inset\", customClipPath);\r\n if (!clipPath) {\r\n return false;\r\n }\r\n var clipText = clipPath.clipText, type = clipPath.type, poses = clipPath.poses;\r\n var result = triggerEvent(moveable, \"onClipStart\", fillParams(moveable, e, {\r\n clipType: type,\r\n clipStyle: clipText,\r\n poses: poses.map(function (pos) { return pos.pos; }),\r\n }));\r\n if (result === false) {\r\n datas.isClipStart = false;\r\n return false;\r\n }\r\n datas.isControl = className && className.indexOf(\"clip-control\") > -1;\r\n datas.isLine = className.indexOf(\"clip-line\") > -1;\r\n datas.isArea = className.indexOf(\"clip-area\") > -1 || className.indexOf(\"clip-ellipse\") > -1;\r\n datas.clipIndex = inputTarget ? parseInt(inputTarget.getAttribute(\"data-clip-index\"), 10) : -1;\r\n datas.clipPath = clipPath;\r\n datas.isClipStart = true;\r\n state.clipPathState = clipText;\r\n setDragStart(moveable, e);\r\n return true;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a, _b, _c;\r\n var datas = e.datas, originalDatas = e.originalDatas, isDragTarget = e.isDragTarget;\r\n if (!datas.isClipStart) {\r\n return false;\r\n }\r\n var _d = datas, isControl = _d.isControl, isLine = _d.isLine, isArea = _d.isArea, clipIndex = _d.clipIndex, clipPath = _d.clipPath;\r\n if (!clipPath) {\r\n return false;\r\n }\r\n var props = getProps(moveable.props, \"clippable\");\r\n var keepRatio = props.keepRatio;\r\n var distX = 0;\r\n var distY = 0;\r\n var originalDraggable = originalDatas.draggable;\r\n var originalDist = getDragDist(e);\r\n if (isDragTarget && originalDraggable) {\r\n _a = __read(originalDraggable.prevBeforeDist, 2), distX = _a[0], distY = _a[1];\r\n }\r\n else {\r\n _b = __read(originalDist, 2), distX = _b[0], distY = _b[1];\r\n }\r\n var firstDist = [distX, distY];\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n var isDragWithTarget = !isArea && !isControl && !isLine;\r\n var clipType = clipPath.type, clipPoses = clipPath.poses, splitter = clipPath.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n if (isDragWithTarget) {\r\n distX = -distX;\r\n distY = -distY;\r\n }\r\n var isAll = !isControl || clipPoses[clipIndex].direction === \"nesw\";\r\n var isRect = clipType === \"inset\" || clipType === \"rect\";\r\n var dists = clipPoses.map(function () { return [0, 0]; });\r\n if (isControl && !isAll) {\r\n var _e = clipPoses[clipIndex], horizontal = _e.horizontal, vertical = _e.vertical;\r\n var dist = [\r\n distX * abs(horizontal),\r\n distY * abs(vertical),\r\n ];\r\n dists = moveControlPos(clipPoses, clipIndex, dist, isRect, keepRatio);\r\n }\r\n else if (isAll) {\r\n dists = poses.map(function () { return [distX, distY]; });\r\n }\r\n var nextPoses = poses.map(function (pos, i) { return plus(pos, dists[i]); });\r\n var guidePoses = __spreadArray([], __read(nextPoses), false);\r\n state.snapBoundInfos = null;\r\n var isCircle = clipPath.type === \"circle\";\r\n var isEllipse = clipPath.type === \"ellipse\";\r\n if (isCircle || isEllipse) {\r\n var guideRect = getRect(nextPoses);\r\n var ry = abs(guideRect.bottom - guideRect.top);\r\n var rx = abs(isEllipse ? guideRect.right - guideRect.left : ry);\r\n var bottom = nextPoses[0][1] + ry;\r\n var left = nextPoses[0][0] - rx;\r\n var right = nextPoses[0][0] + rx;\r\n // right\r\n if (isCircle) {\r\n guidePoses.push([right, guideRect.bottom]);\r\n dists.push([1, 0]);\r\n }\r\n // bottom\r\n guidePoses.push([guideRect.left, bottom]);\r\n dists.push([0, 1]);\r\n // left\r\n guidePoses.push([left, guideRect.bottom]);\r\n dists.push([1, 0]);\r\n }\r\n var guidelines = getDefaultGuidelines((props.clipHorizontalGuidelines || []).map(function (v) { return convertUnitSize(\"\".concat(v), height); }), (props.clipVerticalGuidelines || []).map(function (v) { return convertUnitSize(\"\".concat(v), width); }), width, height);\r\n var guideXPoses = [];\r\n var guideYPoses = [];\r\n if (isCircle || isEllipse) {\r\n guideXPoses = [guidePoses[4][0], guidePoses[2][0]];\r\n guideYPoses = [guidePoses[1][1], guidePoses[3][1]];\r\n }\r\n else if (isRect) {\r\n var rectPoses = [guidePoses[0], guidePoses[2], guidePoses[4], guidePoses[6]];\r\n var rectDists_1 = [dists[0], dists[2], dists[4], dists[6]];\r\n guideXPoses = rectPoses.filter(function (_, i) { return rectDists_1[i][0]; }).map(function (pos) { return pos[0]; });\r\n guideYPoses = rectPoses.filter(function (_, i) { return rectDists_1[i][1]; }).map(function (pos) { return pos[1]; });\r\n }\r\n else {\r\n guideXPoses = guidePoses.filter(function (_, i) { return dists[i][0]; }).map(function (pos) { return pos[0]; });\r\n guideYPoses = guidePoses.filter(function (_, i) { return dists[i][1]; }).map(function (pos) { return pos[1]; });\r\n }\r\n var boundDelta = [0, 0];\r\n var _f = checkSnapBounds(guidelines, props.clipTargetBounds && { left: 0, top: 0, right: width, bottom: height }, guideXPoses, guideYPoses, 5, 5), horizontalSnapInfo = _f.horizontal, verticalSnapInfo = _f.vertical;\r\n var snapOffsetY = horizontalSnapInfo.offset;\r\n var snapOffsetX = verticalSnapInfo.offset;\r\n if (horizontalSnapInfo.isBound) {\r\n boundDelta[1] += snapOffsetY;\r\n }\r\n if (verticalSnapInfo.isBound) {\r\n boundDelta[0] += snapOffsetX;\r\n }\r\n if ((isEllipse || isCircle) && dists[0][0] === 0 && dists[0][1] === 0) {\r\n var guideRect = getRect(nextPoses);\r\n var cy = guideRect.bottom - guideRect.top;\r\n var cx = isEllipse ? guideRect.right - guideRect.left : cy;\r\n var distSnapX = verticalSnapInfo.isBound\r\n ? abs(snapOffsetX)\r\n : (verticalSnapInfo.snapIndex === 0 ? -snapOffsetX : snapOffsetX);\r\n var distSnapY = horizontalSnapInfo.isBound\r\n ? abs(snapOffsetY)\r\n : (horizontalSnapInfo.snapIndex === 0 ? -snapOffsetY : snapOffsetY);\r\n cx -= distSnapX;\r\n cy -= distSnapY;\r\n if (isCircle) {\r\n cy = checkSnapBoundPriority(verticalSnapInfo, horizontalSnapInfo) > 0 ? cy : cx;\r\n cx = cy;\r\n }\r\n var center = guidePoses[0];\r\n guidePoses[1][1] = center[1] - cy;\r\n guidePoses[2][0] = center[0] + cx;\r\n guidePoses[3][1] = center[1] + cy;\r\n guidePoses[4][0] = center[0] - cx;\r\n }\r\n else if (isRect && keepRatio && isControl) {\r\n var _g = __read(getControlSize(clipPoses), 2), width_1 = _g[0], height_1 = _g[1];\r\n var ratio = width_1 && height_1 ? width_1 / height_1 : 0;\r\n var clipPose = clipPoses[clipIndex];\r\n var direction = clipPose.direction || \"\";\r\n var top_2 = guidePoses[1][1];\r\n var bottom = guidePoses[5][1];\r\n var left = guidePoses[7][0];\r\n var right = guidePoses[3][0];\r\n if (abs(snapOffsetY) <= abs(snapOffsetX)) {\r\n snapOffsetY = sign(snapOffsetY) * abs(snapOffsetX) / ratio;\r\n }\r\n else {\r\n snapOffsetX = sign(snapOffsetX) * abs(snapOffsetY) * ratio;\r\n }\r\n if (direction.indexOf(\"w\") > -1) {\r\n left -= snapOffsetX;\r\n }\r\n else if (direction.indexOf(\"e\") > -1) {\r\n right -= snapOffsetX;\r\n }\r\n else {\r\n left += snapOffsetX / 2;\r\n right -= snapOffsetX / 2;\r\n }\r\n if (direction.indexOf(\"n\") > -1) {\r\n top_2 -= snapOffsetY;\r\n }\r\n else if (direction.indexOf(\"s\") > -1) {\r\n bottom -= snapOffsetY;\r\n }\r\n else {\r\n top_2 += snapOffsetY / 2;\r\n bottom -= snapOffsetY / 2;\r\n }\r\n var nextControlPoses_2 = getRectPoses(top_2, right, bottom, left);\r\n guidePoses.forEach(function (pos, i) {\r\n var _a;\r\n _a = __read(nextControlPoses_2[i].pos, 2), pos[0] = _a[0], pos[1] = _a[1];\r\n });\r\n }\r\n else {\r\n guidePoses.forEach(function (pos, j) {\r\n var dist = dists[j];\r\n if (dist[0]) {\r\n pos[0] -= snapOffsetX;\r\n }\r\n if (dist[1]) {\r\n pos[1] -= snapOffsetY;\r\n }\r\n });\r\n }\r\n var nextClipStyles = getClipStyles(moveable, clipPath, nextPoses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(nextClipStyles.join(splitter), \")\");\r\n state.clipPathState = clipStyle;\r\n if (isCircle || isEllipse) {\r\n guideXPoses = [guidePoses[4][0], guidePoses[2][0]];\r\n guideYPoses = [guidePoses[1][1], guidePoses[3][1]];\r\n }\r\n else if (isRect) {\r\n var rectPoses = [guidePoses[0], guidePoses[2], guidePoses[4], guidePoses[6]];\r\n guideXPoses = rectPoses.map(function (pos) { return pos[0]; });\r\n guideYPoses = rectPoses.map(function (pos) { return pos[1]; });\r\n }\r\n else {\r\n guideXPoses = guidePoses.map(function (pos) { return pos[0]; });\r\n guideYPoses = guidePoses.map(function (pos) { return pos[1]; });\r\n }\r\n state.snapBoundInfos = checkSnapBounds(guidelines, props.clipTargetBounds && { left: 0, top: 0, right: width, bottom: height }, guideXPoses, guideYPoses, 1, 1);\r\n if (originalDraggable) {\r\n var is3d = state.is3d, allMatrix = state.allMatrix;\r\n var n = is3d ? 4 : 3;\r\n var dragDist = boundDelta;\r\n if (isDragTarget) {\r\n dragDist = [\r\n firstDist[0] + boundDelta[0] - originalDist[0],\r\n firstDist[1] + boundDelta[1] - originalDist[1],\r\n ];\r\n }\r\n originalDraggable.deltaOffset = multiply(allMatrix, [dragDist[0], dragDist[1], 0, 0], n);\r\n }\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"changed\", clipType: clipType, poses: nextPoses, clipStyle: clipStyle, clipStyles: nextClipStyles, distX: distX, distY: distY }, fillCSSObject((_c = {},\r\n _c[clipType === \"rect\" ? \"clip\" : \"clipPath\"] = clipStyle,\r\n _c), e))));\r\n return true;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n this.unset(moveable);\r\n var isDrag = e.isDrag, datas = e.datas, isDouble = e.isDouble;\r\n var isLine = datas.isLine, isClipStart = datas.isClipStart, isControl = datas.isControl;\r\n if (!isClipStart) {\r\n return false;\r\n }\r\n triggerEvent(moveable, \"onClipEnd\", fillEndParams(moveable, e, {}));\r\n if (isDouble) {\r\n if (isControl) {\r\n removeClipPath(moveable, e);\r\n }\r\n else if (isLine) {\r\n // add\r\n addClipPath(moveable, e);\r\n }\r\n }\r\n return isDouble || isDrag;\r\n },\r\n unset: function (moveable) {\r\n moveable.state.clipPathState = \"\";\r\n moveable.state.snapBoundInfos = null;\r\n },\r\n};\r\n/**\r\n * Whether to clip the target. (default: false)\r\n * @name Moveable.Clippable#clippable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * If clippath is not set, the default value can be set. (defaultClipPath < style < customClipPath < dragging clipPath)\r\n * @name Moveable.Clippable#defaultClipPath\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px (`rect` not possible) (default: false)\r\n * @name Moveable.Clippable#clipRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * You can force the custom clipPath. (defaultClipPath < style < customClipPath < dragging clipPath)\r\n * @name Moveable.Clippable#customClipPath\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When dragging the target, the clip also moves. (default: true)\r\n * @name Moveable.Clippable#dragWithClip\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * You can drag the clip by setting clipArea.\r\n * @name Moveable.Clippable#clipArea\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n* Whether the clip is bound to the target.\r\n* @name Moveable.Clippable#clipTargetBounds\r\n* @default false\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipTargetBounds: true,\r\n* });\r\n* moveable.on(\"clipStart\", e => {\r\n* console.log(e);\r\n* }).on(\"clip\", e => {\r\n* if (e.clipType === \"rect\") {\r\n* e.target.style.clip = e.clipStyle;\r\n* } else {\r\n* e.target.style.clipPath = e.clipStyle;\r\n* }\r\n* }).on(\"clipEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n * Add clip guidelines in the vertical direction.\r\n * @name Moveable.Clippable#clipVerticalGuidelines\r\n * @default 0\r\n * @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n* Add clip guidelines in the horizontal direction.\r\n* @name Moveable.Clippable#clipHorizontalGuidelines\r\n* @default []\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n* istance value that can snap to clip guidelines.\r\n* @name Moveable.Clippable#clipSnapThreshold\r\n* @default 5\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n * When drag start the clip area or controls, the `clipStart` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clipStart\r\n * @param {Moveable.Clippable.OnClipStart} - Parameters for the `clipStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag the clip area or controls, the `clip` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clip\r\n * @param {Moveable.Clippable.OnClip} - Parameters for the `clip` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the clip area or controls, the `clipEnd` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clipEnd\r\n * @param {Moveable.Clippable.OnClipEnd} - Parameters for the `clipEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\n\n/**\r\n * @namespace OriginDraggable\r\n * @memberof Moveable\r\n * @description Whether to drag origin (default: false)\r\n */\r\nvar OriginDraggable = {\r\n name: \"originDraggable\",\r\n props: [\r\n \"originDraggable\",\r\n \"originRelative\",\r\n ],\r\n events: [\r\n \"dragOriginStart\",\r\n \"dragOrigin\",\r\n \"dragOriginEnd\",\r\n ],\r\n css: [\r\n \":host[data-able-origindraggable] .control.origin {\\npointer-events: auto;\\n}\",\r\n ],\r\n dragControlCondition: function (_, e) {\r\n if (e.isRequest) {\r\n return e.requestAble === \"originDraggable\";\r\n }\r\n return hasClass(e.inputEvent.target, prefix(\"origin\"));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n setDragStart(moveable, e);\r\n var params = fillParams(moveable, e, {\r\n dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)),\r\n });\r\n var result = triggerEvent(moveable, \"onDragOriginStart\", params);\r\n datas.startOrigin = moveable.state.transformOrigin;\r\n datas.startTargetOrigin = moveable.state.targetOrigin;\r\n datas.prevOrigin = [0, 0];\r\n datas.isDragOrigin = true;\r\n if (result === false) {\r\n datas.isDragOrigin = false;\r\n return false;\r\n }\r\n return params;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, isRequest = e.isRequest;\r\n if (!datas.isDragOrigin) {\r\n return false;\r\n }\r\n var _a = __read(getDragDist(e), 2), distX = _a[0], distY = _a[1];\r\n var state = moveable.state;\r\n var width = state.width, height = state.height, offsetMatrix = state.offsetMatrix, targetMatrix = state.targetMatrix, is3d = state.is3d;\r\n var _b = moveable.props.originRelative, originRelative = _b === void 0 ? true : _b;\r\n var n = is3d ? 4 : 3;\r\n var dist = [distX, distY];\r\n if (isRequest) {\r\n var distOrigin = e.distOrigin;\r\n if (distOrigin[0] || distOrigin[1]) {\r\n dist = distOrigin;\r\n }\r\n }\r\n var origin = plus(datas.startOrigin, dist);\r\n var targetOrigin = plus(datas.startTargetOrigin, dist);\r\n var delta = minus(dist, datas.prevOrigin);\r\n var nextMatrix = getNextMatrix(offsetMatrix, targetMatrix, origin, n);\r\n var rect = moveable.getRect();\r\n var nextRect = getRect(calculatePoses(nextMatrix, width, height, n));\r\n var dragDelta = [\r\n rect.left - nextRect.left,\r\n rect.top - nextRect.top,\r\n ];\r\n datas.prevOrigin = dist;\r\n var transformOrigin = [\r\n convertCSSSize(targetOrigin[0], width, originRelative),\r\n convertCSSSize(targetOrigin[1], height, originRelative),\r\n ].join(\" \");\r\n var result = Draggable.drag(moveable, setCustomDrag(e, moveable.state, dragDelta, !!isPinch, false));\r\n var params = fillParams(moveable, e, __assign(__assign({ width: width, height: height, origin: origin, dist: dist, delta: delta, transformOrigin: transformOrigin, drag: result }, fillCSSObject({\r\n transformOrigin: transformOrigin,\r\n transform: result.transform,\r\n }, e)), { afterTransform: result.transform }));\r\n triggerEvent(moveable, \"onDragOrigin\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isDragOrigin) {\r\n return false;\r\n }\r\n triggerEvent(moveable, \"onDragOriginEnd\", fillEndParams(moveable, e, {}));\r\n return true;\r\n },\r\n dragGroupControlCondition: function (moveable, e) {\r\n return this.dragControlCondition(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n moveable.transformOrigin = params.transformOrigin;\r\n return true;\r\n },\r\n /**\r\n * @method Moveable.OriginDraggable#request\r\n * @param {object} e - the OriginDraggable's request parameter\r\n * @param {number} [e.x] - x position\r\n * @param {number} [e.y] - y position\r\n * @param {number} [e.deltaX] - x number to move\r\n * @param {number} [e.deltaY] - y number to move\r\n * @param {array} [e.deltaOrigin] - left, top number to move transform-origin\r\n * @param {array} [e.origin] - transform-origin position\r\n * @param {number} [e.isInstant] - Whether to execute the request instantly\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"originDraggable\", { deltaX: 10, deltaY: 10 }, true);\r\n * // Use Absolute Value\r\n * moveable.request(\"originDraggable\", { x: 200, y: 100 }, true);\r\n * // Use Transform Value\r\n * moveable.request(\"originDraggable\", { deltaOrigin: [10, 0] }, true);\r\n * moveable.request(\"originDraggable\", { origin: [100, 0] }, true);\r\n * // requestStart\r\n * const requester = moveable.request(\"originDraggable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * // Use Absolute Value\r\n * moveable.request(\"originDraggable\", { x: 200, y: 100 });\r\n * moveable.request(\"originDraggable\", { x: 220, y: 100 });\r\n * moveable.request(\"originDraggable\", { x: 240, y: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var rect = moveable.getRect();\r\n var distX = 0;\r\n var distY = 0;\r\n var transformOrigin = rect.transformOrigin;\r\n var distOrigin = [0, 0];\r\n return {\r\n isControl: true,\r\n requestStart: function () {\r\n return { datas: datas };\r\n },\r\n request: function (e) {\r\n if (\"deltaOrigin\" in e) {\r\n distOrigin[0] += e.deltaOrigin[0];\r\n distOrigin[1] += e.deltaOrigin[1];\r\n }\r\n else if (\"origin\" in e) {\r\n distOrigin[0] = e.origin[0] - transformOrigin[0];\r\n distOrigin[1] = e.origin[1] - transformOrigin[1];\r\n }\r\n else {\r\n if (\"x\" in e) {\r\n distX = e.x - rect.left;\r\n }\r\n else if (\"deltaX\" in e) {\r\n distX += e.deltaX;\r\n }\r\n if (\"y\" in e) {\r\n distY = e.y - rect.top;\r\n }\r\n else if (\"deltaY\" in e) {\r\n distY += e.deltaY;\r\n }\r\n }\r\n return { datas: datas, distX: distX, distY: distY, distOrigin: distOrigin };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether to drag origin (default: false)\r\n * @name Moveable.OriginDraggable#originDraggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * originDraggable: true,\r\n * });\r\n * let translate = [0, 0];\r\n * moveable.on(\"dragOriginStart\", e => {\r\n * e.dragStart && e.dragStart.set(translate);\r\n * }).on(\"dragOrigin\", e => {\r\n * translate = e.drag.beforeTranslate;\r\n * e.target.style.cssText\r\n * = `transform-origin: ${e.transformOrigin};`\r\n * + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n * }).on(\"dragOriginEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px (default: true)\r\n * @name Moveable.OriginDraggable#originRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * originDraggable: true,\r\n * originRelative: false,\r\n * });\r\n * moveable.originRelative = true;\r\n */\r\n/**\r\n* When drag start the origin, the `dragOriginStart` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOriginStart\r\n* @param {Moveable.OriginDraggable.OnDragOriginStart} - Parameters for the `dragOriginStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n* When drag the origin, the `dragOrigin` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOrigin\r\n* @param {Moveable.OriginDraggable.OnDragOrigin} - Parameters for the `dragOrigin` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n* When drag end the origin, the `dragOriginEnd` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOriginEnd\r\n* @param {Moveable.OriginDraggable.OnDragOriginEnd} - Parameters for the `dragOriginEnd` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\n\nfunction addBorderRadiusByLine(controlPoses, lineIndex, distX, distY) {\r\n // lineIndex\r\n // 0 top\r\n // 1 right\r\n // 2 bottom\r\n // 3 left\r\n var horizontalsLength = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual, horizontal = _a.horizontal;\r\n return horizontal && !virtual;\r\n }).length;\r\n var verticalsLength = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual, vertical = _a.vertical;\r\n return vertical && !virtual;\r\n }).length;\r\n var controlIndex = -1;\r\n //top\r\n if (lineIndex === 0) {\r\n if (horizontalsLength === 0) {\r\n controlIndex = 0;\r\n }\r\n else if (horizontalsLength === 1) {\r\n controlIndex = 1;\r\n }\r\n }\r\n // bottom\r\n if (lineIndex === 2) {\r\n if (horizontalsLength <= 2) {\r\n controlIndex = 2;\r\n }\r\n else if (horizontalsLength <= 3) {\r\n controlIndex = 3;\r\n }\r\n }\r\n // left\r\n if (lineIndex === 3) {\r\n if (verticalsLength === 0) {\r\n controlIndex = 4;\r\n }\r\n else if (verticalsLength < 4) {\r\n controlIndex = 7;\r\n }\r\n }\r\n // right\r\n if (lineIndex === 1) {\r\n if (verticalsLength <= 1) {\r\n controlIndex = 5;\r\n }\r\n else if (verticalsLength <= 2) {\r\n controlIndex = 6;\r\n }\r\n }\r\n if (controlIndex === -1 || !controlPoses[controlIndex].virtual) {\r\n return;\r\n }\r\n var controlPoseInfo = controlPoses[controlIndex];\r\n addBorderRadius(controlPoses, controlIndex);\r\n if (controlIndex < 4) {\r\n controlPoseInfo.pos[0] = distX;\r\n }\r\n else {\r\n controlPoseInfo.pos[1] = distY;\r\n }\r\n}\r\nfunction addBorderRadius(controlPoses, index) {\r\n if (index < 4) {\r\n controlPoses.slice(0, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n else {\r\n if (controlPoses[0].virtual) {\r\n controlPoses[0].virtual = false;\r\n }\r\n controlPoses.slice(4, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n}\r\nfunction removeBorderRadius(controlPoses, index) {\r\n if (index < 4) {\r\n controlPoses.slice(index, 4).forEach(function (info) {\r\n info.virtual = true;\r\n });\r\n }\r\n else {\r\n controlPoses.slice(index).forEach(function (info) {\r\n info.virtual = true;\r\n });\r\n }\r\n}\r\nfunction getBorderRadius(borderRadius, width, height, minCounts, full) {\r\n if (minCounts === void 0) { minCounts = [0, 0]; }\r\n var values = [];\r\n if (!borderRadius || borderRadius === \"0px\") {\r\n values = [];\r\n }\r\n else {\r\n values = splitSpace(borderRadius);\r\n }\r\n return getRadiusValues(values, width, height, 0, 0, minCounts, full);\r\n}\r\nfunction triggerRoundEvent(moveable, e, dist, delta, nextPoses) {\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n var _a = getRadiusStyles(nextPoses, moveable.props.roundRelative, width, height), raws = _a.raws, styles = _a.styles, radiusPoses = _a.radiusPoses;\r\n var _b = splitRadiusPoses(radiusPoses, raws), horizontals = _b.horizontals, verticals = _b.verticals;\r\n var borderRadius = styles.join(\" \");\r\n state.borderRadiusState = borderRadius;\r\n var params = fillParams(moveable, e, __assign({ horizontals: horizontals, verticals: verticals, borderRadius: borderRadius, width: width, height: height, delta: delta, dist: dist }, fillCSSObject({\r\n borderRadius: borderRadius,\r\n }, e)));\r\n triggerEvent(moveable, \"onRound\", params);\r\n return params;\r\n}\r\nfunction getStyleBorderRadius(moveable) {\r\n var _a, _b;\r\n var style = moveable.getState().style;\r\n var borderRadius = style.borderRadius || \"\";\r\n if (!borderRadius && moveable.props.groupable) {\r\n var firstMoveable = moveable.moveables[0];\r\n var firstTarget = moveable.getTargets()[0];\r\n if (firstTarget) {\r\n if ((firstMoveable === null || firstMoveable === void 0 ? void 0 : firstMoveable.props.target) === firstTarget) {\r\n borderRadius = (_b = (_a = moveable.moveables[0]) === null || _a === void 0 ? void 0 : _a.state.style.borderRadius) !== null && _b !== void 0 ? _b : \"\";\r\n style.borderRadius = borderRadius;\r\n }\r\n else {\r\n borderRadius = getComputedStyle(firstTarget).borderRadius;\r\n style.borderRadius = borderRadius;\r\n }\r\n }\r\n }\r\n return borderRadius;\r\n}\r\n/**\r\n * @namespace Moveable.Roundable\r\n * @description Whether to show and drag or double click border-radius\r\n */\r\nvar Roundable = {\r\n name: \"roundable\",\r\n props: [\r\n \"roundable\",\r\n \"roundRelative\",\r\n \"minRoundControls\",\r\n \"maxRoundControls\",\r\n \"roundClickable\",\r\n \"roundPadding\",\r\n \"isDisplayShadowRoundControls\",\r\n ],\r\n events: [\r\n \"roundStart\",\r\n \"round\",\r\n \"roundEnd\",\r\n \"roundGroupStart\",\r\n \"roundGroup\",\r\n \"roundGroupEnd\",\r\n ],\r\n css: [\r\n \".control.border-radius {\\nbackground: #d66;\\ncursor: pointer;\\nz-index: 3;\\n}\",\r\n \".control.border-radius.vertical {\\nbackground: #d6d;\\nz-index: 2;\\n}\",\r\n \".control.border-radius.virtual {\\nopacity: 0.5;\\nz-index: 1;\\n}\",\r\n \":host.round-line-clickable .line.direction {\\ncursor: pointer;\\n}\",\r\n ],\r\n className: function (moveable) {\r\n var roundClickable = moveable.props.roundClickable;\r\n return roundClickable === true || roundClickable === \"line\" ? prefix(\"round-line-clickable\") : \"\";\r\n },\r\n requestStyle: function () {\r\n return [\"borderRadius\"];\r\n },\r\n requestChildStyle: function () {\r\n return [\"borderRadius\"];\r\n },\r\n render: function (moveable, React) {\r\n var _a = moveable.getState(), target = _a.target, width = _a.width, height = _a.height, allMatrix = _a.allMatrix, is3d = _a.is3d, left = _a.left, top = _a.top, borderRadiusState = _a.borderRadiusState;\r\n var _b = moveable.props, _c = _b.minRoundControls, minRoundControls = _c === void 0 ? [0, 0] : _c, _d = _b.maxRoundControls, maxRoundControls = _d === void 0 ? [4, 4] : _d, zoom = _b.zoom, _e = _b.roundPadding, roundPadding = _e === void 0 ? 0 : _e, isDisplayShadowRoundControls = _b.isDisplayShadowRoundControls, groupable = _b.groupable;\r\n if (!target) {\r\n return null;\r\n }\r\n var borderRadius = borderRadiusState || getStyleBorderRadius(moveable);\r\n var n = is3d ? 4 : 3;\r\n var radiusValues = getBorderRadius(borderRadius, width, height, minRoundControls, true);\r\n if (!radiusValues) {\r\n return null;\r\n }\r\n var verticalCount = 0;\r\n var horizontalCount = 0;\r\n var basePos = groupable ? [0, 0] : [left, top];\r\n return radiusValues.map(function (v, i) {\r\n var horizontal = v.horizontal;\r\n var vertical = v.vertical;\r\n var direction = v.direction || \"\";\r\n var originalPos = __spreadArray([], __read(v.pos), false);\r\n horizontalCount += Math.abs(horizontal);\r\n verticalCount += Math.abs(vertical);\r\n if (horizontal && direction.indexOf(\"n\") > -1) {\r\n originalPos[1] -= roundPadding;\r\n }\r\n if (vertical && direction.indexOf(\"w\") > -1) {\r\n originalPos[0] -= roundPadding;\r\n }\r\n if (horizontal && direction.indexOf(\"s\") > -1) {\r\n originalPos[1] += roundPadding;\r\n }\r\n if (vertical && direction.indexOf(\"e\") > -1) {\r\n originalPos[0] += roundPadding;\r\n }\r\n var pos = minus(calculatePosition(allMatrix, originalPos, n), basePos);\r\n var isDisplayVerticalShadow = isDisplayShadowRoundControls\r\n && isDisplayShadowRoundControls !== \"horizontal\";\r\n var isDisplay = v.vertical\r\n ? verticalCount <= maxRoundControls[1] && (isDisplayVerticalShadow || !v.virtual)\r\n : horizontalCount <= maxRoundControls[0] && (isDisplayShadowRoundControls || !v.virtual);\r\n return React.createElement(\"div\", { key: \"borderRadiusControl\".concat(i), className: prefix(\"control\", \"border-radius\", v.vertical ? \"vertical\" : \"\", v.virtual ? \"virtual\" : \"\"), \"data-radius-index\": i, style: {\r\n display: isDisplay ? \"block\" : \"none\",\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) scale(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (!e.inputEvent || e.isRequest) {\r\n return false;\r\n }\r\n var className = (e.inputEvent.target.getAttribute(\"class\") || \"\");\r\n return className.indexOf(\"border-radius\") > -1\r\n || (className.indexOf(\"moveable-line\") > -1 && className.indexOf(\"moveable-direction\") > -1);\r\n },\r\n dragGroupControlCondition: function (moveable, e) {\r\n return this.dragControlCondition(moveable, e);\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var inputEvent = e.inputEvent, datas = e.datas;\r\n var inputTarget = inputEvent.target;\r\n var className = (inputTarget.getAttribute(\"class\") || \"\");\r\n var isControl = className.indexOf(\"border-radius\") > -1;\r\n var isLine = className.indexOf(\"moveable-line\") > -1 && className.indexOf(\"moveable-direction\") > -1;\r\n var controlIndex = isControl ? parseInt(inputTarget.getAttribute(\"data-radius-index\"), 10) : -1;\r\n var lineIndex = -1;\r\n if (isLine) {\r\n var indexAttr = inputTarget.getAttribute(\"data-line-key\") || \"\";\r\n if (indexAttr) {\r\n lineIndex = parseInt(indexAttr.replace(/render-line-/g, \"\"), 10);\r\n if (isNaN(lineIndex)) {\r\n lineIndex = -1;\r\n }\r\n }\r\n }\r\n if (!isControl && !isLine) {\r\n return false;\r\n }\r\n var params = fillParams(moveable, e, {});\r\n var result = triggerEvent(moveable, \"onRoundStart\", params);\r\n if (result === false) {\r\n return false;\r\n }\r\n datas.lineIndex = lineIndex;\r\n datas.controlIndex = controlIndex;\r\n datas.isControl = isControl;\r\n datas.isLine = isLine;\r\n setDragStart(moveable, e);\r\n var _a = moveable.props, roundRelative = _a.roundRelative, _b = _a.minRoundControls, minRoundControls = _b === void 0 ? [0, 0] : _b;\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n datas.isRound = true;\r\n datas.prevDist = [0, 0];\r\n var borderRadius = getStyleBorderRadius(moveable);\r\n var controlPoses = getBorderRadius(borderRadius || \"\", width, height, minRoundControls, true) || [];\r\n datas.controlPoses = controlPoses;\r\n state.borderRadiusState = getRadiusStyles(controlPoses, roundRelative, width, height).styles.join(\" \");\r\n return params;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas;\r\n var controlPoses = datas.controlPoses;\r\n if (!datas.isRound || !datas.isControl || !controlPoses.length) {\r\n return false;\r\n }\r\n var index = datas.controlIndex;\r\n var _a = __read(getDragDist(e), 2), distX = _a[0], distY = _a[1];\r\n var dist = [distX, distY];\r\n var delta = minus(dist, datas.prevDist);\r\n var _b = moveable.props.maxRoundControls, maxRoundControls = _b === void 0 ? [4, 4] : _b;\r\n var _c = moveable.state, width = _c.width, height = _c.height;\r\n var selectedControlPose = controlPoses[index];\r\n var selectedVertical = selectedControlPose.vertical;\r\n var selectedHorizontal = selectedControlPose.horizontal;\r\n // 0: [0, 1, 2, 3] maxCount === 1\r\n // 0: [0, 2] maxCount === 2\r\n // 1: [1, 3] maxCount === 2\r\n // 0: [0] maxCount === 3\r\n // 1: [1, 3] maxCount === 3\r\n var dists = controlPoses.map(function (pose) {\r\n var horizontal = pose.horizontal, vertical = pose.vertical;\r\n var poseDist = [\r\n horizontal * selectedHorizontal * dist[0],\r\n vertical * selectedVertical * dist[1],\r\n ];\r\n if (horizontal) {\r\n if (maxRoundControls[0] === 1) {\r\n return poseDist;\r\n }\r\n else if (maxRoundControls[0] < 4 && horizontal !== selectedHorizontal) {\r\n return poseDist;\r\n }\r\n }\r\n else if (maxRoundControls[1] === 0) {\r\n poseDist[1] = vertical * selectedHorizontal * dist[0] / width * height;\r\n return poseDist;\r\n }\r\n else if (selectedVertical) {\r\n if (maxRoundControls[1] === 1) {\r\n return poseDist;\r\n }\r\n else if (maxRoundControls[1] < 4 && vertical !== selectedVertical) {\r\n return poseDist;\r\n }\r\n }\r\n return [0, 0];\r\n });\r\n dists[index] = dist;\r\n var nextPoses = controlPoses.map(function (info, i) {\r\n return __assign(__assign({}, info), { pos: plus(info.pos, dists[i]) });\r\n });\r\n if (index < 4) {\r\n nextPoses.slice(0, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n else {\r\n nextPoses.slice(4, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n datas.prevDist = [distX, distY];\r\n return triggerRoundEvent(moveable, e, dist, delta, nextPoses);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var state = moveable.state;\r\n state.borderRadiusState = \"\";\r\n var datas = e.datas, isDouble = e.isDouble;\r\n if (!datas.isRound) {\r\n return false;\r\n }\r\n var isControl = datas.isControl, controlIndex = datas.controlIndex, isLine = datas.isLine, lineIndex = datas.lineIndex;\r\n var controlPoses = datas.controlPoses;\r\n var length = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual;\r\n return virtual;\r\n }).length;\r\n var _a = moveable.props.roundClickable, roundClickable = _a === void 0 ? true : _a;\r\n if (isDouble && roundClickable) {\r\n if (isControl && (roundClickable === true || roundClickable === \"control\")) {\r\n removeBorderRadius(controlPoses, controlIndex);\r\n }\r\n else if (isLine && (roundClickable === true || roundClickable === \"line\")) {\r\n var _b = __read(calculatePointerDist(moveable, e), 2), distX = _b[0], distY = _b[1];\r\n addBorderRadiusByLine(controlPoses, lineIndex, distX, distY);\r\n }\r\n if (length !== controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual;\r\n return virtual;\r\n }).length) {\r\n triggerRoundEvent(moveable, e, [0, 0], [0, 0], controlPoses);\r\n }\r\n }\r\n var params = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onRoundEnd\", params);\r\n state.borderRadiusState = \"\";\r\n return params;\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n var result = this.dragControlStart(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] });\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroupStart\", nextParams);\r\n return result;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var result = this.dragControl(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] }), fillCSSObject({\r\n borderRadius: result.borderRadius,\r\n }, ev));\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n catchEvent(moveable, \"onRound\", function (parentEvent) {\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] }), fillCSSObject({\r\n borderRadius: parentEvent.borderRadius,\r\n }, ev));\r\n }) }, parentEvent);\r\n triggerEvent(moveable, \"onRoundGroup\", nextParams);\r\n });\r\n var result = this.dragControlEnd(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n var _a;\r\n return __assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i], lastEvent: (_a = ev.datas) === null || _a === void 0 ? void 0 : _a.lastEvent });\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroupEnd\", nextParams);\r\n return nextParams;\r\n },\r\n unset: function (moveable) {\r\n moveable.state.borderRadiusState = \"\";\r\n },\r\n};\r\n/**\r\n * Whether to show and drag or double click border-radius, (default: false)\r\n * @name Moveable.Roundable#roundable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px\r\n * @name Moveable.Roundable#roundRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * Minimum number of round controls. It moves in proportion by control. [horizontal, vertical] (default: [0, 0])\r\n * @name Moveable.Roundable#minRoundControls\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * minRoundControls: [0, 0],\r\n * });\r\n * moveable.minRoundControls = [1, 0];\r\n */\r\n/**\r\n * Maximum number of round controls. It moves in proportion by control. [horizontal, vertical] (default: [4, 4])\r\n * @name Moveable.Roundable#maxRoundControls\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * maxRoundControls: [4, 4],\r\n * });\r\n * moveable.maxRoundControls = [1, 0];\r\n */\r\n/**\r\n * Whether you can add/delete round controls by double-clicking a line or control.\r\n * @name Moveable.Roundable#roundClickable\r\n * @default true\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * roundClickable: true,\r\n * });\r\n * moveable.roundClickable = false;\r\n */\r\n/**\r\n * Whether to show a round control that does not actually exist as a shadow\r\n * @name Moveable.Roundable#isDisplayShadowRoundControls\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * isDisplayShadowRoundControls: false,\r\n * });\r\n * moveable.isDisplayShadowRoundControls = true;\r\n */\r\n/**\r\n * The padding value of the position of the round control\r\n * @name Moveable.Roundable#roundPadding\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundPadding: 0,\r\n * });\r\n * moveable.roundPadding = 15;\r\n */\r\n/**\r\n * When drag start the clip area or controls, the `roundStart` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundStart\r\n * @param {Moveable.Roundable.OnRoundStart} - Parameters for the `roundStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag or double click the border area or controls, the `round` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event round\r\n * @param {Moveable.Roundable.OnRound} - Parameters for the `round` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the border area or controls, the `roundEnd` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundEnd\r\n * @param {Moveable.Roundable.onRoundEnd} - Parameters for the `roundEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag start the clip area or controls, the `roundGroupStart` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroupStart\r\n * @param {Moveable.Roundable.OnRoundGroupStart} - Parameters for the `roundGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag or double click the border area or controls, the `roundGroup` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroup\r\n * @param {Moveable.Roundable.OnRoundGroup} - Parameters for the `roundGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the border area or controls, the `roundGroupEnd` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroupEnd\r\n * @param {Moveable.Roundable.onRoundGroupEnd} - Parameters for the `roundGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\n\nfunction isIdentityMatrix(matrix, is3d) {\r\n var n = is3d ? 4 : 3;\r\n var identityMatrix = createIdentityMatrix(n);\r\n var value = \"matrix\".concat(is3d ? \"3d\" : \"\", \"(\").concat(identityMatrix.join(\",\"), \")\");\r\n return matrix === value || matrix === \"matrix(1,0,0,1,0,0)\";\r\n}\r\nvar BeforeRenderable = {\r\n isPinch: true,\r\n name: \"beforeRenderable\",\r\n props: [],\r\n events: [\r\n \"beforeRenderStart\",\r\n \"beforeRender\",\r\n \"beforeRenderEnd\",\r\n \"beforeRenderGroupStart\",\r\n \"beforeRenderGroup\",\r\n \"beforeRenderGroupEnd\",\r\n ],\r\n dragRelation: \"weak\",\r\n setTransform: function (moveable, e) {\r\n var _a = moveable.state, is3d = _a.is3d, targetMatrix = _a.targetMatrix, inlineTransform = _a.inlineTransform;\r\n var cssMatrix = is3d\r\n ? \"matrix3d(\".concat(targetMatrix.join(\",\"), \")\")\r\n : \"matrix(\".concat(convertMatrixtoCSS(targetMatrix, true), \")\");\r\n var startTransform = !inlineTransform || inlineTransform === \"none\" ? cssMatrix : inlineTransform;\r\n e.datas.startTransforms = isIdentityMatrix(startTransform, is3d) ? [] : splitSpace(startTransform);\r\n },\r\n resetStyle: function (e) {\r\n var datas = e.datas;\r\n datas.nextStyle = {};\r\n datas.nextTransforms = e.datas.startTransforms;\r\n datas.nextTransformAppendedIndexes = [];\r\n },\r\n fillDragStartParams: function (moveable, e) {\r\n return fillParams(moveable, e, {\r\n setTransform: function (transform) {\r\n e.datas.startTransforms = isArray(transform) ? transform : splitSpace(transform);\r\n },\r\n isPinch: !!e.isPinch,\r\n });\r\n },\r\n fillDragParams: function (moveable, e) {\r\n return fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n });\r\n },\r\n dragStart: function (moveable, e) {\r\n this.setTransform(moveable, e);\r\n this.resetStyle(e);\r\n triggerEvent(moveable, \"onBeforeRenderStart\", this.fillDragStartParams(moveable, e));\r\n },\r\n drag: function (moveable, e) {\r\n if (!e.datas.startTransforms) {\r\n this.setTransform(moveable, e);\r\n }\r\n this.resetStyle(e);\r\n triggerEvent(moveable, \"onBeforeRender\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n }));\r\n },\r\n dragEnd: function (moveable, e) {\r\n if (!e.datas.startTransforms) {\r\n this.setTransform(moveable, e);\r\n this.resetStyle(e);\r\n }\r\n triggerEvent(moveable, \"onBeforeRenderEnd\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n isDrag: e.isDrag,\r\n }));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n var _this = this;\r\n this.dragStart(moveable, e);\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n _this.setTransform(childMoveable, childEvent);\r\n _this.resetStyle(childEvent);\r\n return _this.fillDragStartParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onBeforeRenderGroupStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n setTransform: function () { },\r\n events: params,\r\n }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n var _this = this;\r\n this.drag(moveable, e);\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n _this.resetStyle(childEvent);\r\n return _this.fillDragParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onBeforeRenderGroup\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n events: params,\r\n }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n triggerEvent(moveable, \"onBeforeRenderGroupEnd\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n isDrag: e.isDrag,\r\n targets: moveable.props.targets,\r\n }));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragGroupStart(moveable, e);\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.dragGroup(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n return this.dragGroupEnd(moveable, e);\r\n },\r\n};\n\nvar Renderable = {\r\n name: \"renderable\",\r\n props: [],\r\n events: [\r\n \"renderStart\",\r\n \"render\",\r\n \"renderEnd\",\r\n \"renderGroupStart\",\r\n \"renderGroup\",\r\n \"renderGroupEnd\",\r\n ],\r\n dragRelation: \"weak\",\r\n dragStart: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n }));\r\n },\r\n drag: function (moveable, e) {\r\n triggerEvent(moveable, \"onRender\", this.fillDragParams(moveable, e));\r\n },\r\n dragAfter: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragEnd: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderEnd\", this.fillDragEndParams(moveable, e));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderGroupStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n var _this = this;\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n return _this.fillDragParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onRenderGroup\", fillParams(moveable, e, __assign(__assign({ isPinch: !!e.isPinch, targets: moveable.props.targets, transform: getNextTransformText(e), transformObject: {} }, fillCSSObject(getNextStyle(e))), { events: params })));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var _this = this;\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n return _this.fillDragEndParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onRenderGroupEnd\", fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, isDrag: e.isDrag, targets: moveable.props.targets, events: params, transformObject: {}, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e)))));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlAfter: function (moveable, e) {\r\n return this.dragAfter(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragGroupStart(moveable, e);\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.dragGroup(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n return this.dragGroupEnd(moveable, e);\r\n },\r\n fillDragParams: function (moveable, e) {\r\n var transformObject = {};\r\n parse(getNextTransforms(e) || []).forEach(function (matrixInfo) {\r\n transformObject[matrixInfo.name] = matrixInfo.functionValue;\r\n });\r\n return fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, transformObject: transformObject, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e))));\r\n },\r\n fillDragEndParams: function (moveable, e) {\r\n var transformObject = {};\r\n parse(getNextTransforms(e) || []).forEach(function (matrixInfo) {\r\n transformObject[matrixInfo.name] = matrixInfo.functionValue;\r\n });\r\n return fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, isDrag: e.isDrag, transformObject: transformObject, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e))));\r\n },\r\n};\n\nfunction triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType, e, requestInstant) {\r\n // pre setting\r\n e.clientDistX = e.distX;\r\n e.clientDistY = e.distY;\r\n var isStart = eventType === \"Start\";\r\n var isEnd = eventType === \"End\";\r\n var isAfter = eventType === \"After\";\r\n var target = moveable.state.target;\r\n var isRequest = e.isRequest;\r\n var isControl = eventAffix.indexOf(\"Control\") > -1;\r\n if (!target\r\n || (isStart && isControl && !isRequest && moveable.areaElement === e.inputEvent.target)) {\r\n return false;\r\n }\r\n var ables = __spreadArray([], __read(moveableAbles), false);\r\n if (isRequest) {\r\n var requestAble_1 = e.requestAble;\r\n if (!ables.some(function (able) { return able.name === requestAble_1; })) {\r\n ables.push.apply(ables, __spreadArray([], __read(moveable.props.ables.filter(function (able) { return able.name === requestAble_1; })), false));\r\n }\r\n }\r\n if (!ables.length || ables.every(function (able) { return able.dragRelation; })) {\r\n return false;\r\n }\r\n // \"drag\" \"Control\" \"After\"\r\n var inputEvent = e.inputEvent;\r\n var inputTarget;\r\n if (isEnd && inputEvent) {\r\n inputTarget = document.elementFromPoint(e.clientX, e.clientY) || inputEvent.target;\r\n }\r\n var isDragStop = false;\r\n var stop = function () {\r\n var _a;\r\n isDragStop = true;\r\n (_a = e.stop) === null || _a === void 0 ? void 0 : _a.call(e);\r\n };\r\n var isFirstStart = isStart && (!moveable.targetGesto || !moveable.controlGesto\r\n || (!moveable.targetGesto.isFlag() || !moveable.controlGesto.isFlag()));\r\n if (isFirstStart) {\r\n moveable.updateRect(eventType, true, false);\r\n }\r\n // trigger ables\r\n var datas = e.datas;\r\n var gestoType = isControl ? \"controlGesto\" : \"targetGesto\";\r\n var prevGesto = moveable[gestoType];\r\n var trigger = function (able, eventName, conditionName) {\r\n if (!(eventName in able) || prevGesto !== moveable[gestoType]) {\r\n return false;\r\n }\r\n var ableName = able.name;\r\n var nextDatas = datas[ableName] || (datas[ableName] = {});\r\n if (isStart) {\r\n nextDatas.isEventStart = !conditionName\r\n || !able[conditionName] || able[conditionName](moveable, e);\r\n }\r\n if (!nextDatas.isEventStart) {\r\n return false;\r\n }\r\n var result = able[eventName](moveable, __assign(__assign({}, e), { stop: stop, datas: nextDatas, originalDatas: datas, inputTarget: inputTarget }));\r\n moveable._emitter.off();\r\n if (isStart && result === false) {\r\n nextDatas.isEventStart = false;\r\n }\r\n return result;\r\n };\r\n // unset ables for first drag start\r\n if (isFirstStart) {\r\n ables.forEach(function (able) {\r\n able.unset && able.unset(moveable);\r\n });\r\n }\r\n // BeforeRenderable\r\n trigger(BeforeRenderable, \"drag\".concat(eventAffix).concat(eventType));\r\n var forceEndedCount = 0;\r\n var updatedCount = 0;\r\n eventOperations.forEach(function (eventOperation) {\r\n if (isDragStop) {\r\n return false;\r\n }\r\n var eventName = \"\".concat(eventOperation).concat(eventAffix).concat(eventType);\r\n var conditionName = \"\".concat(eventOperation).concat(eventAffix, \"Condition\");\r\n if (eventType === \"\" && !isRequest) {\r\n // Convert distX, distY\r\n convertDragDist(moveable.state, e);\r\n }\r\n // const isGroup = eventAffix.indexOf(\"Group\") > -1;\r\n var eventAbles = ables.filter(function (able) { return able[eventName]; });\r\n eventAbles = eventAbles.filter(function (able, i) {\r\n return able.name && eventAbles.indexOf(able) === i;\r\n });\r\n var results = eventAbles.filter(function (able) { return trigger(able, eventName, conditionName); });\r\n var isUpdate = results.length;\r\n // end ables\r\n if (isDragStop) {\r\n ++forceEndedCount;\r\n }\r\n if (isUpdate) {\r\n ++updatedCount;\r\n }\r\n if (!isDragStop && isStart && eventAbles.length && !isUpdate) {\r\n forceEndedCount += eventAbles.filter(function (able) {\r\n var ableName = able.name;\r\n var nextDatas = datas[ableName];\r\n if (nextDatas.isEventStart) {\r\n if (able.dragRelation === \"strong\") {\r\n return false;\r\n }\r\n // stop drag\r\n return true;\r\n }\r\n // pre stop drag\r\n return false;\r\n }).length ? 1 : 0;\r\n }\r\n });\r\n if (!isAfter || updatedCount) {\r\n trigger(Renderable, \"drag\".concat(eventAffix).concat(eventType));\r\n }\r\n // stop gesto condition\r\n var isForceEnd = prevGesto !== moveable[gestoType] || forceEndedCount === eventOperations.length;\r\n if (isEnd || isDragStop || isForceEnd) {\r\n moveable.state.gestos = {};\r\n if (moveable.moveables) {\r\n moveable.moveables.forEach(function (childMoveable) {\r\n childMoveable.state.gestos = {};\r\n });\r\n }\r\n ables.forEach(function (able) {\r\n able.unset && able.unset(moveable);\r\n });\r\n }\r\n if (isStart && !isForceEnd && !isRequest && updatedCount && moveable.props.preventDefault) {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n }\r\n if (moveable.isUnmounted || isForceEnd) {\r\n return false;\r\n }\r\n if ((!isStart && updatedCount && !requestInstant) || isEnd) {\r\n var flushSync = moveable.props.flushSync || defaultSync;\r\n flushSync(function () {\r\n moveable.updateRect(isEnd ? eventType : \"\", true, false);\r\n moveable.forceUpdate();\r\n });\r\n }\r\n if (!isStart && !isEnd && !isAfter && updatedCount && !requestInstant) {\r\n triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType + \"After\", e);\r\n }\r\n return true;\r\n}\r\nfunction checkMoveableTarget(moveable, isControl) {\r\n return function (e, target) {\r\n var _a;\r\n if (target === void 0) { target = e.inputEvent.target; }\r\n var eventTarget = target;\r\n var areaElement = moveable.areaElement;\r\n var dragTargetElement = moveable._dragTarget;\r\n if (!dragTargetElement || (!isControl && ((_a = moveable.controlGesto) === null || _a === void 0 ? void 0 : _a.isFlag()))) {\r\n return false;\r\n }\r\n return eventTarget === dragTargetElement\r\n || dragTargetElement.contains(eventTarget)\r\n || eventTarget === areaElement\r\n || (!moveable.isMoveableElement(eventTarget) && !moveable.controlBox.contains(eventTarget))\r\n || hasClass(eventTarget, \"moveable-area\")\r\n || hasClass(eventTarget, \"moveable-padding\")\r\n || hasClass(eventTarget, \"moveable-edgeDraggable\");\r\n };\r\n}\r\nfunction getTargetAbleGesto(moveable, moveableTarget, eventAffix) {\r\n var controlBox = moveable.controlBox;\r\n var targets = [];\r\n var props = moveable.props;\r\n var dragArea = props.dragArea;\r\n var target = moveable.state.target;\r\n var dragTarget = props.dragTarget;\r\n targets.push(controlBox);\r\n if (!dragArea || dragTarget) {\r\n targets.push(moveableTarget);\r\n }\r\n if (!dragArea && dragTarget && target && moveableTarget !== target && props.dragTargetSelf) {\r\n targets.push(target);\r\n }\r\n var checkTarget = checkMoveableTarget(moveable);\r\n return getAbleGesto(moveable, targets, \"targetAbles\", eventAffix, {\r\n dragStart: checkTarget,\r\n pinchStart: checkTarget,\r\n });\r\n}\r\nfunction getControlAbleGesto(moveable, eventAffix) {\r\n var controlBox = moveable.controlBox;\r\n var targets = [];\r\n targets.push(controlBox);\r\n var checkTarget = checkMoveableTarget(moveable, true);\r\n var checkControlTarget = function (e, target) {\r\n if (target === void 0) { target = e.inputEvent.target; }\r\n if (target === controlBox) {\r\n return true;\r\n }\r\n var result = checkTarget(e, target);\r\n return !result;\r\n };\r\n return getAbleGesto(moveable, targets, \"controlAbles\", eventAffix, {\r\n dragStart: checkControlTarget,\r\n pinchStart: checkControlTarget,\r\n });\r\n}\r\nfunction getAbleGesto(moveable, target, ableType, eventAffix, conditionFunctions) {\r\n if (conditionFunctions === void 0) { conditionFunctions = {}; }\r\n var isTargetAbles = ableType === \"targetAbles\";\r\n var _a = moveable.props, pinchOutside = _a.pinchOutside, pinchThreshold = _a.pinchThreshold, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickDefault = _a.preventClickDefault, checkInput = _a.checkInput, dragFocusedInput = _a.dragFocusedInput, _b = _a.preventDefault, preventDefault = _b === void 0 ? true : _b, _c = _a.preventRightClick, preventRightClick = _c === void 0 ? true : _c, _d = _a.preventWheelClick, preventWheelClick = _d === void 0 ? true : _d, dragContaienrOption = _a.dragContainer;\r\n var dragContainer = getRefTarget(dragContaienrOption, true);\r\n var options = {\r\n preventDefault: preventDefault,\r\n preventRightClick: preventRightClick,\r\n preventWheelClick: preventWheelClick,\r\n container: dragContainer || getWindow(moveable.getControlBoxElement()),\r\n pinchThreshold: pinchThreshold,\r\n pinchOutside: pinchOutside,\r\n preventClickEventOnDrag: isTargetAbles ? preventClickEventOnDrag : false,\r\n preventClickEventOnDragStart: isTargetAbles ? preventClickDefault : false,\r\n preventClickEventByCondition: isTargetAbles ? null : function (e) {\r\n return moveable.controlBox.contains(e.target);\r\n },\r\n checkInput: isTargetAbles ? checkInput : false,\r\n dragFocusedInput: dragFocusedInput,\r\n };\r\n var gesto = new Gesto(target, options);\r\n var isControl = eventAffix === \"Control\";\r\n [\"drag\", \"pinch\"].forEach(function (eventOperation) {\r\n [\"Start\", \"\", \"End\"].forEach(function (eventType) {\r\n gesto.on(\"\".concat(eventOperation).concat(eventType), function (e) {\r\n var _a;\r\n var eventName = e.eventType;\r\n var isPinchScheduled = eventOperation === \"drag\" && e.isPinch;\r\n if (conditionFunctions[eventName] && !conditionFunctions[eventName](e)) {\r\n e.stop();\r\n return;\r\n }\r\n if (isPinchScheduled) {\r\n return;\r\n }\r\n var eventOperations = eventOperation === \"drag\" ? [eventOperation] : [\"drag\", eventOperation];\r\n var moveableAbles = __spreadArray([], __read(moveable[ableType]), false);\r\n var result = triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType, e);\r\n if (!result) {\r\n e.stop();\r\n }\r\n else if (moveable.props.stopPropagation || (eventType === \"Start\" && isControl)) {\r\n (_a = e === null || e === void 0 ? void 0 : e.inputEvent) === null || _a === void 0 ? void 0 : _a.stopPropagation();\r\n }\r\n });\r\n });\r\n });\r\n return gesto;\r\n}\n\nvar EventManager = /*#__PURE__*/ (function () {\r\n function EventManager(target, moveable, eventName) {\r\n var _this = this;\r\n this.target = target;\r\n this.moveable = moveable;\r\n this.eventName = eventName;\r\n this.ables = [];\r\n this._onEvent = function (e) {\r\n var eventName = _this.eventName;\r\n var moveable = _this.moveable;\r\n if (moveable.state.disableNativeEvent) {\r\n return;\r\n }\r\n _this.ables.forEach(function (able) {\r\n able[eventName](moveable, {\r\n inputEvent: e,\r\n });\r\n });\r\n };\r\n target.addEventListener(eventName.toLowerCase(), this._onEvent);\r\n }\r\n EventManager.prototype.setAbles = function (ables) {\r\n this.ables = ables;\r\n };\r\n EventManager.prototype.destroy = function () {\r\n this.target.removeEventListener(this.eventName.toLowerCase(), this._onEvent);\r\n this.target = null;\r\n this.moveable = null;\r\n };\r\n return EventManager;\r\n}());\n\nfunction calculateMatrixStack(target, container, rootContainer, isAbsolute3d) {\r\n var _a;\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n var _b = getMatrixStackInfo(target, container), matrixes = _b.matrixes, is3d = _b.is3d, prevTargetMatrix = _b.targetMatrix, transformOrigin = _b.transformOrigin, targetOrigin = _b.targetOrigin, offsetContainer = _b.offsetContainer, hasFixed = _b.hasFixed, containerZoom = _b.zoom; // prevMatrix\r\n var _c = getCachedMatrixContainerInfo(offsetContainer, rootContainer), rootMatrixes = _c.matrixes, isRoot3d = _c.is3d, offsetRootContainer = _c.offsetContainer, rootZoom = _c.zoom; // prevRootMatrix\r\n // if (rootContainer === document.body) {\r\n // console.log(offsetContainer, rootContainer, rootMatrixes);\r\n // }\r\n var isNext3d = isAbsolute3d || isRoot3d || is3d;\r\n var n = isNext3d ? 4 : 3;\r\n var isSVGGraphicElement = target.tagName.toLowerCase() !== \"svg\" && \"ownerSVGElement\" in target;\r\n var targetMatrix = prevTargetMatrix;\r\n // let allMatrix = prevMatrix ? convertDimension(prevMatrix, prevN!, n) : createIdentityMatrix(n);\r\n // let rootMatrix = prevRootMatrix ? convertDimension(prevRootMatrix, prevN!, n) : createIdentityMatrix(n);\r\n // let beforeMatrix = prevMatrix ? convertDimension(prevMatrix, prevN!, n) : createIdentityMatrix(n);\r\n var allMatrix = createIdentityMatrix(n);\r\n var rootMatrix = createIdentityMatrix(n);\r\n var beforeMatrix = createIdentityMatrix(n);\r\n var offsetMatrix = createIdentityMatrix(n);\r\n var length = matrixes.length;\r\n var nextRootMatrixes = rootMatrixes.map(function (info) {\r\n return __assign(__assign({}, info), { matrix: info.matrix ? __spreadArray([], __read(info.matrix), false) : undefined });\r\n }).reverse();\r\n matrixes.reverse();\r\n if (!is3d && isNext3d) {\r\n targetMatrix = convertDimension(targetMatrix, 3, 4);\r\n convert3DMatrixes(matrixes);\r\n }\r\n if (!isRoot3d && isNext3d) {\r\n convert3DMatrixes(nextRootMatrixes);\r\n }\r\n // rootMatrix = (...) -> container -> offset -> absolute -> offset -> absolute(targetMatrix)\r\n // rootMatrixBeforeOffset = lastOffsetMatrix -> (...) -> container\r\n // beforeMatrix = (... -> container -> offset -> absolute) -> offset -> absolute(targetMatrix)\r\n // offsetMatrix = (... -> container -> offset -> absolute -> offset) -> absolute(targetMatrix)\r\n nextRootMatrixes.forEach(function (info) {\r\n rootMatrix = multiply(rootMatrix, info.matrix, n);\r\n });\r\n var originalRootContainer = rootContainer || getDocumentBody(target);\r\n var endContainer = ((_a = nextRootMatrixes[0]) === null || _a === void 0 ? void 0 : _a.target)\r\n || getOffsetInfo(originalRootContainer, originalRootContainer, true).offsetParent;\r\n var rootMatrixBeforeOffset = nextRootMatrixes.slice(1).reduce(function (matrix, info) {\r\n return multiply(matrix, info.matrix, n);\r\n }, createIdentityMatrix(n));\r\n matrixes.forEach(function (info, i) {\r\n if (length - 2 === i) {\r\n // length - 3\r\n beforeMatrix = allMatrix.slice();\r\n }\r\n if (length - 1 === i) {\r\n // length - 2\r\n offsetMatrix = allMatrix.slice();\r\n }\r\n // calculate for SVGElement\r\n if (!info.matrix) {\r\n var nextInfo = matrixes[i + 1];\r\n var offset = getSVGOffset(info, nextInfo, endContainer, n, multiply(rootMatrixBeforeOffset, allMatrix, n));\r\n info.matrix = createOriginMatrix(offset, n);\r\n }\r\n allMatrix = multiply(allMatrix, info.matrix, n);\r\n });\r\n var isMatrix3d = !isSVGGraphicElement && is3d;\r\n if (!targetMatrix) {\r\n targetMatrix = createIdentityMatrix(isMatrix3d ? 4 : 3);\r\n }\r\n var targetTransform = makeMatrixCSS(isSVGGraphicElement && targetMatrix.length === 16\r\n ? convertDimension(targetMatrix, 4, 3) : targetMatrix, isMatrix3d);\r\n var originalRootMatrix = rootMatrix;\r\n rootMatrix = ignoreDimension(rootMatrix, n, n);\r\n return {\r\n hasZoom: containerZoom !== 1 || rootZoom !== 1,\r\n hasFixed: hasFixed,\r\n matrixes: matrixes,\r\n rootMatrix: rootMatrix,\r\n originalRootMatrix: originalRootMatrix,\r\n beforeMatrix: beforeMatrix,\r\n offsetMatrix: offsetMatrix,\r\n allMatrix: allMatrix,\r\n targetMatrix: targetMatrix,\r\n targetTransform: targetTransform,\r\n inlineTransform: target.style.transform,\r\n transformOrigin: transformOrigin,\r\n targetOrigin: targetOrigin,\r\n is3d: isNext3d,\r\n offsetContainer: offsetContainer,\r\n offsetRootContainer: offsetRootContainer,\r\n };\r\n}\n\nfunction calculateElementInfo(target, container, rootContainer, isAbsolute3d) {\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n var width = 0;\r\n var height = 0;\r\n var rotation = 0;\r\n var allResult = {};\r\n var sizes = getSize(target);\r\n if (target) {\r\n width = sizes.offsetWidth;\r\n height = sizes.offsetHeight;\r\n }\r\n if (target) {\r\n var result = calculateMatrixStack(target, container, rootContainer, isAbsolute3d);\r\n var position = calculateElementPosition(result.allMatrix, result.transformOrigin, width, height);\r\n allResult = __assign(__assign({}, result), position);\r\n var rotationPosition = calculateElementPosition(result.allMatrix, [50, 50], 100, 100);\r\n rotation = getRotationRad([rotationPosition.pos1, rotationPosition.pos2], rotationPosition.direction);\r\n }\r\n var n = isAbsolute3d ? 4 : 3;\r\n return __assign(__assign(__assign({ hasZoom: false, width: width, height: height, rotation: rotation }, sizes), { originalRootMatrix: createIdentityMatrix(n), rootMatrix: createIdentityMatrix(n), beforeMatrix: createIdentityMatrix(n), offsetMatrix: createIdentityMatrix(n), allMatrix: createIdentityMatrix(n), targetMatrix: createIdentityMatrix(n), targetTransform: \"\", inlineTransform: \"\", transformOrigin: [0, 0], targetOrigin: [0, 0], is3d: !!isAbsolute3d, left: 0, top: 0, right: 0, bottom: 0, origin: [0, 0], pos1: [0, 0], pos2: [0, 0], pos3: [0, 0], pos4: [0, 0], direction: 1, hasFixed: false, offsetContainer: null, offsetRootContainer: null, matrixes: [] }), allResult);\r\n}\r\nfunction getElementInfo(target, container, rootContainer) {\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n return calculateElementInfo(target, container, rootContainer, true);\r\n}\n\nfunction getMoveableTargetInfo(moveableElement, target, container, parentContainer, rootContainer, requestStyles) {\r\n if (requestStyles === void 0) { requestStyles = []; }\r\n var beforeDirection = 1;\r\n var beforeOrigin = [0, 0];\r\n var targetClientRect = resetClientRect();\r\n var moveableClientRect = resetClientRect();\r\n var containerClientRect = resetClientRect();\r\n var rootContainerClientRect = resetClientRect();\r\n var offsetDelta = [0, 0];\r\n var style = {};\r\n var result = calculateElementInfo(target, container, rootContainer, true);\r\n if (target) {\r\n var getStyle_1 = getCachedStyle(target);\r\n requestStyles.forEach(function (name) {\r\n style[name] = getStyle_1(name);\r\n });\r\n var n = result.is3d ? 4 : 3;\r\n var beforePosition = calculateElementPosition(result.offsetMatrix, plus(result.transformOrigin, getOrigin(result.targetMatrix, n)), result.width, result.height);\r\n beforeDirection = beforePosition.direction;\r\n beforeOrigin = plus(beforePosition.origin, [beforePosition.left - result.left, beforePosition.top - result.top]);\r\n rootContainerClientRect = getClientRect(result.offsetRootContainer);\r\n var offsetContainer = getOffsetInfo(parentContainer, parentContainer, true).offsetParent\r\n || result.offsetRootContainer;\r\n if (result.hasZoom) {\r\n var absoluteTargetPosition = calculateElementPosition(multiply(result.originalRootMatrix, result.allMatrix), result.transformOrigin, result.width, result.height);\r\n var absoluteContainerPosition = calculateElementPosition(result.originalRootMatrix, getTransformOriginArray(getCachedStyle(offsetContainer)(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); }), offsetContainer.offsetWidth, offsetContainer.offsetHeight);\r\n targetClientRect = getClientRectByPosition(absoluteTargetPosition, rootContainerClientRect);\r\n containerClientRect = getClientRectByPosition(absoluteContainerPosition, rootContainerClientRect, offsetContainer, true);\r\n if (moveableElement) {\r\n var left = absoluteTargetPosition.left;\r\n var top_1 = absoluteTargetPosition.top;\r\n moveableClientRect = getClientRectByPosition({\r\n left: left,\r\n top: top_1,\r\n bottom: top_1,\r\n right: top_1,\r\n }, rootContainerClientRect);\r\n }\r\n }\r\n else {\r\n targetClientRect = getClientRect(target);\r\n containerClientRect = getCachedClientRect(offsetContainer);\r\n if (moveableElement) {\r\n moveableClientRect = getClientRect(moveableElement);\r\n }\r\n var containerClientRectLeft = containerClientRect.left, containerClientRectTop = containerClientRect.top, containterClientLeft = containerClientRect.clientLeft, containerClientTop = containerClientRect.clientTop;\r\n var clientDelta = [\r\n targetClientRect.left - containerClientRectLeft,\r\n targetClientRect.top - containerClientRectTop,\r\n ];\r\n offsetDelta = minus(calculateInversePosition(result.rootMatrix, clientDelta, 4), [containterClientLeft + result.left, containerClientTop + result.top]);\r\n }\r\n }\r\n return __assign({ targetClientRect: targetClientRect, containerClientRect: containerClientRect, moveableClientRect: moveableClientRect, rootContainerClientRect: rootContainerClientRect, beforeDirection: beforeDirection, beforeOrigin: beforeOrigin, originalBeforeOrigin: beforeOrigin, target: target, style: style, offsetDelta: offsetDelta }, result);\r\n}\n\nfunction getPersistState(rect) {\r\n var pos1 = rect.pos1, pos2 = rect.pos2, pos3 = rect.pos3, pos4 = rect.pos4;\r\n if (!pos1 || !pos2 || !pos3 || !pos4) {\r\n return null;\r\n }\r\n var minPos = getMinMaxs([pos1, pos2, pos3, pos4]);\r\n var posDelta = [minPos.minX, minPos.minY];\r\n var origin = minus(rect.origin, posDelta);\r\n pos1 = minus(pos1, posDelta);\r\n pos2 = minus(pos2, posDelta);\r\n pos3 = minus(pos3, posDelta);\r\n pos4 = minus(pos4, posDelta);\r\n return __assign(__assign({}, rect), { left: rect.left, top: rect.top, posDelta: posDelta, pos1: pos1, pos2: pos2, pos3: pos3, pos4: pos4, origin: origin, beforeOrigin: origin, \r\n // originalBeforeOrigin: origin,\r\n isPersisted: true });\r\n}\n\nvar MoveableManager = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableManager, _super);\r\n function MoveableManager() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = __assign({ container: null, gestos: {}, renderLines: [\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n ], renderPoses: [[0, 0], [0, 0], [0, 0], [0, 0]], disableNativeEvent: false, posDelta: [0, 0] }, getMoveableTargetInfo(null));\r\n _this.renderState = {};\r\n _this.enabledAbles = [];\r\n _this.targetAbles = [];\r\n _this.controlAbles = [];\r\n _this.rotation = 0;\r\n _this.scale = [1, 1];\r\n _this.isMoveableMounted = false;\r\n _this.isUnmounted = false;\r\n _this.events = {\r\n \"mouseEnter\": null,\r\n \"mouseLeave\": null,\r\n };\r\n _this._emitter = new EventEmitter();\r\n _this._prevOriginalDragTarget = null;\r\n _this._originalDragTarget = null;\r\n _this._prevDragTarget = null;\r\n _this._dragTarget = null;\r\n _this._prevPropTarget = null;\r\n _this._propTarget = null;\r\n _this._prevDragArea = false;\r\n _this._isPropTargetChanged = false;\r\n _this._hasFirstTarget = false;\r\n _this._reiszeObserver = null;\r\n _this._observerId = 0;\r\n _this._mutationObserver = null;\r\n _this._rootContainer = null;\r\n _this._viewContainer = null;\r\n _this._viewClassNames = [];\r\n _this._store = {};\r\n _this.checkUpdateRect = function () {\r\n if (_this.isDragging()) {\r\n return;\r\n }\r\n var parentMoveable = _this.props.parentMoveable;\r\n if (parentMoveable) {\r\n parentMoveable.checkUpdateRect();\r\n return;\r\n }\r\n cancelAnimationFrame(_this._observerId);\r\n _this._observerId = requestAnimationFrame(function () {\r\n if (_this.isDragging()) {\r\n return;\r\n }\r\n _this.updateRect();\r\n });\r\n };\r\n _this._onPreventClick = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n // removeEvent(window, \"click\", this._onPreventClick, true);\r\n };\r\n return _this;\r\n }\r\n MoveableManager.prototype.render = function () {\r\n var props = this.props;\r\n var state = this.getState();\r\n var parentPosition = props.parentPosition, className = props.className, propsTarget = props.target, zoom = props.zoom, cspNonce = props.cspNonce, translateZ = props.translateZ, ControlBoxElement = props.cssStyled, groupable = props.groupable, linePadding = props.linePadding, controlPadding = props.controlPadding;\r\n this._checkUpdateRootContainer();\r\n this.checkUpdate();\r\n this.updateRenderPoses();\r\n var _a = __read(parentPosition || [0, 0], 2), parentLeft = _a[0], parentTop = _a[1];\r\n var left = state.left, top = state.top, stateTarget = state.target, direction = state.direction, hasFixed = state.hasFixed, offsetDelta = state.offsetDelta;\r\n var groupTargets = props.targets;\r\n var isDragging = this.isDragging();\r\n var ableAttributes = {};\r\n this.getEnabledAbles().forEach(function (able) {\r\n ableAttributes[\"data-able-\".concat(able.name.toLowerCase())] = true;\r\n });\r\n var ableClassName = this._getAbleClassName();\r\n var isDisplay = (groupTargets && groupTargets.length && (stateTarget || groupable))\r\n || propsTarget\r\n || (!this._hasFirstTarget && this.state.isPersisted);\r\n var isVisible = this.controlBox || this.props.firstRenderState || this.props.persistData;\r\n var translate = [left - parentLeft, top - parentTop];\r\n if (!groupable && props.useAccuratePosition) {\r\n translate[0] += offsetDelta[0];\r\n translate[1] += offsetDelta[1];\r\n }\r\n var style = {\r\n \"position\": hasFixed ? \"fixed\" : \"absolute\",\r\n \"display\": isDisplay ? \"block\" : \"none\",\r\n \"visibility\": isVisible ? \"visible\" : \"hidden\",\r\n \"transform\": \"translate3d(\".concat(translate[0], \"px, \").concat(translate[1], \"px, \").concat(translateZ, \")\"),\r\n \"--zoom\": zoom,\r\n \"--zoompx\": \"\".concat(zoom, \"px\"),\r\n };\r\n if (linePadding) {\r\n style[\"--moveable-line-padding\"] = linePadding;\r\n }\r\n if (controlPadding) {\r\n style[\"--moveable-control-padding\"] = controlPadding;\r\n }\r\n return (React.createElement(ControlBoxElement, __assign({ cspNonce: cspNonce, ref: ref(this, \"controlBox\"), className: \"\".concat(prefix(\"control-box\", direction === -1 ? \"reverse\" : \"\", isDragging ? \"dragging\" : \"\"), \" \").concat(ableClassName, \" \").concat(className) }, ableAttributes, { onClick: this._onPreventClick, style: style }),\r\n this.renderAbles(),\r\n this._renderLines()));\r\n };\r\n MoveableManager.prototype.componentDidMount = function () {\r\n this.isMoveableMounted = true;\r\n this.isUnmounted = false;\r\n var props = this.props;\r\n var parentMoveable = props.parentMoveable, container = props.container;\r\n this._checkUpdateRootContainer();\r\n this._checkUpdateViewContainer();\r\n this._updateTargets();\r\n this._updateNativeEvents();\r\n this._updateEvents();\r\n this.updateCheckInput();\r\n this._updateObserver(this.props);\r\n if (!container && !parentMoveable && !this.state.isPersisted) {\r\n this.updateRect(\"\", false, false);\r\n this.forceUpdate();\r\n }\r\n };\r\n MoveableManager.prototype.componentDidUpdate = function (prevProps) {\r\n this._checkUpdateRootContainer();\r\n this._checkUpdateViewContainer();\r\n this._updateNativeEvents();\r\n this._updateTargets();\r\n this._updateEvents();\r\n this.updateCheckInput();\r\n this._updateObserver(prevProps);\r\n };\r\n MoveableManager.prototype.componentWillUnmount = function () {\r\n var _a, _b;\r\n this.isMoveableMounted = false;\r\n this.isUnmounted = true;\r\n this._emitter.off();\r\n (_a = this._reiszeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n (_b = this._mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\r\n var viewContainer = this._viewContainer;\r\n if (viewContainer) {\r\n this._changeAbleViewClassNames([]);\r\n }\r\n unsetGesto(this, false);\r\n unsetGesto(this, true);\r\n var events = this.events;\r\n for (var name_1 in events) {\r\n var manager = events[name_1];\r\n manager && manager.destroy();\r\n }\r\n };\r\n MoveableManager.prototype.getTargets = function () {\r\n var target = this.props.target;\r\n return target ? [target] : [];\r\n };\r\n /**\r\n * Get the able used in MoveableManager.\r\n * @method Moveable#getAble\r\n * @param - able name\r\n */\r\n MoveableManager.prototype.getAble = function (ableName) {\r\n var ables = this.props.ables || [];\r\n return find(ables, function (able) { return able.name === ableName; });\r\n };\r\n MoveableManager.prototype.getContainer = function () {\r\n var _a = this.props, parentMoveable = _a.parentMoveable, wrapperMoveable = _a.wrapperMoveable, container = _a.container;\r\n return container\r\n || (wrapperMoveable && wrapperMoveable.getContainer())\r\n || (parentMoveable && parentMoveable.getContainer())\r\n || this.controlBox.parentElement;\r\n };\r\n /**\r\n * Returns the element of the control box.\r\n * @method Moveable#getControlBoxElement\r\n */\r\n MoveableManager.prototype.getControlBoxElement = function () {\r\n return this.controlBox;\r\n };\r\n /**\r\n * Target element to be dragged in moveable\r\n * @method Moveable#getDragElement\r\n */\r\n MoveableManager.prototype.getDragElement = function () {\r\n return this._dragTarget;\r\n };\r\n /**\r\n * Check if the target is an element included in the moveable.\r\n * @method Moveable#isMoveableElement\r\n * @param - the target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * window.addEventListener(\"click\", e => {\r\n * if (!moveable.isMoveableElement(e.target)) {\r\n * moveable.target = e.target;\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.isMoveableElement = function (target) {\r\n var _a;\r\n return target && (((_a = target.getAttribute) === null || _a === void 0 ? void 0 : _a.call(target, \"class\")) || \"\").indexOf(PREFIX) > -1;\r\n };\r\n /**\r\n * You can drag start the Moveable through the external `MouseEvent`or `TouchEvent`. (Angular: ngDragStart)\r\n * @method Moveable#dragStart\r\n * @param - external `MouseEvent`or `TouchEvent`\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (!moveable.isMoveableElement(e.target)) {\r\n * moveable.dragStart(e);\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.dragStart = function (e, target) {\r\n if (target === void 0) { target = e.target; }\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n if (targetGesto && checkMoveableTarget(this)({ inputEvent: e }, target)) {\r\n if (!targetGesto.isFlag()) {\r\n targetGesto.triggerDragStart(e);\r\n }\r\n }\r\n else if (controlGesto && this.isMoveableElement(target)) {\r\n if (!controlGesto.isFlag()) {\r\n controlGesto.triggerDragStart(e);\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Hit test an element or rect on a moveable target.\r\n * (100% = 100)\r\n * @method Moveable#hitTest\r\n * @param - element or rect to test\r\n * @return - Get hit test rate (rate > 0 is hitted)\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (moveable.hitTest(e.target) > 0) {\r\n * console.log(\"hiited\");\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.hitTest = function (el) {\r\n var _a = this.state, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4, targetClientRect = _a.targetClientRect;\r\n if (!target) {\r\n return 0;\r\n }\r\n var rect;\r\n if (isNode(el)) {\r\n var clientRect = el.getBoundingClientRect();\r\n rect = {\r\n left: clientRect.left,\r\n top: clientRect.top,\r\n width: clientRect.width,\r\n height: clientRect.height,\r\n };\r\n }\r\n else {\r\n rect = __assign({ width: 0, height: 0 }, el);\r\n }\r\n var rectLeft = rect.left, rectTop = rect.top, rectWidth = rect.width, rectHeight = rect.height;\r\n var points = fitPoints([pos1, pos2, pos4, pos3], targetClientRect);\r\n var size = getOverlapSize(points, [\r\n [rectLeft, rectTop],\r\n [rectLeft + rectWidth, rectTop],\r\n [rectLeft + rectWidth, rectTop + rectHeight],\r\n [rectLeft, rectTop + rectHeight],\r\n ]);\r\n var totalSize = getAreaSize(points);\r\n if (!size || !totalSize) {\r\n return 0;\r\n }\r\n return Math.min(100, size / totalSize * 100);\r\n };\r\n /**\r\n * Whether the coordinates are inside Moveable\r\n * @method Moveable#isInside\r\n * @param - x coordinate\r\n * @param - y coordinate\r\n * @return - True if the coordinate is in moveable or false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (moveable.isInside(e.clientX, e.clientY)) {\r\n * console.log(\"inside\");\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.isInside = function (clientX, clientY) {\r\n var _a = this.state, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4, targetClientRect = _a.targetClientRect;\r\n if (!target) {\r\n return false;\r\n }\r\n return isInside([clientX, clientY], fitPoints([pos1, pos2, pos4, pos3], targetClientRect));\r\n };\r\n /**\r\n * If the width, height, left, and top of all elements change, update the shape of the moveable.\r\n * @method Moveable#updateRect\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * window.addEventListener(\"resize\", e => {\r\n * moveable.updateRect();\r\n * });\r\n */\r\n MoveableManager.prototype.updateRect = function (type, isTarget, isSetState) {\r\n if (isSetState === void 0) { isSetState = true; }\r\n var props = this.props;\r\n var isSingle = !props.parentPosition && !props.wrapperMoveable;\r\n if (isSingle) {\r\n setStoreCache(true);\r\n }\r\n var parentMoveable = props.parentMoveable;\r\n var state = this.state;\r\n var target = (state.target || props.target);\r\n var container = this.getContainer();\r\n var rootContainer = parentMoveable\r\n ? parentMoveable._rootContainer\r\n : this._rootContainer;\r\n var nextState = getMoveableTargetInfo(this.controlBox, target, container, container, rootContainer || container, this._getRequestStyles());\r\n if (!target && this._hasFirstTarget && props.persistData) {\r\n var persistState = getPersistState(props.persistData);\r\n for (var name_2 in persistState) {\r\n nextState[name_2] = persistState[name_2];\r\n }\r\n }\r\n if (isSingle) {\r\n setStoreCache();\r\n }\r\n this.updateState(nextState, parentMoveable ? false : isSetState);\r\n };\r\n /**\r\n * Check if the moveable state is being dragged.\r\n * @method Moveable#isDragging\r\n * @param - If you want to check if able is dragging, specify ableName.\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * // false\r\n * console.log(moveable.isDragging());\r\n *\r\n * moveable.on(\"drag\", () => {\r\n * // true\r\n * console.log(moveable.isDragging());\r\n * });\r\n */\r\n MoveableManager.prototype.isDragging = function (ableName) {\r\n var _a, _b;\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n if (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag()) {\r\n if (!ableName) {\r\n return true;\r\n }\r\n var data = targetGesto.getEventData();\r\n return !!((_a = data[ableName]) === null || _a === void 0 ? void 0 : _a.isEventStart);\r\n }\r\n if (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag()) {\r\n if (!ableName) {\r\n return true;\r\n }\r\n var data = controlGesto.getEventData();\r\n return !!((_b = data[ableName]) === null || _b === void 0 ? void 0 : _b.isEventStart);\r\n }\r\n return false;\r\n };\r\n /**\r\n * If the width, height, left, and top of the only target change, update the shape of the moveable.\r\n * Use `.updateRect()` method\r\n * @method Moveable#updateTarget\r\n * @deprecated\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.updateTarget();\r\n */\r\n MoveableManager.prototype.updateTarget = function (type) {\r\n this.updateRect(type, true);\r\n };\r\n /**\r\n * You can get the vertex information, position and offset size information of the target based on the container.\r\n * @method Moveable#getRect\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * const rectInfo = moveable.getRect();\r\n */\r\n MoveableManager.prototype.getRect = function () {\r\n var state = this.state;\r\n var poses = getAbsolutePosesByState(this.state);\r\n var _a = __read(poses, 4), pos1 = _a[0], pos2 = _a[1], pos3 = _a[2], pos4 = _a[3];\r\n var rect = getRect(poses);\r\n var offsetWidth = state.width, offsetHeight = state.height;\r\n var width = rect.width, height = rect.height, left = rect.left, top = rect.top;\r\n var statePos = [state.left, state.top];\r\n var origin = plus(statePos, state.origin);\r\n var beforeOrigin = plus(statePos, state.beforeOrigin);\r\n var transformOrigin = state.transformOrigin;\r\n return {\r\n width: width,\r\n height: height,\r\n left: left,\r\n top: top,\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n offsetWidth: offsetWidth,\r\n offsetHeight: offsetHeight,\r\n beforeOrigin: beforeOrigin,\r\n origin: origin,\r\n transformOrigin: transformOrigin,\r\n rotation: this.getRotation(),\r\n };\r\n };\r\n /**\r\n * Get a manager that manages the moveable's state and props.\r\n * @method Moveable#getManager\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * const manager = moveable.getManager(); // real moveable class instance\r\n */\r\n MoveableManager.prototype.getManager = function () {\r\n return this;\r\n };\r\n /**\r\n * You can stop the dragging currently in progress through a method from outside.\r\n * @method Moveable#stopDrag\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.stopDrag();\r\n */\r\n MoveableManager.prototype.stopDrag = function (type) {\r\n if (!type || type === \"target\") {\r\n var gesto = this.targetGesto;\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(this, false);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.stop();\r\n }\r\n if (!type || type === \"control\") {\r\n var gesto = this.controlGesto;\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(this, true);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.stop();\r\n }\r\n };\r\n MoveableManager.prototype.getRotation = function () {\r\n var _a = this.state, pos1 = _a.pos1, pos2 = _a.pos2, direction = _a.direction;\r\n return getAbsoluteRotation(pos1, pos2, direction);\r\n };\r\n /**\r\n * Request able through a method rather than an event.\r\n * At the moment of execution, requestStart is executed,\r\n * and then request and requestEnd can be executed through Requester.\r\n * @method Moveable#request\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Draggable.html#request|Draggable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Resizable.html#request|Resizable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Scalable.html#request|Scalable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Rotatable.html#request|Rotatable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.OriginDraggable.html#request|OriginDraggable Requester}\r\n * @param - ableName\r\n * @param - request to be able params.\r\n * @param - If isInstant is true, request and requestEnd are executed immediately.\r\n * @return - Able Requester. If there is no request in able, nothing will work.\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"draggable\", { deltaX: 10, deltaY: 10 }, true);\r\n *\r\n * // Start move\r\n * const requester = moveable.request(\"draggable\");\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.requestEnd();\r\n */\r\n MoveableManager.prototype.request = function (ableName, param, isInstant) {\r\n if (param === void 0) { param = {}; }\r\n var self = this;\r\n var props = self.props;\r\n var manager = props.parentMoveable || props.wrapperMoveable || self;\r\n var allAbles = manager.props.ables;\r\n var groupable = props.groupable;\r\n var requsetAble = find(allAbles, function (able) { return able.name === ableName; });\r\n if (this.isDragging() || !requsetAble || !requsetAble.request) {\r\n return {\r\n request: function () {\r\n return this;\r\n },\r\n requestEnd: function () {\r\n return this;\r\n },\r\n };\r\n }\r\n var ableRequester = requsetAble.request(self);\r\n var requestInstant = isInstant || param.isInstant;\r\n var ableType = ableRequester.isControl ? \"controlAbles\" : \"targetAbles\";\r\n var eventAffix = \"\".concat((groupable ? \"Group\" : \"\")).concat(ableRequester.isControl ? \"Control\" : \"\");\r\n var moveableAbles = __spreadArray([], __read(manager[ableType]), false);\r\n var requester = {\r\n request: function (ableParam) {\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"\", __assign(__assign({}, ableRequester.request(ableParam)), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requester;\r\n },\r\n requestEnd: function () {\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"End\", __assign(__assign({}, ableRequester.requestEnd()), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requester;\r\n },\r\n };\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"Start\", __assign(__assign({}, ableRequester.requestStart(param)), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requestInstant ? requester.request(param).requestEnd() : requester;\r\n };\r\n /**\r\n * moveable is the top level that manages targets\r\n * `Single`: MoveableManager instance\r\n * `Group`: MoveableGroup instance\r\n * `IndividualGroup`: MoveableIndividaulGroup instance\r\n * Returns leaf target MoveableManagers.\r\n */\r\n MoveableManager.prototype.getMoveables = function () {\r\n return [this];\r\n };\r\n /**\r\n * Remove the Moveable object and the events.\r\n * @method Moveable#destroy\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.destroy();\r\n */\r\n MoveableManager.prototype.destroy = function () {\r\n this.componentWillUnmount();\r\n };\r\n MoveableManager.prototype.updateRenderPoses = function () {\r\n var state = this.getState();\r\n var props = this.props;\r\n var padding = props.padding;\r\n var originalBeforeOrigin = state.originalBeforeOrigin, transformOrigin = state.transformOrigin, allMatrix = state.allMatrix, is3d = state.is3d, pos1 = state.pos1, pos2 = state.pos2, pos3 = state.pos3, pos4 = state.pos4, stateLeft = state.left, stateTop = state.top, isPersisted = state.isPersisted;\r\n var zoom = props.zoom || 1;\r\n if (!padding && zoom <= 1) {\r\n state.renderPoses = [\r\n pos1,\r\n pos2,\r\n pos3,\r\n pos4,\r\n ];\r\n state.renderLines = [\r\n [pos1, pos2],\r\n [pos2, pos4],\r\n [pos4, pos3],\r\n [pos3, pos1],\r\n ];\r\n return;\r\n }\r\n var _a = getPaddingBox(padding || {}), left = _a.left, top = _a.top, bottom = _a.bottom, right = _a.right;\r\n var n = is3d ? 4 : 3;\r\n // const clipPathInfo = getClipPath(\r\n // props.target,\r\n // offsetWidth,\r\n // offsetHeight,\r\n // );\r\n // if (clipPathInfo) {\r\n // left -= Math.max(0, clipPathInfo.left);\r\n // top -= Math.max(0, clipPathInfo.top);\r\n // bottom -= Math.max(0, offsetHeight - clipPathInfo.bottom);\r\n // right -= Math.max(0, offsetWidth - clipPathInfo.right);\r\n // }\r\n var absoluteOrigin = [];\r\n if (isPersisted) {\r\n absoluteOrigin = transformOrigin;\r\n }\r\n else if (this.controlBox && props.groupable) {\r\n absoluteOrigin = originalBeforeOrigin;\r\n }\r\n else {\r\n absoluteOrigin = plus(originalBeforeOrigin, [stateLeft, stateTop]);\r\n }\r\n var nextMatrix = multiplies(n, createOriginMatrix(absoluteOrigin.map(function (v) { return -v; }), n), allMatrix, createOriginMatrix(transformOrigin, n));\r\n var renderPos1 = calculatePadding(nextMatrix, pos1, [-left, -top], n);\r\n var renderPos2 = calculatePadding(nextMatrix, pos2, [right, -top], n);\r\n var renderPos3 = calculatePadding(nextMatrix, pos3, [-left, bottom], n);\r\n var renderPos4 = calculatePadding(nextMatrix, pos4, [right, bottom], n);\r\n state.renderPoses = [\r\n renderPos1,\r\n renderPos2,\r\n renderPos3,\r\n renderPos4,\r\n ];\r\n state.renderLines = [\r\n [renderPos1, renderPos2],\r\n [renderPos2, renderPos4],\r\n [renderPos4, renderPos3],\r\n [renderPos3, renderPos1],\r\n ];\r\n if (zoom) {\r\n var zoomOffset = zoom / 2;\r\n state.renderLines = [\r\n [\r\n calculatePadding(nextMatrix, pos1, [-left - zoomOffset, -top], n),\r\n calculatePadding(nextMatrix, pos2, [right + zoomOffset, -top], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos2, [right, -top - zoomOffset], n),\r\n calculatePadding(nextMatrix, pos4, [right, bottom + zoomOffset], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos4, [right + zoomOffset, bottom], n),\r\n calculatePadding(nextMatrix, pos3, [-left - zoomOffset, bottom], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos3, [-left, bottom + zoomOffset], n),\r\n calculatePadding(nextMatrix, pos1, [-left, -top - zoomOffset], n),\r\n ],\r\n ];\r\n }\r\n };\r\n MoveableManager.prototype.checkUpdate = function () {\r\n this._isPropTargetChanged = false;\r\n var _a = this.props, target = _a.target, container = _a.container, parentMoveable = _a.parentMoveable;\r\n var _b = this.state, stateTarget = _b.target, stateContainer = _b.container;\r\n if (!stateTarget && !target) {\r\n return;\r\n }\r\n this.updateAbles();\r\n var isTargetChanged = !equals(stateTarget, target);\r\n var isChanged = isTargetChanged || !equals(stateContainer, container);\r\n if (!isChanged) {\r\n return;\r\n }\r\n var moveableContainer = container || this.controlBox;\r\n if (moveableContainer) {\r\n this.unsetAbles();\r\n }\r\n this.updateState({ target: target, container: container });\r\n if (!parentMoveable && moveableContainer) {\r\n this.updateRect(\"End\", false, false);\r\n }\r\n this._isPropTargetChanged = isTargetChanged;\r\n };\r\n MoveableManager.prototype.waitToChangeTarget = function () {\r\n return new Promise(function () { });\r\n };\r\n MoveableManager.prototype.triggerEvent = function (name, e) {\r\n var props = this.props;\r\n this._emitter.trigger(name, e);\r\n if (props.parentMoveable && e.isRequest && !e.isRequestChild) {\r\n return props.parentMoveable.triggerEvent(name, e, true);\r\n }\r\n var callback = props[name];\r\n return callback && callback(e);\r\n };\r\n MoveableManager.prototype.useCSS = function (tag, css) {\r\n var customStyleMap = this.props.customStyledMap;\r\n var key = tag + css;\r\n if (!customStyleMap[key]) {\r\n customStyleMap[key] = styled(tag, css);\r\n }\r\n return customStyleMap[key];\r\n };\r\n MoveableManager.prototype.getState = function () {\r\n var _a;\r\n var props = this.props;\r\n if (props.target || ((_a = props.targets) === null || _a === void 0 ? void 0 : _a.length)) {\r\n this._hasFirstTarget = true;\r\n }\r\n var hasControlBox = this.controlBox;\r\n var persistData = props.persistData;\r\n var firstRenderState = props.firstRenderState;\r\n if (firstRenderState && !hasControlBox) {\r\n return firstRenderState;\r\n }\r\n if (!this._hasFirstTarget && persistData) {\r\n var persistState = getPersistState(persistData);\r\n if (persistState) {\r\n this.updateState(persistState, false);\r\n return this.state;\r\n }\r\n }\r\n this.state.isPersisted = false;\r\n return this.state;\r\n };\r\n MoveableManager.prototype.updateSelectors = function () { };\r\n MoveableManager.prototype.unsetAbles = function () {\r\n var _this = this;\r\n this.targetAbles.forEach(function (able) {\r\n if (able.unset) {\r\n able.unset(_this);\r\n }\r\n });\r\n };\r\n MoveableManager.prototype.updateAbles = function (ables, eventAffix) {\r\n if (ables === void 0) { ables = this.props.ables; }\r\n if (eventAffix === void 0) { eventAffix = \"\"; }\r\n var props = this.props;\r\n var triggerAblesSimultaneously = props.triggerAblesSimultaneously;\r\n var enabledAbles = this.getEnabledAbles(ables);\r\n var dragStart = \"drag\".concat(eventAffix, \"Start\");\r\n var pinchStart = \"pinch\".concat(eventAffix, \"Start\");\r\n var dragControlStart = \"drag\".concat(eventAffix, \"ControlStart\");\r\n var targetAbles = filterAbles(enabledAbles, [dragStart, pinchStart], triggerAblesSimultaneously);\r\n var controlAbles = filterAbles(enabledAbles, [dragControlStart], triggerAblesSimultaneously);\r\n this.enabledAbles = enabledAbles;\r\n this.targetAbles = targetAbles;\r\n this.controlAbles = controlAbles;\r\n };\r\n MoveableManager.prototype.updateState = function (nextState, isSetState) {\r\n if (isSetState) {\r\n if (this.isUnmounted) {\r\n return;\r\n }\r\n this.setState(nextState);\r\n }\r\n else {\r\n var state = this.state;\r\n for (var name_3 in nextState) {\r\n state[name_3] = nextState[name_3];\r\n }\r\n }\r\n };\r\n MoveableManager.prototype.getEnabledAbles = function (ables) {\r\n if (ables === void 0) { ables = this.props.ables; }\r\n var props = this.props;\r\n return ables.filter(function (able) { return able && ((able.always && props[able.name] !== false)\r\n || props[able.name]); });\r\n };\r\n MoveableManager.prototype.renderAbles = function () {\r\n var _this = this;\r\n var props = this.props;\r\n var triggerAblesSimultaneously = props.triggerAblesSimultaneously;\r\n var Renderer = {\r\n createElement: createElement,\r\n };\r\n this.renderState = {};\r\n return groupByMap(flat(filterAbles(this.getEnabledAbles(), [\"render\"], triggerAblesSimultaneously).map(function (_a) {\r\n var render = _a.render;\r\n return render(_this, Renderer) || [];\r\n })).filter(function (el) { return el; }), function (_a) {\r\n var key = _a.key;\r\n return key;\r\n }).map(function (group) { return group[0]; });\r\n };\r\n MoveableManager.prototype.updateCheckInput = function () {\r\n this.targetGesto && (this.targetGesto.options.checkInput = this.props.checkInput);\r\n };\r\n MoveableManager.prototype._getRequestStyles = function () {\r\n var styleNames = this.getEnabledAbles().reduce(function (names, able) {\r\n var _a, _b;\r\n var ableStyleNames = ((_b = (_a = able.requestStyle) === null || _a === void 0 ? void 0 : _a.call(able)) !== null && _b !== void 0 ? _b : []);\r\n return __spreadArray(__spreadArray([], __read(names), false), __read(ableStyleNames), false);\r\n }, __spreadArray([], __read((this.props.requestStyles || [])), false));\r\n return styleNames;\r\n };\r\n MoveableManager.prototype._updateObserver = function (prevProps) {\r\n this._updateResizeObserver(prevProps);\r\n this._updateMutationObserver(prevProps);\r\n };\r\n MoveableManager.prototype._updateEvents = function () {\r\n var hasTargetAble = this.targetAbles.length;\r\n var hasControlAble = this.controlAbles.length;\r\n var target = this._dragTarget;\r\n var isUnset = (!hasTargetAble && this.targetGesto)\r\n || this._isTargetChanged(true);\r\n if (isUnset) {\r\n unsetGesto(this, false);\r\n this.updateState({ gestos: {} });\r\n }\r\n if (!hasControlAble) {\r\n unsetGesto(this, true);\r\n }\r\n if (target && hasTargetAble && !this.targetGesto) {\r\n this.targetGesto = getTargetAbleGesto(this, target, \"\");\r\n }\r\n if (!this.controlGesto && hasControlAble) {\r\n this.controlGesto = getControlAbleGesto(this, \"Control\");\r\n }\r\n };\r\n MoveableManager.prototype._updateTargets = function () {\r\n var props = this.props;\r\n this._prevPropTarget = this._propTarget;\r\n this._prevDragTarget = this._dragTarget;\r\n this._prevOriginalDragTarget = this._originalDragTarget;\r\n this._prevDragArea = props.dragArea;\r\n this._propTarget = props.target;\r\n this._originalDragTarget = props.dragTarget || props.target;\r\n this._dragTarget = getRefTarget(this._originalDragTarget, true);\r\n };\r\n MoveableManager.prototype._renderLines = function () {\r\n var props = this.props;\r\n var _a = props, zoom = _a.zoom, hideDefaultLines = _a.hideDefaultLines, hideChildMoveableDefaultLines = _a.hideChildMoveableDefaultLines, parentMoveable = _a.parentMoveable;\r\n if (hideDefaultLines || (parentMoveable && hideChildMoveableDefaultLines)) {\r\n return [];\r\n }\r\n var state = this.getState();\r\n var Renderer = {\r\n createElement: createElement,\r\n };\r\n return state.renderLines.map(function (line, i) {\r\n return renderLine(Renderer, \"\", line[0], line[1], zoom, \"render-line-\".concat(i));\r\n });\r\n };\r\n MoveableManager.prototype._isTargetChanged = function (useDragArea) {\r\n var props = this.props;\r\n var nextTarget = props.dragTarget || props.target;\r\n var prevTarget = this._prevOriginalDragTarget;\r\n var prevDragArea = this._prevDragArea;\r\n var dragArea = props.dragArea;\r\n // check target without dragArea\r\n var isDragTargetChanged = !dragArea && prevTarget !== nextTarget;\r\n var isDragAreaChanged = (useDragArea || dragArea) && prevDragArea !== dragArea;\r\n return isDragTargetChanged || isDragAreaChanged || this._prevPropTarget != this._propTarget;\r\n };\r\n MoveableManager.prototype._updateNativeEvents = function () {\r\n var _this = this;\r\n var props = this.props;\r\n var target = props.dragArea ? this.areaElement : this.state.target;\r\n var events = this.events;\r\n var eventKeys = getKeys(events);\r\n if (this._isTargetChanged()) {\r\n for (var eventName in events) {\r\n var manager = events[eventName];\r\n manager && manager.destroy();\r\n events[eventName] = null;\r\n }\r\n }\r\n if (!target) {\r\n return;\r\n }\r\n var enabledAbles = this.enabledAbles;\r\n eventKeys.forEach(function (eventName) {\r\n var ables = filterAbles(enabledAbles, [eventName]);\r\n var hasAbles = ables.length > 0;\r\n var manager = events[eventName];\r\n if (!hasAbles) {\r\n if (manager) {\r\n manager.destroy();\r\n events[eventName] = null;\r\n }\r\n return;\r\n }\r\n if (!manager) {\r\n manager = new EventManager(target, _this, eventName);\r\n events[eventName] = manager;\r\n }\r\n manager.setAbles(ables);\r\n });\r\n };\r\n MoveableManager.prototype._checkUpdateRootContainer = function () {\r\n var rootContainer = this.props.rootContainer;\r\n if (!this._rootContainer && rootContainer) {\r\n this._rootContainer = getRefTarget(rootContainer, true);\r\n }\r\n };\r\n MoveableManager.prototype._checkUpdateViewContainer = function () {\r\n var viewContainerOption = this.props.viewContainer;\r\n if (!this._viewContainer && viewContainerOption) {\r\n this._viewContainer = getRefTarget(viewContainerOption, true);\r\n }\r\n var viewContainer = this._viewContainer;\r\n if (viewContainer) {\r\n this._changeAbleViewClassNames(__spreadArray(__spreadArray([], __read(this._getAbleViewClassNames()), false), [\r\n this.isDragging() ? VIEW_DRAGGING : \"\",\r\n ], false));\r\n }\r\n };\r\n MoveableManager.prototype._changeAbleViewClassNames = function (classNames) {\r\n var viewContainer = this._viewContainer;\r\n var nextClassNames = groupBy(classNames.filter(Boolean), function (el) { return el; }).map(function (_a) {\r\n var _b = __read(_a, 1), className = _b[0];\r\n return className;\r\n });\r\n var prevClassNames = this._viewClassNames;\r\n var _a = diff$1(prevClassNames, nextClassNames), removed = _a.removed, added = _a.added;\r\n removed.forEach(function (index) {\r\n removeClass(viewContainer, prevClassNames[index]);\r\n });\r\n added.forEach(function (index) {\r\n addClass(viewContainer, nextClassNames[index]);\r\n });\r\n this._viewClassNames = nextClassNames;\r\n };\r\n MoveableManager.prototype._getAbleViewClassNames = function () {\r\n var _this = this;\r\n return (this.getEnabledAbles().map(function (able) {\r\n var _a;\r\n return (((_a = able.viewClassName) === null || _a === void 0 ? void 0 : _a.call(able, _this)) || \"\");\r\n }).join(\" \") + \" \".concat(this._getAbleClassName(\"-view\"))).split(/\\s+/g);\r\n };\r\n MoveableManager.prototype._getAbleClassName = function (classPrefix) {\r\n var _this = this;\r\n if (classPrefix === void 0) { classPrefix = \"\"; }\r\n var ables = this.getEnabledAbles();\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n var targetGestoData = (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag())\r\n ? targetGesto.getEventData() : {};\r\n var controlGestoData = (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag())\r\n ? controlGesto.getEventData() : {};\r\n return ables.map(function (able) {\r\n var _a, _b, _c;\r\n var name = able.name;\r\n var className = ((_a = able.className) === null || _a === void 0 ? void 0 : _a.call(able, _this)) || \"\";\r\n if (((_b = targetGestoData[name]) === null || _b === void 0 ? void 0 : _b.isEventStart)\r\n || ((_c = controlGestoData[name]) === null || _c === void 0 ? void 0 : _c.isEventStart)) {\r\n className += \" \".concat(prefix(\"\".concat(name).concat(classPrefix, \"-dragging\")));\r\n }\r\n return className.trim();\r\n }).filter(Boolean).join(\" \");\r\n };\r\n MoveableManager.prototype._updateResizeObserver = function (prevProps) {\r\n var _a;\r\n var props = this.props;\r\n var target = props.target;\r\n var win = getWindow(this.getControlBoxElement());\r\n if (!win.ResizeObserver || !target || !props.useResizeObserver) {\r\n (_a = this._reiszeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n return;\r\n }\r\n if (prevProps.target === target && this._reiszeObserver) {\r\n return;\r\n }\r\n var observer = new win.ResizeObserver(this.checkUpdateRect);\r\n observer.observe(target, {\r\n box: \"border-box\",\r\n });\r\n this._reiszeObserver = observer;\r\n };\r\n MoveableManager.prototype._updateMutationObserver = function (prevProps) {\r\n var _this = this;\r\n var _a;\r\n var props = this.props;\r\n var target = props.target;\r\n var win = getWindow(this.getControlBoxElement());\r\n if (!win.MutationObserver || !target || !props.useMutationObserver) {\r\n (_a = this._mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n return;\r\n }\r\n if (prevProps.target === target && this._mutationObserver) {\r\n return;\r\n }\r\n var observer = new win.MutationObserver(function (records) {\r\n var e_1, _a;\r\n try {\r\n for (var records_1 = __values(records), records_1_1 = records_1.next(); !records_1_1.done; records_1_1 = records_1.next()) {\r\n var mutation = records_1_1.value;\r\n if (mutation.type === \"attributes\" && mutation.attributeName === \"style\") {\r\n _this.checkUpdateRect();\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (records_1_1 && !records_1_1.done && (_a = records_1.return)) _a.call(records_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n });\r\n observer.observe(target, {\r\n attributes: true,\r\n });\r\n this._mutationObserver = observer;\r\n };\r\n MoveableManager.defaultProps = {\r\n dragTargetSelf: false,\r\n target: null,\r\n dragTarget: null,\r\n container: null,\r\n rootContainer: null,\r\n origin: true,\r\n parentMoveable: null,\r\n wrapperMoveable: null,\r\n isWrapperMounted: false,\r\n parentPosition: null,\r\n warpSelf: false,\r\n svgOrigin: \"\",\r\n dragContainer: null,\r\n useResizeObserver: false,\r\n useMutationObserver: false,\r\n preventDefault: true,\r\n preventRightClick: true,\r\n preventWheelClick: true,\r\n linePadding: 0,\r\n controlPadding: 0,\r\n ables: [],\r\n pinchThreshold: 20,\r\n dragArea: false,\r\n passDragArea: false,\r\n transformOrigin: \"\",\r\n className: \"\",\r\n zoom: 1,\r\n triggerAblesSimultaneously: false,\r\n padding: {},\r\n pinchOutside: true,\r\n checkInput: false,\r\n dragFocusedInput: false,\r\n groupable: false,\r\n hideDefaultLines: false,\r\n cspNonce: \"\",\r\n translateZ: 0,\r\n cssStyled: null,\r\n customStyledMap: {},\r\n props: {},\r\n stopPropagation: false,\r\n preventClickDefault: false,\r\n preventClickEventOnDrag: true,\r\n flushSync: defaultSync,\r\n firstRenderState: null,\r\n persistData: null,\r\n viewContainer: null,\r\n requestStyles: [],\r\n useAccuratePosition: false,\r\n };\r\n return MoveableManager;\r\n}(React.PureComponent));\r\n/**\r\n * The target to indicate Moveable Control Box.\r\n * @name Moveable#target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.target = document.querySelector(\".target\");\r\n */\r\n/**\r\n * Zooms in the elements of a moveable.\r\n * @name Moveable#zoom\r\n * @default 1\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.zoom = 2;\r\n */\r\n/**\r\n * Whether the target size is detected and updated whenever it changes.\r\n * @name Moveable#useResizeObserver\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.useResizeObserver = true;\r\n */\r\n/**\r\n * Resize, Scale Events at edges\r\n * @name Moveable#edge\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.edge = true;\r\n */\r\n/**\r\n * You can specify the className of the moveable controlbox.\r\n * @name Moveable#className\r\n * @default \"\"\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * className: \"\",\r\n * });\r\n *\r\n * moveable.className = \"moveable1\";\r\n */\r\n/**\r\n * The target(s) to drag Moveable target(s)\r\n * @name Moveable#dragTarget\r\n * @default target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.target = document.querySelector(\".target\");\r\n * moveable.dragTarget = document.querySelector(\".dragTarget\");\r\n */\r\n/**\r\n * `renderStart` event occurs at the first start of all events.\r\n * @memberof Moveable\r\n * @event renderStart\r\n * @param {Moveable.OnRenderStart} - Parameters for the `renderStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"renderStart\", ({ target }) => {\r\n * console.log(\"onRenderStart\", target);\r\n * });\r\n */\r\n/**\r\n * `render` event occurs before the target is drawn on the screen.\r\n * @memberof Moveable\r\n * @event render\r\n * @param {Moveable.OnRender} - Parameters for the `render` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"render\", ({ target }) => {\r\n * console.log(\"onRender\", target);\r\n * });\r\n */\r\n/**\r\n * `renderEnd` event occurs at the end of all events.\r\n * @memberof Moveable\r\n * @event renderEnd\r\n * @param {Moveable.OnRenderEnd} - Parameters for the `renderEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"renderEnd\", ({ target }) => {\r\n * console.log(\"onRenderEnd\", target);\r\n * });\r\n */\r\n/**\r\n * `renderGroupStart` event occurs at the first start of all events in group.\r\n * @memberof Moveable\r\n * @event renderGroupStart\r\n * @param {Moveable.OnRenderGroupStart} - Parameters for the `renderGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroupStart\", ({ targets }) => {\r\n * console.log(\"onRenderGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n * `renderGroup` event occurs before the target is drawn on the screen in group.\r\n * @memberof Moveable\r\n * @event renderGroup\r\n * @param {Moveable.OnRenderGroup} - Parameters for the `renderGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroup\", ({ targets }) => {\r\n * console.log(\"onRenderGroup\", targets);\r\n * });\r\n */\r\n/**\r\n * `renderGroupEnd` event occurs at the end of all events in group.\r\n * @memberof Moveable\r\n * @event renderGroupEnd\r\n * @param {Moveable.OnRenderGroupEnd} - Parameters for the `renderGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroupEnd\", ({ targets }) => {\r\n * console.log(\"onRenderGroupEnd\", targets);\r\n * });\r\n */\n\nvar Groupable = {\r\n name: \"groupable\",\r\n props: [\r\n \"defaultGroupRotate\",\r\n \"useDefaultGroupRotate\",\r\n \"defaultGroupOrigin\",\r\n \"groupable\",\r\n \"groupableProps\",\r\n \"targetGroups\",\r\n \"hideChildMoveableDefaultLines\",\r\n ],\r\n events: [],\r\n render: function (moveable, React) {\r\n var _a;\r\n var props = moveable.props;\r\n var targets = props.targets || [];\r\n var _b = moveable.getState(), left = _b.left, top = _b.top, isPersisted = _b.isPersisted;\r\n var zoom = props.zoom || 1;\r\n var renderGroupRects = moveable.renderGroupRects;\r\n var persistDatChildren = ((_a = props.persistData) === null || _a === void 0 ? void 0 : _a.children) || [];\r\n if (isPersisted) {\r\n targets = persistDatChildren.map(function () { return null; });\r\n }\r\n else {\r\n persistDatChildren = [];\r\n }\r\n var parentPosition = watchValue(moveable, \"parentPosition\", [left, top], function (styles) { return styles.join(\",\"); });\r\n var requestStyles = watchValue(moveable, \"requestStyles\", moveable.getRequestChildStyles(), function (styles) { return styles.join(\",\"); });\r\n moveable.moveables = moveable.moveables.slice(0, targets.length);\r\n return __spreadArray(__spreadArray([], __read(targets.map(function (target, i) {\r\n return React.createElement(MoveableManager, { key: \"moveable\" + i, ref: refs(moveable, \"moveables\", i), target: target, origin: false, requestStyles: requestStyles, cssStyled: props.cssStyled, customStyledMap: props.customStyledMap, useResizeObserver: props.useResizeObserver, useMutationObserver: props.useMutationObserver, hideChildMoveableDefaultLines: props.hideChildMoveableDefaultLines, parentMoveable: moveable, parentPosition: [left, top], persistData: persistDatChildren[i], zoom: zoom });\r\n })), false), __read(flat(renderGroupRects.map(function (_a, i) {\r\n var pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n return [\r\n [0, 1],\r\n [1, 3],\r\n [3, 2],\r\n [2, 0],\r\n ].map(function (_a, j) {\r\n var _b = __read(_a, 2), from = _b[0], to = _b[1];\r\n return renderLine(React, \"\", minus(poses[from], parentPosition), minus(poses[to], parentPosition), zoom, \"group-rect-\".concat(i, \"-\").concat(j));\r\n });\r\n }))), false);\r\n },\r\n};\n\nvar Clickable = makeAble(\"clickable\", {\r\n props: [\r\n \"clickable\",\r\n ],\r\n events: [\r\n \"click\",\r\n \"clickGroup\",\r\n ],\r\n always: true,\r\n dragRelation: \"weak\",\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n dragStart: function () {\r\n return;\r\n },\r\n dragControlStart: function () {\r\n return;\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n e.datas.inputTarget = e.inputEvent && e.inputEvent.target;\r\n },\r\n dragEnd: function (moveable, e) {\r\n var target = moveable.props.target;\r\n var inputEvent = e.inputEvent;\r\n var inputTarget = e.inputTarget;\r\n var isMoveableElement = moveable.isMoveableElement(inputTarget);\r\n var containsElement = !isMoveableElement && moveable.controlBox.contains(inputTarget);\r\n if (!inputEvent || !inputTarget || e.isDrag\r\n || moveable.isMoveableElement(inputTarget)\r\n || containsElement\r\n // External event duplicate target or dragAreaElement\r\n ) {\r\n return;\r\n }\r\n var containsTarget = target.contains(inputTarget);\r\n triggerEvent(moveable, \"onClick\", fillParams(moveable, e, {\r\n isDouble: e.isDouble,\r\n inputTarget: inputTarget,\r\n isTarget: target === inputTarget,\r\n moveableTarget: moveable.props.target,\r\n containsTarget: containsTarget,\r\n }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var inputEvent = e.inputEvent;\r\n var inputTarget = e.inputTarget;\r\n if (!inputEvent || !inputTarget || e.isDrag\r\n || moveable.isMoveableElement(inputTarget)\r\n // External event duplicate target or dragAreaElement\r\n || e.datas.inputTarget === inputTarget) {\r\n return;\r\n }\r\n var targets = moveable.props.targets;\r\n var targetIndex = targets.indexOf(inputTarget);\r\n var isTarget = targetIndex > -1;\r\n var containsTarget = false;\r\n if (targetIndex === -1) {\r\n targetIndex = findIndex(targets, function (parentTarget) { return parentTarget.contains(inputTarget); });\r\n containsTarget = targetIndex > -1;\r\n }\r\n triggerEvent(moveable, \"onClickGroup\", fillParams(moveable, e, {\r\n isDouble: e.isDouble,\r\n targets: targets,\r\n inputTarget: inputTarget,\r\n targetIndex: targetIndex,\r\n isTarget: isTarget,\r\n containsTarget: containsTarget,\r\n moveableTarget: targets[targetIndex],\r\n }));\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n },\r\n});\r\n/**\r\n * When you click on the element, the `click` event is called.\r\n * @memberof Moveable\r\n * @event click\r\n * @param {Moveable.OnClick} - Parameters for the `click` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"click\", ({ hasTarget, containsTarget, targetIndex }) => {\r\n * // If you click on an element other than the target and not included in the target, index is -1.\r\n * console.log(\"onClickGroup\", target, hasTarget, containsTarget, targetIndex);\r\n * });\r\n */\r\n/**\r\n * When you click on the element inside the group, the `clickGroup` event is called.\r\n * @memberof Moveable\r\n * @event clickGroup\r\n * @param {Moveable.OnClickGroup} - Parameters for the `clickGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"clickGroup\", ({ inputTarget, isTarget, containsTarget, targetIndex }) => {\r\n * // If you click on an element other than the target and not included in the target, index is -1.\r\n * console.log(\"onClickGroup\", inputTarget, isTarget, containsTarget, targetIndex);\r\n * });\r\n */\n\nfunction getDraggableEvent(e) {\r\n var datas = e.originalDatas.draggable;\r\n if (!datas) {\r\n e.originalDatas.draggable = {};\r\n datas = e.originalDatas.draggable;\r\n }\r\n return __assign(__assign({}, e), { datas: datas });\r\n}\r\nvar edgeDraggable = makeAble(\"edgeDraggable\", {\r\n css: [\r\n \".edge.edgeDraggable.line {\\ncursor: move;\\n}\",\r\n ],\r\n render: function (moveable, React) {\r\n var props = moveable.props;\r\n var edge = props.edgeDraggable;\r\n if (!edge) {\r\n return [];\r\n }\r\n return renderEdgeLines(React, \"edgeDraggable\", edge, moveable.getState().renderPoses, props.zoom);\r\n },\r\n dragCondition: function (moveable, e) {\r\n var _a;\r\n var props = moveable.props;\r\n var target = (_a = e.inputEvent) === null || _a === void 0 ? void 0 : _a.target;\r\n if (!props.edgeDraggable || !target) {\r\n return false;\r\n }\r\n return !props.draggable\r\n && hasClass(target, prefix(\"direction\"))\r\n && hasClass(target, prefix(\"edge\"))\r\n && hasClass(target, prefix(\"edgeDraggable\"));\r\n },\r\n dragStart: function (moveable, e) {\r\n return Draggable.dragStart(moveable, getDraggableEvent(e));\r\n },\r\n drag: function (moveable, e) {\r\n return Draggable.drag(moveable, getDraggableEvent(e));\r\n },\r\n dragEnd: function (moveable, e) {\r\n return Draggable.dragEnd(moveable, getDraggableEvent(e));\r\n },\r\n dragGroupCondition: function (moveable, e) {\r\n var _a;\r\n var props = moveable.props;\r\n var target = (_a = e.inputEvent) === null || _a === void 0 ? void 0 : _a.target;\r\n if (!props.edgeDraggable || !target) {\r\n return false;\r\n }\r\n return !props.draggable && hasClass(target, prefix(\"direction\")) && hasClass(target, prefix(\"line\"));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return Draggable.dragGroupStart(moveable, getDraggableEvent(e));\r\n },\r\n dragGroup: function (moveable, e) {\r\n return Draggable.dragGroup(moveable, getDraggableEvent(e));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return Draggable.dragGroupEnd(moveable, getDraggableEvent(e));\r\n },\r\n unset: function (moveable) {\r\n return Draggable.unset(moveable);\r\n },\r\n});\r\n/**\r\n * Whether to move by dragging the edge line (default: false)\r\n * @name Moveable.Draggable#edgeDraggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * draggable: true,\r\n * edgeDraggable: false,\r\n * });\r\n *\r\n * moveable.edgeDraggable = true;\r\n */\n\nvar IndividualGroupable = {\r\n name: \"individualGroupable\",\r\n props: [\r\n \"individualGroupable\",\r\n \"individualGroupableProps\",\r\n ],\r\n events: [],\r\n};\n\nvar MOVEABLE_ABLES = [\r\n BeforeRenderable,\r\n Default, Snappable, Pinchable,\r\n Draggable, edgeDraggable,\r\n Resizable, Scalable, Warpable, Rotatable,\r\n Scrollable, Padding, Origin,\r\n OriginDraggable,\r\n Clippable, Roundable, Groupable, IndividualGroupable,\r\n Clickable,\r\n DragArea,\r\n Renderable,\r\n];\r\nvar MOVEABLE_EVENTS = /*#__PURE__*/ MOVEABLE_ABLES.reduce(function (current, able) {\r\n (able.events || []).forEach(function (name) {\r\n pushSet(current, name);\r\n });\r\n return current;\r\n}, []);\r\nvar MOVEABLE_PROPS = /*#__PURE__*/ MOVEABLE_ABLES.reduce(function (current, able) {\r\n (able.props || []).forEach(function (name) {\r\n pushSet(current, name);\r\n });\r\n return current;\r\n}, []);\n\nfunction solveConstantsDistance(_a, pos) {\r\n var _b = __read(_a, 3), a = _b[0], b = _b[1], c = _b[2];\r\n return (a * pos[0] + b * pos[1] + c) / Math.sqrt(a * a + b * b);\r\n}\r\nfunction solveC(_a, pos) {\r\n var _b = __read(_a, 2), a = _b[0], b = _b[1];\r\n // ax + by + c = 0\r\n // -ax -by;\r\n return -a * pos[0] - b * pos[1];\r\n}\n\nfunction getMaxPos(poses, index) {\r\n return Math.max.apply(Math, __spreadArray([], __read(poses.map(function (_a) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n return Math.max(pos1[index], pos2[index], pos3[index], pos4[index]);\r\n })), false));\r\n}\r\nfunction getMinPos(poses, index) {\r\n return Math.min.apply(Math, __spreadArray([], __read(poses.map(function (_a) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n return Math.min(pos1[index], pos2[index], pos3[index], pos4[index]);\r\n })), false));\r\n}\r\nfunction getGroupRect(parentPoses, rotation) {\r\n var _a, _b, _c;\r\n var pos1 = [0, 0];\r\n var pos2 = [0, 0];\r\n var pos3 = [0, 0];\r\n var pos4 = [0, 0];\r\n var width = 0;\r\n var height = 0;\r\n if (!parentPoses.length) {\r\n return {\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n minX: 0,\r\n minY: 0,\r\n maxX: 0,\r\n maxY: 0,\r\n width: width,\r\n height: height,\r\n rotation: rotation,\r\n };\r\n }\r\n var fixedRotation = throttle(rotation, TINY_NUM);\r\n if (fixedRotation % 90) {\r\n var rad = fixedRotation / 180 * Math.PI;\r\n var a1_1 = Math.tan(rad);\r\n var a2_1 = -1 / a1_1;\r\n // ax = y // -ax + y = 0 // 0 => 1\r\n // -ax = y // ax + y = 0 // 0 => 3\r\n var a1MinMax_1 = [MAX_NUM, MIN_NUM];\r\n var a1MinMaxPos_1 = [[0, 0], [0, 0]];\r\n var a2MinMax_1 = [MAX_NUM, MIN_NUM];\r\n var a2MinMaxPos_1 = [[0, 0], [0, 0]];\r\n parentPoses.forEach(function (poses) {\r\n poses.forEach(function (pos) {\r\n // const b1 = pos[1] - a1 * pos[0];\r\n // const b2 = pos[1] - a2 * pos[0];\r\n var a1Dist = solveConstantsDistance([-a1_1, 1, 0], pos);\r\n var a2Dist = solveConstantsDistance([-a2_1, 1, 0], pos);\r\n if (a1MinMax_1[0] > a1Dist) {\r\n a1MinMaxPos_1[0] = pos;\r\n a1MinMax_1[0] = a1Dist;\r\n }\r\n if (a1MinMax_1[1] < a1Dist) {\r\n a1MinMaxPos_1[1] = pos;\r\n a1MinMax_1[1] = a1Dist;\r\n }\r\n if (a2MinMax_1[0] > a2Dist) {\r\n a2MinMaxPos_1[0] = pos;\r\n a2MinMax_1[0] = a2Dist;\r\n }\r\n if (a2MinMax_1[1] < a2Dist) {\r\n a2MinMaxPos_1[1] = pos;\r\n a2MinMax_1[1] = a2Dist;\r\n }\r\n });\r\n });\r\n var _d = __read(a1MinMaxPos_1, 2), a1MinPos = _d[0], a1MaxPos = _d[1];\r\n var _e = __read(a2MinMaxPos_1, 2), a2MinPos = _e[0], a2MaxPos = _e[1];\r\n var minHorizontalLine = [-a1_1, 1, solveC([-a1_1, 1], a1MinPos)];\r\n var maxHorizontalLine = [-a1_1, 1, solveC([-a1_1, 1], a1MaxPos)];\r\n var minVerticalLine = [-a2_1, 1, solveC([-a2_1, 1], a2MinPos)];\r\n var maxVerticalLine = [-a2_1, 1, solveC([-a2_1, 1], a2MaxPos)];\r\n _a = __read([\r\n [minHorizontalLine, minVerticalLine],\r\n [minHorizontalLine, maxVerticalLine],\r\n [maxHorizontalLine, minVerticalLine],\r\n [maxHorizontalLine, maxVerticalLine],\r\n ].map(function (_a) {\r\n var _b = __read(_a, 2), line1 = _b[0], line2 = _b[1];\r\n return getIntersectionPointsByConstants(line1, line2)[0];\r\n }), 4), pos1 = _a[0], pos2 = _a[1], pos3 = _a[2], pos4 = _a[3];\r\n width = a2MinMax_1[1] - a2MinMax_1[0];\r\n height = a1MinMax_1[1] - a1MinMax_1[0];\r\n }\r\n else {\r\n var minX_1 = getMinPos(parentPoses, 0);\r\n var minY_1 = getMinPos(parentPoses, 1);\r\n var maxX_1 = getMaxPos(parentPoses, 0);\r\n var maxY_1 = getMaxPos(parentPoses, 1);\r\n pos1 = [minX_1, minY_1];\r\n pos2 = [maxX_1, minY_1];\r\n pos3 = [minX_1, maxY_1];\r\n pos4 = [maxX_1, maxY_1];\r\n width = maxX_1 - minX_1;\r\n height = maxY_1 - minY_1;\r\n if (fixedRotation % 180) {\r\n // 0\r\n // 1 2\r\n // 3 4\r\n // 90\r\n // 3 1\r\n // 4 2\r\n // 180\r\n // 4 3\r\n // 2 1\r\n // 270\r\n // 2 4\r\n // 1 3\r\n // 1, 2, 3,4 = 3 1 4 2\r\n var changedX = [pos3, pos1, pos4, pos2];\r\n _b = __read(changedX, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n width = maxY_1 - minY_1;\r\n height = maxX_1 - minX_1;\r\n }\r\n }\r\n if (fixedRotation % 360 > 180) {\r\n // 1 2 4 3\r\n // 3 4 2 1\r\n var changedX = [pos4, pos3, pos2, pos1];\r\n _c = __read(changedX, 4), pos1 = _c[0], pos2 = _c[1], pos3 = _c[2], pos4 = _c[3];\r\n }\r\n var _f = getMinMaxs([pos1, pos2, pos3, pos4]), minX = _f.minX, minY = _f.minY, maxX = _f.maxX, maxY = _f.maxY;\r\n return {\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n width: width,\r\n height: height,\r\n minX: minX,\r\n minY: minY,\r\n maxX: maxX,\r\n maxY: maxY,\r\n rotation: rotation,\r\n };\r\n}\r\nfunction findMoveableGroups(moveables, childTargetGroups) {\r\n var groups = childTargetGroups.map(function (targetGroup) {\r\n if (isArray(targetGroup)) {\r\n var childMoveableGroups = findMoveableGroups(moveables, targetGroup);\r\n var length_1 = childMoveableGroups.length;\r\n if (length_1 > 1) {\r\n return childMoveableGroups;\r\n }\r\n else if (length_1 === 1) {\r\n return childMoveableGroups[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n var checked = find(moveables, function (_a) {\r\n var manager = _a.manager;\r\n return manager.props.target === targetGroup;\r\n });\r\n if (checked) {\r\n checked.finded = true;\r\n return checked.manager;\r\n }\r\n return null;\r\n }\r\n }).filter(Boolean);\r\n if (groups.length === 1 && isArray(groups[0])) {\r\n return groups[0];\r\n }\r\n return groups;\r\n}\r\n/**\r\n * @namespace Moveable.Group\r\n * @description You can make targets moveable.\r\n */\r\nvar MoveableGroup = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableGroup, _super);\r\n function MoveableGroup() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.differ = new ChildrenDiffer();\r\n _this.moveables = [];\r\n _this.transformOrigin = \"50% 50%\";\r\n _this.renderGroupRects = [];\r\n _this._targetGroups = [];\r\n _this._hasFirstTargets = false;\r\n return _this;\r\n }\r\n MoveableGroup.prototype.componentDidMount = function () {\r\n _super.prototype.componentDidMount.call(this);\r\n };\r\n MoveableGroup.prototype.checkUpdate = function () {\r\n this._isPropTargetChanged = false;\r\n this.updateAbles();\r\n };\r\n MoveableGroup.prototype.getTargets = function () {\r\n return this.props.targets;\r\n };\r\n MoveableGroup.prototype.updateRect = function (type, isTarget, isSetState) {\r\n var _a;\r\n if (isSetState === void 0) { isSetState = true; }\r\n var state = this.state;\r\n if (!this.controlBox || state.isPersisted) {\r\n return;\r\n }\r\n setStoreCache(true);\r\n this.moveables.forEach(function (moveable) {\r\n moveable.updateRect(type, false, false);\r\n });\r\n var props = this.props;\r\n var moveables = this.moveables;\r\n var target = state.target || props.target;\r\n var checkeds = moveables.map(function (moveable) { return ({ finded: false, manager: moveable }); });\r\n var targetGroups = this.props.targetGroups || [];\r\n var moveableGroups = findMoveableGroups(checkeds, targetGroups);\r\n var useDefaultGroupRotate = props.useDefaultGroupRotate;\r\n moveableGroups.push.apply(moveableGroups, __spreadArray([], __read(checkeds.filter(function (_a) {\r\n var finded = _a.finded;\r\n return !finded;\r\n }).map(function (_a) {\r\n var manager = _a.manager;\r\n return manager;\r\n })), false));\r\n var renderGroupRects = [];\r\n var isReset = !isTarget || (type !== \"\" && props.updateGroup);\r\n var defaultGroupRotate = props.defaultGroupRotate || 0;\r\n if (!this._hasFirstTargets) {\r\n var persistedRoatation = (_a = props.persistData) === null || _a === void 0 ? void 0 : _a.rotation;\r\n if (persistedRoatation != null) {\r\n defaultGroupRotate = persistedRoatation;\r\n }\r\n }\r\n function getMoveableGroupRect(group, parentRotation, isRoot) {\r\n var posesRotations = group.map(function (moveable) {\r\n if (isArray(moveable)) {\r\n var rect = getMoveableGroupRect(moveable, parentRotation);\r\n var poses = [rect.pos1, rect.pos2, rect.pos3, rect.pos4];\r\n renderGroupRects.push(rect);\r\n return { poses: poses, rotation: rect.rotation };\r\n }\r\n else {\r\n return {\r\n poses: getAbsolutePosesByState(moveable.state),\r\n rotation: moveable.getRotation(),\r\n };\r\n }\r\n });\r\n var rotations = posesRotations.map(function (_a) {\r\n var rotation = _a.rotation;\r\n return rotation;\r\n });\r\n var groupRotation = 0;\r\n var firstRotation = rotations[0];\r\n var isSameRotation = rotations.every(function (nextRotation) {\r\n return Math.abs(firstRotation - nextRotation) < 0.1;\r\n });\r\n if (isReset) {\r\n groupRotation = !useDefaultGroupRotate && isSameRotation ? firstRotation : defaultGroupRotate;\r\n }\r\n else {\r\n groupRotation = !useDefaultGroupRotate && !isRoot && isSameRotation ? firstRotation : parentRotation;\r\n }\r\n var groupPoses = posesRotations.map(function (_a) {\r\n var poses = _a.poses;\r\n return poses;\r\n });\r\n var groupRect = getGroupRect(groupPoses, groupRotation);\r\n return groupRect;\r\n }\r\n var rootGroupRect = getMoveableGroupRect(moveableGroups, this.rotation, true);\r\n if (isReset) {\r\n // reset rotataion\r\n this.rotation = rootGroupRect.rotation;\r\n this.transformOrigin = props.defaultGroupOrigin || \"50% 50%\";\r\n this.scale = [1, 1];\r\n }\r\n this._targetGroups = targetGroups;\r\n this.renderGroupRects = renderGroupRects;\r\n var transformOrigin = this.transformOrigin;\r\n var rotation = this.rotation;\r\n var scale = this.scale;\r\n var width = rootGroupRect.width, height = rootGroupRect.height, minX = rootGroupRect.minX, minY = rootGroupRect.minY;\r\n var posesInfo = rotatePosesInfo([\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ], convertTransformOriginArray(transformOrigin, width, height), this.rotation / 180 * Math.PI);\r\n var _b = getMinMaxs(posesInfo.result), deltaX = _b.minX, deltaY = _b.minY;\r\n var rotateScale = \" rotate(\".concat(rotation, \"deg)\")\r\n + \" scale(\".concat(sign(scale[0]), \", \").concat(sign(scale[1]), \")\");\r\n var transform = \"translate(\".concat(-deltaX, \"px, \").concat(-deltaY, \"px)\").concat(rotateScale);\r\n this.controlBox.style.transform\r\n = \"translate3d(\".concat(minX, \"px, \").concat(minY, \"px, \").concat(this.props.translateZ || 0, \")\");\r\n target.style.cssText += \"left:0px;top:0px;\"\r\n + \"transform-origin:\".concat(transformOrigin, \";\")\r\n + \"width:\".concat(width, \"px;height:\").concat(height, \"px;\")\r\n + \"transform: \".concat(transform);\r\n state.width = width;\r\n state.height = height;\r\n var container = this.getContainer();\r\n var info = getMoveableTargetInfo(this.controlBox, target, this.controlBox, this.getContainer(), this._rootContainer || container, []);\r\n var pos = [info.left, info.top];\r\n var _c = __read(getAbsolutePosesByState(info), 4), pos1 = _c[0], pos2 = _c[1], pos3 = _c[2], pos4 = _c[3]; // info.left + info.pos(1 ~ 4)\r\n var minPos = getMinMaxs([pos1, pos2, pos3, pos4]);\r\n var delta = [minPos.minX, minPos.minY];\r\n var direction = sign(scale[0] * scale[1]);\r\n info.pos1 = minus(pos1, delta);\r\n info.pos2 = minus(pos2, delta);\r\n info.pos3 = minus(pos3, delta);\r\n info.pos4 = minus(pos4, delta);\r\n // info.left = info.left + delta[0];\r\n // info.top = info.top + delta[1];\r\n info.left = minX - info.left + delta[0];\r\n info.top = minY - info.top + delta[1];\r\n info.origin = minus(plus(pos, info.origin), delta);\r\n info.beforeOrigin = minus(plus(pos, info.beforeOrigin), delta);\r\n info.originalBeforeOrigin = plus(pos, info.originalBeforeOrigin);\r\n info.transformOrigin = minus(plus(pos, info.transformOrigin), delta);\r\n target.style.transform\r\n = \"translate(\".concat(-deltaX - delta[0], \"px, \").concat(-deltaY - delta[1], \"px)\")\r\n + rotateScale;\r\n setStoreCache();\r\n this.updateState(__assign(__assign({}, info), { posDelta: delta, direction: direction, beforeDirection: direction }), isSetState);\r\n };\r\n MoveableGroup.prototype.getRect = function () {\r\n return __assign(__assign({}, _super.prototype.getRect.call(this)), { children: this.moveables.map(function (child) { return child.getRect(); }) });\r\n };\r\n MoveableGroup.prototype.triggerEvent = function (name, e, isManager) {\r\n if (isManager || name.indexOf(\"Group\") > -1) {\r\n return _super.prototype.triggerEvent.call(this, name, e);\r\n }\r\n else {\r\n this._emitter.trigger(name, e);\r\n }\r\n };\r\n MoveableGroup.prototype.getRequestChildStyles = function () {\r\n var styleNames = this.getEnabledAbles().reduce(function (names, able) {\r\n var _a, _b;\r\n var ableStyleNames = ((_b = (_a = able.requestChildStyle) === null || _a === void 0 ? void 0 : _a.call(able)) !== null && _b !== void 0 ? _b : []);\r\n return __spreadArray(__spreadArray([], __read(names), false), __read(ableStyleNames), false);\r\n }, []);\r\n return styleNames;\r\n };\r\n MoveableGroup.prototype.getMoveables = function () {\r\n return __spreadArray([], __read(this.moveables), false);\r\n };\r\n MoveableGroup.prototype.updateAbles = function () {\r\n _super.prototype.updateAbles.call(this, __spreadArray(__spreadArray([], __read(this.props.ables), false), [Groupable], false), \"Group\");\r\n };\r\n MoveableGroup.prototype._updateTargets = function () {\r\n _super.prototype._updateTargets.call(this);\r\n this._originalDragTarget = this.props.dragTarget || this.areaElement;\r\n this._dragTarget = getRefTarget(this._originalDragTarget, true);\r\n };\r\n MoveableGroup.prototype._updateEvents = function () {\r\n var state = this.state;\r\n var props = this.props;\r\n var prevTarget = this._prevDragTarget;\r\n var nextTarget = props.dragTarget || this.areaElement;\r\n var targets = props.targets;\r\n var _a = this.differ.update(targets), added = _a.added, changed = _a.changed, removed = _a.removed;\r\n var isTargetChanged = added.length || removed.length;\r\n if (isTargetChanged || this._prevOriginalDragTarget !== this._originalDragTarget) {\r\n unsetGesto(this, false);\r\n unsetGesto(this, true);\r\n this.updateState({ gestos: {} });\r\n }\r\n if (prevTarget !== nextTarget) {\r\n state.target = null;\r\n }\r\n if (!state.target) {\r\n state.target = this.areaElement;\r\n this.controlBox.style.display = \"block\";\r\n }\r\n if (state.target) {\r\n if (!this.targetGesto) {\r\n this.targetGesto = getTargetAbleGesto(this, this._dragTarget, \"Group\");\r\n }\r\n if (!this.controlGesto) {\r\n this.controlGesto = getControlAbleGesto(this, \"GroupControl\");\r\n }\r\n }\r\n var isContainerChanged = !equals(state.container, props.container);\r\n if (isContainerChanged) {\r\n state.container = props.container;\r\n }\r\n if (isContainerChanged\r\n || isTargetChanged\r\n || this.transformOrigin !== (props.defaultGroupOrigin || \"50% 50%\")\r\n || changed.length\r\n || targets.length && !isDeepArrayEquals(this._targetGroups, props.targetGroups || [])) {\r\n this.updateRect();\r\n this._hasFirstTargets = true;\r\n }\r\n this._isPropTargetChanged = !!isTargetChanged;\r\n };\r\n MoveableGroup.prototype._updateObserver = function () { };\r\n MoveableGroup.defaultProps = __assign(__assign({}, MoveableManager.defaultProps), { transformOrigin: [\"50%\", \"50%\"], groupable: true, dragArea: true, keepRatio: true, targets: [], defaultGroupRotate: 0, defaultGroupOrigin: \"50% 50%\" });\r\n return MoveableGroup;\r\n}(MoveableManager));\n\n/**\r\n * @namespace Moveable.IndividualGroup\r\n * @description Create targets individually, not as a group.Create targets individually, not as a group.\r\n */\r\nvar MoveableIndividualGroup = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableIndividualGroup, _super);\r\n function MoveableIndividualGroup() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.moveables = [];\r\n return _this;\r\n }\r\n MoveableIndividualGroup.prototype.render = function () {\r\n var _this = this;\r\n var _a;\r\n var props = this.props;\r\n var cspNonce = props.cspNonce, ControlBoxElement = props.cssStyled, persistData = props.persistData;\r\n var targets = props.targets || [];\r\n var length = targets.length;\r\n var canPersist = this.isUnmounted || !length;\r\n var persistDatChildren = (_a = persistData === null || persistData === void 0 ? void 0 : persistData.children) !== null && _a !== void 0 ? _a : [];\r\n if (canPersist && !length && persistDatChildren.length) {\r\n targets = persistDatChildren.map(function () { return null; });\r\n }\r\n else if (!canPersist) {\r\n persistDatChildren = [];\r\n }\r\n return React.createElement(ControlBoxElement, { cspNonce: cspNonce, ref: ref(this, \"controlBox\"), className: prefix(\"control-box\") }, targets.map(function (target, i) {\r\n var _a, _b;\r\n var individualProps = (_b = (_a = props.individualGroupableProps) === null || _a === void 0 ? void 0 : _a.call(props, target, i)) !== null && _b !== void 0 ? _b : {};\r\n return React.createElement(MoveableManager, __assign({ key: \"moveable\" + i, ref: refs(_this, \"moveables\", i) }, props, individualProps, { target: target, wrapperMoveable: _this, isWrapperMounted: _this.isMoveableMounted, persistData: persistDatChildren[i] }));\r\n }));\r\n };\r\n MoveableIndividualGroup.prototype.componentDidMount = function () { };\r\n MoveableIndividualGroup.prototype.componentDidUpdate = function () { };\r\n MoveableIndividualGroup.prototype.getTargets = function () {\r\n return this.props.targets;\r\n };\r\n MoveableIndividualGroup.prototype.updateRect = function (type, isTarget, isSetState) {\r\n if (isSetState === void 0) { isSetState = true; }\r\n setStoreCache(true);\r\n this.moveables.forEach(function (moveable) {\r\n moveable.updateRect(type, isTarget, isSetState);\r\n });\r\n setStoreCache();\r\n };\r\n MoveableIndividualGroup.prototype.getRect = function () {\r\n return __assign(__assign({}, _super.prototype.getRect.call(this)), { children: this.moveables.map(function (child) { return child.getRect(); }) });\r\n };\r\n MoveableIndividualGroup.prototype.request = function (ableName, param, isInstant) {\r\n if (param === void 0) { param = {}; }\r\n var results = this.moveables.map(function (m) { return m.request(ableName, __assign(__assign({}, param), { isInstant: false }), false); });\r\n var requestInstant = isInstant || param.isInstant;\r\n var requester = {\r\n request: function (ableParam) {\r\n results.forEach(function (r) { return r.request(ableParam); });\r\n return this;\r\n },\r\n requestEnd: function () {\r\n results.forEach(function (r) { return r.requestEnd(); });\r\n return this;\r\n },\r\n };\r\n return requestInstant ? requester.request(param).requestEnd() : requester;\r\n };\r\n MoveableIndividualGroup.prototype.dragStart = function (e, target) {\r\n if (target === void 0) { target = e.target; }\r\n var inputTarget = target;\r\n var childMoveable = find(this.moveables, function (child) {\r\n var target = child.getTargets()[0];\r\n var controlBoxElement = child.getControlBoxElement();\r\n var dragElement = child.getDragElement();\r\n if (!target || !dragElement) {\r\n return false;\r\n }\r\n return dragElement === inputTarget || dragElement.contains(inputTarget)\r\n || (dragElement !== target && target === inputTarget || target.contains(inputTarget))\r\n || controlBoxElement === inputTarget || controlBoxElement.contains(inputTarget);\r\n });\r\n if (childMoveable) {\r\n childMoveable.dragStart(e, target);\r\n }\r\n return this;\r\n };\r\n MoveableIndividualGroup.prototype.hitTest = function () {\r\n return 0;\r\n };\r\n MoveableIndividualGroup.prototype.isInside = function () {\r\n return false;\r\n };\r\n MoveableIndividualGroup.prototype.isDragging = function () {\r\n return false;\r\n };\r\n MoveableIndividualGroup.prototype.getDragElement = function () {\r\n return null;\r\n };\r\n MoveableIndividualGroup.prototype.getMoveables = function () {\r\n return __spreadArray([], __read(this.moveables), false);\r\n };\r\n MoveableIndividualGroup.prototype.updateRenderPoses = function () { };\r\n MoveableIndividualGroup.prototype.checkUpdate = function () { };\r\n MoveableIndividualGroup.prototype.triggerEvent = function () { };\r\n MoveableIndividualGroup.prototype.updateAbles = function () { };\r\n MoveableIndividualGroup.prototype._updateEvents = function () { };\r\n MoveableIndividualGroup.prototype._updateObserver = function () { };\r\n return MoveableIndividualGroup;\r\n}(MoveableManager));\n\nfunction getElementTargets(refTargets, selectorMap) {\r\n var elementTargets = [];\r\n refTargets.forEach(function (target) {\r\n if (!target) {\r\n return;\r\n }\r\n if (isString(target)) {\r\n if (selectorMap[target]) {\r\n elementTargets.push.apply(elementTargets, __spreadArray([], __read(selectorMap[target]), false));\r\n }\r\n return;\r\n }\r\n if (isArray(target)) {\r\n elementTargets.push.apply(elementTargets, __spreadArray([], __read(getElementTargets(target, selectorMap)), false));\r\n }\r\n else {\r\n elementTargets.push(target);\r\n }\r\n });\r\n return elementTargets;\r\n}\r\nfunction getTargetGroups(refTargets, selectorMap) {\r\n var targetGroups = [];\r\n refTargets.forEach(function (target) {\r\n if (!target) {\r\n return;\r\n }\r\n if (isString(target)) {\r\n if (selectorMap[target]) {\r\n targetGroups.push.apply(targetGroups, __spreadArray([], __read(selectorMap[target]), false));\r\n }\r\n return;\r\n }\r\n if (isArray(target)) {\r\n targetGroups.push(getTargetGroups(target, selectorMap));\r\n }\r\n else {\r\n targetGroups.push(target);\r\n }\r\n });\r\n return targetGroups;\r\n}\r\nfunction compareRefTargets(prevRefTargets, nextRefTargets) {\r\n return (prevRefTargets.length !== nextRefTargets.length) || prevRefTargets.some(function (target, i) {\r\n var nextTarget = nextRefTargets[i];\r\n if (!target && !nextTarget) {\r\n return false;\r\n }\r\n else if (target != nextTarget) {\r\n if (isArray(target) && isArray(nextTarget)) {\r\n return compareRefTargets(target, nextTarget);\r\n }\r\n return true;\r\n }\r\n return false;\r\n });\r\n}\r\nvar InitialMoveable = /*#__PURE__*/ (function (_super) {\r\n __extends(InitialMoveable, _super);\r\n function InitialMoveable() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.refTargets = [];\r\n _this.selectorMap = {};\r\n _this._differ = new ChildrenDiffer();\r\n _this._elementTargets = [];\r\n _this._tmpRefTargets = [];\r\n _this._tmpSelectorMap = {};\r\n _this._onChangeTargets = null;\r\n return _this;\r\n }\r\n InitialMoveable.makeStyled = function () {\r\n var cssMap = {};\r\n var ables = this.getTotalAbles();\r\n ables.forEach(function (_a) {\r\n var css = _a.css;\r\n if (!css) {\r\n return;\r\n }\r\n css.forEach(function (text) {\r\n cssMap[text] = true;\r\n });\r\n });\r\n var style = getKeys(cssMap).join(\"\\n\");\r\n this.defaultStyled = styled(\"div\", prefixCSS(PREFIX, MOVEABLE_CSS + style));\r\n };\r\n InitialMoveable.getTotalAbles = function () {\r\n return __spreadArray([Default, Groupable, IndividualGroupable, DragArea], __read(this.defaultAbles), false);\r\n };\r\n InitialMoveable.prototype.render = function () {\r\n var _a;\r\n var moveableContructor = this.constructor;\r\n if (!moveableContructor.defaultStyled) {\r\n moveableContructor.makeStyled();\r\n }\r\n var _b = this.props, userAbles = _b.ables, userProps = _b.props, props = __rest(_b, [\"ables\", \"props\"]);\r\n var _c = __read(this._updateRefs(true), 2), refTargets = _c[0], nextSelectorMap = _c[1];\r\n var elementTargets = getElementTargets(refTargets, nextSelectorMap);\r\n var isGroup = elementTargets.length > 1;\r\n var totalAbles = moveableContructor.getTotalAbles();\r\n var ables = __spreadArray(__spreadArray([], __read(totalAbles), false), __read((userAbles || [])), false);\r\n var nextProps = __assign(__assign(__assign({}, props), (userProps || {})), { ables: ables, cssStyled: moveableContructor.defaultStyled, customStyledMap: moveableContructor.customStyledMap });\r\n this._elementTargets = elementTargets;\r\n var firstRenderState = null;\r\n var prevMoveable = this.moveable;\r\n var persistData = props.persistData;\r\n if (persistData === null || persistData === void 0 ? void 0 : persistData.children) {\r\n isGroup = true;\r\n }\r\n // Even one child is treated as a group if individualGroupable is enabled. #867\r\n if (props.individualGroupable) {\r\n return React.createElement(MoveableIndividualGroup, __assign({ key: \"individual-group\", ref: ref(this, \"moveable\") }, nextProps, { target: null, targets: elementTargets }));\r\n }\r\n if (isGroup) {\r\n var targetGroups = getTargetGroups(refTargets, nextSelectorMap);\r\n // manager\r\n if (prevMoveable && !prevMoveable.props.groupable && !prevMoveable.props.individualGroupable) {\r\n var target = prevMoveable.props.target;\r\n if (target && elementTargets.indexOf(target) > -1) {\r\n firstRenderState = __assign({}, prevMoveable.state);\r\n }\r\n }\r\n return React.createElement(MoveableGroup, __assign({ key: \"group\", ref: ref(this, \"moveable\") }, nextProps, (_a = props.groupableProps) !== null && _a !== void 0 ? _a : {}, { target: null, targets: elementTargets, targetGroups: targetGroups, firstRenderState: firstRenderState }));\r\n }\r\n else {\r\n var target_1 = elementTargets[0];\r\n // manager\r\n if (prevMoveable && (prevMoveable.props.groupable || prevMoveable.props.individualGroupable)) {\r\n var moveables = prevMoveable.moveables || [];\r\n var prevTargetMoveable = find(moveables, function (mv) { return mv.props.target === target_1; });\r\n if (prevTargetMoveable) {\r\n firstRenderState = __assign({}, prevTargetMoveable.state);\r\n }\r\n }\r\n return React.createElement(MoveableManager, __assign({ key: \"single\", ref: ref(this, \"moveable\") }, nextProps, { target: target_1, firstRenderState: firstRenderState }));\r\n }\r\n };\r\n InitialMoveable.prototype.componentDidMount = function () {\r\n this._checkChangeTargets();\r\n };\r\n InitialMoveable.prototype.componentDidUpdate = function () {\r\n this._checkChangeTargets();\r\n };\r\n InitialMoveable.prototype.componentWillUnmount = function () {\r\n this.selectorMap = {};\r\n this.refTargets = [];\r\n };\r\n /**\r\n * Get targets set in moveable through target or targets of props.\r\n * @method Moveable#getTargets\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [targetRef, \".target\", document.querySelectorAll(\".target\")],\r\n * });\r\n *\r\n * console.log(moveable.getTargets());\r\n */\r\n InitialMoveable.prototype.getTargets = function () {\r\n var _a, _b;\r\n return (_b = (_a = this.moveable) === null || _a === void 0 ? void 0 : _a.getTargets()) !== null && _b !== void 0 ? _b : [];\r\n };\r\n /**\r\n * If the element list corresponding to the selector among the targets is changed, it is updated.\r\n * @method Moveable#updateSelectors\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: \".target\",\r\n * });\r\n *\r\n * moveable.updateSelectors();\r\n */\r\n InitialMoveable.prototype.updateSelectors = function () {\r\n this.selectorMap = {};\r\n this._updateRefs();\r\n this.forceUpdate();\r\n };\r\n /**\r\n * User changes target and waits for target to change.\r\n * @method Moveable#waitToChangeTarget\r\n * @story combination-with-other-components--components-selecto\r\n * @example\r\n * document.querySelector(\".target\").addEventListener(\"mousedown\", e => {\r\n * moveable.waitToChangeTarget().then(() => {\r\n * moveable.dragStart(e, e.currentTarget);\r\n * });\r\n * moveable.target = e.currentTarget;\r\n * });\r\n */\r\n InitialMoveable.prototype.waitToChangeTarget = function () {\r\n // let resolvePromise: (e: OnChangeTarget) => void;\r\n var _this = this;\r\n // this._onChangeTargets = () => {\r\n // this._onChangeTargets = null;\r\n // resolvePromise({\r\n // moveable: this.getManager(),\r\n // targets: this._elementTargets,\r\n // });\r\n // };\r\n // return new Promise<OnChangeTarget>(resolve => {\r\n // resolvePromise = resolve;\r\n // });\r\n var resolvePromise;\r\n this._onChangeTargets = function () {\r\n _this._onChangeTargets = null;\r\n resolvePromise();\r\n };\r\n return new Promise(function (resolve) {\r\n resolvePromise = resolve;\r\n });\r\n };\r\n InitialMoveable.prototype.waitToChangeTargets = function () {\r\n return this.waitToChangeTarget();\r\n };\r\n InitialMoveable.prototype.getManager = function () {\r\n return this.moveable;\r\n };\r\n InitialMoveable.prototype.getMoveables = function () {\r\n return this.moveable.getMoveables();\r\n };\r\n InitialMoveable.prototype.getDragElement = function () {\r\n return this.moveable.getDragElement();\r\n };\r\n InitialMoveable.prototype._updateRefs = function (isRender) {\r\n var prevRefTargets = this.refTargets;\r\n var nextRefTargets = getRefTargets((this.props.target || this.props.targets));\r\n var isBrowser = typeof document !== \"undefined\";\r\n var isUpdate = compareRefTargets(prevRefTargets, nextRefTargets);\r\n var selectorMap = this.selectorMap;\r\n var nextSelectorMap = {};\r\n this.refTargets.forEach(function updateSelectorMap(target) {\r\n if (isString(target)) {\r\n var selectorTarget = selectorMap[target];\r\n if (selectorTarget) {\r\n nextSelectorMap[target] = selectorMap[target];\r\n }\r\n else if (isBrowser) {\r\n isUpdate = true;\r\n nextSelectorMap[target] = [].slice.call(document.querySelectorAll(target));\r\n }\r\n }\r\n else if (isArray(target)) {\r\n target.forEach(updateSelectorMap);\r\n }\r\n });\r\n this._tmpRefTargets = nextRefTargets;\r\n this._tmpSelectorMap = nextSelectorMap;\r\n return [\r\n nextRefTargets,\r\n nextSelectorMap,\r\n !isRender && isUpdate,\r\n ];\r\n };\r\n InitialMoveable.prototype._checkChangeTargets = function () {\r\n var _a, _b, _c;\r\n this.refTargets = this._tmpRefTargets;\r\n this.selectorMap = this._tmpSelectorMap;\r\n var _d = this._differ.update(this._elementTargets), added = _d.added, removed = _d.removed;\r\n var isTargetChanged = added.length || removed.length;\r\n if (isTargetChanged) {\r\n (_b = (_a = this.props).onChangeTargets) === null || _b === void 0 ? void 0 : _b.call(_a, {\r\n moveable: this.moveable,\r\n targets: this._elementTargets,\r\n });\r\n (_c = this._onChangeTargets) === null || _c === void 0 ? void 0 : _c.call(this);\r\n }\r\n var _e = __read(this._updateRefs(), 3), refTargets = _e[0], selectorMap = _e[1], isUpdate = _e[2];\r\n this.refTargets = refTargets;\r\n this.selectorMap = selectorMap;\r\n if (isUpdate) {\r\n this.forceUpdate();\r\n }\r\n };\r\n InitialMoveable.defaultAbles = [];\r\n InitialMoveable.customStyledMap = {};\r\n InitialMoveable.defaultStyled = null;\r\n __decorate([\r\n withMethods(MOVEABLE_METHODS)\r\n ], InitialMoveable.prototype, \"moveable\", void 0);\r\n return InitialMoveable;\r\n}(React.PureComponent));\n\nvar Moveable = /*#__PURE__*/ (function (_super) {\r\n __extends(Moveable, _super);\r\n function Moveable() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Moveable.defaultAbles = MOVEABLE_ABLES;\r\n return Moveable;\r\n}(InitialMoveable));\n\nfunction makeMoveable(ables) {\r\n var _a;\r\n return _a = /*#__PURE__*/ (function (_super) {\r\n __extends(Moveable, _super);\r\n function Moveable() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Moveable;\r\n }(InitialMoveable)),\r\n _a.defaultAbles = ables,\r\n _a;\r\n}\n\nexport { Clippable, DIRECTIONS, Draggable, edgeDraggable as EdgeDraggable, InitialMoveable, MOVEABLE_ABLES, MOVEABLE_EVENTS, MOVEABLE_METHODS, MOVEABLE_PROPS, Pinchable, Resizable, Rotatable, Roundable, Scalable, Snappable, Warpable, calculateElementPosition, Moveable as default, getElementInfo, makeAble, makeMoveable };\n","/*\nCopyright (c) 2019 Daybrush\nname: moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/moveable\nversion: 0.53.0\n*/\nimport { ref, Properties } from 'framework-utils';\nimport * as React from 'croact';\nimport { renderSelf } from 'croact';\nimport Moveable$1, { MOVEABLE_PROPS, MOVEABLE_METHODS, MOVEABLE_EVENTS, getElementInfo as getElementInfo$1, makeAble as makeAble$1 } from 'croact-moveable';\nimport { camelize, getDocument, isArray } from '@daybrush/utils';\nimport EventEmitter from '@scena/event-emitter';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar InnerMoveable = /*#__PURE__*/function (_super) {\n __extends(InnerMoveable, _super);\n\n function InnerMoveable(props) {\n var _this = _super.call(this, props) || this;\n\n _this.state = {};\n _this.state = _this.props;\n return _this;\n }\n\n var __proto = InnerMoveable.prototype;\n\n __proto.render = function () {\n return React.createElement(Moveable$1, __assign({\n ref: ref(this, \"moveable\")\n }, this.state));\n };\n\n return InnerMoveable;\n}(React.Component);\n\nvar PROPERTIES = MOVEABLE_PROPS;\nvar METHODS = MOVEABLE_METHODS;\nvar EVENTS = MOVEABLE_EVENTS;\n\n/**\r\n * Moveable is Draggable! Resizable! Scalable! Rotatable!\r\n * @sort 1\r\n * @alias Moveable\r\n * @extends EventEmitter\r\n */\n\nvar MoveableManager = /*#__PURE__*/function (_super) {\n __extends(MoveableManager, _super);\n /**\r\n *\r\n */\n\n\n function MoveableManager(parentElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.containerProvider = null;\n _this.selfElement = null;\n _this._warp = false;\n\n var nextOptions = __assign({}, options);\n\n var events = {};\n EVENTS.forEach(function (name) {\n events[camelize(\"on \".concat(name))] = function (e) {\n return _this.trigger(name, e);\n };\n });\n var selfElement;\n\n if (options.warpSelf) {\n delete options.warpSelf;\n _this._warp = true;\n selfElement = parentElement;\n } else {\n selfElement = getDocument(parentElement).createElement(\"div\");\n parentElement.appendChild(selfElement);\n }\n\n _this.containerProvider = renderSelf(React.createElement(InnerMoveable, __assign({\n ref: ref(_this, \"innerMoveable\")\n }, nextOptions, events)), selfElement);\n _this.selfElement = selfElement;\n var target = nextOptions.target;\n\n if (isArray(target) && target.length > 1) {\n _this.updateRect();\n }\n\n return _this;\n }\n\n var __proto = MoveableManager.prototype;\n\n __proto.setState = function (state, callback) {\n this.innerMoveable.setState(state, callback);\n };\n\n __proto.forceUpdate = function (callback) {\n this.innerMoveable.forceUpdate(callback);\n };\n\n __proto.dragStart = function (e, target) {\n if (target === void 0) {\n target = e.target;\n }\n\n var innerMoveable = this.innerMoveable;\n\n if (innerMoveable.$_timer) {\n this.forceUpdate();\n }\n\n this.getMoveable().dragStart(e, target);\n };\n\n __proto.destroy = function () {\n var _a;\n\n var selfElement = this.selfElement;\n renderSelf(null, selfElement, this.containerProvider);\n\n if (!this._warp) {\n (_a = selfElement === null || selfElement === void 0 ? void 0 : selfElement.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(selfElement);\n }\n\n this.containerProvider = null;\n this.off();\n this.selfElement = null;\n this.innerMoveable = null;\n };\n\n __proto.getMoveable = function () {\n return this.innerMoveable.moveable;\n };\n\n MoveableManager = __decorate([Properties(METHODS, function (prototype, property) {\n if (prototype[property]) {\n return;\n }\n\n prototype[property] = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var self = this.getMoveable();\n\n if (!self || !self[property]) {\n return;\n }\n\n return self[property].apply(self, args);\n };\n }), Properties(PROPERTIES, function (prototype, property) {\n Object.defineProperty(prototype, property, {\n get: function () {\n return this.getMoveable().props[property];\n },\n set: function (value) {\n var _a;\n\n this.setState((_a = {}, _a[property] = value, _a));\n },\n enumerable: true,\n configurable: true\n });\n })], MoveableManager);\n return MoveableManager;\n}(EventEmitter);\n\nvar Moveable = /*#__PURE__*/function (_super) {\n __extends(Moveable, _super);\n\n function Moveable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Moveable;\n}(MoveableManager);\n\nfunction getElementInfo(target, container, rootContainer) {\n return getElementInfo$1(target, container, rootContainer);\n}\nfunction makeAble(name, able) {\n return makeAble$1(name, able);\n}\n\nexport { EVENTS, METHODS, PROPERTIES, Moveable as default, getElementInfo, makeAble };\n//# sourceMappingURL=moveable.esm.js.map\n","export default \"data:image/svg+xml,%3csvg%20width='400'%20height='210'%20viewBox='0%200%20400%20210'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0.5%20200C0.5%2089.8192%2089.8192%200.5%20200%200.5C310.181%200.5%20399.5%2089.8192%20399.5%20200V209.5H0.5V200Z'%20fill='white'%20fill-opacity='0.1'%20stroke='black'/%3e%3cpath%20d='M399.97%20196.51L393%20196.631'%20stroke='black'/%3e%3cpath%20d='M399.878%20193.02L392.5%20193.278'%20stroke='black'/%3e%3cpath%20d='M399.726%20189.533L392.5%20189.912'%20stroke='black'/%3e%3cpath%20d='M399.513%20186.049L392%20186.574'%20stroke='black'/%3e%3cpath%20d='M399.239%20182.569L386%20183.727'%20stroke='black'/%3e%3cpath%20d='M398.904%20179.094L391.5%20179.873'%20stroke='black'/%3e%3cpath%20d='M398.509%20175.626L391%20176.548'%20stroke='black'/%3e%3cpath%20d='M398.054%20172.165L390.5%20173.227'%20stroke='black'/%3e%3cpath%20d='M397.538%20168.713L390%20169.907'%20stroke='black'/%3e%3cpath%20d='M396.326%20161.838L389.484%20163.168'%20stroke='black'/%3e%3cpath%20d='M395.63%20158.418L388.409%20159.953'%20stroke='black'/%3e%3cpath%20d='M394.875%20155.01L387.824%20156.637'%20stroke='black'/%3e%3cpath%20d='M394.06%20151.616L386.752%20153.438'%20stroke='black'/%3e%3cpath%20d='M393.186%20148.236L380.349%20151.676'%20stroke='black'/%3e%3cpath%20d='M392.253%20144.872L385.096%20146.925'%20stroke='black'/%3e%3cpath%20d='M391.262%20141.526L384.027%20143.738'%20stroke='black'/%3e%3cpath%20d='M390.212%20138.197L382.957%20140.554'%20stroke='black'/%3e%3cpath%20d='M389.104%20134.886L381.889%20137.371'%20stroke='black'/%3e%3cpath%20d='M386.717%20128.325L380.21%20130.823'%20stroke='black'/%3e%3cpath%20d='M385.438%20125.077L378.593%20127.842'%20stroke='black'/%3e%3cpath%20d='M384.102%20121.852L377.442%20124.679'%20stroke='black'/%3e%3cpath%20d='M382.71%20118.651L375.83%20121.714'%20stroke='black'/%3e%3cpath%20d='M381.263%20115.474L369.218%20121.091'%20stroke='black'/%3e%3cpath%20d='M379.76%20112.324L373.068%20115.588'%20stroke='black'/%3e%3cpath%20d='M378.203%20109.2L371.461%20112.635'%20stroke='black'/%3e%3cpath%20d='M376.591%20106.104L369.856%20109.685'%20stroke='black'/%3e%3cpath%20d='M374.925%20103.036L368.25%20106.736'%20stroke='black'/%3e%3cpath%20d='M371.435%2096.9878L365.46%20100.578'%20stroke='black'/%3e%3cpath%20d='M369.611%2094.0116L363.35%2097.9238'%20stroke='black'/%3e%3cpath%20d='M367.736%2091.0676L361.667%2095.0085'%20stroke='black'/%3e%3cpath%20d='M365.809%2088.1568L359.565%2092.3682'%20stroke='black'/%3e%3cpath%20d='M363.832%2085.2801L352.946%2092.9026'%20stroke='black'/%3e%3cpath%20d='M361.805%2082.4384L355.782%2086.8145'%20stroke='black'/%3e%3cpath%20d='M359.729%2079.6324L353.686%2084.1855'%20stroke='black'/%3e%3cpath%20d='M357.604%2076.8631L351.593%2081.5593'%20stroke='black'/%3e%3cpath%20d='M355.431%2074.1313L349.5%2078.9341'%20stroke='black'/%3e%3cpath%20d='M350.944%2068.7819L345.683%2073.355'%20stroke='black'/%3e%3cpath%20d='M348.631%2066.1676L343.145%2071.1075'%20stroke='black'/%3e%3cpath%20d='M346.273%2063.594L340.981%2068.5288'%20stroke='black'/%3e%3cpath%20d='M343.87%2061.062L338.453%2066.2936'%20stroke='black'/%3e%3cpath%20d='M341.423%2058.5723L332.026%2067.9695'%20stroke='black'/%3e%3cpath%20d='M338.934%2056.1257L333.762%2061.4814'%20stroke='black'/%3e%3cpath%20d='M336.402%2053.723L331.242%2059.2561'%20stroke='black'/%3e%3cpath%20d='M333.828%2051.3647L328.724%2057.0333'%20stroke='black'/%3e%3cpath%20d='M331.214%2049.0518L326.207%2054.8114'%20stroke='black'/%3e%3cpath%20d='M325.866%2044.5629L321.48%2049.9801'%20stroke='black'/%3e%3cpath%20d='M323.135%2042.39L318.589%2048.2076'%20stroke='black'/%3e%3cpath%20d='M320.365%2040.265L316.011%2046.0438'%20stroke='black'/%3e%3cpath%20d='M317.559%2038.1887L313.133%2044.2815'%20stroke='black'/%3e%3cpath%20d='M314.718%2036.1617L307.095%2047.0478'%20stroke='black'/%3e%3cpath%20d='M311.841%2034.1846L307.678%2040.3569'%20stroke='black'/%3e%3cpath%20d='M308.93%2032.258L304.81%2038.6031'%20stroke='black'/%3e%3cpath%20d='M305.986%2030.3825L301.944%2036.8513'%20stroke='black'/%3e%3cpath%20d='M303.01%2028.5586L299.079%2035.1002'%20stroke='black'/%3e%3cpath%20d='M296.964%2025.0666L293.585%2031.1632'%20stroke='black'/%3e%3cpath%20d='M293.897%2023.401L290.431%2029.9195'%20stroke='black'/%3e%3cpath%20d='M290.801%2021.7892L287.516%2028.2364'%20stroke='black'/%3e%3cpath%20d='M287.677%2020.2317L284.375%2027.0006'%20stroke='black'/%3e%3cpath%20d='M284.526%2018.7289L278.91%2030.7733'%20stroke='black'/%3e%3cpath%20d='M281.35%2017.2814L278.322%2024.0829'%20stroke='black'/%3e%3cpath%20d='M278.149%2015.8895L275.193%2022.8537'%20stroke='black'/%3e%3cpath%20d='M274.924%2014.5537L272.066%2021.6262'%20stroke='black'/%3e%3cpath%20d='M271.676%2013.2744L268.941%2020.3991'%20stroke='black'/%3e%3cpath%20d='M265.116%2010.8841L262.847%2017.4749'%20stroke='black'/%3e%3cpath%20d='M261.806%209.77649L259.525%2016.7978'%20stroke='black'/%3e%3cpath%20d='M258.477%208.72683L256.362%2015.6465'%20stroke='black'/%3e%3cpath%20d='M255.13%207.73544L253.054%2014.9749'%20stroke='black'/%3e%3cpath%20d='M251.767%206.80262L248.327%2019.6393'%20stroke='black'/%3e%3cpath%20d='M248.387%205.92863L246.586%2013.1526'%20stroke='black'/%3e%3cpath%20d='M244.993%205.11378L243.291%2012.4855'%20stroke='black'/%3e%3cpath%20d='M241.585%204.35826L239.999%2011.8194'%20stroke='black'/%3e%3cpath%20d='M238.164%203.66232L236.708%2011.1537'%20stroke='black'/%3e%3cpath%20d='M231.29%202.44759L230.199%209.33237'%20stroke='black'/%3e%3cpath%20d='M227.837%201.93165L226.81%209.24246'%20stroke='black'/%3e%3cpath%20d='M224.377%201.47604L223.495%208.65793'%20stroke='black'/%3e%3cpath%20d='M220.908%201.0809L220.121%208.5708'%20stroke='black'/%3e%3cpath%20d='M217.434%200.746309L216.276%2013.9853'%20stroke='black'/%3e%3cpath%20d='M213.954%200.472435L213.435%207.89948'%20stroke='black'/%3e%3cpath%20d='M210.47%200.259345L210.074%207.81461'%20stroke='black'/%3e%3cpath%20d='M206.983%200.107108L206.716%207.73032'%20stroke='black'/%3e%3cpath%20d='M203.493%200.0157025L203.36%207.64618'%20stroke='black'/%3e%3cpath%20d='M196.512%200.0137416L196.634%206.98328'%20stroke='black'/%3e%3cpath%20d='M193.023%200.105114L193.28%207.48328'%20stroke='black'/%3e%3cpath%20d='M189.535%200.257368L189.914%207.48328'%20stroke='black'/%3e%3cpath%20d='M186.051%200.470463L186.577%207.98328'%20stroke='black'/%3e%3cpath%20d='M182.571%200.744326L183.73%2013.9833'%20stroke='black'/%3e%3cpath%20d='M179.097%201.07889L179.875%208.48328'%20stroke='black'/%3e%3cpath%20d='M175.629%201.47404L176.551%208.98328'%20stroke='black'/%3e%3cpath%20d='M172.168%201.92966L173.23%209.48328'%20stroke='black'/%3e%3cpath%20d='M168.716%202.4456L169.91%209.98328'%20stroke='black'/%3e%3cpath%20d='M161.841%203.65607L163.171%2010.4986'%20stroke='black'/%3e%3cpath%20d='M158.42%204.35197L159.955%2011.5733'%20stroke='black'/%3e%3cpath%20d='M155.012%205.1075L156.64%2012.1579'%20stroke='black'/%3e%3cpath%20d='M151.618%205.92235L153.44%2013.2298'%20stroke='black'/%3e%3cpath%20d='M148.239%206.79633L151.678%2019.633'%20stroke='black'/%3e%3cpath%20d='M144.875%207.72916L146.927%2014.8859'%20stroke='black'/%3e%3cpath%20d='M141.528%208.72055L143.74%2015.9556'%20stroke='black'/%3e%3cpath%20d='M138.199%209.7702L140.556%2017.0247'%20stroke='black'/%3e%3cpath%20d='M134.889%2010.8778L137.373%2018.0936'%20stroke='black'/%3e%3cpath%20d='M128.327%2013.2638L130.825%2019.7714'%20stroke='black'/%3e%3cpath%20d='M125.079%2014.5431L127.845%2021.3882'%20stroke='black'/%3e%3cpath%20d='M121.854%2015.8789L124.682%2022.5396'%20stroke='black'/%3e%3cpath%20d='M118.653%2017.2708L121.717%2024.1509'%20stroke='black'/%3e%3cpath%20d='M115.477%2018.7183L121.093%2030.7627'%20stroke='black'/%3e%3cpath%20d='M112.326%2020.2211L115.59%2026.9128'%20stroke='black'/%3e%3cpath%20d='M109.203%2021.7786L112.637%2028.5196'%20stroke='black'/%3e%3cpath%20d='M106.106%2023.3904L109.687%2030.1254'%20stroke='black'/%3e%3cpath%20d='M103.039%2025.056L106.739%2031.7307'%20stroke='black'/%3e%3cpath%20d='M96.9901%2028.5444L100.58%2034.5193'%20stroke='black'/%3e%3cpath%20d='M94.0138%2030.3682L97.9261%2036.6291'%20stroke='black'/%3e%3cpath%20d='M91.0699%2032.2437L95.0108%2038.3122'%20stroke='black'/%3e%3cpath%20d='M88.1591%2034.1703L92.3705%2040.4139'%20stroke='black'/%3e%3cpath%20d='M85.2824%2036.1474L92.9049%2047.0335'%20stroke='black'/%3e%3cpath%20d='M82.4406%2038.1744L86.8168%2044.1977'%20stroke='black'/%3e%3cpath%20d='M79.6347%2040.2507L84.1878%2046.2929'%20stroke='black'/%3e%3cpath%20d='M76.8654%2042.3757L81.5616%2048.3865'%20stroke='black'/%3e%3cpath%20d='M74.1336%2044.5486L78.9363%2050.4795'%20stroke='black'/%3e%3cpath%20d='M68.784%2049.0333L73.3571%2054.294'%20stroke='black'/%3e%3cpath%20d='M66.1697%2051.3462L71.1097%2056.8326'%20stroke='black'/%3e%3cpath%20d='M63.5962%2053.7045L68.531%2058.9964'%20stroke='black'/%3e%3cpath%20d='M61.0642%2056.1072L66.2957%2061.5247'%20stroke='black'/%3e%3cpath%20d='M58.5745%2058.5538L67.9716%2067.9509'%20stroke='black'/%3e%3cpath%20d='M56.1279%2061.0435L61.4835%2066.2154'%20stroke='black'/%3e%3cpath%20d='M53.7251%2063.5755L59.2582%2068.7353'%20stroke='black'/%3e%3cpath%20d='M51.3669%2066.1491L57.0355%2071.2531'%20stroke='black'/%3e%3cpath%20d='M49.0539%2068.7634L54.8136%2073.7702'%20stroke='black'/%3e%3cpath%20d='M44.5649%2074.1081L49.982%2078.4948'%20stroke='black'/%3e%3cpath%20d='M42.3919%2076.8399L48.2095%2081.3851'%20stroke='black'/%3e%3cpath%20d='M40.267%2079.6091L46.0457%2083.9638'%20stroke='black'/%3e%3cpath%20d='M38.1906%2082.4151L44.2835%2086.8418'%20stroke='black'/%3e%3cpath%20d='M36.1636%2085.2568L47.0498%2092.8794'%20stroke='black'/%3e%3cpath%20d='M34.1865%2088.1336L40.3589%2092.2968'%20stroke='black'/%3e%3cpath%20d='M32.2599%2091.0443L38.605%2095.1649'%20stroke='black'/%3e%3cpath%20d='M30.3844%2093.9883L36.8532%2098.0304'%20stroke='black'/%3e%3cpath%20d='M28.5606%2096.9645L35.1022%20100.895'%20stroke='black'/%3e%3cpath%20d='M25.0682%20103.007L31.1649%20106.386'%20stroke='black'/%3e%3cpath%20d='M23.4027%20106.075L29.9212%20109.54'%20stroke='black'/%3e%3cpath%20d='M21.7909%20109.171L28.238%20112.456'%20stroke='black'/%3e%3cpath%20d='M20.2334%20112.295L27.0023%20115.596'%20stroke='black'/%3e%3cpath%20d='M18.7306%20115.445L30.775%20121.062'%20stroke='black'/%3e%3cpath%20d='M17.2831%20118.621L24.0846%20121.65'%20stroke='black'/%3e%3cpath%20d='M15.8912%20121.823L22.8554%20124.779'%20stroke='black'/%3e%3cpath%20d='M14.5554%20125.048L21.6278%20127.905'%20stroke='black'/%3e%3cpath%20d='M13.2761%20128.295L20.4008%20131.03'%20stroke='black'/%3e%3cpath%20d='M10.8855%20134.852L17.4763%20137.121'%20stroke='black'/%3e%3cpath%20d='M9.77793%20138.162L16.7993%20140.443'%20stroke='black'/%3e%3cpath%20d='M8.72826%20141.491L15.6479%20143.607'%20stroke='black'/%3e%3cpath%20d='M7.73687%20144.838L14.9763%20146.914'%20stroke='black'/%3e%3cpath%20d='M6.80405%20148.202L19.6407%20151.641'%20stroke='black'/%3e%3cpath%20d='M5.93006%20151.581L13.1541%20153.382'%20stroke='black'/%3e%3cpath%20d='M5.11522%20154.975L12.4869%20156.677'%20stroke='black'/%3e%3cpath%20d='M4.35969%20158.383L11.8209%20159.969'%20stroke='black'/%3e%3cpath%20d='M3.66376%20161.804L11.1552%20163.26'%20stroke='black'/%3e%3cpath%20d='M2.44878%20168.675L9.33356%20169.766'%20stroke='black'/%3e%3cpath%20d='M1.93284%20172.127L9.24365%20173.155'%20stroke='black'/%3e%3cpath%20d='M1.47723%20175.588L8.65912%20176.47'%20stroke='black'/%3e%3cpath%20d='M1.08206%20179.056L8.57196%20179.844'%20stroke='black'/%3e%3cpath%20d='M0.7475%20182.531L13.9865%20183.689'%20stroke='black'/%3e%3cpath%20d='M0.473626%20186.011L7.90067%20186.53'%20stroke='black'/%3e%3cpath%20d='M0.260536%20189.495L7.8158%20189.891'%20stroke='black'/%3e%3cpath%20d='M0.108299%20192.982L7.73151%20193.248'%20stroke='black'/%3e%3cpath%20d='M0.0168936%20196.472L7.64737%20196.605'%20stroke='black'/%3e%3cpath%20d='M396.962%20165.27L384%20167.556M354%20172.846L224.5%20195.68'%20stroke='black'/%3e%3cpath%20d='M387.941%20131.596L375.573%20136.097M346.948%20146.516L223.38%20191.491'%20stroke='black'/%3e%3cpath%20d='M373.21%2099.9976L361.812%20106.578M335.43%20121.81L221.55%20187.559'%20stroke='black'/%3e%3cpath%20d='M353.216%2071.4372L343.134%2079.8973M319.798%2099.4784L219.065%20184.004'%20stroke='black'/%3e%3cpath%20d='M328.565%2046.7824L320.105%2056.8647M300.524%2080.2005L215.999%20180.934'%20stroke='black'/%3e%3cpath%20d='M300.008%2026.7817L293.427%2038.1799M278.196%2064.5615L212.447%20178.442'%20stroke='black'/%3e%3cpath%20d='M268.413%2012.0445L263.911%2024.4123M253.493%2053.0379L208.518%20176.605'%20stroke='black'/%3e%3cpath%20d='M234.739%203.01792L232.454%2015.9795M227.164%2045.9795L204.33%20175.479'%20stroke='black'/%3e%3cpath%20d='M165.282%203.01085L167.567%2015.9724M172.857%2045.9724L195.691%20175.472'%20stroke='black'/%3e%3cpath%20d='M131.607%2012.03L136.109%2024.3977M146.527%2053.0234L191.502%20176.591'%20stroke='black'/%3e%3cpath%20d='M100.009%2026.7597L106.59%2038.1579M121.821%2064.5395L187.57%20178.42'%20stroke='black'/%3e%3cpath%20d='M71.4483%2046.752L79.9083%2056.8343M99.4894%2080.1702L184.015%20180.903'%20stroke='black'/%3e%3cpath%20d='M46.7932%2071.4008L56.8755%2079.8609M80.2114%2099.442L180.944%20183.967'%20stroke='black'/%3e%3cpath%20d='M26.7923%2099.9551L38.1906%20106.536M64.5721%20121.767L178.453%20187.516'%20stroke='black'/%3e%3cpath%20d='M12.0531%20131.548L24.4208%20136.049M53.0465%20146.468L176.614%20191.443'%20stroke='black'/%3e%3cpath%20d='M3.02385%20165.218L15.9854%20167.504M45.9854%20172.793L175.485%20195.628'%20stroke='black'/%3e%3cpath%20d='M200%200L200%2014M200%20200L200%2043'%20stroke='black'/%3e%3cpath%20d='M200%20200L43%20200'%20stroke='black'/%3e%3cpath%20d='M400%20200L387%20200M200%20200L357%20200M0%20200L12.5%20200'%20stroke='black'/%3e%3cpath%20d='M225%20200C225%20186.193%20213.807%20175%20200%20175C186.193%20175%20175%20186.193%20175%20200'%20stroke='black'/%3e%3cpath%20d='M353%20200C353%20115.5%20284.5%2047%20200%2047C115.5%2047%2047%20115.5%2047%20200'%20stroke='black'/%3e%3cpath%20d='M22.0742%20199.5C22.0742%20200.086%2021.8346%20200.538%2021.3555%20200.855C20.8763%20201.173%2020.1732%20201.332%2019.2461%20201.332C18.319%20201.332%2017.6172%20201.176%2017.1406%20200.863C16.6641%20200.548%2016.4258%20200.094%2016.4258%20199.5C16.4258%20198.911%2016.6654%20198.46%2017.1445%20198.145C17.6211%20197.829%2018.3216%20197.672%2019.2461%20197.672C20.1706%20197.672%2020.8737%20197.832%2021.3555%20198.152C21.8346%20198.47%2022.0742%20198.919%2022.0742%20199.5ZM21.4492%20199.5C21.4492%20199.128%2021.2656%20198.842%2020.8984%20198.645C20.5312%20198.447%2019.9805%20198.348%2019.2461%20198.348C18.5065%20198.348%2017.957%20198.449%2017.5977%20198.652C17.2357%20198.853%2017.0547%20199.135%2017.0547%20199.5C17.0547%20199.867%2017.2344%20200.151%2017.5937%20200.352C17.9531%20200.552%2018.5039%20200.652%2019.2461%20200.652C19.9831%20200.652%2020.5352%20200.555%2020.9023%20200.359C21.2669%20200.161%2021.4492%20199.875%2021.4492%20199.5Z'%20fill='black'/%3e%3cpath%20d='M40.0742%20195.492C40.0742%20196.078%2039.8346%20196.53%2039.3555%20196.848C38.8763%20197.165%2038.1732%20197.324%2037.2461%20197.324C36.319%20197.324%2035.6172%20197.168%2035.1406%20196.855C34.6641%20196.54%2034.4258%20196.086%2034.4258%20195.492C34.4258%20194.904%2034.6654%20194.452%2035.1445%20194.137C35.6211%20193.822%2036.3216%20193.664%2037.2461%20193.664C38.1706%20193.664%2038.8737%20193.824%2039.3555%20194.145C39.8346%20194.462%2040.0742%20194.911%2040.0742%20195.492ZM39.4492%20195.492C39.4492%20195.12%2039.2656%20194.835%2038.8984%20194.637C38.5312%20194.439%2037.9805%20194.34%2037.2461%20194.34C36.5065%20194.34%2035.957%20194.441%2035.5977%20194.645C35.2357%20194.845%2035.0547%20195.128%2035.0547%20195.492C35.0547%20195.859%2035.2344%20196.143%2035.5937%20196.344C35.9531%20196.544%2036.5039%20196.645%2037.2461%20196.645C37.9831%20196.645%2038.5352%20196.547%2038.9023%20196.352C39.2669%20196.154%2039.4492%20195.867%2039.4492%20195.492Z'%20fill='black'/%3e%3cpath%20d='M39.6211%20198.664C39.9232%20199.018%2040.0742%20199.462%2040.0742%20199.996C40.0742%20200.53%2039.9232%20200.975%2039.6211%20201.332C39.3164%20201.686%2038.9167%20201.863%2038.4219%20201.863C38.0755%20201.863%2037.776%20201.771%2037.5234%20201.586C37.2708%20201.401%2037.0859%20201.15%2036.9687%20200.832C36.8568%20201.059%2036.7005%20201.24%2036.5%20201.375C36.2969%20201.508%2036.0703%20201.574%2035.8203%20201.574C35.4141%20201.574%2035.0807%20201.424%2034.8203%20201.125C34.5573%20200.826%2034.4258%20200.449%2034.4258%20199.996C34.4258%20199.551%2034.5573%20199.18%2034.8203%20198.883C35.0833%20198.583%2035.4167%20198.434%2035.8203%20198.434C36.0703%20198.434%2036.2969%20198.499%2036.5%20198.629C36.7005%20198.759%2036.8568%20198.936%2036.9687%20199.16C37.0885%20198.845%2037.2747%20198.595%2037.5273%20198.41C37.7773%20198.225%2038.0755%20198.133%2038.4219%20198.133C38.9193%20198.133%2039.319%20198.31%2039.6211%20198.664ZM36.7461%20199.996C36.7461%20199.733%2036.6602%20199.512%2036.4883%20199.332C36.3164%20199.15%2036.1055%20199.059%2035.8555%20199.059C35.6107%20199.059%2035.4049%20199.15%2035.2383%20199.332C35.069%20199.512%2034.9844%20199.733%2034.9844%20199.996C34.9844%20200.264%2035.0677%20200.488%2035.2344%20200.668C35.401%20200.848%2035.6081%20200.937%2035.8555%20200.937C36.1055%20200.937%2036.3164%20200.848%2036.4883%20200.668C36.6602%20200.486%2036.7461%20200.262%2036.7461%20199.996ZM39.4492%20199.996C39.4492%20199.658%2039.349%20199.376%2039.1484%20199.152C38.9479%20198.926%2038.6823%20198.812%2038.3516%20198.812C38.026%20198.812%2037.7643%20198.926%2037.5664%20199.152C37.3685%20199.376%2037.2695%20199.658%2037.2695%20199.996C37.2695%20200.337%2037.3685%20200.621%2037.5664%20200.848C37.7643%20201.074%2038.026%20201.187%2038.3516%20201.187C38.6823%20201.187%2038.9479%20201.074%2039.1484%20200.848C39.349%20200.621%2039.4492%20200.337%2039.4492%20199.996Z'%20fill='black'/%3e%3cpath%20d='M34.5%20204.469L34.5%20203.836L40%20203.836L40%20204.504L35.2383%20204.504L36.3828%20205.824L35.6602%20205.824L34.5%20204.469Z'%20fill='black'/%3e%3cpath%20d='M25%20200H31'%20stroke='black'/%3e%3cpath%20d='M377.949%20204.495C377.949%20203.909%20378.189%20203.457%20378.668%20203.14C379.147%20202.822%20379.85%20202.663%20380.777%20202.663C381.704%20202.663%20382.406%20202.819%20382.883%20203.132C383.359%20203.447%20383.598%20203.901%20383.598%20204.495C383.598%20205.084%20383.358%20205.536%20382.879%20205.851C382.402%20206.166%20381.702%20206.323%20380.777%20206.323C379.853%20206.323%20379.15%20206.163%20378.668%20205.843C378.189%20205.525%20377.949%20205.076%20377.949%20204.495ZM378.574%20204.495C378.574%20204.868%20378.758%20205.153%20379.125%20205.351C379.492%20205.549%20380.043%20205.648%20380.777%20205.648C381.517%20205.648%20382.066%20205.546%20382.426%20205.343C382.788%20205.142%20382.969%20204.86%20382.969%20204.495C382.969%20204.128%20382.789%20203.844%20382.43%20203.644C382.07%20203.443%20381.519%20203.343%20380.777%20203.343C380.04%20203.343%20379.488%20203.441%20379.121%20203.636C378.756%20203.834%20378.574%20204.12%20378.574%20204.495Z'%20fill='black'/%3e%3cpath%20d='M378.402%20201.323C378.1%20200.969%20377.949%20200.525%20377.949%20199.991C377.949%20199.457%20378.1%20199.012%20378.402%20198.655C378.707%20198.301%20379.107%20198.124%20379.601%20198.124C379.948%20198.124%20380.247%20198.217%20380.5%20198.401C380.752%20198.586%20380.937%20198.838%20381.055%20199.155C381.167%20198.929%20381.323%20198.748%20381.523%20198.612C381.726%20198.48%20381.953%20198.413%20382.203%20198.413C382.609%20198.413%20382.943%20198.563%20383.203%20198.862C383.466%20199.162%20383.598%20199.538%20383.598%20199.991C383.598%20200.437%20383.466%20200.808%20383.203%20201.105C382.94%20201.404%20382.607%20201.554%20382.203%20201.554C381.953%20201.554%20381.726%20201.489%20381.523%20201.359C381.323%20201.228%20381.167%20201.051%20381.055%20200.827C380.935%20201.142%20380.749%20201.392%20380.496%20201.577C380.246%20201.762%20379.948%20201.855%20379.601%20201.855C379.104%20201.855%20378.704%20201.678%20378.402%20201.323ZM381.277%20199.991C381.277%20200.254%20381.363%20200.476%20381.535%20200.655C381.707%20200.838%20381.918%20200.929%20382.168%20200.929C382.413%20200.929%20382.618%20200.838%20382.785%20200.655C382.954%20200.476%20383.039%20200.254%20383.039%20199.991C383.039%20199.723%20382.956%20199.499%20382.789%20199.319C382.622%20199.14%20382.415%20199.05%20382.168%20199.05C381.918%20199.05%20381.707%20199.14%20381.535%20199.319C381.363%20199.502%20381.277%20199.726%20381.277%20199.991ZM378.574%20199.991C378.574%20200.33%20378.674%20200.611%20378.875%20200.835C379.075%20201.062%20379.341%20201.175%20379.672%20201.175C379.997%20201.175%20380.259%20201.062%20380.457%20200.835C380.655%20200.611%20380.754%20200.33%20380.754%20199.991C380.754%20199.65%20380.655%20199.366%20380.457%20199.14C380.259%20198.913%20379.997%20198.8%20379.672%20198.8C379.341%20198.8%20379.075%20198.913%20378.875%20199.14C378.674%20199.366%20378.574%20199.65%20378.574%20199.991Z'%20fill='black'/%3e%3cpath%20d='M383.523%20195.519L383.523%20196.151L378.023%20196.151L378.023%20195.484L382.785%20195.484L381.641%20194.163L382.363%20194.163L383.523%20195.519Z'%20fill='black'/%3e%3cpath%20d='M359.949%20200.487C359.949%20199.901%20360.189%20199.45%20360.668%20199.132C361.147%20198.814%20361.85%20198.655%20362.777%20198.655C363.704%20198.655%20364.406%20198.812%20364.883%20199.124C365.359%20199.439%20365.598%20199.894%20365.598%20200.487C365.598%20201.076%20365.358%20201.528%20364.879%20201.843C364.402%20202.158%20363.702%20202.316%20362.777%20202.316C361.853%20202.316%20361.15%20202.155%20360.668%20201.835C360.189%20201.517%20359.949%20201.068%20359.949%20200.487ZM360.574%20200.487C360.574%20200.86%20360.758%20201.145%20361.125%20201.343C361.492%20201.541%20362.043%20201.64%20362.777%20201.64C363.517%20201.64%20364.066%20201.538%20364.426%20201.335C364.788%20201.135%20364.969%20200.852%20364.969%20200.487C364.969%20200.12%20364.789%20199.836%20364.43%20199.636C364.07%20199.435%20363.519%20199.335%20362.777%20199.335C362.04%20199.335%20361.488%20199.433%20361.121%20199.628C360.756%20199.826%20360.574%20200.112%20360.574%20200.487Z'%20fill='black'/%3e%3cpath%20d='M375.023%20199.987L369.023%20199.987'%20stroke='black'/%3e%3cpath%20d='M376.028%20173.527C375.927%20172.95%20376.084%20172.463%20376.501%20172.067C376.917%20171.671%20377.582%20171.393%20378.495%20171.232C379.408%20171.071%20380.127%20171.103%20380.65%20171.328C381.174%20171.555%20381.488%20171.961%20381.591%20172.546C381.693%20173.126%20381.536%20173.612%20381.118%20174.006C380.704%20174.399%20380.041%20174.676%20379.131%20174.836C378.22%20174.997%20377.5%20174.961%20376.97%20174.729C376.443%20174.5%20376.129%20174.099%20376.028%20173.527ZM376.644%20173.418C376.708%20173.785%20376.939%20174.034%20377.335%20174.165C377.731%20174.296%20378.29%20174.298%20379.014%20174.171C379.742%20174.042%20380.265%20173.847%20380.584%20173.584C380.906%20173.324%20381.035%20173.014%20380.972%20172.655C380.908%20172.294%20380.682%20172.045%20380.293%20171.91C379.904%20171.775%20379.344%20171.772%20378.613%20171.901C377.888%20172.029%20377.361%20172.221%20377.033%20172.477C376.708%20172.735%20376.579%20173.049%20376.644%20173.418Z'%20fill='black'/%3e%3cpath%20d='M380.41%20166.277L381.063%20169.982L380.506%20170.08L375.18%20168.29L375.046%20167.528L380.318%20169.352L379.795%20166.386L380.41%20166.277Z'%20fill='black'/%3e%3cpath%20d='M379.959%20163.719L380.069%20164.342L374.652%20165.297L374.536%20164.639L379.226%20163.812L377.869%20162.711L378.581%20162.585L379.959%20163.719Z'%20fill='black'/%3e%3cpath%20d='M357.91%20174.433C357.809%20173.856%20357.966%20173.369%20358.383%20172.973C358.8%20172.577%20359.464%20172.299%20360.377%20172.138C361.29%20171.977%20362.009%20172.009%20362.532%20172.234C363.056%20172.461%20363.37%20172.867%20363.473%20173.452C363.575%20174.032%20363.418%20174.518%20363.001%20174.912C362.586%20175.305%20361.923%20175.582%20361.013%20175.742C360.103%20175.903%20359.382%20175.867%20358.852%20175.635C358.325%20175.406%20358.011%20175.005%20357.91%20174.433ZM358.526%20174.324C358.591%20174.691%20358.821%20174.94%20359.217%20175.071C359.613%20175.202%20360.172%20175.204%20360.896%20175.077C361.624%20174.948%20362.147%20174.753%20362.466%20174.49C362.788%20174.23%20362.917%20173.92%20362.854%20173.561C362.79%20173.2%20362.564%20172.951%20362.175%20172.816C361.786%20172.681%20361.226%20172.678%20360.495%20172.807C359.77%20172.935%20359.243%20173.127%20358.915%20173.383C358.591%20173.641%20358.461%20173.955%20358.526%20174.324Z'%20fill='black'/%3e%3cpath%20d='M362.624%20169.064L362.734%20169.687L357.317%20170.642L357.201%20169.985L361.891%20169.158L360.534%20168.056L361.246%20167.931L362.624%20169.064Z'%20fill='black'/%3e%3cpath%20d='M372.364%20169.596L366.455%20170.638'%20stroke='black'/%3e%3cpath%20d='M368.759%20143.364C368.559%20142.814%20368.629%20142.307%20368.971%20141.845C369.313%20141.382%20369.919%20140.993%20370.79%20140.676C371.661%20140.358%20372.374%20140.265%20372.929%20140.396C373.485%20140.529%20373.864%20140.875%20374.067%20141.432C374.268%20141.986%20374.198%20142.492%20373.855%20142.952C373.515%20143.411%20372.911%20143.799%20372.042%20144.115C371.173%20144.431%20370.458%20144.521%20369.896%20144.385C369.337%20144.25%20368.958%20143.91%20368.759%20143.364ZM369.347%20143.151C369.474%20143.501%20369.744%20143.706%20370.157%20143.766C370.569%20143.826%20371.121%20143.731%20371.811%20143.48C372.506%20143.227%20372.988%20142.944%20373.256%20142.63C373.527%20142.318%20373.601%20141.99%20373.476%20141.648C373.351%20141.303%20373.085%20141.097%20372.678%20141.032C372.272%20140.966%20371.72%20141.06%20371.023%20141.314C370.33%20141.566%20369.845%20141.847%20369.567%20142.156C369.292%20142.467%20369.218%20142.798%20369.347%20143.151Z'%20fill='black'/%3e%3cpath%20d='M369.658%20140.26C369.315%20140.391%20368.977%20140.425%20368.644%20140.363C368.311%20140.302%20368.022%20140.162%20367.776%20139.944C367.53%20139.725%20367.348%20139.454%20367.23%20139.128C367.044%20138.617%20367.049%20138.13%20367.247%20137.667C367.447%20137.203%20367.802%20136.879%20368.314%20136.692C368.745%20136.536%20369.212%20136.534%20369.718%20136.689L372.593%20137.6L372.866%20138.349L370.534%20137.572C370.628%20137.701%20370.703%20137.843%20370.759%20137.997C370.862%20138.281%20370.893%20138.57%20370.85%20138.862C370.806%20139.155%20370.682%20139.429%20370.475%20139.684C370.271%20139.939%20369.999%20140.131%20369.658%20140.26ZM367.816%20138.898C367.941%20139.243%20368.153%20139.486%20368.451%20139.627C368.752%20139.77%20369.083%20139.773%20369.443%20139.636C369.809%20139.498%20370.057%20139.278%20370.189%20138.978C370.323%20138.677%20370.329%20138.356%20370.205%20138.016C370.081%20137.676%20369.86%20137.438%20369.541%20137.302C369.226%20137.164%20368.898%20137.16%20368.56%20137.289C368.194%20137.425%20367.946%20137.64%20367.818%20137.933C367.69%20138.229%20367.689%20138.551%20367.816%20138.898Z'%20fill='black'/%3e%3cpath%20d='M370.927%20133.023L371.144%20133.617L365.975%20135.498L365.747%20134.871L370.221%20133.242L368.694%20132.393L369.373%20132.146L370.927%20133.023Z'%20fill='black'/%3e%3cpath%20d='M351.074%20147.403C350.874%20146.852%20350.944%20146.346%20351.286%20145.883C351.627%20145.421%20352.234%20145.031%20353.105%20144.714C353.976%20144.397%20354.689%20144.304%20355.244%20144.434C355.799%20144.567%20356.179%20144.913%20356.382%20145.471C356.583%20146.024%20356.512%20146.53%20356.17%20146.99C355.83%20147.45%20355.225%20147.837%20354.357%20148.153C353.488%20148.47%20352.773%20148.56%20352.21%20148.423C351.651%20148.289%20351.273%20147.948%20351.074%20147.403ZM351.661%20147.189C351.789%20147.539%20352.059%20147.744%20352.471%20147.804C352.884%20147.865%20353.436%20147.769%20354.126%20147.518C354.821%20147.265%20355.302%20146.982%20355.57%20146.668C355.842%20146.356%20355.915%20146.029%20355.791%20145.686C355.665%20145.341%20355.399%20145.136%20354.993%20145.07C354.587%20145.005%20354.035%20145.099%20353.337%20145.353C352.645%20145.605%20352.159%20145.885%20351.881%20146.194C351.606%20146.505%20351.533%20146.837%20351.661%20147.189Z'%20fill='black'/%3e%3cpath%20d='M349.881%20142.092L350.817%20144.665L350.234%20144.878L348.965%20141.39L349.445%20141.215L352.339%20142.507C352.651%20142.648%20352.912%20142.729%20353.122%20142.75C353.331%20142.771%20353.524%20142.749%20353.701%20142.685C353.994%20142.578%20354.19%20142.408%20354.289%20142.176C354.389%20141.942%20354.389%20141.687%20354.289%20141.411C354.181%20141.115%20354.006%20140.911%20353.763%20140.8C353.523%20140.69%20353.215%20140.704%20352.838%20140.841L352.457%20140.98L352.284%20140.324L352.604%20140.207C353.14%20140.012%20353.601%20140.009%20353.989%20140.198C354.378%20140.386%20354.662%20140.723%20354.839%20141.21C355.005%20141.665%20355.01%20142.086%20354.854%20142.473C354.699%20142.862%20354.395%20143.139%20353.942%20143.303C353.673%20143.401%20353.402%20143.433%20353.13%20143.4C352.86%20143.367%20352.545%20143.271%20352.185%20143.112L349.881%20142.092Z'%20fill='black'/%3e%3cpath%20d='M364.468%20140.129L358.83%20142.181'%20stroke='black'/%3e%3cpath%20d='M356.363%20114.923C356.07%20114.415%20356.052%20113.904%20356.308%20113.389C356.564%20112.875%20357.093%20112.386%20357.896%20111.922C358.699%20111.458%20359.385%20111.243%20359.954%20111.275C360.524%20111.31%20360.958%20111.584%20361.255%20112.098C361.549%20112.608%20361.567%20113.119%20361.31%20113.632C361.055%20114.143%20360.527%20114.63%20359.726%20115.092C358.926%20115.554%20358.237%20115.767%20357.659%20115.73C357.086%20115.695%20356.653%20115.426%20356.363%20114.923ZM356.904%20114.61C357.091%20114.933%20357.392%20115.088%20357.809%20115.076C358.226%20115.063%20358.752%20114.874%20359.388%20114.507C360.029%20114.137%20360.454%20113.774%20360.664%20113.418C360.877%20113.064%20360.892%20112.729%20360.71%20112.413C360.527%20112.095%20360.229%20111.939%20359.817%20111.945C359.406%20111.951%20358.879%20112.14%20358.236%20112.511C357.598%20112.879%20357.169%20113.24%20356.948%20113.592C356.731%20113.946%20356.717%20114.285%20356.904%20114.61Z'%20fill='black'/%3e%3cpath%20d='M357.174%20109.101C357.509%20109.68%20357.624%20110.191%20357.521%20110.632C357.421%20111.072%20357.131%20111.43%20356.653%20111.706C356.179%20111.98%20355.707%20112.055%20355.237%20111.933C354.77%20111.812%20354.399%20111.513%20354.124%20111.037C354.003%20110.827%20353.92%20110.61%20353.873%20110.384C353.831%20110.159%20353.826%20109.937%20353.86%20109.719C353.897%20109.503%20353.986%20109.295%20354.127%20109.096C354.269%20108.9%20354.458%20108.733%20354.695%20108.597C354.761%20108.559%20354.845%20108.518%20354.949%20108.473L355.345%20109.042C355.204%20109.1%20355.11%20109.142%20355.062%20109.17C354.895%20109.266%20354.764%20109.379%20354.668%20109.51C354.573%20109.643%20354.517%20109.779%20354.498%20109.919C354.482%20110.058%20354.488%20110.193%20354.515%20110.324C354.545%20110.458%20354.595%20110.587%20354.666%20110.711C354.844%20111.017%20355.082%20111.207%20355.383%20111.28C355.685%20111.355%20355.988%20111.305%20356.293%20111.129C356.611%20110.946%20356.805%20110.704%20356.876%20110.405C356.948%20110.108%20356.863%20109.75%20356.623%20109.333L355.927%20108.129L358.303%20107.15L359.744%20109.646L359.2%20109.961L358.043%20107.958L356.807%20108.465L357.174%20109.101Z'%20fill='black'/%3e%3cpath%20d='M356.702%20104.362L357.019%20104.91L352.255%20107.66L351.921%20107.081L356.045%20104.7L354.394%20104.129L355.02%20103.768L356.702%20104.362Z'%20fill='black'/%3e%3cpath%20d='M339.648%20121.971C339.355%20121.463%20339.336%20120.952%20339.592%20120.437C339.849%20119.923%20340.378%20119.434%20341.181%20118.97C341.984%20118.507%20342.67%20118.291%20343.239%20118.323C343.809%20118.358%20344.242%20118.632%20344.539%20119.147C344.834%20119.656%20344.852%20120.167%20344.595%20120.68C344.339%20121.191%20343.812%20121.678%20343.011%20122.14C342.21%20122.602%20341.521%20122.815%20340.944%20122.778C340.37%20122.743%20339.938%20122.474%20339.648%20121.971ZM340.189%20121.658C340.375%20121.981%20340.677%20122.136%20341.094%20122.124C341.511%20122.112%20342.037%20121.922%20342.673%20121.555C343.314%20121.185%20343.739%20120.822%20343.948%20120.467C344.162%20120.112%20344.177%20119.777%20343.995%20119.461C343.811%20119.143%20343.514%20118.987%20343.102%20118.993C342.691%20118.999%20342.163%20119.188%20341.521%20119.559C340.882%20119.927%20340.453%20120.288%20340.233%20120.641C340.016%20120.994%20340.001%20121.333%20340.189%20121.658Z'%20fill='black'/%3e%3cpath%20d='M337.374%20118.033C336.764%20116.975%20337.023%20116.12%20338.153%20115.468L338.527%20116.046C338.128%20116.276%20337.872%20116.523%20337.76%20116.787C337.647%20117.05%20337.696%20117.363%20337.905%20117.726C338.081%20118.031%20338.309%20118.227%20338.588%20118.315C338.869%20118.406%20339.148%20118.371%20339.426%20118.211C339.707%20118.048%20339.878%20117.828%20339.937%20117.55C339.998%20117.275%20339.949%20117.001%20339.791%20116.728L339.655%20116.491L340.152%20116.204L340.285%20116.434C340.402%20116.637%20340.576%20116.768%20340.806%20116.828C341.035%20116.887%20341.258%20116.855%20341.472%20116.732C341.686%20116.608%20341.817%20116.43%20341.863%20116.199C341.91%20115.968%20341.866%20115.736%20341.732%20115.503C341.646%20115.354%20341.549%20115.241%20341.441%20115.162C341.333%20115.086%20341.217%20115.046%20341.092%20115.043C340.969%20115.039%20340.846%20115.056%20340.721%20115.095C340.596%20115.134%20340.46%20115.196%20340.314%20115.28L339.99%20114.673C340.464%20114.4%20340.896%20114.308%20341.288%20114.398C341.681%20114.49%20342.004%20114.755%20342.258%20115.195C342.483%20115.585%20342.555%20115.977%20342.472%20116.371C342.391%20116.766%20342.178%20117.064%20341.833%20117.263C341.598%20117.399%20341.355%20117.455%20341.104%20117.431C340.853%20117.408%20340.633%20117.323%20340.443%20117.177C340.522%20117.495%20340.505%20117.803%20340.394%20118.099C340.282%20118.395%20340.065%20118.636%20339.742%20118.822C339.314%20119.069%20338.88%20119.117%20338.44%20118.965C338.002%20118.815%20337.646%20118.504%20337.374%20118.033Z'%20fill='black'/%3e%3cpath%20d='M351.575%20112.482L346.379%20115.482'%20stroke='black'/%3e%3cpath%20d='M339.216%2089.0659C338.84%2088.617%20338.733%2088.1169%20338.896%2087.5655C339.058%2087.0141%20339.495%2086.4405%20340.205%2085.8446C340.915%2085.2487%20341.553%2084.9172%20342.119%2084.8503C342.687%2084.7853%20343.162%2084.9803%20343.543%2085.4351C343.922%2085.886%20344.028%2086.3861%20343.864%2086.9355C343.701%2087.4832%20343.266%2088.0542%20342.558%2088.6484C341.85%2089.2427%20341.208%2089.5719%20340.633%2089.6362C340.062%2089.7009%20339.59%2089.5107%20339.216%2089.0659ZM339.695%2088.6641C339.934%2088.9494%20340.258%2089.0498%20340.667%2088.9654C341.075%2088.881%20341.561%2088.6028%20342.123%2088.1307C342.69%2087.6553%20343.046%2087.2243%20343.19%2086.8377C343.339%2086.4515%20343.296%2086.1187%20343.061%2085.8394C342.825%2085.5581%20342.505%2085.4562%20342.101%2085.5335C341.697%2085.6109%20341.211%2085.8882%20340.642%2086.3652C340.077%2086.839%20339.717%2087.2686%20339.562%2087.6543C339.409%2088.0402%20339.454%2088.3769%20339.695%2088.6641Z'%20fill='black'/%3e%3cpath%20d='M339.036%2086.0501L338.561%2086.4493L338.016%2085.8L337.169%2086.5106L336.735%2085.9929L337.581%2085.2823L335.889%2083.2655L336.368%2082.8637L340.727%2082.1942L341.382%2082.9752L338.492%2085.4008L339.036%2086.0501ZM336.814%2083.4019L338.057%2084.8831L340.568%2082.7764L336.814%2083.4019Z'%20fill='black'/%3e%3cpath%20d='M337.716%2078.6064L338.123%2079.0911L333.91%2082.6265L333.48%2082.1148L337.128%2079.054L335.403%2078.7783L335.956%2078.3138L337.716%2078.6064Z'%20fill='black'/%3e%3cpath%20d='M323.979%2098.9094C323.602%2098.4606%20323.495%2097.9605%20323.658%2097.4091C323.821%2096.8577%20324.257%2096.2841%20324.968%2095.6881C325.678%2095.0922%20326.316%2094.7608%20326.882%2094.6939C327.449%2094.6289%20327.924%2094.8239%20328.306%2095.2787C328.684%2095.7295%20328.791%2096.2297%20328.626%2096.779C328.464%2097.3268%20328.028%2097.8977%20327.32%2098.492C326.612%2099.0862%20325.97%2099.4155%20325.395%2099.4798C324.824%2099.5444%20324.352%2099.3543%20323.979%2098.9094ZM324.457%2098.5077C324.697%2098.793%20325.021%2098.8934%20325.429%2098.809C325.838%2098.7246%20326.323%2098.4463%20326.886%2097.9743C327.452%2097.4989%20327.808%2097.0679%20327.953%2096.6813C328.101%2096.295%20328.058%2095.9622%20327.824%2095.6829C327.588%2095.4017%20327.268%2095.2997%20326.864%2095.3771C326.459%2095.4545%20325.973%2095.7317%20325.404%2096.2088C324.84%2096.6825%20324.48%2097.1122%20324.324%2097.4979C324.172%2097.8838%20324.216%2098.2204%20324.457%2098.5077Z'%20fill='black'/%3e%3cpath%20d='M323.799%2095.8937L323.323%2096.2929L322.778%2095.6436L321.931%2096.3541L321.497%2095.8365L322.344%2095.1259L320.651%2093.109L321.13%2092.7073L325.489%2092.0378L326.145%2092.8188L323.254%2095.2443L323.799%2095.8937ZM321.577%2093.2454L322.82%2094.7266L325.33%2092.62L321.577%2093.2454Z'%20fill='black'/%3e%3cpath%20d='M334.077%2087.4933L329.481%2091.3501'%20stroke='black'/%3e%3cpath%20d='M317.84%2066.5797C317.391%2066.203%20317.199%2065.7291%20317.264%2065.1578C317.328%2064.5865%20317.658%2063.9458%20318.254%2063.2356C318.85%2062.5254%20319.421%2062.0882%20319.967%2061.924C320.515%2061.7615%20321.016%2061.8711%20321.471%2062.2527C321.921%2062.631%20322.114%2063.105%20322.047%2063.6746C321.982%2064.2422%20321.652%2064.8801%20321.058%2065.5883C320.464%2066.2965%20319.889%2066.7322%20319.334%2066.8953C318.783%2067.0582%20318.285%2066.953%20317.84%2066.5797ZM318.242%2066.1009C318.527%2066.3403%20318.863%2066.3829%20319.251%2066.2288C319.639%2066.0748%20320.068%2065.7165%20320.541%2065.1539C321.016%2064.5874%20321.291%2064.1011%20321.367%2063.6953C321.446%2063.2891%20321.346%2062.9688%20321.066%2062.7345C320.785%2062.4985%20320.452%2062.4536%20320.068%2062.6001C319.683%2062.7465%20319.252%2063.1039%20318.775%2063.6725C318.301%2064.237%20318.021%2064.7227%20317.935%2065.1296C317.852%2065.5361%20317.954%2065.8598%20318.242%2066.1009Z'%20fill='black'/%3e%3cpath%20d='M314.357%2063.657C313.421%2062.8719%20313.373%2061.9797%20314.211%2060.9802L314.761%2061.3952C314.464%2061.7483%20314.308%2062.0679%20314.293%2062.3539C314.277%2062.6399%20314.43%2062.9177%20314.751%2063.1872C315.02%2063.4132%20315.301%2063.5198%20315.594%2063.5072C315.889%2063.4961%20316.139%2063.368%20316.345%2063.1226C316.554%2062.8732%20316.639%2062.6079%20316.6%2062.3267C316.563%2062.0472%20316.423%2061.8061%20316.182%2061.6036L315.972%2061.4278L316.341%2060.9879L316.545%2061.1587C316.724%2061.3093%20316.932%2061.3734%20317.169%2061.3509C317.405%2061.3283%20317.603%2061.2223%20317.762%2061.0328C317.921%2060.8433%20317.983%2060.6317%20317.948%2060.3982C317.913%2060.1647%20317.792%2059.9617%20317.587%2059.7893C317.455%2059.6788%20317.325%2059.6052%20317.196%2059.5684C317.069%2059.5333%20316.946%2059.5357%20316.828%2059.5757C316.711%2059.6136%20316.601%2059.6723%20316.497%2059.7516C316.393%2059.8309%20316.286%2059.9354%20316.177%2060.0651L315.666%2059.6052C316.017%2059.1863%20316.393%2058.952%20316.791%2058.9024C317.192%2058.8544%20317.587%2058.9936%20317.976%2059.32C318.321%2059.6096%20318.522%2059.9534%20318.579%2060.3513C318.638%2060.751%20318.539%2061.1034%20318.283%2061.4087C318.109%2061.6161%20317.9%2061.7518%20317.656%2061.8156C317.412%2061.8795%20317.176%2061.8752%20316.948%2061.8027C317.131%2062.0751%20317.22%2062.3695%20317.216%2062.6859C317.213%2063.0023%20317.091%2063.3032%20316.852%2063.5884C316.534%2063.9675%20316.142%2064.1607%20315.677%2064.1681C315.214%2064.1772%20314.774%2064.0068%20314.357%2063.657Z'%20fill='black'/%3e%3cpath%20d='M314.546%2056.5396L315.031%2056.9463L311.496%2061.1596L310.984%2060.7302L314.045%2057.0825L312.298%2057.1106L312.762%2056.557L314.546%2056.5396Z'%20fill='black'/%3e%3cpath%20d='M304.543%2078.9197C304.094%2078.5431%20303.902%2078.0691%20303.967%2077.4978C304.031%2076.9265%20304.362%2076.2858%20304.958%2075.5756C305.554%2074.8654%20306.124%2074.4282%20306.67%2074.264C307.218%2074.1015%20307.719%2074.2111%20308.174%2074.5927C308.625%2074.971%20308.817%2075.445%20308.75%2076.0146C308.685%2076.5822%20308.356%2077.2201%20307.761%2077.9283C307.167%2078.6365%20306.593%2079.0722%20306.037%2079.2354C305.486%2079.3982%20304.988%2079.293%20304.543%2078.9197ZM304.945%2078.4409C305.23%2078.6803%20305.567%2078.7229%20305.954%2078.5689C306.342%2078.4148%20306.772%2078.0565%20307.244%2077.4939C307.719%2076.9274%20307.995%2076.4412%20308.07%2076.0353C308.149%2075.6291%20308.049%2075.3089%20307.77%2075.0745C307.488%2074.8385%20307.155%2074.7937%20306.771%2074.9401C306.386%2075.0865%20305.955%2075.444%20305.478%2076.0125C305.005%2076.5771%20304.724%2077.0628%20304.638%2077.4696C304.555%2077.8761%20304.658%2078.1999%20304.945%2078.4409Z'%20fill='black'/%3e%3cpath%20d='M303.314%2073.1713C303.826%2073.6015%20304.11%2074.0416%20304.164%2074.4916C304.22%2074.9396%20304.07%2075.3751%20303.715%2075.798C303.364%2076.2169%20302.946%2076.4494%20302.462%2076.4954C301.982%2076.5411%20301.531%2076.3874%20301.11%2076.0342C300.925%2075.8785%20300.772%2075.7025%20300.651%2075.506C300.534%2075.3092%20300.454%2075.1027%20300.411%2074.8865C300.372%2074.67%20300.384%2074.4443%20300.449%2074.2094C300.515%2073.9763%20300.636%2073.7549%20300.812%2073.5455C300.861%2073.4876%20300.926%2073.42%20301.008%2073.3426L301.575%2073.7421C301.462%2073.8444%20301.388%2073.9165%20301.353%2073.9584C301.229%2074.106%20301.144%2074.2576%20301.099%2074.4132C301.055%2074.5704%20301.049%2074.7179%20301.079%2074.8558C301.112%2074.9916%20301.163%2075.1165%20301.234%2075.2304C301.307%2075.346%20301.398%2075.4498%20301.508%2075.5419C301.779%2075.7696%20302.069%2075.8662%20302.376%2075.8319C302.686%2075.7993%20302.954%2075.6484%20303.18%2075.379C303.416%2075.0978%20303.516%2074.8043%20303.48%2074.4988C303.446%2074.1949%20303.244%2073.8882%20302.875%2073.5785L301.81%2072.6846L303.707%2070.952L305.916%2072.8051L305.511%2073.2868L303.74%2071.8004L302.751%2072.6993L303.314%2073.1713Z'%20fill='black'/%3e%3cpath%20d='M312.506%2065.9234L308.649%2070.5197'%20stroke='black'/%3e%3cpath%20d='M292.885%2048.1478C292.378%2047.8548%20292.106%2047.4214%20292.071%2046.8476C292.035%2046.2738%20292.249%2045.5854%20292.713%2044.7826C293.176%2043.9797%20293.662%2043.45%20294.171%2043.1935C294.682%2042.9384%20295.195%2042.9592%20295.709%2043.2561C296.219%2043.5504%20296.491%2043.9838%20296.524%2044.5563C296.558%2045.1266%20296.345%2045.812%20295.882%2046.6126C295.42%2047.4133%20294.93%2047.9421%20294.412%2048.1992C293.897%2048.4553%20293.388%2048.4382%20292.885%2048.1478ZM293.198%2047.6065C293.52%2047.7927%20293.859%2047.7763%20294.214%2047.5573C294.569%2047.3382%20294.93%2046.9107%20295.297%2046.2747C295.667%2045.6342%20295.854%2045.1076%20295.857%2044.6948C295.865%2044.2811%20295.711%2043.983%20295.395%2043.8008C295.077%2043.6172%20294.741%2043.6308%20294.388%2043.8418C294.035%2044.0528%20293.672%2044.4796%20293.301%2045.1224C292.933%2045.7606%20292.741%2046.2876%20292.727%2046.7032C292.716%2047.1179%20292.873%2047.419%20293.198%2047.6065Z'%20fill='black'/%3e%3cpath%20d='M288.558%2044.8464L290.929%2046.2155L290.618%2046.7534L287.405%2044.898L287.661%2044.4548L290.707%2043.5841C291.037%2043.4919%20291.289%2043.3863%20291.463%2043.2672C291.637%2043.1482%20291.771%2043.0074%20291.865%2042.8451C292.021%2042.5744%20292.062%2042.3185%20291.988%2042.0772C291.915%2041.8336%20291.751%2041.6383%20291.496%2041.4911C291.223%2041.3336%20290.958%2041.2903%20290.701%2041.3611C290.447%2041.4311%20290.22%2041.6397%20290.019%2041.987L289.816%2042.3388L289.262%2041.9468L289.432%2041.6525C289.717%2041.1586%20290.069%2040.8594%20290.487%2040.755C290.906%2040.6484%20291.34%2040.7246%20291.789%2040.9837C292.209%2041.2259%20292.483%2041.5451%20292.612%2041.9414C292.743%2042.3389%20292.688%2042.7463%20292.448%2043.1636C292.304%2043.4116%20292.117%2043.6104%20291.887%2043.7599C291.66%2043.9085%20291.357%2044.0373%20290.978%2044.1464L288.558%2044.8464Z'%20fill='black'/%3e%3cpath%20d='M287.898%2038.8321L288.446%2039.1485L285.696%2043.9116L285.118%2043.5777L287.499%2039.4539L285.783%2039.7849L286.144%2039.1591L287.898%2038.8321Z'%20fill='black'/%3e%3cpath%20d='M281.933%2062.6093C281.426%2062.3163%20281.154%2061.8829%20281.119%2061.3091C281.083%2060.7353%20281.297%2060.0469%20281.761%2059.244C282.224%2058.4412%20282.71%2057.9115%20283.219%2057.655C283.731%2057.3999%20284.243%2057.4207%20284.757%2057.7176C285.267%2058.0119%20285.539%2058.4453%20285.572%2059.0178C285.607%2059.588%20285.393%2060.2735%20284.93%2061.0741C284.468%2061.8747%20283.978%2062.4036%20283.46%2062.6607C282.945%2062.9168%20282.436%2062.8996%20281.933%2062.6093ZM282.246%2062.068C282.568%2062.2542%20282.907%2062.2378%20283.262%2062.0188C283.617%2061.7997%20283.978%2061.3722%20284.345%2060.7362C284.715%2060.0957%20284.902%2059.5691%20284.906%2059.1563C284.913%2058.7425%20284.759%2058.4445%20284.443%2058.2622C284.125%2058.0786%20283.789%2058.0923%20283.436%2058.3033C283.083%2058.5143%20282.72%2058.9411%20282.349%2059.5839C281.981%2060.2221%20281.789%2060.7491%20281.775%2061.1647C281.764%2061.5794%20281.921%2061.8805%20282.246%2062.068Z'%20fill='black'/%3e%3cpath%20d='M280.627%2059.6537C280.447%2059.9743%20280.211%2060.218%20279.916%2060.3846C279.621%2060.5513%20279.31%2060.63%20278.981%2060.6208C278.653%2060.6115%20278.339%2060.5204%20278.039%2060.3472C277.567%2060.075%20277.258%2059.6983%20277.112%2059.217C276.968%2058.7335%20277.031%2058.256%20277.303%2057.7847C277.533%2057.3878%20277.89%2057.086%20278.376%2056.8795L281.165%2055.7291L281.855%2056.1276L279.569%2057.0317C279.725%2057.0702%20279.873%2057.1304%20280.015%2057.2124C280.277%2057.3635%20280.485%2057.565%20280.641%2057.817C280.796%2058.069%20280.876%2058.3591%20280.882%2058.6873C280.89%2059.0132%20280.804%2059.3354%20280.627%2059.6537ZM278.339%2059.7947C278.657%2059.9783%20278.976%2060.0283%20279.295%2059.9448C279.617%2059.8603%20279.873%2059.6499%20280.061%2059.3135C280.252%2058.9726%20280.301%2058.6448%20280.209%2058.3301C280.118%2058.0132%20279.916%2057.7642%20279.603%2057.5832C279.289%2057.4022%20278.967%2057.3618%20278.635%2057.4621C278.305%2057.5601%20278.052%2057.7672%20277.875%2058.0833C277.682%2058.4229%20277.631%2058.7465%20277.721%2059.054C277.813%2059.3629%20278.019%2059.6098%20278.339%2059.7947Z'%20fill='black'/%3e%3cpath%20d='M287.518%2048.4277L284.518%2053.6238'%20stroke='black'/%3e%3cpath%20d='M265.108%2034.329C264.557%2034.1286%20264.215%2033.7489%20264.08%2033.19C263.945%2032.6311%20264.036%2031.916%20264.354%2031.0448C264.671%2030.1737%20265.058%2029.5676%20265.514%2029.2267C265.973%2028.8866%20266.482%2028.8181%20267.04%2029.0212C267.593%2029.2225%20267.935%2029.6022%20268.068%2030.1602C268.201%2030.7158%20268.109%2031.428%20267.793%2032.2967C267.477%2033.1654%20267.086%2033.7714%20266.62%2034.1145C266.158%2034.4561%20265.654%2034.5276%20265.108%2034.329ZM265.322%2033.7417C265.672%2033.8691%20266.002%2033.7941%20266.314%2033.5167C266.625%2033.2394%20266.907%2032.7557%20267.158%2032.0656C267.411%2031.3706%20267.503%2030.8195%20267.435%2030.4123C267.371%2030.0036%20267.167%2029.7369%20266.825%2029.6122C266.48%2029.4866%20266.151%2029.5584%20265.84%2029.8275C265.529%2030.0966%20265.246%2030.5799%20264.992%2031.2773C264.74%2031.9699%20264.643%2032.522%20264.701%2032.9339C264.762%2033.3442%20264.969%2033.6134%20265.322%2033.7417Z'%20fill='black'/%3e%3cpath%20d='M262.815%2027.5626L263.41%2027.779L261.529%2032.9473L260.901%2032.7189L262.53%2028.2443L260.897%2028.8682L261.145%2028.1892L262.815%2027.5626Z'%20fill='black'/%3e%3cpath%20d='M258.579%2026.0208L259.174%2026.2372L257.293%2031.4055L256.665%2031.1771L258.294%2026.7025L256.661%2027.3265L256.909%2026.6474L258.579%2026.0208Z'%20fill='black'/%3e%3cpath%20d='M256.833%2050.4726C256.283%2050.2722%20255.94%2049.8925%20255.806%2049.3336C255.671%2048.7747%20255.762%2048.0596%20256.079%2047.1884C256.396%2046.3173%20256.783%2045.7112%20257.24%2045.3703C257.699%2045.0302%20258.207%2044.9617%20258.765%2045.1648C259.318%2045.3661%20259.661%2045.7458%20259.793%2046.3038C259.926%2046.8594%20259.835%2047.5716%20259.519%2048.4403C259.202%2049.309%20258.811%2049.915%20258.346%2050.2581C257.883%2050.5997%20257.379%2050.6712%20256.833%2050.4726ZM257.047%2049.8853C257.397%2050.0127%20257.728%2049.9377%20258.04%2049.6603C258.351%2049.383%20258.632%2048.8992%20258.884%2048.2092C259.137%2047.5142%20259.229%2046.9631%20259.161%2046.5559C259.096%2046.1472%20258.893%2045.8805%20258.55%2045.7558C258.205%2045.6302%20257.877%2045.702%20257.566%2045.9711C257.254%2046.2402%20256.972%2046.7235%20256.718%2047.4209C256.466%2048.1134%20256.369%2048.6656%20256.427%2049.0775C256.488%2049.4878%20256.695%2049.757%20257.047%2049.8853Z'%20fill='black'/%3e%3cpath%20d='M252.746%2043.0528L256.281%2044.3394L256.087%2044.8717L251.874%2048.5885L251.147%2048.324L255.362%2044.6702L252.532%2043.6401L252.746%2043.0528Z'%20fill='black'/%3e%3cpath%20d='M259.871%2035.5366L257.819%2041.1747'%20stroke='black'/%3e%3cpath%20d='M235.353%2025.5432C234.775%2025.4415%20234.372%2025.1271%20234.142%2024.6C233.913%2024.0729%20233.878%2023.3529%20234.039%2022.4399C234.2%2021.5269%20234.476%2020.8629%20234.867%2020.4478C235.26%2020.0332%20235.749%2019.8775%20236.333%2019.9806C236.913%2020.0828%20237.316%2020.3972%20237.543%2020.9238C237.771%2021.4478%20237.805%2022.1651%20237.644%2023.0755C237.483%2023.9859%20237.204%2024.6506%20236.805%2025.0694C236.408%2025.4861%20235.924%2025.644%20235.353%2025.5432ZM235.461%2024.9277C235.828%2024.9924%20236.141%2024.8611%20236.399%2024.5338C236.658%2024.2066%20236.851%2023.6814%20236.978%2022.9581C237.107%2022.2298%20237.102%2021.671%20236.965%2021.2818C236.83%2020.8905%20236.583%2020.6632%20236.224%2020.5999C235.863%2020.5362%20235.552%2020.6638%20235.292%2020.9829C235.032%2021.302%20234.838%2021.827%20234.709%2022.5579C234.581%2023.2837%20234.581%2023.8444%20234.71%2024.2399C234.841%2024.6333%20235.092%2024.8626%20235.461%2024.9277Z'%20fill='black'/%3e%3cpath%20d='M230.913%2024.7604C230.336%2024.6587%20229.933%2024.3443%20229.703%2023.8172C229.473%2023.2902%20229.439%2022.5701%20229.6%2021.6571C229.761%2020.7441%20230.037%2020.0801%20230.427%2019.6651C230.82%2019.2504%20231.309%2019.0947%20231.894%2019.1978C232.474%2019.3%20232.877%2019.6144%20233.104%2020.141C233.332%2020.665%20233.365%2021.3823%20233.205%2022.2927C233.044%2023.2031%20232.764%2023.8678%20232.365%2024.2866C231.969%2024.7033%20231.485%2024.8613%20230.913%2024.7604ZM231.022%2024.1449C231.388%2024.2096%20231.701%2024.0783%20231.96%2023.7511C232.219%2023.4238%20232.412%2022.8986%20232.539%2022.1754C232.668%2021.447%20232.663%2020.8883%20232.525%2020.4991C232.391%2020.1078%20232.144%2019.8805%20231.785%2019.8171C231.423%2019.7534%20231.112%2019.8811%20230.853%2020.2002C230.593%2020.5192%20230.398%2021.0442%20230.269%2021.7752C230.141%2022.5009%20230.142%2023.0616%20230.27%2023.4571C230.402%2023.8505%20230.652%2024.0798%20231.022%2024.1449Z'%20fill='black'/%3e%3cpath%20d='M227.48%2018.4949L228.103%2018.6048L227.148%2024.0212L226.491%2023.9052L227.317%2019.2159L225.818%2020.1137L225.944%2019.4021L227.48%2018.4949Z'%20fill='black'/%3e%3cpath%20d='M230.007%2042.8783C229.43%2042.7766%20229.027%2042.4622%20228.797%2041.9351C228.567%2041.4081%20228.533%2040.6881%20228.694%2039.7751C228.855%2038.8621%20229.131%2038.198%20229.521%2037.783C229.914%2037.3684%20230.403%2037.2126%20230.988%2037.3157C231.568%2037.4179%20231.971%2037.7323%20232.198%2038.2589C232.426%2038.783%20232.459%2039.5002%20232.299%2040.4106C232.138%2041.3211%20231.858%2041.9857%20231.459%2042.4045C231.063%2042.8212%20230.579%2042.9792%20230.007%2042.8783ZM230.116%2042.2628C230.482%2042.3275%20230.795%2042.1962%20231.054%2041.869C231.313%2041.5417%20231.506%2041.0165%20231.633%2040.2933C231.762%2039.5649%20231.757%2039.0062%20231.619%2038.617C231.485%2038.2257%20231.238%2037.9984%20230.879%2037.9351C230.517%2037.8713%20230.206%2037.999%20229.947%2038.3181C229.687%2038.6372%20229.492%2039.1622%20229.363%2039.8931C229.235%2040.6189%20229.236%2041.1795%20229.364%2041.575C229.496%2041.9685%20229.746%2042.1977%20230.116%2042.2628Z'%20fill='black'/%3e%3cpath%20d='M226.962%2041.8813C226.561%2042.1173%20226.097%2042.1889%20225.572%2042.0962C225.046%2042.0035%20224.634%2041.7775%20224.335%2041.418C224.039%2041.0565%20223.934%2040.632%20224.02%2040.1448C224.08%2039.8037%20224.223%2039.5248%20224.449%2039.3081C224.675%2039.0915%20224.955%2038.953%20225.288%2038.8928C225.084%2038.7432%20224.933%2038.5579%20224.834%2038.3369C224.739%2038.1138%20224.713%2037.8791%20224.756%2037.6329C224.827%2037.2328%20225.032%2036.9306%20225.372%2036.7261C225.713%2036.5191%20226.106%2036.4549%20226.553%2036.5336C226.991%2036.6109%20227.334%2036.8049%20227.58%2037.1155C227.83%2037.4265%20227.919%2037.7808%20227.849%2038.1783C227.806%2038.4245%20227.702%2038.6363%20227.539%2038.8137C227.376%2038.9886%20227.174%2039.1117%20226.934%2039.1831C227.224%2039.3558%20227.438%2039.5826%20227.576%2039.8635C227.715%2040.1418%20227.754%2040.4515%20227.694%2040.7926C227.607%2041.2824%20227.363%2041.6453%20226.962%2041.8813ZM226.15%2038.8187C226.409%2038.8643%20226.642%2038.8182%20226.848%2038.6801C227.058%2038.5425%20227.184%2038.3506%20227.228%2038.1044C227.27%2037.8633%20227.216%2037.6449%20227.065%2037.4491C226.918%2037.2512%20226.715%2037.1294%20226.456%2037.0837C226.191%2037.0371%20225.956%2037.0803%20225.75%2037.2133C225.545%2037.3462%20225.42%2037.5345%20225.377%2037.7781C225.334%2038.0243%20225.386%2038.2476%20225.533%2038.4481C225.682%2038.649%20225.888%2038.7726%20226.15%2038.8187ZM225.68%2041.4807C226.014%2041.5395%20226.308%2041.4896%20226.563%2041.331C226.821%2041.1729%20226.979%2040.931%20227.036%2040.6053C227.093%2040.2847%20227.027%2040.0073%20226.838%2039.773C226.652%2039.5392%20226.392%2039.3929%20226.059%2039.3342C225.723%2039.2749%20225.426%2039.3231%20225.169%2039.4787C224.911%2039.6342%20224.754%2039.8723%20224.698%2040.1929C224.64%2040.5186%20224.706%2040.7998%20224.894%2041.0367C225.082%2041.2735%20225.344%2041.4215%20225.68%2041.4807Z'%20fill='black'/%3e%3cpath%20d='M230.405%2027.6418L229.363%2033.5506'%20stroke='black'/%3e%3cpath%20d='M171.338%2024.3698C170.761%2024.4715%20170.275%2024.314%20169.879%2023.8973C169.483%2023.4806%20169.204%2022.8157%20169.043%2021.9027C168.882%2020.9897%20168.914%2020.2714%20169.139%2019.7479C169.367%2019.2238%20169.773%2018.9102%20170.358%2018.8071C170.937%2018.7049%20171.424%2018.8624%20171.817%2019.2796C172.21%2019.6942%20172.487%2020.3567%20172.648%2021.2672C172.808%2022.1776%20172.773%2022.8978%20172.541%2023.4279C172.311%2023.955%20171.91%2024.2689%20171.338%2024.3698ZM171.23%2023.7543C171.597%2023.6896%20171.846%2023.4593%20171.977%2023.0633C172.108%2022.6673%20172.11%2022.1077%20171.982%2021.3845C171.854%2020.6562%20171.658%2020.1327%20171.396%2019.814C171.135%2019.4924%20170.826%2019.3632%20170.467%2019.4265C170.105%2019.4903%20169.857%2019.7165%20169.722%2020.1052C169.587%2020.494%20169.584%2021.0538%20169.712%2021.7847C169.84%2022.5105%20170.032%2023.0372%20170.289%2023.3649C170.547%2023.6896%20170.861%2023.8194%20171.23%2023.7543Z'%20fill='black'/%3e%3cpath%20d='M168.136%2024.4743C167.84%2024.8333%20167.429%2025.0592%20166.903%2025.1519C166.377%2025.2446%20165.912%2025.1732%20165.509%2024.9376C165.107%2024.6991%20164.863%2024.3361%20164.777%2023.8489C164.717%2023.5078%20164.756%2023.1968%20164.894%2022.9159C165.033%2022.635%20165.248%2022.4093%20165.54%2022.2387C165.298%2022.1678%20165.092%2022.0454%20164.924%2021.8714C164.758%2021.6944%20164.653%2021.4828%20164.61%2021.2366C164.54%2020.8366%20164.629%2020.4823%20164.879%2020.1738C165.128%2019.8628%20165.476%2019.6679%20165.922%2019.5892C166.361%2019.5119%20166.749%2019.577%20167.087%2019.7845C167.428%2019.9915%20167.633%2020.2938%20167.703%2020.6913C167.746%2020.9375%20167.722%2021.1719%20167.629%2021.3945C167.535%2021.6146%20167.388%2021.7993%20167.187%2021.9484C167.518%2022.0117%20167.797%2022.1516%20168.022%2022.3683C168.248%2022.5824%20168.391%2022.86%20168.451%2023.2011C168.537%2023.6909%20168.432%2024.1153%20168.136%2024.4743ZM166.325%2021.8743C166.584%2021.8286%20166.787%2021.7056%20166.934%2021.5051C167.084%2021.3042%20167.137%2021.0806%20167.094%2020.8344C167.051%2020.5933%20166.926%2020.4066%20166.717%2020.2741C166.511%2020.1386%20166.278%2020.0937%20166.019%2020.1394C165.755%2020.1859%20165.549%2020.3069%20165.401%2020.5022C165.253%2020.6976%20165.2%2020.9171%20165.243%2021.1607C165.287%2021.4069%20165.412%2021.599%20165.619%2021.7371C165.828%2021.8747%20166.063%2021.9204%20166.325%2021.8743ZM166.794%2024.5364C167.128%2024.4776%20167.387%2024.33%20167.573%2024.0936C167.761%2023.8568%20167.827%2023.5756%20167.769%2023.2499C167.713%2022.9293%20167.556%2022.6912%20167.298%2022.5356C167.043%2022.3796%20166.749%2022.331%20166.416%2022.3898C166.08%2022.449%20165.818%2022.5958%20165.629%2022.83C165.44%2023.0643%20165.374%2023.3417%20165.43%2023.6623C165.488%2023.988%20165.646%2024.2299%20165.904%2024.388C166.161%2024.5462%20166.458%2024.5956%20166.794%2024.5364Z'%20fill='black'/%3e%3cpath%20d='M176.684%2041.7049C176.107%2041.8067%20175.62%2041.6492%20175.224%2041.2325C174.828%2040.8157%20174.549%2040.1509%20174.388%2039.2379C174.227%2038.3249%20174.259%2037.6066%20174.484%2037.083C174.712%2036.559%20175.118%2036.2454%20175.703%2036.1423C176.283%2036.0401%20176.769%2036.1976%20177.163%2036.6147C177.556%2037.0293%20177.832%2037.6919%20177.993%2038.6023C178.154%2039.5127%20178.118%2040.233%20177.886%2040.7631C177.656%2041.2901%20177.256%2041.6041%20176.684%2041.7049ZM176.575%2041.0894C176.942%2041.0247%20177.191%2040.7944%20177.322%2040.3984C177.453%2040.0025%20177.455%2039.4429%20177.327%2038.7197C177.199%2037.9913%20177.004%2037.4678%20176.741%2037.1492C176.481%2036.8275%20176.171%2036.6983%20175.812%2036.7616C175.451%2036.8254%20175.202%2037.0517%20175.067%2037.4404C174.932%2037.8291%20174.929%2038.3889%20175.058%2039.1199C175.186%2039.8456%20175.378%2040.3724%20175.634%2040.7001C175.892%2041.0247%20176.206%2041.1545%20176.575%2041.0894Z'%20fill='black'/%3e%3cpath%20d='M172.244%2042.4877C171.667%2042.5894%20171.181%2042.432%20170.785%2042.0152C170.389%2041.5985%20170.11%2040.9337%20169.949%2040.0207C169.788%2039.1077%20169.82%2038.3894%20170.045%2037.8658C170.273%2037.3417%20170.679%2037.0282%20171.264%2036.9251C171.843%2036.8229%20172.33%2036.9804%20172.723%2037.3975C173.116%2037.8121%20173.393%2038.4746%20173.554%2039.3851C173.714%2040.2955%20173.679%2041.0158%20173.447%2041.5458C173.217%2042.0729%20172.816%2042.3868%20172.244%2042.4877ZM172.136%2041.8722C172.503%2041.8075%20172.752%2041.5772%20172.883%2041.1812C173.014%2040.7852%20173.016%2040.2256%20172.888%2039.5024C172.76%2038.7741%20172.564%2038.2506%20172.302%2037.9319C172.042%2037.6103%20171.732%2037.4811%20171.373%2037.5444C171.011%2037.6082%20170.763%2037.8344%20170.628%2038.2232C170.493%2038.6119%20170.49%2039.1717%20170.618%2039.9026C170.746%2040.6284%20170.939%2041.1552%20171.195%2041.4828C171.453%2041.8075%20171.767%2041.9373%20172.136%2041.8722Z'%20fill='black'/%3e%3cpath%20d='M166.876%2037.7741L167.499%2037.6643L168.454%2043.0807L167.796%2043.1967L166.969%2038.5073L165.868%2039.8637L165.742%2039.1521L166.876%2037.7741Z'%20fill='black'/%3e%3cpath%20d='M169.627%2027.6425L170.669%2033.5513'%20stroke='black'/%3e%3cpath%20d='M141.281%2032.018C140.73%2032.2184%20140.224%2032.1478%20139.761%2031.8062C139.299%2031.4646%20138.909%2030.8582%20138.592%2029.987C138.275%2029.1158%20138.182%2028.4029%20138.312%2027.8482C138.445%2027.2926%20138.791%2026.9132%20139.349%2026.7102C139.902%2026.5089%20140.408%2026.5795%20140.868%2026.922C141.327%2027.262%20141.715%2027.8664%20142.031%2028.7351C142.347%2029.6039%20142.437%2030.3194%20142.301%2030.8816C142.167%2031.4406%20141.826%2031.8193%20141.281%2032.018ZM141.067%2031.4307C141.417%2031.3033%20141.622%2031.0332%20141.682%2030.6205C141.743%2030.2078%20141.647%2029.6564%20141.396%2028.9663C141.143%2028.2713%20140.86%2027.7897%20140.546%2027.5215C140.234%2027.2499%20139.906%2027.1765%20139.564%2027.3011C139.219%2027.4267%20139.014%2027.6927%20138.948%2028.099C138.883%2028.5052%20138.977%2029.0571%20139.231%2029.7545C139.483%2030.4471%20139.763%2030.9324%20140.072%2031.2107C140.383%2031.4856%20140.715%2031.5589%20141.067%2031.4307Z'%20fill='black'/%3e%3cpath%20d='M133.38%2028.9616L136.915%2027.675L137.109%2028.2073L136.27%2033.7625L135.544%2034.027L136.424%2028.5188L133.594%2029.5489L133.38%2028.9616Z'%20fill='black'/%3e%3cpath%20d='M149.555%2048.1615C149.004%2048.362%20148.498%2048.2913%20148.035%2047.9497C147.573%2047.6081%20147.183%2047.0017%20146.866%2046.1306C146.549%2045.2594%20146.456%2044.5465%20146.587%2043.9918C146.72%2043.4362%20147.065%2043.0568%20147.623%2042.8538C148.176%2042.6525%20148.683%2042.7231%20149.143%2043.0656C149.602%2043.4056%20149.989%2044.01%20150.306%2044.8787C150.622%2045.7475%20150.712%2046.4629%20150.576%2047.0252C150.441%2047.5842%20150.101%2047.9629%20149.555%2048.1615ZM149.341%2047.5742C149.691%2047.4469%20149.896%2047.1768%20149.957%2046.7641C150.017%2046.3514%20149.922%2045.7999%20149.671%2045.1099C149.418%2044.4149%20149.134%2043.9333%20148.82%2043.665C148.508%2043.3935%20148.181%2043.32%20147.838%2043.4447C147.493%2043.5703%20147.288%2043.8363%20147.222%2044.2425C147.157%2044.6488%20147.251%2045.2007%20147.505%2045.8981C147.757%2046.5906%20148.038%2047.076%20148.347%2047.3543C148.657%2047.6292%20148.989%2047.7025%20149.341%2047.5742Z'%20fill='black'/%3e%3cpath%20d='M143.449%2044.4519L144.044%2044.2355L145.925%2049.4038L145.297%2049.6322L143.669%2045.1577L142.819%2046.6848L142.572%2046.0057L143.449%2044.4519Z'%20fill='black'/%3e%3cpath%20d='M139.213%2045.9936L139.808%2045.7772L141.689%2050.9455L141.061%2051.174L139.433%2046.6994L138.584%2048.2265L138.336%2047.5474L139.213%2045.9936Z'%20fill='black'/%3e%3cpath%20d='M140.163%2035.5382L142.215%2041.1763'%20stroke='black'/%3e%3cpath%20d='M113.008%2044.7687C112.501%2045.0617%20111.99%2045.0801%20111.475%2044.824C110.96%2044.5679%20110.471%2044.0384%20110.007%2043.2355C109.544%2042.4326%20109.328%2041.7467%20109.361%2041.1777C109.395%2040.6075%20109.67%2040.1739%20110.184%2039.877C110.694%2039.5827%20111.205%2039.5643%20111.717%2039.8217C112.228%2040.0769%20112.715%2040.6048%20113.177%2041.4054C113.639%2042.206%20113.852%2042.895%20113.816%2043.4724C113.78%2044.0462%20113.511%2044.4783%20113.008%2044.7687ZM112.696%2044.2274C113.018%2044.0412%20113.173%2043.7397%20113.161%2043.3227C113.149%2042.9058%20112.959%2042.3793%20112.592%2041.7433C112.222%2041.1028%20111.859%2040.6777%20111.504%2040.4681C111.149%2040.2548%20110.814%2040.2394%20110.498%2040.4217C110.18%2040.6053%20110.024%2040.9028%20110.03%2041.3143C110.036%2041.7258%20110.225%2042.2529%20110.596%2042.8956C110.965%2043.5339%20111.325%2043.9632%20111.678%2044.1835C112.032%2044.4003%20112.371%2044.4149%20112.696%2044.2274Z'%20fill='black'/%3e%3cpath%20d='M109.795%2044.4225C109.983%2044.7379%20110.076%2045.0649%20110.073%2045.4034C110.07%2045.7419%20109.982%2046.0511%20109.81%2046.331C109.638%2046.6108%20109.402%2046.8373%20109.102%2047.0105C108.63%2047.2826%20108.15%2047.3617%20107.66%2047.2476C107.169%2047.1312%20106.787%2046.8373%20106.515%2046.366C106.286%2045.9691%20106.203%2045.5085%20106.267%2044.9843L106.665%2041.994L107.356%2041.5956L106.996%2044.027C107.107%2043.9119%20107.233%2043.8133%20107.375%2043.7312C107.637%2043.5802%20107.916%2043.5005%20108.211%2043.492C108.507%2043.4836%20108.799%2043.5589%20109.086%2043.7178C109.372%2043.8745%20109.608%2044.1094%20109.795%2044.4225ZM108.774%2046.4737C109.092%2046.2901%20109.294%2046.0393%20109.381%2045.7214C109.469%2045.4%20109.415%2045.0736%20109.218%2044.7425C109.018%2044.4068%20108.759%2044.2001%20108.44%2044.1223C108.12%2044.0424%20107.804%2044.0929%20107.49%2044.2739C107.177%2044.4549%20106.98%2044.714%20106.901%2045.0512C106.821%2045.3862%20106.874%2045.7092%20107.059%2046.02C107.257%2046.357%20107.511%2046.5634%20107.823%2046.6392C108.137%2046.7138%20108.453%2046.6586%20108.774%2046.4737Z'%20fill='black'/%3e%3cpath%20d='M123.96%2059.2302C123.453%2059.5232%20122.941%2059.5416%20122.427%2059.2855C121.912%2059.0294%20121.423%2058.4999%20120.959%2057.697C120.496%2056.8941%20120.28%2056.2082%20120.313%2055.6392C120.347%2055.069%20120.622%2054.6354%20121.136%2054.3385C121.645%2054.0443%20122.157%2054.0258%20122.669%2054.2833C123.18%2054.5384%20123.667%2055.0663%20124.129%2055.8669C124.591%2056.6676%20124.804%2057.3566%20124.768%2057.9339C124.732%2058.5078%20124.463%2058.9399%20123.96%2059.2302ZM123.647%2058.689C123.97%2058.5028%20124.125%2058.2012%20124.113%2057.7842C124.101%2057.3673%20123.911%2056.8408%20123.544%2056.2048C123.174%2055.5643%20122.811%2055.1392%20122.456%2054.9296C122.101%2054.7164%20121.766%2054.7009%20121.45%2054.8832C121.132%2055.0668%20120.976%2055.3643%20120.982%2055.7758C120.988%2056.1873%20121.177%2056.7144%20121.548%2057.3572C121.916%2057.9954%20122.277%2058.4247%20122.63%2058.645C122.983%2058.8618%20123.323%2058.8765%20123.647%2058.689Z'%20fill='black'/%3e%3cpath%20d='M118.937%2061.3273L121.309%2059.9581L121.619%2060.496L118.405%2062.3515L118.149%2061.9083L118.919%2058.8345C119.004%2058.5027%20119.038%2058.2317%20119.022%2058.0215C119.006%2057.8113%20118.951%2057.625%20118.857%2057.4626C118.701%2057.192%20118.5%2057.0285%20118.254%2056.9721C118.007%2056.9134%20117.755%2056.9577%20117.501%2057.1048C117.228%2057.2624%20117.058%2057.4703%20116.99%2057.7287C116.924%2057.9836%20116.991%2058.2846%20117.192%2058.6319L117.395%2058.9838L116.778%2059.2675L116.608%2058.9732C116.323%2058.4793%20116.24%2058.0252%20116.358%2057.6109C116.476%2057.1943%20116.759%2056.8565%20117.208%2056.5974C117.627%2056.3552%20118.041%2056.2773%20118.448%2056.3636C118.858%2056.4487%20119.184%2056.6999%20119.425%2057.1171C119.568%2057.3652%20119.647%2057.6265%20119.661%2057.9009C119.676%2058.1719%20119.636%2058.4986%20119.541%2058.8812L118.937%2061.3273Z'%20fill='black'/%3e%3cpath%20d='M113.399%2058.8911L113.947%2058.5747L116.697%2063.3378L116.118%2063.6718L113.738%2059.548L113.166%2061.1994L112.805%2060.5735L113.399%2058.8911Z'%20fill='black'/%3e%3cpath%20d='M112.519%2048.4294L115.519%2053.6256'%20stroke='black'/%3e%3cpath%20d='M87.3793%2062.2353C86.9305%2062.6119%2086.4304%2062.7188%2085.879%2062.556C85.3276%2062.3931%2084.754%2061.9566%2084.158%2061.2464C83.5621%2060.5362%2083.2307%2059.8982%2083.1638%2059.3322C83.0988%2058.7646%2083.2938%2058.29%2083.7486%2057.9083C84.1995%2057.53%2084.6996%2057.4231%2085.249%2057.5876C85.7967%2057.7502%2086.3676%2058.1855%2086.9619%2058.8937C87.5561%2059.6019%2087.8854%2060.2435%2087.9497%2060.8184C88.0143%2061.3897%2087.8242%2061.862%2087.3793%2062.2353ZM86.9776%2061.7565C87.2629%2061.5171%2087.3633%2061.1932%2087.2789%2060.7847C87.1945%2060.3762%2086.9163%2059.8907%2086.4442%2059.3281C85.9688%2058.7615%2085.5378%2058.4059%2085.1512%2058.2612C84.7649%2058.1128%2084.4321%2058.1558%2084.1529%2058.3901C83.8716%2058.6261%2083.7696%2058.9462%2083.847%2059.3504C83.9244%2059.7546%2084.2016%2060.241%2084.6787%2060.8095C85.1524%2061.3741%2085.5821%2061.7342%2085.9678%2061.89C86.3537%2062.042%2086.6903%2061.9976%2086.9776%2061.7565Z'%20fill='black'/%3e%3cpath%20d='M81.5048%2062.4478C82.0175%2062.0176%2082.5001%2061.8149%2082.9527%2061.8397C83.4036%2061.8625%2083.8064%2062.0854%2084.1613%2062.5083C84.5128%2062.9272%2084.6693%2063.379%2084.6306%2063.8636C84.5922%2064.3445%2084.3625%2064.7616%2083.9416%2065.1148C83.7561%2065.2705%2083.5561%2065.3907%2083.3416%2065.4754C83.1275%2065.5565%2082.9103%2065.5994%2082.6899%2065.6042C82.4698%2065.6053%2082.2498%2065.5537%2082.0297%2065.4494C81.8116%2065.3434%2081.6147%2065.1857%2081.4389%2064.9763C81.3904%2064.9184%2081.3351%2064.8424%2081.2731%2064.7482L81.7651%2064.2589C81.8462%2064.388%2081.9043%2064.4735%2081.9395%2064.5154C82.0633%2064.663%2082.1979%2064.7728%2082.3432%2064.8446C82.4905%2064.9148%2082.6346%2064.9469%2082.7757%2064.9407C82.915%2064.9326%2083.047%2064.9034%2083.1715%2064.8533C83.298%2064.8016%2083.4161%2064.7296%2083.5259%2064.6376C83.7972%2064.4099%2083.9426%2064.1417%2083.9623%2063.8329C83.9839%2063.5224%2083.8817%2063.2325%2083.6557%2062.9631C83.4197%2062.6819%2083.1481%2062.5324%2082.841%2062.5148C82.5358%2062.4955%2082.1987%2062.6407%2081.8296%2062.9503L80.7644%2063.8442L79.3876%2061.6747L81.596%2059.8217L82.0002%2060.3035L80.2287%2061.7899L80.9423%2062.9198L81.5048%2062.4478Z'%20fill='black'/%3e%3cpath%20d='M100.676%2074.5753C100.227%2074.9519%2099.7272%2075.0588%2099.1758%2074.896C98.6244%2074.7332%2098.0507%2074.2966%2097.4548%2073.5864C96.8589%2072.8763%2096.5275%2072.2382%2096.4605%2071.6723C96.3956%2071.1046%2096.5905%2070.63%2097.0454%2070.2484C97.4962%2069.87%2097.9964%2069.7632%2098.5457%2069.9277C99.0934%2070.0902%2099.6644%2070.5256%20100.259%2071.2337C100.853%2071.9419%20101.182%2072.5835%20101.246%2073.1585C101.311%2073.7297%20101.121%2074.202%20100.676%2074.5753ZM100.274%2074.0965C100.56%2073.8572%20100.66%2073.5332%20100.576%2073.1247C100.491%2072.7162%20100.213%2072.2307%2099.741%2071.6681C99.2656%2071.1016%2098.8346%2070.7459%2098.448%2070.6012C98.0617%2070.4528%2097.7289%2070.4958%2097.4496%2070.7301C97.1684%2070.9662%2097.0664%2071.2863%2097.1438%2071.6904C97.2212%2072.0946%2097.4984%2072.581%2097.9755%2073.1496C98.4492%2073.7141%2098.8789%2074.0743%2099.2645%2074.23C99.6505%2074.3821%2099.9871%2074.3376%20100.274%2074.0965Z'%20fill='black'/%3e%3cpath%20d='M97.193%2077.498C96.2574%2078.283%2095.3703%2078.1759%2094.5316%2077.1764L95.0357%2076.7076C95.332%2077.0607%2095.6196%2077.2697%2095.8986%2077.3348C96.1775%2077.3999%2096.4776%2077.2977%2096.7988%2077.0282C97.0681%2076.8022%2097.2219%2076.5439%2097.2603%2076.2534C97.3007%2075.9612%2097.2179%2075.6924%2097.012%2075.447C96.8028%2075.1976%2096.5562%2075.0679%2096.2725%2075.0579C95.9907%2075.0462%2095.7291%2075.1416%2095.4877%2075.3441L95.2782%2075.5199L94.9091%2075.08L95.1126%2074.9093C95.2922%2074.7586%2095.3914%2074.5649%2095.4102%2074.3281C95.4291%2074.0913%2095.359%2073.8781%2095.2%2073.6886C95.041%2073.4991%2094.8434%2073.4014%2094.6073%2073.3955C94.3712%2073.3897%2094.1505%2073.473%2093.945%2073.6454C93.8133%2073.7558%2093.7182%2073.8714%2093.6596%2073.9919C93.603%2074.1108%2093.584%2074.2321%2093.6028%2074.3557C93.6199%2074.4774%2093.6585%2074.5963%2093.7185%2074.7124C93.7786%2074.8286%2093.8631%2074.9515%2093.9719%2075.0812L93.4301%2075.5052C93.0786%2075.0862%2092.913%2074.6762%2092.9333%2074.275C92.9556%2073.8721%2093.1613%2073.5075%2093.5503%2073.1811C93.8954%2072.8915%2094.2689%2072.7532%2094.6707%2072.7661C95.0745%2072.7774%2095.4045%2072.9357%2095.6606%2073.2409C95.8347%2073.4484%2095.932%2073.6778%2095.9525%2073.9291C95.9731%2074.1805%2095.9278%2074.4122%2095.8169%2074.6243C96.1168%2074.4916%2096.4223%2074.4545%2096.7332%2074.5132C97.0442%2074.5718%2097.3194%2074.7437%2097.5587%2075.029C97.8768%2075.408%2097.9991%2075.8273%2097.9256%2076.2866C97.8541%2076.7443%2097.6099%2077.1481%2097.193%2077.498Z'%20fill='black'/%3e%3cpath%20d='M90.2166%2076.0752L90.7014%2075.6685L94.2367%2079.8817L93.725%2080.3111L90.6643%2076.6634L90.3885%2078.3888L89.924%2077.8352L90.2166%2076.0752Z'%20fill='black'/%3e%3cpath%20d='M87.5334%2065.9254L91.3901%2070.5216'%20stroke='black'/%3e%3cpath%20d='M65.1734%2083.8869C64.7968%2084.3357%2064.3228%2084.5278%2063.7515%2084.4632C63.1802%2084.3986%2062.5395%2084.0683%2061.8293%2083.4724C61.1191%2082.8765%2060.6819%2082.3057%2060.5177%2081.76C60.3552%2081.2122%2060.4648%2080.711%2060.8464%2080.2561C61.2247%2079.8053%2061.6987%2079.6132%2062.2683%2079.6798C62.8359%2079.7447%2063.4738%2080.0743%2064.182%2080.6686C64.8902%2081.2628%2065.3259%2081.8375%2065.489%2082.3925C65.6519%2082.9439%2065.5467%2083.442%2065.1734%2083.8869ZM64.6946%2083.4851C64.934%2083.1999%2064.9766%2082.8634%2064.8226%2082.4758C64.6685%2082.0881%2064.3102%2081.6583%2063.7476%2081.1862C63.1811%2080.7108%2062.6949%2080.4355%2062.289%2080.3601C61.8828%2080.281%2061.5625%2080.3811%2061.3282%2080.6604C61.0922%2080.9417%2061.0474%2081.2746%2061.1938%2081.6592C61.3402%2082.0438%2061.6977%2082.4747%2062.2662%2082.9517C62.8308%2083.4255%2063.3165%2083.7055%2063.7233%2083.7919C64.1298%2083.8747%2064.4536%2083.7724%2064.6946%2083.4851Z'%20fill='black'/%3e%3cpath%20d='M62.2346%2084.5876L62.7104%2084.9868L62.1656%2085.6362L63.0124%2086.3467L62.578%2086.8644L61.7312%2086.1538L60.0388%2088.1707L59.5601%2087.769L58.1438%2083.5924L58.7991%2082.8114L61.6898%2085.2369L62.2346%2084.5876ZM60.0125%2087.2358L61.2554%2085.7546L58.7448%2083.648L60.0125%2087.2358Z'%20fill='black'/%3e%3cpath%20d='M80.411%2093.7304C80.0343%2094.1793%2079.5604%2094.3714%2078.9891%2094.3068C78.4178%2094.2422%2077.7771%2093.9119%2077.0669%2093.316C76.3567%2092.7201%2075.9195%2092.1492%2075.7553%2091.6035C75.5928%2091.0558%2075.7024%2090.5545%2076.084%2090.0997C76.4623%2089.6488%2076.9363%2089.4567%2077.5059%2089.5233C78.0735%2089.5883%2078.7114%2089.9179%2079.4196%2090.5121C80.1278%2091.1064%2080.5635%2091.681%2080.7266%2092.2361C80.8895%2092.7875%2080.7843%2093.2856%2080.411%2093.7304ZM79.9322%2093.3287C80.1716%2093.0434%2080.2142%2092.707%2080.0601%2092.3193C79.9061%2091.9317%2079.5478%2091.5019%2078.9852%2091.0298C78.4187%2090.5544%2077.9324%2090.279%2077.5266%2090.2036C77.1204%2090.1246%2076.8001%2090.2247%2076.5658%2090.5039C76.3298%2090.7852%2076.2849%2091.1182%2076.4314%2091.5028C76.5778%2091.8874%2076.9352%2092.3182%2077.5038%2092.7953C78.0683%2093.269%2078.554%2093.5491%2078.9609%2093.6355C79.3674%2093.7182%2079.6911%2093.616%2079.9322%2093.3287Z'%20fill='black'/%3e%3cpath%20d='M77.4722%2094.4312L77.948%2094.8304L77.4032%2095.4798L78.25%2096.1903L77.8156%2096.708L76.9688%2095.9974L75.2764%2098.0143L74.7977%2097.6126L73.3814%2093.436L74.0368%2092.655L76.9274%2095.0805L77.4722%2094.4312ZM75.2501%2097.0794L76.493%2095.5982L73.9824%2093.4916L75.2501%2097.0794Z'%20fill='black'/%3e%3cpath%20d='M70.3709%2097.0238L70.7776%2096.5391L74.9909%20100.074L74.5615%20100.586L70.9138%2097.5253L70.9419%2099.2724L70.3883%2098.8079L70.3709%2097.0238Z'%20fill='black'/%3e%3cpath%20d='M65.9659%2087.4941L70.5621%2091.3508'%20stroke='black'/%3e%3cpath%20d='M47.0654%20109.064C46.7724%20109.572%2046.339%20109.843%2045.7652%20109.879C45.1914%20109.914%2044.503%20109.7%2043.7001%20109.237C42.8972%20108.773%2042.3676%20108.287%2042.1111%20107.778C41.8559%20107.267%2041.8768%20106.754%2042.1737%20106.24C42.4679%20105.73%2042.9013%20105.459%2043.4739%20105.426C44.0441%20105.391%2044.7296%20105.605%2045.5302%20106.067C46.3308%20106.529%2046.8597%20107.02%2047.1167%20107.538C47.3729%20108.053%2047.3557%20108.561%2047.0654%20109.064ZM46.5241%20108.752C46.7103%20108.429%2046.6939%20108.091%2046.4748%20107.736C46.2558%20107.381%2045.8283%20107.019%2045.1923%20106.652C44.5518%20106.283%2044.0252%20106.096%2043.6124%20106.092C43.1986%20106.085%2042.9006%20106.239%2042.7183%20106.555C42.5347%20106.873%2042.5484%20107.208%2042.7594%20107.562C42.9704%20107.915%2043.3972%20108.277%2044.04%20108.648C44.6782%20109.017%2045.2052%20109.208%2045.6208%20109.223C46.0355%20109.234%2046.3366%20109.077%2046.5241%20108.752Z'%20fill='black'/%3e%3cpath%20d='M44.7919%20113.002C44.1813%20114.06%2043.311%20114.262%2042.1811%20113.61L42.4944%20112.997C42.8936%20113.228%2043.2354%20113.326%2043.5198%20113.291C43.8042%20113.257%2044.0512%20113.058%2044.2608%20112.695C44.4366%20112.391%2044.4928%20112.096%2044.4295%20111.809C44.3675%20111.521%2044.1978%20111.297%2043.9204%20111.137C43.6384%20110.974%2043.3624%20110.936%2043.0923%20111.024C42.8235%20111.109%2042.6104%20111.288%2042.4528%20111.561L42.3161%20111.798L41.8188%20111.511L41.9516%20111.281C42.0688%20111.078%2042.0958%20110.862%2042.0325%20110.633C41.9692%20110.404%2041.8305%20110.228%2041.6162%20110.104C41.402%20109.98%2041.1829%20109.956%2040.9591%20110.031C40.7352%20110.107%2040.5562%20110.26%2040.4221%20110.493C40.3362%20110.642%2040.2863%20110.783%2040.2725%20110.916C40.2599%20111.047%2040.2836%20111.167%2040.3435%20111.277C40.4012%20111.386%2040.4781%20111.484%2040.5743%20111.573C40.6705%20111.661%2040.7919%20111.748%2040.9385%20111.833L40.5744%20112.416C40.1008%20112.143%2039.8049%20111.814%2039.6868%20111.43C39.57%20111.044%2039.6385%20110.631%2039.8924%20110.191C40.1177%20109.801%2040.4213%20109.543%2040.8034%20109.418C41.1867%20109.291%2041.5509%20109.327%2041.896%20109.526C42.1305%20109.661%2042.3004%20109.844%2042.4057%20110.073C42.5109%20110.302%2042.5477%20110.535%2042.5159%20110.772C42.7524%20110.545%2043.0268%20110.406%2043.339%20110.354C43.6513%20110.303%2043.9687%20110.371%2044.2912%20110.557C44.7197%20110.804%2044.978%20111.156%2045.066%20111.613C45.1554%20112.068%2045.0641%20112.531%2044.7919%20113.002Z'%20fill='black'/%3e%3cpath%20d='M63.7808%20116.112C63.4878%20116.62%2063.0544%20116.891%2062.4806%20116.927C61.9068%20116.962%2061.2184%20116.748%2060.4155%20116.285C59.6127%20115.821%2059.083%20115.335%2058.8265%20114.826C58.5714%20114.315%2058.5922%20113.802%2058.8891%20113.288C59.1834%20112.778%2059.6168%20112.507%2060.1893%20112.474C60.7596%20112.439%2061.445%20112.653%2062.2456%20113.115C63.0462%20113.577%2063.5751%20114.068%2063.8322%20114.586C64.0883%20115.101%2064.0712%20115.609%2063.7808%20116.112ZM63.2395%20115.8C63.4257%20115.477%2063.4093%20115.139%2063.1903%20114.784C62.9712%20114.429%2062.5437%20114.068%2061.9077%20113.7C61.2672%20113.331%2060.7406%20113.144%2060.3278%20113.14C59.9141%20113.133%2059.616%20113.287%2059.4337%20113.603C59.2502%20113.921%2059.2638%20114.256%2059.4748%20114.61C59.6858%20114.963%2060.1126%20115.325%2060.7554%20115.696C61.3936%20116.065%2061.9206%20116.256%2062.3362%20116.271C62.7509%20116.282%2063.052%20116.125%2063.2395%20115.8Z'%20fill='black'/%3e%3cpath%20d='M58.3332%20118.321C58.6679%20117.742%2059.0521%20117.386%2059.4858%20117.255C59.9173%20117.122%2060.3721%20117.193%2060.8502%20117.47C61.3238%20117.743%2061.6253%20118.114%2061.7547%20118.583C61.8831%20119.048%2061.81%20119.518%2061.5352%20119.994C61.4141%20120.204%2061.2673%20120.385%2061.0948%20120.538C60.9213%20120.688%2060.7319%20120.802%2060.5264%20120.882C60.32%20120.958%2060.0955%20120.985%2059.853%20120.962C59.6119%20120.937%2059.3729%20120.857%2059.1361%20120.72C59.0707%20120.682%2058.9927%20120.63%2058.9023%20120.562L59.1972%20119.934C59.3176%20120.028%2059.4015%20120.088%2059.4488%20120.116C59.6157%20120.212%2059.7797%20120.269%2059.9408%20120.287C60.1032%20120.302%2060.2496%20120.283%2060.3801%20120.229C60.5082%20120.174%2060.6222%20120.101%2060.7221%20120.012C60.8233%20119.92%2060.9097%20119.812%2060.9813%20119.688C61.1584%20119.381%2061.2034%20119.079%2061.1162%20118.782C61.0303%20118.483%2060.8351%20118.246%2060.5307%20118.07C60.2127%20117.886%2059.9063%20117.839%2059.6117%20117.927C59.3183%20118.013%2059.0512%20118.265%2058.8103%20118.682L58.115%20119.887L56.0793%20118.319L57.5207%20115.822L58.0653%20116.137L56.9091%20118.14L57.9661%20118.957L58.3332%20118.321Z'%20fill='black'/%3e%3cpath%20d='M54.4651%20121.099L54.7815%20120.551L59.5446%20123.301L59.2107%20123.88L55.0869%20121.499L55.4179%20123.214L54.7921%20122.853L54.4651%20121.099Z'%20fill='black'/%3e%3cpath%20d='M48.4722%20112.479L53.6684%20115.479'%20stroke='black'/%3e%3cpath%20d='M33.6042%20137.005C33.4038%20137.555%2033.0241%20137.898%2032.4652%20138.032C31.9063%20138.167%2031.1912%20138.076%2030.3201%20137.759C29.4489%20137.442%2028.8428%20137.055%2028.5019%20136.598C28.1618%20136.139%2028.0933%20135.631%2028.2964%20135.073C28.4977%20134.52%2028.8774%20134.177%2029.4354%20134.045C29.991%20133.912%2030.7032%20134.003%2031.5719%20134.319C32.4406%20134.636%2033.0466%20135.027%2033.3897%20135.492C33.7313%20135.955%2033.8028%20136.459%2033.6042%20137.005ZM33.0169%20136.791C33.1443%20136.441%2033.0693%20136.11%2032.7919%20135.799C32.5146%20135.487%2032.0309%20135.206%2031.3408%20134.954C30.6458%20134.702%2030.0947%20134.609%2029.6875%20134.677C29.2788%20134.742%2029.0121%20134.945%2028.8874%20135.288C28.7618%20135.633%2028.8336%20135.961%2029.1027%20136.272C29.3718%20136.584%2029.8551%20136.866%2030.5525%20137.12C31.2451%20137.372%2031.7972%20137.469%2032.2091%20137.411C32.6194%20137.35%2032.8887%20137.143%2033.0169%20136.791Z'%20fill='black'/%3e%3cpath%20d='M31.1045%20141.84L32.041%20139.266L32.6247%20139.479L31.3554%20142.966L30.8746%20142.791L29.4881%20139.942C29.34%20139.633%2029.1922%20139.403%2029.0448%20139.253C28.8973%20139.102%2028.7355%20138.995%2028.5593%20138.93C28.2656%20138.824%2028.0064%20138.828%2027.7817%20138.943C27.5545%20139.057%2027.3906%20139.252%2027.2899%20139.528C27.1821%20139.825%2027.1855%20140.093%2027.3%20140.334C27.413%20140.572%2027.6579%20140.76%2028.0347%20140.897L28.4165%20141.036L28.1266%20141.65L27.8073%20141.533C27.2714%20141.338%2026.9157%20141.044%2026.7403%20140.65C26.5624%20140.256%2026.5621%20139.815%2026.7393%20139.328C26.905%20138.873%2027.1717%20138.547%2027.5396%20138.351C27.9083%20138.153%2028.319%20138.136%2028.7717%20138.301C29.0409%20138.399%2029.2691%20138.549%2029.4564%20138.75C29.6421%20138.948%2029.8216%20139.224%2029.9948%20139.578L31.1045%20141.84Z'%20fill='black'/%3e%3cpath%20d='M51.2896%20141.043C51.0892%20141.594%2050.7095%20141.936%2050.1506%20142.071C49.5916%20142.206%2048.8766%20142.114%2048.0054%20141.797C47.1342%20141.48%2046.5282%20141.093%2046.1872%20140.637C45.8472%20140.178%2045.7787%20139.669%2045.9818%20139.111C46.1831%20138.558%2046.5627%20138.215%2047.1208%20138.083C47.6764%20137.95%2048.3885%20138.042%2049.2573%20138.358C50.126%20138.674%2050.7319%20139.065%2051.0751%20139.531C51.4167%20139.993%2051.4882%20140.497%2051.2896%20141.043ZM50.7023%20140.829C50.8296%20140.479%2050.7546%20140.149%2050.4773%20139.837C50.1999%20139.525%2049.7162%20139.244%2049.0261%20138.993C48.3312%20138.74%2047.7801%20138.647%2047.3729%20138.715C46.9642%20138.78%2046.6975%20138.984%2046.5728%20139.326C46.4472%20139.671%2046.5189%20139.999%2046.7881%20140.311C47.0572%20140.622%2047.5405%20140.905%2048.2379%20141.159C48.9304%20141.411%2049.4826%20141.508%2049.8945%20141.45C50.3047%20141.388%2050.574%20141.182%2050.7023%20140.829Z'%20fill='black'/%3e%3cpath%20d='M48.6058%20142.843C48.9527%20142.964%2049.2337%20143.155%2049.449%20143.416C49.6643%20143.677%2049.7959%20143.97%2049.8439%20144.295C49.8919%20144.62%2049.8566%20144.946%2049.7382%20145.271C49.552%20145.783%2049.2346%20146.152%2048.786%20146.38C48.335%20146.606%2047.8537%20146.626%2047.3423%20146.44C46.9116%20146.283%2046.5524%20145.984%2046.2646%20145.541L44.6474%20142.994L44.9199%20142.245L46.2072%20144.339C46.2181%20144.18%2046.2517%20144.023%2046.3078%20143.869C46.4111%20143.585%2046.5734%20143.345%2046.7946%20143.148C47.0158%20142.952%2047.2875%20142.822%2047.6097%20142.759C47.9294%20142.695%2048.2615%20142.723%2048.6058%20142.843ZM49.1418%20145.071C49.2674%20144.726%2049.2614%20144.403%2049.1238%20144.104C48.9846%20143.801%2048.733%20143.586%2048.369%20143.459C48.0002%20143.331%2047.6688%20143.339%2047.3748%20143.484C47.0785%20143.628%2046.8684%20143.871%2046.7445%20144.211C46.6207%20144.551%2046.637%20144.875%2046.7933%20145.185C46.9472%20145.493%2047.1951%20145.706%2047.537%20145.825C47.905%20145.956%2048.2326%20145.951%2048.5199%20145.809C48.808%20145.664%2049.0154%20145.418%2049.1418%20145.071Z'%20fill='black'/%3e%3cpath%20d='M42.9814%20147.572L43.1978%20146.977L48.3661%20148.858L48.1376%20149.486L43.6631%20147.857L44.287%20149.489L43.608%20149.242L42.9814%20147.572Z'%20fill='black'/%3e%3cpath%20d='M35.5827%20140.123L41.2208%20142.175'%20stroke='black'/%3e%3cpath%20d='M25.199%20166.858C25.0972%20167.435%2024.7828%20167.839%2024.2558%20168.068C23.7287%20168.298%2023.0087%20168.332%2022.0957%20168.171C21.1827%20168.01%2020.5187%20167.735%2020.1036%20167.344C19.689%20166.951%2019.5333%20166.462%2019.6364%20165.878C19.7386%20165.298%2020.053%20164.895%2020.5796%20164.667C21.1036%20164.44%2021.8208%20164.406%2022.7313%20164.567C23.6417%20164.727%2024.3063%20165.007%2024.7252%20165.406C25.1419%20165.802%2025.2998%20166.286%2025.199%20166.858ZM24.5835%20166.75C24.6482%20166.383%2024.5169%20166.07%2024.1896%20165.812C23.8624%20165.553%2023.3372%20165.36%2022.6139%20165.232C21.8856%20165.104%2021.3268%20165.109%2020.9376%20165.246C20.5463%20165.381%2020.319%20165.628%2020.2557%20165.987C20.192%20166.348%2020.3196%20166.659%2020.6387%20166.919C20.9578%20167.179%2021.4828%20167.373%2022.2137%20167.502C22.9395%20167.63%2023.5002%20167.63%2023.8957%20167.501C24.2891%20167.37%2024.5184%20167.119%2024.5835%20166.75Z'%20fill='black'/%3e%3cpath%20d='M18.9335%20170.291L19.0434%20169.668L24.4598%20170.623L24.3438%20171.281L19.6544%20170.454L20.5523%20171.953L19.8406%20171.828L18.9335%20170.291Z'%20fill='black'/%3e%3cpath%20d='M43.3169%20167.764C43.2152%20168.341%2042.9008%20168.745%2042.3737%20168.974C41.8466%20169.204%2041.1266%20169.238%2040.2136%20169.077C39.3006%20168.916%2038.6366%20168.641%2038.2215%20168.25C37.8069%20167.857%2037.6512%20167.368%2037.7543%20166.784C37.8565%20166.204%2038.1709%20165.801%2038.6975%20165.573C39.2215%20165.346%2039.9388%20165.312%2040.8492%20165.473C41.7596%20165.633%2042.4243%20165.913%2042.8431%20166.312C43.2598%20166.708%2043.4178%20167.192%2043.3169%20167.764ZM42.7014%20167.656C42.7661%20167.289%2042.6348%20166.976%2042.3075%20166.718C41.9803%20166.459%2041.4551%20166.266%2040.7319%20166.138C40.0035%20166.01%2039.4447%20166.015%2039.0556%20166.152C38.6643%20166.287%2038.4369%20166.534%2038.3736%20166.893C38.3099%20167.254%2038.4375%20167.565%2038.7566%20167.825C39.0757%20168.085%2039.6007%20168.279%2040.3316%20168.408C41.0574%20168.536%2041.6181%20168.536%2042.0136%20168.407C42.407%20168.276%2042.6363%20168.025%2042.7014%20167.656Z'%20fill='black'/%3e%3cpath%20d='M36.7197%20173.078L37.3729%20169.374L37.9307%20169.472L42.3227%20172.976L42.1884%20173.737L37.8582%20170.221L37.3352%20173.187L36.7197%20173.078Z'%20fill='black'/%3e%3cpath%20d='M36.2686%20175.637L36.3785%20175.013L41.7949%20175.968L41.6789%20176.626L36.9896%20175.799L37.8874%20177.298L37.1758%20177.173L36.2686%20175.637Z'%20fill='black'/%3e%3cpath%20d='M27.6889%20169.586L33.5978%20170.628'%20stroke='black'/%3e%3cpath%20opacity='0.9'%20d='M205.135%2035.1855C203.67%2035.1855%20202.54%2034.5866%20201.746%2033.3887C200.952%2032.1908%20200.555%2030.4329%20200.555%2028.1152C200.555%2025.7975%20200.945%2024.043%20201.727%2022.8516C202.514%2021.6602%20203.65%2021.0645%20205.135%2021.0645C206.606%2021.0645%20207.736%2021.6634%20208.523%2022.8613C209.311%2024.0527%20209.705%2025.804%20209.705%2028.1152C209.705%2030.4264%20209.305%2032.1842%20208.504%2033.3887C207.71%2034.5866%20206.587%2035.1855%20205.135%2035.1855ZM205.135%2033.623C206.066%2033.623%20206.779%2033.1641%20207.273%2032.2461C207.768%2031.3281%20208.016%2029.9512%20208.016%2028.1152C208.016%2026.2663%20207.762%2024.8926%20207.254%2023.9941C206.753%2023.0892%20206.046%2022.6367%20205.135%2022.6367C204.217%2022.6367%20203.507%2023.0859%20203.006%2023.9844C202.505%2024.8828%20202.254%2026.2598%20202.254%2028.1152C202.254%2029.9577%20202.498%2031.3379%20202.986%2032.2559C203.481%2033.1673%20204.197%2033.623%20205.135%2033.623Z'%20fill='black'/%3e%3cpath%20opacity='0.9'%20d='M193.836%2021.0938C195.19%2021.0938%20196.326%2021.5267%20197.244%2022.3926C198.169%2023.252%20198.631%2024.362%20198.631%2025.7227C198.631%2026.862%20198.23%2027.9622%20197.43%2029.0234L192.83%2035H190.809L194.607%2030.2148C194.243%2030.3125%20193.859%2030.3613%20193.455%2030.3613C192.706%2030.3613%20192.007%2030.1855%20191.355%2029.834C190.711%2029.4759%20190.177%2028.9486%20189.754%2028.252C189.331%2027.5488%20189.113%2026.7448%20189.1%2025.8398C189.093%2025.1432%20189.21%2024.4987%20189.451%2023.9062C189.699%2023.3073%20190.037%2022.806%20190.467%2022.4023C190.896%2021.9922%20191.401%2021.6732%20191.98%2021.4453C192.566%2021.2109%20193.185%2021.0938%20193.836%2021.0938ZM191.648%2028.1738C192.247%2028.7467%20192.999%2029.0332%20193.904%2029.0332C194.809%2029.0332%20195.555%2028.7207%20196.141%2028.0957C196.733%2027.4642%20197.023%2026.696%20197.01%2025.791C196.997%2024.821%20196.701%2024.0592%20196.121%2023.5059C195.542%2022.9525%20194.793%2022.6758%20193.875%2022.6758C192.964%2022.6758%20192.208%2022.9688%20191.609%2023.5547C191.017%2024.1341%20190.727%2024.9056%20190.74%2025.8691C190.753%2026.8327%20191.056%2027.6009%20191.648%2028.1738Z'%20fill='black'/%3e%3c/svg%3e\"","<svelte:options\n\tcustomElement={{\n\t\ttag: 'pie-tool-protractor',\n\t\tshadow: 'none',\n\t\tprops: {\n\t\t\tvisible: { type: 'Boolean', attribute: 'visible' },\n\t\t\ttoolId: { type: 'String', attribute: 'tool-id' },\n\t\t\tcoordinator: { type: 'Object' }\n\t\t}\n\t}}\n/>\n\n<script lang=\"ts\">\n\timport type { IToolCoordinator } from '@pie-players/pie-assessment-toolkit';\n\timport { ZIndexLayer } from '@pie-players/pie-assessment-toolkit';\n\timport Moveable from 'moveable';\n\timport { onMount } from 'svelte';\n\timport protractorSvg from './protractor.svg';\n\n\t// Props\n\tlet { visible = false, toolId = 'protractor', coordinator }: { visible?: boolean; toolId?: string; coordinator?: IToolCoordinator } = $props();\n\n\t// Check if running in browser\n\tconst isBrowser = typeof window !== 'undefined';\n\n\t// State\n\tlet containerEl = $state<HTMLDivElement | undefined>();\n\tlet announceText = $state('');\n\tlet moveable: Moveable | null = null;\n\n\t// Track registration state\n\tlet registered = $state(false);\n\n\t// Keyboard navigation constants\n\tconst MOVE_STEP = 10; // pixels\n\tconst ROTATE_STEP = 5; // degrees\n\tconst FINE_ROTATE_STEP = 1; // degrees\n\n\tfunction announce(message: string) {\n\t\tannounceText = message;\n\t\tsetTimeout(() => announceText = '', 1000);\n\t}\n\n\t// Initialize Moveable.js (matching production configuration)\n\tfunction initMoveable() {\n\t\tif (!containerEl || !isBrowser) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up any existing instance first\n\t\tif (moveable) {\n\t\t\tmoveable.destroy();\n\t\t\tmoveable = null;\n\t\t}\n\n\t\tcoordinator?.bringToFront(containerEl);\n\n\t\tmoveable = new Moveable(document.body, {\n\t\t\ttarget: containerEl,\n\t\t\tdraggable: true,\n\t\t\trotatable: true,\n\t\t\tsnappable: true,\n\t\t\toriginDraggable: false,\n\t\t\toriginRelative: true,\n\t\t\torigin: [0.5, 1], // Bottom center (matching production implementation)\n\t\t\thideDefaultLines: true,\n\t\t\tkeepRatio: false,\n\t\t\tbounds: {\n\t\t\t\tleft: -110,\n\t\t\t\ttop: -110,\n\t\t\t\tright: -110,\n\t\t\t\tbottom: -110,\n\t\t\t\tposition: 'css'\n\t\t\t}\n\t\t} as any); // Type assertion needed for Moveable.js config\n\n\t\t// Associate the moveable instance with the tool ID\n\t\tconst controlBox = moveable.getControlBoxElement();\n\t\tcontrolBox?.setAttribute('data-moveablejs-tool-control-box', toolId);\n\n\t\tmoveable.on('drag', ({ target, transform }) => {\n\t\t\tif (target) {\n\t\t\t\ttarget.style.transform = transform;\n\t\t\t}\n\t\t});\n\n\t\tmoveable.on('rotate', ({ target, transform }) => {\n\t\t\tif (target) {\n\t\t\t\ttarget.style.transform = transform;\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction destroyMoveable() {\n\t\tif (moveable) {\n\t\t\tmoveable.destroy();\n\t\t\tmoveable = null;\n\t\t}\n\t}\n\n\tfunction updateBounds() {\n\t\tif (moveable) {\n\t\t\tmoveable.bounds = {\n\t\t\t\tleft: -110,\n\t\t\t\ttop: -110,\n\t\t\t\tright: -110,\n\t\t\t\tbottom: -110,\n\t\t\t\tposition: 'css'\n\t\t\t};\n\t\t\tmoveable.updateRect();\n\t\t}\n\t}\n\n\t// Keyboard navigation (preserved for accessibility)\n\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\tif (!moveable || !containerEl) return;\n\n\t\tlet handled = false;\n\t\tconst isShift = e.shiftKey;\n\n\t\t// Get current transform from element\n\t\tconst transform = containerEl.style.transform || '';\n\t\tconst matrix = new DOMMatrix(transform || 'none');\n\t\t\n\t\t// Extract position and rotation\n\t\tlet x = matrix.e || (isBrowser ? window.innerWidth / 2 : 400);\n\t\tlet y = matrix.f || (isBrowser ? window.innerHeight / 2 : 300);\n\t\tlet rotation = Math.round(Math.atan2(matrix.b, matrix.a) * (180 / Math.PI));\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\tif (isShift) {\n\t\t\t\t\trotation = (rotation - ROTATE_STEP + 360) % 360;\n\t\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\t} else {\n\t\t\t\t\ty -= MOVE_STEP;\n\t\t\t\t\tannounce(`Moved up to ${Math.round(y)}`);\n\t\t\t\t}\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tif (isShift) {\n\t\t\t\t\trotation = (rotation + ROTATE_STEP) % 360;\n\t\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\t} else {\n\t\t\t\t\ty += MOVE_STEP;\n\t\t\t\t\tannounce(`Moved down to ${Math.round(y)}`);\n\t\t\t\t}\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tif (isShift) {\n\t\t\t\t\trotation = (rotation - ROTATE_STEP + 360) % 360;\n\t\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\t} else {\n\t\t\t\t\tx -= MOVE_STEP;\n\t\t\t\t\tannounce(`Moved left to ${Math.round(x)}`);\n\t\t\t\t}\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tif (isShift) {\n\t\t\t\t\trotation = (rotation + ROTATE_STEP) % 360;\n\t\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\t} else {\n\t\t\t\t\tx += MOVE_STEP;\n\t\t\t\t\tannounce(`Moved right to ${Math.round(x)}`);\n\t\t\t\t}\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\trotation = (rotation - FINE_ROTATE_STEP + 360) % 360;\n\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\trotation = (rotation + FINE_ROTATE_STEP) % 360;\n\t\t\t\tannounce(`Rotated to ${rotation} degrees`);\n\t\t\t\thandled = true;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (handled && moveable) {\n\t\t\te.preventDefault();\n\t\t\t// Apply new transform via Moveable\n\t\t\tconst newTransform = `translate(-50%, -50%) translate(${x}px, ${y}px) rotate(${rotation}deg)`;\n\t\t\tcontainerEl.style.transform = newTransform;\n\t\t\tmoveable.updateRect();\n\t\t}\n\t}\n\n\t// Initialize Moveable when visible changes\n\t$effect(() => {\n\t\tif (visible && containerEl && isBrowser) {\n\t\t\t// Wait for the next tick to ensure DOM is updated\n\t\t\tsetTimeout(initMoveable, 0);\n\t\t} else {\n\t\t\tdestroyMoveable();\n\t\t}\n\t});\n\n\t// Register with coordinator when it becomes available\n\t$effect(() => {\n\t\tif (coordinator && toolId && !registered) {\n\t\t\tcoordinator.registerTool(toolId, 'Protractor', undefined, ZIndexLayer.TOOL);\n\t\t\tregistered = true;\n\t\t}\n\t});\n\n\tonMount(() => {\n\t\twindow.addEventListener('resize', updateBounds);\n\t\treturn () => {\n\t\t\tdestroyMoveable();\n\t\t\twindow.removeEventListener('resize', updateBounds);\n\t\t\tif (coordinator && toolId) {\n\t\t\t\tcoordinator.unregisterTool(toolId);\n\t\t\t}\n\t\t};\n\t});\n\n\t// Update element reference when container becomes available\n\t$effect(() => {\n\t\tif (coordinator && containerEl && toolId) {\n\t\t\tcoordinator.updateToolElement(toolId, containerEl);\n\t\t}\n\t});\n\n\t// Auto-focus when tool becomes visible\n\t$effect(() => {\n\t\tif (visible && containerEl) {\n\t\t\tsetTimeout(() => containerEl?.focus(), 100);\n\t\t}\n\t});\n</script>\n\n{#if visible && isBrowser}\n\t<!-- Screen reader announcements -->\n\t<div class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n\t\t{announceText}\n\t</div>\n\n\t<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n\t<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n\t<div\n\t\tbind:this={containerEl}\n\t\tclass=\"protractor-frame\"\n\t\tdata-moveablejs-tool-id={toolId}\n\t\tonpointerdown={() => coordinator?.bringToFront(containerEl)}\n\t\tonkeydown={handleKeyDown}\n\t\trole=\"application\"\n\t\ttabindex=\"0\"\n\t\taria-label=\"Protractor tool. Use arrow keys to move, Shift+arrows to rotate, PageUp/PageDown for fine rotation. Current rotation displayed via Moveable.js\"\n\t\taria-roledescription=\"Draggable and rotatable protractor measurement tool\"\n\t>\n\t\t<div class=\"protractor-container\">\n\t\t\t<img\n\t\t\t\tclass=\"protractor\"\n\t\t\t\tsrc={protractorSvg}\n\t\t\t\talt=\"Protractor with 180-degree semicircular scale marked from 0 to 180 degrees in both directions, with degree markings every 10 degrees\"\n\t\t\t\tdraggable=\"false\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n{/if}\n\n<style>\n\t.sr-only {\n\t\tposition: absolute;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\tpadding: 0;\n\t\tmargin: -1px;\n\t\toverflow: hidden;\n\t\tclip: rect(0, 0, 0, 0);\n\t\twhite-space: nowrap;\n\t\tborder-width: 0;\n\t}\n\n\t.protractor-frame {\n\t\tborder: 0;\n\t\tcursor: move;\n\t\tleft: 50%;\n\t\toverflow: hidden;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%);\n\t\ttransform-origin: 50% calc(100% - 10px); /* Rotation origin at bottom center (matching production implementation) */\n\t\tuser-select: none;\n\t\ttouch-action: none;\n\t}\n\n\t.protractor-frame:focus {\n\t\toutline: 3px solid #4A90E2;\n\t\toutline-offset: 2px;\n\t}\n\n\t.protractor-frame:focus-visible {\n\t\toutline: 3px solid #4A90E2;\n\t\toutline-offset: 2px;\n\t}\n\n\t.protractor-container {\n\t\tborder: 0;\n\t\tposition: relative;\n\t\twidth: 400px;\n\t\theight: 210px;\n\t}\n\n\t/* Semi-transparent white overlay for visibility (matching production implementation) */\n\t.protractor-container::after {\n\t\tbackground-color: #fff;\n\t\tborder-radius: 283px 283px 0 0;\n\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Matching production implementation shadow */\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: 283px;\n\t\topacity: 0.5;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\twidth: 400px;\n\t\tz-index: 1;\n\t\tpointer-events: none;\n\t}\n\n\t.protractor {\n\t\twidth: 400px;\n\t\theight: 210px;\n\t\tposition: relative;\n\t\tz-index: 2;\n\t\tdisplay: block;\n\t}\n\n\t/* Moveable.js control styling (matching production implementation) */\n\t:global(body .moveable-control-box[data-moveablejs-tool-control-box=\"protractor\"]) {\n\t\t--moveable-color: red;\n\t\tz-index: 2003; /* ZIndexLayer.CONTROL */\n\t}\n\n\t:global([data-moveablejs-tool-id=\"protractor\"]) {\n\t\tz-index: 2002; /* ZIndexLayer.MODAL */\n\t}\n</style>\n\n"],"names":["_a","TEMPLATE_USE_IMPORT_NODE","HYDRATION_START","HYDRATION_START_ELSE","HYDRATION_END","HYDRATION_ERROR","UNINITIALIZED","NAMESPACE_HTML","DEV","is_array","index_of","includes","array_from","object_keys","define_property","get_descriptor","get_descriptors","object_prototype","array_prototype","get_prototype_of","is_extensible","run_all","arr","i","deferred","resolve","reject","promise","res","rej","DERIVED","EFFECT","RENDER_EFFECT","MANAGED_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","CONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","EFFECT_RAN","EFFECT_TRANSPARENT","EAGER_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","WAS_MARKED","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","STALE_REACTION","__publicField","TEXT_NODE","COMMENT_NODE","lifecycle_outside_component","name","async_derived_orphan","effect_in_teardown","rune","effect_in_unowned_derived","effect_orphan","effect_update_depth_exceeded","hydration_failed","state_descriptors_fixed","state_prototype_fixed","state_unsafe_mutation","svelte_boundary_reset_onerror","hydration_mismatch","location","svelte_boundary_reset_noop","hydrating","set_hydrating","value","hydrate_node","set_hydrate_node","node","w.hydration_mismatch","hydrate_next","get_next_sibling","reset","next","count","skip_nodes","remove","depth","data","read_hydration_instruction","equals","safe_not_equal","a","b","safe_equals","tracing_mode_flag","component_context","set_component_context","context","push","props","runes","fn","pop","component","effects","create_user_effect","is_runes","micro_tasks","run_micro_tasks","tasks","queue_micro_task","is_flushing_sync","flush_tasks","handle_error","error","effect","active_effect","active_reaction","invoke_error_boundary","STATUS_MASK","set_signal_status","signal","status","update_derived_status","derived","clear_marked","deps","dep","defer_effect","dirty_effects","maybe_dirty_effects","batches","current_batch","batch_values","queued_root_effects","last_scheduled_effect","is_flushing","_commit_callbacks","_discard_callbacks","_pending","_blocking_pending","_deferred","_dirty_effects","_maybe_dirty_effects","_decrement_queued","_Batch_instances","traverse_effect_tree_fn","defer_effects_fn","commit_fn","_Batch","__privateAdd","__privateGet","root_effects","render_effects","root","__privateMethod","e","reset_branch","flush_queued_effects","source","flush_effects","blocking","__privateSet","schedule_effect","batch","pending_boundary","flags","is_branch","is_skippable_branch","skip","is_dirty","update_effect","child","parent","previous_batch_values","is_earlier","sources","others","s","prev_queued_root_effects","marked","checked","mark_effects","Batch","flushSync","was_flushing_sync","result","source_stacks","flush_count","updates","entry","infinite_loop_guard","old_values","e.effect_update_depth_exceeded","eager_block_effects","length","unlink_effect","ordered_effects","ancestor","j","reaction","depends_on","depends","createSubscriber","start","subscribers","version","stop","effect_tracking","get","render_effect","untrack","increment","boundary","children","Boundary","_anchor","_hydrate_open","_props","_children","_effect","_main_effect","_pending_effect","_failed_effect","_offscreen_fragment","_pending_anchor","_local_pending_count","_pending_count","_pending_count_update_queued","_is_creating_fallback","_effect_pending","_effect_pending_subscriber","_Boundary_instances","hydrate_resolved_content_fn","hydrate_pending_content_fn","get_anchor_fn","run_fn","show_pending_snippet_fn","update_pending_count_fn","block","comment","anchor","branch","d","internal_set","onerror","failed","destroy_effect","did_reset","calling_on_error","w.svelte_boundary_reset_noop","e.svelte_boundary_reset_onerror","pause_effect","pending","create_text","previous_effect","previous_reaction","previous_ctx","set_active_effect","set_active_reaction","move_effect","flatten","blockers","sync","async","restore","capture","blocker_promise","finish","values","unset_context","run","expression","async_derived","previous_component_context","previous_batch","activate_batch","parent_derived","label","e.async_derived_orphan","should_suspend","deferreds","async_effect","handler","teardown","fulfil","p","go","destroy_derived_effects","get_derived_parent_effect","execute_derived","prev_active_effect","update_reaction","update_derived","increment_write_version","is_destroying_effect","eager_effects","eager_effects_deferred","v","stack","state","push_reaction_value","mutable_source","initial_value","immutable","trackable","set","should_proxy","untracking","current_sources","e.state_unsafe_mutation","new_value","proxy","old_value","mark_reactions","untracked_writes","set_untracked_writes","flush_eager_effects","reactions","not_dirty","prototype","is_proxied_array","parent_version","update_version","with_parent","set_update_version","_","prop","descriptor","e.state_descriptors_fixed","target","receiver","exists","has","other_s","ls","n","own_keys","key","e.state_prototype_fixed","$window","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","get_first_child","is_text","text","merge_text_nodes","first_child","first","sibling","next_sibling","last_sibling","clear_text_content","should_defer_append","without_reactive_context","validate_effect","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","push_effect","parent_effect","parent_last","create_effect","type","user_effect","defer","effect_root","component_root","options","template_effect","execute_effect_teardown","previously_destroying_effect","set_is_destroying_effect","destroy_effect_children","remove_dom","controller","destroy_block_effect_children","removed","remove_effect_dom","remove_reactions","transitions","transition","end","prev","callback","destroy","pause_children","remaining","check","local","t","transparent","resume_effect","resume_children","fragment","is_updating_effect","new_deps","skipped_deps","write_version","read_version","dependencies","dependency","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_sources","previous_untracking","previous_update_version","is_fork","remove_reaction","index","new_length","start_index","was_updating_effect","is_derived","destroyed","depends_on_old_values","should_connect","is_new","reconnect","all_registered_events","root_event_handles","delegate","events","last_propagated_event","handle_event_propagation","event","handler_element","owner_document","event_name","path","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","delegated","create_fragment_from_html","html","elem","assign_nodes","from_html","content","use_import_node","has_start","clone","frag","append","dom","PASSIVE_EVENTS","is_passive_event","set_text","str","mount","_mount","hydrate","was_hydrating","previous_hydrate_node","instance","line","e.hydration_failed","document_listeners","Component","intro","registered_events","event_handle","passive","unmount","anchor_node","ctx","mounted_components","_batches","_onscreen","_offscreen","_outroing","_transition","_commit","_discard","BranchManager","onscreen","offscreen","k","on_destroy","keys","onMount","e.lifecycle_outside_component","cleanup","if_block","elseif","branches","update_branch","condition","is_else","has_branch","flag","append_styles","css","style","IS_CUSTOM_ELEMENT","IS_HTML","set_attribute","element","attribute","skip_warning","attributes","get_attributes","get_setters","setters_cache","cache_key","setters","descriptors","proto","element_proto","is_bound_this","bound_value","element_or_component","bind_this","update","get_value","get_parts","old_parts","parts","fallback","fallback_value","fallback_dirty","get_fallback","getter","overridden","mutation","createClassComponent","Svelte4Component","_events","_instance","add_source","cb","args","SvelteElement","$$componentCtor","$$slots","shadow_root_init","listener","unsub","create_slot","slot","existing_slots","get_custom_elements_slots","get_custom_element_value","attribute_value","attr","_oldValue","newValue","attribute_name","props_definition","transform","create_custom_element","slots","exports","extend","Class","setter","property","HighlightType","HighlightColor","PNP_TO_PIE_TOOL_MAP","pnp","tool","ZIndexLayer","PlaybackState","prefixNames","prefix","classNames","_i","className","prefixCSS","selector","ref","refs","Properties","properties","action","withMethods","methods","duplicate","propertyName","methodName","FUNCTION","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","doc","OPEN_CLOSED_CHARACTERS","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","__spreadArrays","il","r","jl","dot","a1","a2","b1","b2","isUndefined","isObject","isArray","isString","isNumber","isFunction","isEqualSeparator","character","separator","isCharacterSpace","isSeparatorSpace","findOpen","openCharacter","texts","openCloseCharacters","isIgnore","findIgnore","findClose","otherText","closeCharacter","_loop_1","nextIndex","find","open","out_i_1","state_1","splitText","splitOptions","_b","isSeparateFirst","isSeparateOnlyOpenClose","_c","isSeparateOpenClose","_d","openClosedText","close","regexText","regex","chr","tempValues","resetTemp","_loop_2","out_i_2","nextOpenCloseCharacters","state_2","splitSpace","splitComma","splitBracket","matches","splitUnit","unit","camelize","all","letter","decamelize","letter2","now","findIndex","defaultIndex","defalutValue","requestAnimationFrame","firstTime","raf","currTime","id","cancelAnimationFrame","caf","handle","getKeys","obj","getValues","convertUnitSize","sizeFunction","between","min","max","checkBoundSize","targetSize","compareSize","isMax","ratio","throttle","defaultSize","throttledSize","calculateBoundSize","minSize","maxSize","keepRatio","width","height","minWidth","minHeight","maxWidth","maxHeight","sum","nums","total","average","getRad","pos1","pos2","distX","distY","rad","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","getDist","num","reverseUnit","throttleArray","counter","flat","cur","pushSet","elements","hasClass","addClass","removeClass","reg","addEvent","el","removeEvent","getDocument","getDocumentElement","getDocumentBody","getWindow","isWindow","val","isNode","PolyMap","__proto","prevIndex","HashMap","SUPPORT_MAP","Link","prevLink","nextLink","link","orderChanged","changed","fixed","fromLinks","toLinks","from","to","fromLink","toLink","fromIndex","toIndex","Result","prevList","list","added","maintained","changedBeforeAdded","ordered","pureChanged","fromBefore","toBefore","diff","findKeyCallback","mapClass","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","ListDiffer","newData","extendStatics","__extends","__","__assign","__rest","__spreadArray","pack","l","ar","fillKeys","arr2","fillProps","defaultProps","name_1","isDiff","getAttributes","otherProps","splitProps","name_2","findContainerNode","provider","base","removeNode","parentNode","executeHooks","hooks","hook","renderFunctionComponent","hooksIndex","Provider","c","ps","contexts","nextElement","nextState","isForceUpdate","self","currentDepth","scheduledContexts","scheduledSubs","isContextUpdate","nextChildSubs","childs","sub","renderProviders","prevProps","setCurrentInstance","fr","getCurrentInstance","getHooksIndex","setHooksInex","nextHooksIndex","prevState","isUpdate","PureComponent","_super","createRef","defaultValue","refCallback","forwardRef","func","createComponent","contextValue","ComponentProvider","container","_this","nextProps","isMount","contextType","template","nextContexts","ef","def","diffAttributes","attrs1","attrs2","diffObject","name_3","diffEvents","events1","events2","provier","name_4","name_5","keys1","keys2","diffStyle","style1","style2","beforeName","name_6","name_7","name_8","getNativeEventName","ElementProvider","isRemove","eventName","contextValues","containerNode","isSVG","prevAttributes","prevEvents","nextAttributes","nextEvents","name_9","findDOMNode","comp","providers","findNodeProvider","createElement","flat$1","ContainerProvider","TextProvider","diffProviders","containerProvider","childrenKeys","childrenProvider","createProvider","childProvider","getNextSibiling","childProviders","providerClass","updatedHooks","hyd","updated","nodeProvider","renderProvider","isProvider","renderSelf","checkHookInfo","info","inst","prevHt","useMemo","defaultFunction","useRef","useEffect","unshift","useImperativeHandle","some","getUserAgentString","agent","userAgent","execRegExp","pattern","hasUserAgentData","userAgentData","brands","findVersion","versionTest","convertVersion","findPreset","presets","userPreset","preset","findPresetBrand","brandInfo","findBrand","brand","BROWSER_PRESETS","CHROMIUM_PRESETS","WEBKIT_PRESETS","WEBVIEW_PRESETS","OS_PRESETS","isWebView","getLegacyAgent","nextAgent","isMobile","browser","os","browserPreset","browserVersion","osPreset","osVersion","chromiumPreset","webkitPreset","getClientHintsAgent","osData","firstBrand","platform","chromiumBrand","webkitBrand","platfomResult","browserBrand","add","matrix","inverseMatrix","startIndex","x","fromX","swap","iv","divide","ignoreDimension","m","newMatrix","invert","createIdentityMatrix","identityIndex","targetStartIndex","targetIndex","transpose","getOrigin","originMatrix","w","fromTranslation","convertPositionMatrix","convertDimension","multiplies","matrixes","multiply","matrix2","plus","nextPos","minus","convertCSStoMatrix","is2d","convertMatrixtoCSS","calculate","rotateX3d","rotateY3d","rotateZ3d","createRotateMatrix","scale3d","sx","sy","sz","rotate","translate3d","tx","ty","tz","matrix3d","matrix1","cos","sin","createScaleMatrix","scale","createOriginMatrix","origin","createWarpMatrix","pos0","pos3","nextPos0","nextPos1","nextPos2","nextPos3","x0","y0","x1","y1","x2","y2","x3","y3","u0","v0","u1","v1","u2","v2","u3","v3","h","createMatrix","parseMat","toMat","parse","calculateMatrixDist","matrixInfos","matrixFunction","functionValue","transforms","functionName","nextSize_1","posX","posY","posZ","nextSize","_e","_f","_g","_h","unitValue","childrenCount","ChildrenDiffer","diff$1","EventEmitter","param","isStop","listeners","getDefaultScrollPosition","checkDefaultScrollEvent","getContainerElement","DragScroll","inputEvent","top","left","rect","clientX","clientY","threshold","_startRect","_startPos","direction","prevScrollPos","throttleTime","isDrag","nextScrollPos","offsetX","offsetY","nextDirection","getScrollPosition","useScroll","nowTime","distTime","checkScrollEvent","tinyThrottle","isSameConstants","linearConstants1","linearConstants2","isSamePoint","point1","point2","getAreaSize","point","nextPoint","fitPoints","getMinMaxs","minX","minY","maxX","maxY","ratioX","ratioY","xs","ys","isInside","excludeLine","y","xLine","xLinearConstants","getLinearConstants","lines","convertLines","intersectionPosInfos","linearConstants","standardPoint","xPoints","getPointsOnLines","getIntersectionPointsByConstants","linePoint","intersectionCount","xMap","prevValue","nextValue","dx","dy","c1","c2","isZeroA","isZeroB","results","minMaxs","order","minMax","right","bottom","pointX","pointY","getOverlapPointInfos","points1","points2","targetPoints1","targetPoints2","lines1","lines2","linearConstantsList1","line1","linearConstantsList2","line2","overlapInfos","linePointInfos","intersectionPoints","isNext","index2","index1","pointMap","getOverlapPoints","infos","getOverlapSize","getRotatiion","touches","isMultiTouch","getEventClients","getClients","getClient","isMouseEvent","getPosition","clients","prevClients","startClients","getAverageClient","originalClientX","originalClientY","prevX","prevY","startX","startY","deltaX","deltaY","sumClient","minLength","client","ClientStore","isAdd","position","positions","movement","currentClient","prevClient","INPUT_TAGNAMES","Gesto","targets","isTrusted","isDragAPI","pinchOutside","preventWheelClick","preventRightClick","preventDefault","checkInput","dragFocusedInput","preventClickEventOnDragStart","preventClickEventOnDrag","preventClickEventByCondition","useTouch","isDragStart","activeElement","tagName","hasInput","hasContentEditable","activeTagName","timer","isScroll","dragResult","clientsLength","currentTime","isDouble","firstTarget","checkWindowBlur","passive_1","isCallDrag","store","nextClients","currentData","pinchThreshold","isPinch","isPrevDrag","isFirstDrag","storePosition","win","hash","stringHash","getHash","getShadowRoot","parentElement","rootNode","replaceStyle","trimmedSelector","subSelector","trimmedSubSelector","injectStyle","shadowRoot","styled","injectClassName","styleElement","injectCount","Tag","injector","cssStyled","cssId","targetRef","injectResult","__decorate","decorators","desc","__values","o","__read","makeAble","able","DIRECTIONS4","DIRECTIONS","getSVGCursor","degree","getCursorCSS","degree45","defaultCursor","getAgent","IS_WEBKIT","IS_WEBKIT605","navi","browserName","IS_CHROME","IS_CHROMIUM","chromiumVersion","IS_CHROMIUM109","IS_FIREFOX","IS_SAFARI_ABOVE15","PREFIX","directionCSS","dir","originX","originY","offset","MOVEABLE_CSS","NEARBY_POS","FLOAT_POINT_NUM","MIN_SCALE","MAX_NUM","MIN_NUM","DIRECTION_REGION_TO_DIRECTION","DIRECTION_INDEXES","DIRECTION_ROTATIONS","MOVEABLE_METHODS","setCustomDrag","delta","isConvert","ableName","datas","ableDatas","CustomGesto","originalDatas","calculateElementPosition","is3d","poses","calculatePoses","x4","y4","calculatePosition","sign","calculatePointerDist","moveable","moveableClientRect","rootMatrix","calculateInversePosition","getDragDist","setDragStart","allMatrix","beforeMatrix","offsetMatrix","targetMatrix","transformOrigin","getTransformDirection","resolveTransformEvent","nextTransforms","nextTransformAppendedIndexes","convertTransformInfo","targetFunction","matFunctionName","convertTransformFormat","dist","getTransformDist","getBeforeDragDist","bx","by","getTransfromMatrix","isAfter","beforeTransform","afterTransform","beforeTransform2","afterTransform2","targetAllTransform","nextTargetMatrix","res1","afterTargetMatrix","inverseBeforeMatrix","startDragBeforeDist","absoluteOrigin","isBefore","startDragDist","getInverseDragDist","calculateTransformOrigin","prevWidth","prevHeight","prevOrigin","prevSize","measureRatio","getPosIndexesByDirection","indexes","getPosesByDirection","getPosBySingleDirection","getPosByDirection","startPos","fixedDirection","fixedPos","getNextMatrix","getAbsoluteMatrix","getNextTransformMatrix","isAllTransform","targetTransform","scaleMatrix","fillTransformStartEvent","getBeforeRenderableDatas","setTransformIndex","setDefaultTransformIndex","startTransforms","fillOriginalTransform","getNextTransforms","getNextTransformText","getNextStyle","fillTransformEvent","nextTransform","drag","Draggable","fillCSSObject","getTranslateFixedPosition","fixedOffset","nextMatrix","nextFixedPosition","getDirectionOffset","getTranslateDist","fixedPosition","groupable","groupLeft","groupTop","getScaleDist","getDirectionByPos","fixedOffsetPosition","getRotateDist","rotateDist","getResizeDist","nextOrigin","getAbsolutePosition","getAbsolutePosesByState","getGestoData","targetGesto","controlGesto","getIndividualTransforms","getStyle","translate","individualTransforms","getMatrixStackInfo","checkContainer","documentElement","requestEnd","isEnd","targetTransformOrigin","hasFixed","offsetContainer","getOffsetInfo","zoom","getCachedStyle","getElementTransform","isFixed","getTransformMatrix","offsetParent","isOffsetEnd","isStatic","parentClientLeft","parentClientTop","fixedClientLeft","fixedClientTop","fixedInfo","getPositionFixedInfo","length_1","convert3DMatrixes","getOffsetPosInfo","hasOffset","origin_1","targetOrigin","offsetPos","offsetLeft","offsetTop","getSVGMatrix","targetZoom","offsetInfo","offsetZoom","parentSlotElement","customOffsetParent","customOffsetLeft","customOffsetTop","margin","getBodyOffset","isElementTarget","scrollLeft","scrollTop","cacheStyleMap","clientRectStyleMap","matrixContainerInfos","setStoreCache","useCache","getCachedClientRect","clientRect","nextClientRect","getClientRect","getCachedMatrixContainerInfo","result_1","cache","nextStyle_1","cached","fillChildEvents","groupableDatas","childDatas","triggerChildGesto","isStart","moveables","childEvents","eventParams","ev","childMoveable","gestos","childEvent","triggerChildAbles","eachEvent","startChildDist","parentDatas","startPositions","originalX","originalY","renderDirectionControlsByInfos","renderDirections","React","renderPoses","rotationRad","getProps","degRotation","absDegree","directionMap","renderState","renderDirectionMap","directionSign","directionRotation","dataAttrs","getControlTransform","renderDirectionControls","defaultDirections","directions","displayAroundControls","renderAroundControls","renderLine","rotation","getLineStyle","renderEdgeLines","edge","getRenderDirections","renderDiagonalDirections","renderAllDirections","checkBoundPoses","bounds","verticalPoses","horizontalPoses","nextBounds","checkBounds","getBounds","externalBounds","containerHeight","containerWidth","clientLeft","clientTop","snapOffsetLeft","snapOffsetTop","snapOffsetRight","snapOffsetBottom","isCSS","checkBoundKeepRatio","endPos","endX","endY","abs","isBottom","isRight","verticalInfo","horizontalInfo","isBound","isVertical","startBoundPos","endBoundPos","minPos","maxPos","boundInfos","isBoundRotate$1","relativePoses","boundRect","nextPoses","boundRotate","vec","boundPos","getDistSize","checkRotateBounds","prevPoses","relativeLeft","relativeRight","relativeTop","relativeBottom","relativeRad1","relativeRad2","nextRad","VERTICAL_NAMES","HORIZONTAL_NAMES","SNAP_SKIP_NAMES_MAP","VERTICAL_NAMES_MAP","HORIZONTAL_NAMES_MAP","getInitialBounds","hasGuidelines","snappable","innerBounds","verticalGuidelines","horizontalGuidelines","snapGridWidth","snapGridHeight","guidelines","enableSnap","getSnapDirections","snapDirections","mapSnapDirectionPoses","snapPoses","nextSnapDirections","nextSnapPoses","splitSnapDirectionPoses","horizontalNames","verticalNames","calculateContainerPos","containerRect","clientPos","solveLineConstants","TINY_NUM$1","NAME_snapRotationThreshold","NAME_snapRotationDegrees","NAME_snapHorizontalThreshold","NAME_snapVerticalThreshold","checkMoveableSnapPoses","posesX","posesY","dirXs","dirYs","customSnapVerticalThreshold","customSnapHorizontalThreshold","snapThresholdMultiples","snapHorizontalThreshold","selectValue","snapVerticalThreshold","checkSnapPoses","multiples","checkSnap","checkSnapKeepRatio","getTinyDist","verticalSnapInfo","horizontalSnapInfo","getNearestSnapGuidelineInfo","isVerticalSnap","verticalGuideline","isHorizontalSnap","horizontalGuideline","horizontalPos","verticalPos","isSnap","getStringDirection","stringDirection","checkSnaps","horizontalDirection","verticalDirection","snapInfo","posInfo","guidelineInfo","guideline","targetType","targetPoses","snapThreshold","dirs","posType","snapPosInfos","targetPos","guidelineInfos","snapPosInfo","getSnapInfosByDirection","snapDirection","nextDir","checkSnapBoundPriority","aDist","bDist","getNearOffsetInfo","offsets","aSign","bSign","aOffset","bOffset","getCheckSnapDirections","endDirection_1","signX","signY","signs","isStartLine","cx","cy","hitTestLine","test1","test2","isSameStartLine","dots","centerSign","checkInnerBoundDot","checkInnerBound","verticalSign","horizontalSign","lineConstants","leftLine","topLine","rightLine","bottomLine","topBoundInfo","checkLineBoundCollision","bottomBoundInfo","leftBoundInfo","rightBoundInfo","isAllVerticalBound","isVerticalBound","isAllHorizontalBound","isHorizontalBound","verticalOffset","maxOffset","horizontalOffset","isAllBound","boundLine","isRender","dot1","boundDot1","boundDot2","dy2","dx2","hasDx","hasDy","slope","getInnerBoundInfo","lineInfos","multiple","sizeOffset","getInnerBoundDragInfo","getCheckInnerBoundLineInfos","innerBoundInfo","widthOffsetInfo","heightOffsetInfo","getCheckSnapLineDirections","lineDirections","virtualPoses","dir1","dir2","virtualLine","isBoundRotate","boundDots","getDistPointLine","solveReverseLine","checkRotateInnerBounds","dotInfos","lineRad","lineDist","dotDist","dotRad","distRad","nextRad1","nextRad2","checkInnerBoundPoses","boundMap","pos4","lineInfo","isHorizontalStart","isVerticalStart","solveEquation","snapOffset","solveNextOffset","getDist$1","dist1","dist2","isOutside","widthOffset","heightOffset","getSnapBound","boundInfo","checkThrottleDragRotate","throttleDragRotate","adjustPoses","adjustPos","prevDistY","checkSnapBoundsDrag","ignoreSnap","getAbsolutePoses","getRect","boundPoses","checkMoveableSnapBounds","verticalSnapBoundInfo","horizontalSnapBoundInfo","verticalInnerBoundInfo","horizontalInnerBoundInfo","horizontalBoundInfos","verticalBoundInfos","horizontalDist","verticalDist","checkSnapBounds","guideines","checkSnapRightLine","snapBoundInfo","rad180","isHorizontalLine","isVerticalLine","getSnapBoundInfo","isRequest","startDirection","endDirection","otherStartPos","otherEndPos","checkSnapBoundsKeepRatio","otherHorizontalOffset","isOtherHorizontalBound","isOtherHorizontalSnap","otherVerticalOffset","isOtherVerticalBound","isOtherVerticalSnap","snapLine","getSnapBoundOffset","horizontalBoundInfo","verticalBoundInfo","checkMaxBounds","left_1","top_1","right_1","bottom_1","otherDirection","isCheckVertical","isCheckHorizontal","otherPos","deg","nextOtherPos","isHeightOutside","isWidthOutside","hideThrottleDragRotateLine","dragInfo","beforeOrigin","parentEvent","parentGesto","startCheckSnapDrag","params","fillParams","triggerEvent","parentFlag","deltaOffset","useSnap","isGroup","parentThrottleDrag","prevDist","prevBeforeDist","startValue","parentMoveable","throttleDrag","dragRotateRad","startDragRotate","ry","rx","beforeTranslate","beforeDist","beforeDelta","fillEndParams","nextParams","passDelta","getFixedDirectionInfo","getOffsetFixedDirectionInfo","nextFixedOffset","getOffsetFixedPositionInfo","offsetFixedPosition","directionCondition$2","getDirectionCondition","Resizable","getDirectionViewClassName","parentDirection","parentFixedDirection","getTotalDirection","setRatio","setFixedDirection","setFixedPosition","setMin","setMax","nextMaxSize","startWidth","startHeight","parentKeepRatio","dragClient","parentDist","resolveMatrix","isResize","startOffsetWidth","startOffsetHeight","isWidth","startOffsetMatrix","startTransformOrigin","targetN","nextAllMatrix","resizeFormat","throttleResize","keepRatioFinally","sizeDirection","distWidth","distHeight","getNextBoundingSize","getOffsetSizeDist","nextWidth","nextHeight","boundingWidth","boundingHeight","nextFixedDirection","snapDist","checkSnapResize","computeSize","isNoSnap","inverseDelta","fillAfterTransform","errorWidth","errorHeight","isErrorWidth","isErrorHeight","originalEvents","parentStartOffsetWidth","parentStartOffsetHeight","updateGroupMin","originalMinSize","childMinSize","childStartOffsetWidth","childStartOffsetHeight","parentMinWidth","parentMinHeight","updateGroupMax","originalMaxSize","childMaxSize","parentMaxWidth","parentMaxHeight","catchEvent","parentScale","setRotateStartInfo","startAbsoluteOrigin","getAbsoluteDist","defaultDeg","prevDeg","normalizedPrevDeg","loop","getAbsoluteDistByClient","getRotateInfo","moveableRect","throttleRotate","prevSnapDeg","snapRotation","checkSnapRotate","snapDeg","getRotationPositions","rotationPosition","radPoses","getRotationRad","isReverse","dragControlCondition","rotationTarget","getRefTargets","Rotatable","rotatable","rotateAroundControls","resolveAblesWithRotatable","jsxs","ables","resolveMap_1","directionControlInfos","parentRotate","beforeDirection","resizeStart","startClientX","startClientY","externalRotate","inputTarget","regionDirection","controlDirection","clientPoses","calculateMoveableClientPositions","originalFixedPosition_1","fixedBeforeOrigin","fixedAfterOrigin","posDelta","dragStart","resolveAble","getTotalOrigin","rotatation","clientDistX","clientDistY","groupDelta","beforeInfo","afterInfo","absoluteInfo","isRotate","targetDirection","beforeRotation","absoluteDelta","absoluteDist","absoluteRotation","startRotation","absoluteStartRotation","nextClientX","nextClientY","nextRotation","inverseDist","dragEvent","transformEvent","parentDistance","resize","resizeEvent","parentLeft","parentTop","parentBeforeOrigin","childClient","startGroupClient","prevClientX","prevClientY","distRotate","renderGuideline","isHorizontal","scaleType","renderInnerGuideline","renderSnapPoses","renderPos","renderGuidelines","targetRect","isDisplayInnerSnapDigit","mainNames","targetStart","targetEnd","hide","elementRect","renderDigitLine","lineType","gap","snapDigit","isDisplaySnapDigit","snapDistFormat","sizeName","absGap","snapSize","groupByElementGuidelines","otherIndex","names","groupBy","nextGuidelines","inner","elementRect1","elementRect2","renderDashedGuidelines","rendered","groups","sideNames","sidePos","prevRect","nextRect","size1","size2","renderPos1","renderPos2","renderGapGuidelines","targetSideStart","targetSideEnd","gapRects","sideStartPos","sideEndPos","sideCenterPos","getTotalGuidelines","containerClientRect","overflow","containerClientHeight","containerClientWidth","snapGap","maxSnapElementGuidelineDistance","isDisplayGridGuidelines","elementGuidelines","getElementGuidelines","totalGuidelines","getGapGuidelines","getGridGuidelines","getDefaultGuidelines","checkBetweenRects","snapThresholds","maxSnapElementGapDistance","elementRects","gapGuidelines","targetCenter","targetStart2","targetEnd2","snapThresholdMap","nextElementRects","snapRect1","snapRect2","rect1","rect2","rect1Start","rect1End","rect2Start","rect2End","isCenter","startGridGroupGuidelines","snapGridAll","snapRenderInfo","hasDirection","rect_1","children_1","posName","clientOffset","rectSize","rectPos","childSizes","firstChildSize","childSnapSizes","rectRatio","childSize","startOffset","snapThresholdInfo","defaultSnapGridWidth","defaultSnapGridHeight","pushGuideline","distance","prevValues","snapRect","nextElementGuidelines","getRefTarget","nextValues","getSnapElementRects","elementSnapDirections","topValue","leftValue","rightValue","bottomValue","centerValue","middleValue","horizontal","vertical","rectTop","rectLeft","sizes","getObjectGuidelines","containerSize","posGuideline","snapWidth","snapHeight","offsetDelta","containerLeft","containerTop","elementLeft","elementTop","elementRight","elementBottom","checkSnapInfo","snapContainer","snapContainerTarget","snapContainerRect","offset1","getDragDistByState","offset2","getNextFixedPoses","nextFixedPos","normalized","getSizeOffsetInfo","innerBoundLineInfos","recheckSizeByTwoDirection","snapPos","nextWidthOffset","nextHeightOffset","checkSizeDist","getNextPoses","isWidthBound","isHeightBound","widthDist","heightDist","isGetWidthOffset","bumpDegree","baseDeg","deg1","deg2","getMinDegreeDistance","deg3","snapRotationThreshold","snapRotationDegrees","origin2_1","rad_1","sorted","firstDegree","checkSnapScale","sizeDist","getSnapGuidelines","posInfos","addBoundGuidelines","verticalSnapPoses","horizontalSnapPoses","innerBoundMap","verticalInnerBoundPoses","horizontalInnerBoundPoses","innerPos","directionCondition$1","Snappable","targetTop","targetLeft","snapRenderThreshold","watchValue","minLeft","minTop","externalPoses","snapInfos","hasExternalPoses","externalRect","verticalPosInfos","horizontalPosInfos","allGuidelines","nextBoundMap","nextInnerBoundMap","multiply2","defaultSync","measureSVGSize","viewBox","getSVGViewBox","getBeforeTransformOrigin","relativeOrigin","getTransformOrigin","getComputedStyle","getTransformOriginArray","computedTransform","baseVal","lastParent","isParent","checkZoom","getTargetStyle","hasSlot","assignedSlotParentElement","isCustomElement","targetPosition","willChange","slotParentNode","targetParentNode","getSVGGraphicsOffset","getBodyStyle","bodyPosition","marginLeft","marginTop","fixedContainer","hasTransform","body","makeMatrixCSS","clientWidth","clientHeight","viewBoxWidth","viewBoxHeight","scaleX","scaleY","preserveAspectRatio","align","meetOrSlice","svgOrigin","xAlign","yAlign","scaleDimension","isGTarget","isFillBox","bbox","rectWidth","rectHeight","calculateRect","getSVGOffset","targetInfo","getSize","mat","prevLeft","prevTop","posOrigin","rectOrigin","mat2","nextLeft","nextTop","distLeft","distTop","rootClientRect","rootPoses","getDiagonalSize","offsetWidth","offsetHeight","cssWidth","cssHeight","contentWidth","contentHeight","minOffsetWidth","minOffsetHeight","maxOffsetWidth","maxOffsetHeight","inlineCSSWidth","inlineCSSHeight","svg","targetStyle","boxSizing","borderLeft","borderRight","borderTop","borderBottom","paddingLeft","paddingRight","paddingTop","paddingBottom","horizontalPadding","verticalPadding","horizontalBorder","verticalBorder","getParentStyle","resetClientRect","getExtendsRect","isRoot","extendsRect","getClientRectByPosition","isExtends","baseTop","baseLeft","convertTransformOriginArray","getDirection","direciton","unsetAbles","isControl","unsetGesto","gestoName","gesto","resolvedEvent","prevEvent","nextEvent","isBeforeEvent","isManager","pseudoElt","filterAbles","triggerAblesSimultaneously","enabledAbles","ableGroups","method","groupKeys","groupKey","keyIndex","group","groupByMap","convertDragDist","calculatePadding","xAdded","yAdded","nextAdded","convertCSSSize","isRelative","checkAbles","beforeFunctionTexts","beforeFunctionTexts2","targetFunctionText","afterFunctionTexts","afterFunctionTexts2","beforeFunctions","beforeFunctions2","afterFunctions","afterFunctions2","targetFunctions","beforeFunctionMatrix","beforeFunctionMatrix2","afterFunctionMatrix","afterFunctionMatrix2","allFunctionMatrix","isArrayFormat","isSelector","userTargets","getAbsoluteRotation","getSizeDistByDist","startSize","standardRad","signSize","startWidthSize","startHeightSize","secondRad","firstRad","distSize","pinchScale","startFixedDirection","directionsDists","directionRatios","ratioDistance","dist_1","convertTransformUnit","xy","leftOrigin","rightOrigin","originObject","nextOriginObject","rotatePosesInfo","isDeepArrayEquals","arr1","value1","value2","isArray1","isArray2","valueKey","countEach","getPaddingBox","padding","Pinchable","angle","pinchable","controlEventName","pinchAbles","ableEvent","directionCondition","Scalable","setMinScaleSize","setMaxScaleSize","isScale","throttleScale","tempScaleValue","getNextScale","stateDirection","nextScale","distSign","isSelfPinch","startOffsetSize","scaleSize","distText","scaleText","isZeroScale","scaleEndParam","moveableScale","getMiddleLinePos","getTriangleRad","rad1","rad2","isValidPos","poses1","poses2","pi","Warpable","resizable","scalable","warpable","linePosFrom1","linePosFrom2","linePosFrom3","linePosFrom4","linePosTo1","linePosTo2","linePosTo3","linePosTo4","targetInverseMatrix","prevMatrix","isWarp","posIndexes","absolutePoses","selectedPoses","nearByPoses","afterMatrix","totalMatrix","AREA_PIECES","AREA_PIECE","AVOID","VIEW_DRAGGING","restoreStyle","renderPieces","DragArea","dragArea","passDragArea","areaElement","rects","Origin","originStyle","scrollContainer","Scrollable","scrollOptions","dragScroll","scrollContainerElement","scrollThreshold","scrollThrottleTime","Default","Padding","paddingDirections","paddingPos1","paddingPos2","paddingPos3","paddingPos4","RADIUS_DIRECTIONS","calculateRatio","sumSize","sumRatio","HORIZONTAL_RADIUS_ORDER","VERTICAL_RADIUS_ORDER","HORIZONTAL_RADIUS_DIRECTIONS","VERTICAL_RADIUS_DIRECTIONS","getRadiusStyles","clipStyles","radiusPoses","raws","rawPos","getRadiusRange","controlPoses","horizontalRange","verticalRange","clipPose","getRadiusValues","minCounts","full","splitIndex","splitLength","horizontalValues","verticalValues","horizontalValuesLength","verticalValuesLength","hasVerticalValues","nwValue","neValue","seValue","_j","swValue","_k","_l","wnValue","_m","enValue","_o","esValue","_p","wsValue","horizontalRawPoses","verticalRawPoses","nextHorizontalPoses","nextVerticalPoses","removeRadiusPos","radiuslIndex","deleteCount","addRadiusPos","horizontalIndex","verticalIndex","radiusX","radiusY","startVerticalIndex","splitRadiusPoses","horizontals","verticals","CLIP_DIRECTIONS","CLIP_RECT_DIRECTIONS","getClipStyles","clipPath","clipRelative","clipType","clipPoses","isRect","isCircle","subWidth","subHeight","getRectPoses","dirx","diry","getControlSize","xRange","yRange","getClipPath","defaultClip","customClip","clipText","clipPrefix","splitter","xPos","yPos","radiusX_1","radiusY_1","radius","xRadius","yRadius","centerPos_1","roundIndex","rectLength","radiusValues","_q","_r","_s","top_2","_t","nextRight","nextBottom","_u","posValue","top_3","moveControlPos","dists","verticalDirections","horizontalDirections","verticalDirection_1","horizontalDirection_1","fixedIndex","nextDist","nextControlPoses_1","controlPose","controlDir","dirDir","dirHorizontal","dirVertical","addClipPath","clipIndex","clipStyle","removeClipPath","Clippable","customClipPath","defaultClipPath","clipArea","clipPathState","snapBoundInfos","calculatedPos","controls","isInset","isPolygon","linePoses_1","clipLeft","clipTop","ellipseClipPath","piece","areaPoses","allWidth","allHeight","allLeft_1","allTop_1","directionType","snapPos1","snapPos2","dragWithClip","isDragTarget","isLine","isArea","originalDraggable","originalDist","firstDist","isDragWithTarget","isAll","guidePoses","isEllipse","guideRect","guideXPoses","guideYPoses","rectPoses","rectDists_1","boundDelta","snapOffsetY","snapOffsetX","distSnapX","distSnapY","width_1","height_1","nextControlPoses_2","nextClipStyles","dragDist","isClipStart","OriginDraggable","originRelative","distOrigin","dragDelta","addBorderRadiusByLine","lineIndex","horizontalsLength","virtual","verticalsLength","controlIndex","controlPoseInfo","addBorderRadius","removeBorderRadius","getBorderRadius","borderRadius","triggerRoundEvent","styles","getStyleBorderRadius","firstMoveable","Roundable","roundClickable","borderRadiusState","minRoundControls","maxRoundControls","roundPadding","isDisplayShadowRoundControls","verticalCount","horizontalCount","basePos","originalPos","isDisplayVerticalShadow","isDisplay","indexAttr","roundRelative","selectedControlPose","selectedVertical","selectedHorizontal","pose","poseDist","isIdentityMatrix","identityMatrix","BeforeRenderable","inlineTransform","cssMatrix","startTransform","Renderable","transformObject","matrixInfo","triggerAble","moveableAbles","eventOperations","eventAffix","eventType","requestInstant","requestAble_1","isDragStop","isFirstStart","gestoType","prevGesto","trigger","conditionName","nextDatas","forceEndedCount","updatedCount","eventOperation","eventAbles","isForceEnd","checkMoveableTarget","eventTarget","dragTargetElement","getTargetAbleGesto","moveableTarget","controlBox","dragTarget","checkTarget","getAbleGesto","getControlAbleGesto","checkControlTarget","ableType","conditionFunctions","isTargetAbles","preventClickDefault","dragContaienrOption","dragContainer","isPinchScheduled","EventManager","calculateMatrixStack","rootContainer","isAbsolute3d","prevTargetMatrix","containerZoom","rootMatrixes","isRoot3d","offsetRootContainer","rootZoom","isNext3d","isSVGGraphicElement","nextRootMatrixes","originalRootContainer","endContainer","rootMatrixBeforeOffset","nextInfo","isMatrix3d","originalRootMatrix","calculateElementInfo","allResult","getMoveableTargetInfo","moveableElement","parentContainer","requestStyles","targetClientRect","rootContainerClientRect","getStyle_1","beforePosition","absoluteTargetPosition","absoluteContainerPosition","containerClientRectLeft","containerClientRectTop","containterClientLeft","containerClientTop","clientDelta","getPersistState","MoveableManager","parentPosition","propsTarget","cspNonce","translateZ","ControlBoxElement","linePadding","controlPadding","stateTarget","groupTargets","isDragging","ableAttributes","ableClassName","isVisible","React.createElement","viewContainer","manager","wrapperMoveable","totalSize","isTarget","isSetState","isSingle","persistState","statePos","isInstant","allAbles","requsetAble","ableRequester","requester","ableParam","originalBeforeOrigin","stateLeft","stateTop","isPersisted","renderPos3","renderPos4","zoomOffset","stateContainer","isTargetChanged","isChanged","moveableContainer","tag","customStyleMap","hasControlBox","persistData","firstRenderState","pinchStart","dragControlStart","targetAbles","controlAbles","Renderer","render","styleNames","ableStyleNames","hasTargetAble","hasControlAble","isUnset","hideDefaultLines","hideChildMoveableDefaultLines","useDragArea","nextTarget","prevTarget","prevDragArea","isDragTargetChanged","isDragAreaChanged","eventKeys","hasAbles","viewContainerOption","nextClassNames","prevClassNames","classPrefix","targetGestoData","controlGestoData","observer","records","e_1","records_1","records_1_1","e_1_1","React.PureComponent","Groupable","renderGroupRects","persistDatChildren","Clickable","isMoveableElement","containsElement","containsTarget","parentTarget","getDraggableEvent","edgeDraggable","IndividualGroupable","MOVEABLE_ABLES","MOVEABLE_EVENTS","current","MOVEABLE_PROPS","solveConstantsDistance","solveC","getMaxPos","getMinPos","getGroupRect","parentPoses","fixedRotation","a1_1","a2_1","a1MinMax_1","a1MinMaxPos_1","a2MinMax_1","a2MinMaxPos_1","a1Dist","a2Dist","a1MinPos","a1MaxPos","a2MinPos","a2MaxPos","minHorizontalLine","maxHorizontalLine","minVerticalLine","maxVerticalLine","minX_1","minY_1","maxX_1","maxY_1","changedX","findMoveableGroups","childTargetGroups","targetGroup","childMoveableGroups","MoveableGroup","checkeds","targetGroups","moveableGroups","useDefaultGroupRotate","finded","isReset","defaultGroupRotate","persistedRoatation","getMoveableGroupRect","parentRotation","posesRotations","rotations","groupRotation","firstRotation","isSameRotation","groupPoses","groupRect","rootGroupRect","posesInfo","rotateScale","isContainerChanged","MoveableIndividualGroup","canPersist","individualProps","controlBoxElement","dragElement","getElementTargets","refTargets","selectorMap","elementTargets","getTargetGroups","compareRefTargets","prevRefTargets","nextRefTargets","InitialMoveable","cssMap","moveableContructor","userAbles","userProps","nextSelectorMap","totalAbles","prevMoveable","target_1","prevTargetMoveable","mv","resolvePromise","isBrowser","updateSelectorMap","selectorTarget","Moveable","InnerMoveable","Moveable$1","React.Component","PROPERTIES","METHODS","EVENTS","nextOptions","selfElement","innerMoveable","protractorSvg","visible","toolId","coordinator","$.prop","$$props","containerEl","$.state","announceText","registered","MOVE_STEP","ROTATE_STEP","FINE_ROTATE_STEP","announce","message","$.set","initMoveable","$.get","destroyMoveable","updateBounds","handleKeyDown","handled","isShift","newTransform","$.user_effect","div","$.first_child","fragment_1","div_1","div_2","img","$$value","$.set_attribute","$$render","consequent"],"mappings":"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","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,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61]}
|