From 1e333a2fc0add67f280d30497865d9cc5a411f94 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 27 Jul 2026 16:28:08 -0400 Subject: [PATCH] Fix TypeScript packaging --- assets/js/live_toast/live_toast.ts | 22 +++++++++++++--------- assets/test/live_toast.test.ts | 2 -- mix.exs | 1 + package.json | 3 +++ priv/static/live_toast.cjs.js | 9 +++++++-- priv/static/live_toast.cjs.js.map | 4 ++-- priv/static/live_toast.esm.js | 9 +++++++-- priv/static/live_toast.esm.js.map | 4 ++-- priv/static/live_toast.js | 9 +++++++-- priv/static/live_toast.min.js | 2 +- 10 files changed, 43 insertions(+), 22 deletions(-) diff --git a/assets/js/live_toast/live_toast.ts b/assets/js/live_toast/live_toast.ts index 2ae17d4..2b373f4 100644 --- a/assets/js/live_toast/live_toast.ts +++ b/assets/js/live_toast/live_toast.ts @@ -68,6 +68,11 @@ type DismissTimer = { cancel: () => void } +type ToastElement = HTMLElement & { + order: number + targetDestination: string +} + export type ClientToastOptions = { duration?: number | 'infinity' metadata?: Record @@ -82,11 +87,8 @@ type ClientToastRequest = { const dismissTimers = new WeakMap() -declare global { - interface HTMLElement { - order: number - targetDestination: string - } +function asToastElement(el: HTMLElement): ToastElement { + return el as ToastElement } export function addToast( @@ -109,9 +111,9 @@ function doAnimations( maxItems: number, elToRemove?: HTMLElement ) { - const ts = [] + const ts: ToastElement[] = [] let toasts = Array.from( - document.querySelectorAll( + document.querySelectorAll( '#toast-group [phx-hook="LiveToast"]' ) ) @@ -226,7 +228,8 @@ function toastGroupTarget(el: HTMLElement) { } async function animateOut(this: ViewHook) { - const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap + const toast = asToastElement(this.el) + const val = (toast.order - 2) * 100 + (toast.order - 2) * gap let direction = '' @@ -390,7 +393,8 @@ export function createLiveToastHook(duration = 6000, maxItems = 3) { } // animate to targetDestination in 0ms - const keyframes = { y: [this.el.targetDestination] } + const toast = asToastElement(this.el) + const keyframes = { y: [toast.targetDestination] } animate(this.el, keyframes, { duration: 0 }) }, mounted(this: ViewHook) { diff --git a/assets/test/live_toast.test.ts b/assets/test/live_toast.test.ts index e6f3a64..a02b9e5 100644 --- a/assets/test/live_toast.test.ts +++ b/assets/test/live_toast.test.ts @@ -78,8 +78,6 @@ function mountToast(duration: number | 'Infinity' = 1000, countdown = false) { get: () => document.body }) - el.order = 1 - el.targetDestination = '0px' el.matches = ((selector: string) => { if (selector === ':hover') return hovered if (selector === ':focus-within') return focused diff --git a/mix.exs b/mix.exs index 8b46ecd..c157f0c 100644 --- a/mix.exs +++ b/mix.exs @@ -69,6 +69,7 @@ defmodule LiveToast.MixProject do defp files do ~w""" assets/js + assets/index.d.ts priv lib/live_toast.ex lib/live_toast/components.ex diff --git a/package.json b/package.json index 092dae1..8f44c77 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,11 @@ "description": "Phoenix Hook for LiveToast", "license": "MIT", "private": true, + "types": "./assets/index.d.ts", "module": "./priv/static/live_toast.esm.js", "main": "./priv/static/live_toast.cjs.js", "exports": { + "types": "./assets/index.d.ts", "import": "./priv/static/live_toast.esm.js", "require": "./priv/static/live_toast.cjs.js" }, @@ -20,6 +22,7 @@ "LICENSE.md", "package.json", "priv/static/*", + "assets/index.d.ts", "assets/js/live_toast/*" ] } diff --git a/priv/static/live_toast.cjs.js b/priv/static/live_toast.cjs.js index aac16c4..73188eb 100644 --- a/priv/static/live_toast.cjs.js +++ b/priv/static/live_toast.cjs.js @@ -798,6 +798,9 @@ var clientToastEvent = "live-toast:add"; var remainingSelector = "[data-live-toast-remaining]"; var lastTS = []; var dismissTimers = new WeakMap(); +function asToastElement(el) { + return el; +} function addToast(kind, message, options = {}) { document.getElementById("toast-group")?.dispatchEvent(new CustomEvent(clientToastEvent, { detail: { kind, message, options } @@ -870,7 +873,8 @@ function toastGroupTarget(el) { return toastGroup || "#toast-group"; } async function animateOut() { - const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap; + const toast = asToastElement(this.el); + const val = (toast.order - 2) * 100 + (toast.order - 2) * gap; let direction = ""; if (this.el.dataset.corner === "bottom_left" || this.el.dataset.corner === "bottom_center" || this.el.dataset.corner === "bottom_right") { direction = "-"; @@ -984,7 +988,8 @@ function createLiveToastHook(duration = 6e3, maxItems = 3) { if (this.el.dataset.liveToastGroup === "true") { return; } - const keyframes = { y: [this.el.targetDestination] }; + const toast = asToastElement(this.el); + const keyframes = { y: [toast.targetDestination] }; animate2(this.el, keyframes, { duration: 0 }); }, mounted() { diff --git a/priv/static/live_toast.cjs.js.map b/priv/static/live_toast.cjs.js.map index babef96..483621c 100644 --- a/priv/static/live_toast.cjs.js.map +++ b/priv/static/live_toast.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../assets/js/live_toast/index.ts", "../../assets/node_modules/@motionone/utils/dist/array.es.js", "../../assets/node_modules/@motionone/utils/dist/clamp.es.js", "../../assets/node_modules/@motionone/utils/dist/defaults.es.js", "../../assets/node_modules/@motionone/utils/dist/is-number.es.js", "../../assets/node_modules/@motionone/utils/dist/is-easing-list.es.js", "../../assets/node_modules/@motionone/utils/dist/wrap.es.js", "../../assets/node_modules/@motionone/utils/dist/easing.es.js", "../../assets/node_modules/@motionone/utils/dist/mix.es.js", "../../assets/node_modules/@motionone/utils/dist/noop.es.js", "../../assets/node_modules/@motionone/utils/dist/progress.es.js", "../../assets/node_modules/@motionone/utils/dist/offset.es.js", "../../assets/node_modules/@motionone/utils/dist/interpolate.es.js", "../../assets/node_modules/@motionone/utils/dist/is-cubic-bezier.es.js", "../../assets/node_modules/@motionone/utils/dist/is-easing-generator.es.js", "../../assets/node_modules/@motionone/utils/dist/is-function.es.js", "../../assets/node_modules/@motionone/utils/dist/is-string.es.js", "../../assets/node_modules/@motionone/utils/dist/time.es.js", "../../assets/node_modules/@motionone/easing/dist/cubic-bezier.es.js", "../../assets/node_modules/@motionone/easing/dist/steps.es.js", "../../assets/node_modules/@motionone/animation/dist/utils/easing.es.js", "../../assets/node_modules/@motionone/animation/dist/Animation.es.js", "../../assets/node_modules/hey-listen/dist/hey-listen.es.js", "../../assets/node_modules/@motionone/types/dist/MotionValue.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/data.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/transforms.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/css-var.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/easing.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/style.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/get-unit.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/animate-style.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/options.es.js", "../../assets/node_modules/@motionone/dom/dist/utils/resolve-elements.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/controls.es.js", "../../assets/node_modules/@motionone/dom/dist/utils/stagger.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/create-animate.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/index.es.js", "../../assets/node_modules/motion/dist/animate.es.js", "../../assets/js/live_toast/live_toast.ts"], - "sourcesContent": ["export * from './live_toast'\n", "function addUniqueItem(array, item) {\n array.indexOf(item) === -1 && array.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n index > -1 && arr.splice(index, 1);\n}\n\nexport { addUniqueItem, removeItem };\n", "const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n", "const defaults = {\n duration: 0.3,\n delay: 0,\n endDelay: 0,\n repeat: 0,\n easing: \"ease\",\n};\n\nexport { defaults };\n", "const isNumber = (value) => typeof value === \"number\";\n\nexport { isNumber };\n", "import { isNumber } from './is-number.es.js';\n\nconst isEasingList = (easing) => Array.isArray(easing) && !isNumber(easing[0]);\n\nexport { isEasingList };\n", "const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n", "import { isEasingList } from './is-easing-list.es.js';\nimport { wrap } from './wrap.es.js';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingList(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n", "const mix = (min, max, progress) => -progress * min + progress * max + min;\n\nexport { mix };\n", "const noop = () => { };\nconst noopReturn = (v) => v;\n\nexport { noop, noopReturn };\n", "const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\nexport { progress };\n", "import { mix } from './mix.es.js';\nimport { progress } from './progress.es.js';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\nfunction defaultOffset(length) {\n const offset = [0];\n fillOffset(offset, length - 1);\n return offset;\n}\n\nexport { defaultOffset, fillOffset };\n", "import { mix } from './mix.es.js';\nimport { noopReturn } from './noop.es.js';\nimport { fillOffset, defaultOffset } from './offset.es.js';\nimport { progress } from './progress.es.js';\nimport { getEasingForSegment } from './easing.es.js';\nimport { clamp } from './clamp.es.js';\n\nfunction interpolate(output, input = defaultOffset(output.length), easing = noopReturn) {\n const length = output.length;\n /**\n * If the input length is lower than the output we\n * fill the input to match. This currently assumes the input\n * is an animation progress value so is a good candidate for\n * moving outside the function.\n */\n const remainder = length - input.length;\n remainder > 0 && fillOffset(input, remainder);\n return (t) => {\n let i = 0;\n for (; i < length - 2; i++) {\n if (t < input[i + 1])\n break;\n }\n let progressInRange = clamp(0, 1, progress(input[i], input[i + 1], t));\n const segmentEasing = getEasingForSegment(easing, i);\n progressInRange = segmentEasing(progressInRange);\n return mix(output[i], output[i + 1], progressInRange);\n };\n}\n\nexport { interpolate };\n", "import { isNumber } from './is-number.es.js';\n\nconst isCubicBezier = (easing) => Array.isArray(easing) && isNumber(easing[0]);\n\nexport { isCubicBezier };\n", "const isEasingGenerator = (easing) => typeof easing === \"object\" &&\n Boolean(easing.createAnimation);\n\nexport { isEasingGenerator };\n", "const isFunction = (value) => typeof value === \"function\";\n\nexport { isFunction };\n", "const isString = (value) => typeof value === \"string\";\n\nexport { isString };\n", "const time = {\n ms: (seconds) => seconds * 1000,\n s: (milliseconds) => milliseconds / 1000,\n};\n\nexport { time };\n", "import { noopReturn } from '@motionone/utils';\n\n/*\n Bezier function generator\n\n This has been modified from Ga\u00EBtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noopReturn;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n", "import { clamp } from '@motionone/utils';\n\nconst steps = (steps, direction = \"end\") => (progress) => {\n progress =\n direction === \"end\"\n ? Math.min(progress, 0.999)\n : Math.max(progress, 0.001);\n const expanded = progress * steps;\n const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n return clamp(0, 1, rounded / steps);\n};\n\nexport { steps };\n", "import { cubicBezier, steps } from '@motionone/easing';\nimport { isFunction, isCubicBezier, noopReturn } from '@motionone/utils';\n\nconst namedEasings = {\n ease: cubicBezier(0.25, 0.1, 0.25, 1.0),\n \"ease-in\": cubicBezier(0.42, 0.0, 1.0, 1.0),\n \"ease-in-out\": cubicBezier(0.42, 0.0, 0.58, 1.0),\n \"ease-out\": cubicBezier(0.0, 0.0, 0.58, 1.0),\n};\nconst functionArgsRegex = /\\((.*?)\\)/;\nfunction getEasingFunction(definition) {\n // If already an easing function, return\n if (isFunction(definition))\n return definition;\n // If an easing curve definition, return bezier function\n if (isCubicBezier(definition))\n return cubicBezier(...definition);\n // If we have a predefined easing function, return\n const namedEasing = namedEasings[definition];\n if (namedEasing)\n return namedEasing;\n // If this is a steps function, attempt to create easing curve\n if (definition.startsWith(\"steps\")) {\n const args = functionArgsRegex.exec(definition);\n if (args) {\n const argsArray = args[1].split(\",\");\n return steps(parseFloat(argsArray[0]), argsArray[1].trim());\n }\n }\n return noopReturn;\n}\n\nexport { getEasingFunction };\n", "import { noopReturn, defaults, isEasingGenerator, isEasingList, interpolate } from '@motionone/utils';\nimport { getEasingFunction } from './utils/easing.es.js';\n\nclass Animation {\n constructor(output, keyframes = [0, 1], { easing, duration: initialDuration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, offset, direction = \"normal\", autoplay = true, } = {}) {\n this.startTime = null;\n this.rate = 1;\n this.t = 0;\n this.cancelTimestamp = null;\n this.easing = noopReturn;\n this.duration = 0;\n this.totalDuration = 0;\n this.repeat = 0;\n this.playState = \"idle\";\n this.finished = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n easing = easing || defaults.easing;\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n initialDuration = custom.duration || initialDuration;\n }\n this.repeat = repeat;\n this.easing = isEasingList(easing) ? noopReturn : getEasingFunction(easing);\n this.updateDuration(initialDuration);\n const interpolate$1 = interpolate(keyframes, offset, isEasingList(easing) ? easing.map(getEasingFunction) : noopReturn);\n this.tick = (timestamp) => {\n var _a;\n // TODO: Temporary fix for OptionsResolver typing\n delay = delay;\n let t = 0;\n if (this.pauseTime !== undefined) {\n t = this.pauseTime;\n }\n else {\n t = (timestamp - this.startTime) * this.rate;\n }\n this.t = t;\n // Convert to seconds\n t /= 1000;\n // Rebase on delay\n t = Math.max(t - delay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (this.playState === \"finished\" && this.pauseTime === undefined) {\n t = this.totalDuration;\n }\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = t / this.duration;\n // TODO progress += iterationStart\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n iterationProgress === 1 && currentIteration--;\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const iterationIsOdd = currentIteration % 2;\n if (direction === \"reverse\" ||\n (direction === \"alternate\" && iterationIsOdd) ||\n (direction === \"alternate-reverse\" && !iterationIsOdd)) {\n iterationProgress = 1 - iterationProgress;\n }\n const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1);\n const latest = interpolate$1(this.easing(p));\n output(latest);\n const isAnimationFinished = this.pauseTime === undefined &&\n (this.playState === \"finished\" || t >= this.totalDuration + endDelay);\n if (isAnimationFinished) {\n this.playState = \"finished\";\n (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest);\n }\n else if (this.playState !== \"idle\") {\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n };\n if (autoplay)\n this.play();\n }\n play() {\n const now = performance.now();\n this.playState = \"running\";\n if (this.pauseTime !== undefined) {\n this.startTime = now - this.pauseTime;\n }\n else if (!this.startTime) {\n this.startTime = now;\n }\n this.cancelTimestamp = this.startTime;\n this.pauseTime = undefined;\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n pause() {\n this.playState = \"paused\";\n this.pauseTime = this.t;\n }\n finish() {\n this.playState = \"finished\";\n this.tick(0);\n }\n stop() {\n var _a;\n this.playState = \"idle\";\n if (this.frameRequestId !== undefined) {\n cancelAnimationFrame(this.frameRequestId);\n }\n (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false);\n }\n cancel() {\n this.stop();\n this.tick(this.cancelTimestamp);\n }\n reverse() {\n this.rate *= -1;\n }\n commitStyles() { }\n updateDuration(duration) {\n this.duration = duration;\n this.totalDuration = duration * (this.repeat + 1);\n }\n get currentTime() {\n return this.t;\n }\n set currentTime(t) {\n if (this.pauseTime !== undefined || this.rate === 0) {\n this.pauseTime = t;\n }\n else {\n this.startTime = performance.now() - t / this.rate;\n }\n }\n get playbackRate() {\n return this.rate;\n }\n set playbackRate(rate) {\n this.rate = rate;\n }\n}\n\nexport { Animation };\n", "var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n", "/**\n * The MotionValue tracks the state of a single animatable\n * value. Currently, updatedAt and current are unused. The\n * long term idea is to use this to minimise the number\n * of DOM reads, and to abstract the DOM interactions here.\n */\nclass MotionValue {\n setAnimation(animation) {\n this.animation = animation;\n animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => { });\n }\n clearAnimation() {\n this.animation = this.generator = undefined;\n }\n}\n\nexport { MotionValue };\n", "import { MotionValue } from '@motionone/types';\n\nconst data = new WeakMap();\nfunction getAnimationData(element) {\n if (!data.has(element)) {\n data.set(element, {\n transforms: [],\n values: new Map(),\n });\n }\n return data.get(element);\n}\nfunction getMotionValue(motionValues, name) {\n if (!motionValues.has(name)) {\n motionValues.set(name, new MotionValue());\n }\n return motionValues.get(name);\n}\n\nexport { getAnimationData, getMotionValue };\n", "import { noopReturn, addUniqueItem } from '@motionone/utils';\nimport { getAnimationData } from '../data.es.js';\n\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\nconst axes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\nconst order = [\"translate\", \"scale\", \"rotate\", \"skew\"];\nconst transformAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n};\nconst rotation = {\n syntax: \"\",\n initialValue: \"0deg\",\n toDefaultUnit: (v) => v + \"deg\",\n};\nconst baseTransformProperties = {\n translate: {\n syntax: \"\",\n initialValue: \"0px\",\n toDefaultUnit: (v) => v + \"px\",\n },\n rotate: rotation,\n scale: {\n syntax: \"\",\n initialValue: 1,\n toDefaultUnit: noopReturn,\n },\n skew: rotation,\n};\nconst transformDefinitions = new Map();\nconst asTransformCssVar = (name) => `--motion-${name}`;\n/**\n * Generate a list of every possible transform key\n */\nconst transforms = [\"x\", \"y\", \"z\"];\norder.forEach((name) => {\n axes.forEach((axis) => {\n transforms.push(name + axis);\n transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b);\n/**\n * Provide a quick way to check if a string is the name of a transform\n */\nconst transformLookup = new Set(transforms);\nconst isTransform = (name) => transformLookup.has(name);\nconst addTransformToElement = (element, name) => {\n // Map x to translateX etc\n if (transformAlias[name])\n name = transformAlias[name];\n const { transforms } = getAnimationData(element);\n addUniqueItem(transforms, name);\n /**\n * TODO: An optimisation here could be to cache the transform in element data\n * and only update if this has changed.\n */\n element.style.transform = buildTransformTemplate(transforms);\n};\nconst buildTransformTemplate = (transforms) => transforms\n .sort(compareTransformOrder)\n .reduce(transformListToString, \"\")\n .trim();\nconst transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`;\n\nexport { addTransformToElement, asTransformCssVar, axes, buildTransformTemplate, compareTransformOrder, isTransform, transformAlias, transformDefinitions };\n", "import { transformDefinitions } from './transforms.es.js';\n\nconst isCssVar = (name) => name.startsWith(\"--\");\nconst registeredProperties = new Set();\nfunction registerCssVariable(name) {\n if (registeredProperties.has(name))\n return;\n registeredProperties.add(name);\n try {\n const { syntax, initialValue } = transformDefinitions.has(name)\n ? transformDefinitions.get(name)\n : {};\n CSS.registerProperty({\n name,\n inherits: false,\n syntax,\n initialValue,\n });\n }\n catch (e) { }\n}\n\nexport { isCssVar, registerCssVariable, registeredProperties };\n", "const testAnimation = (keyframes, options) => document.createElement(\"div\").animate(keyframes, options);\nconst featureTests = {\n cssRegisterProperty: () => typeof CSS !== \"undefined\" &&\n Object.hasOwnProperty.call(CSS, \"registerProperty\"),\n waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n partialKeyframes: () => {\n try {\n testAnimation({ opacity: [1] });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n finished: () => Boolean(testAnimation({ opacity: [0, 1] }, { duration: 0.001 }).finished),\n linearEasing: () => {\n try {\n testAnimation({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n};\nconst results = {};\nconst supports = {};\nfor (const key in featureTests) {\n supports[key] = () => {\n if (results[key] === undefined)\n results[key] =\n featureTests[key]();\n return results[key];\n };\n}\n\nexport { supports };\n", "import { isFunction, defaults, isCubicBezier, progress } from '@motionone/utils';\nimport { supports } from './feature-detection.es.js';\n\n// Create a linear easing point for every x second\nconst resolution = 0.015;\nconst generateLinearEasingPoints = (easing, duration) => {\n let points = \"\";\n const numPoints = Math.round(duration / resolution);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return points.substring(0, points.length - 2);\n};\nconst convertEasing = (easing, duration) => {\n if (isFunction(easing)) {\n return supports.linearEasing()\n ? `linear(${generateLinearEasingPoints(easing, duration)})`\n : defaults.easing;\n }\n else {\n return isCubicBezier(easing) ? cubicBezierAsString(easing) : easing;\n }\n};\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { convertEasing, cubicBezierAsString, generateLinearEasingPoints };\n", "function hydrateKeyframes(keyframes, readInitialValue) {\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] === null) {\n keyframes[i] = i ? keyframes[i - 1] : readInitialValue();\n }\n }\n return keyframes;\n}\nconst keyframesList = (keyframes) => Array.isArray(keyframes) ? keyframes : [keyframes];\n\nexport { hydrateKeyframes, keyframesList };\n", "import { isTransform, asTransformCssVar, transformAlias } from './transforms.es.js';\n\nfunction getStyleName(key) {\n if (transformAlias[key])\n key = transformAlias[key];\n return isTransform(key) ? asTransformCssVar(key) : key;\n}\n\nexport { getStyleName };\n", "import { isCssVar } from './utils/css-var.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { transformDefinitions } from './utils/transforms.es.js';\n\nconst style = {\n get: (element, name) => {\n name = getStyleName(name);\n let value = isCssVar(name)\n ? element.style.getPropertyValue(name)\n : getComputedStyle(element)[name];\n // TODO Decide if value can be 0\n if (!value && value !== 0) {\n const definition = transformDefinitions.get(name);\n if (definition)\n value = definition.initialValue;\n }\n return value;\n },\n set: (element, name, value) => {\n name = getStyleName(name);\n if (isCssVar(name)) {\n element.style.setProperty(name, value);\n }\n else {\n element.style[name] = value;\n }\n },\n};\n\nexport { style };\n", "function stopAnimation(animation, needsCommit = true) {\n if (!animation || animation.playState === \"finished\")\n return;\n // Suppress error thrown by WAAPI\n try {\n if (animation.stop) {\n animation.stop();\n }\n else {\n needsCommit && animation.commitStyles();\n animation.cancel();\n }\n }\n catch (e) { }\n}\n\nexport { stopAnimation };\n", "import { noopReturn, isString } from '@motionone/utils';\n\nfunction getUnitConverter(keyframes, definition) {\n var _a;\n let toUnit = (definition === null || definition === void 0 ? void 0 : definition.toDefaultUnit) || noopReturn;\n const finalKeyframe = keyframes[keyframes.length - 1];\n if (isString(finalKeyframe)) {\n const unit = ((_a = finalKeyframe.match(/(-?[\\d.]+)([a-z%]*)/)) === null || _a === void 0 ? void 0 : _a[2]) || \"\";\n if (unit)\n toUnit = (value) => value + unit;\n }\n return toUnit;\n}\n\nexport { getUnitConverter };\n", "import { getAnimationData, getMotionValue } from './data.es.js';\nimport { isCssVar, registerCssVariable } from './utils/css-var.es.js';\nimport { defaults, isEasingGenerator, isFunction, isEasingList, isNumber, time, noop } from '@motionone/utils';\nimport { isTransform, addTransformToElement, transformDefinitions } from './utils/transforms.es.js';\nimport { convertEasing } from './utils/easing.es.js';\nimport { supports } from './utils/feature-detection.es.js';\nimport { hydrateKeyframes, keyframesList } from './utils/keyframes.es.js';\nimport { style } from './style.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { stopAnimation } from './utils/stop-animation.es.js';\nimport { getUnitConverter } from './utils/get-unit.es.js';\n\nfunction getDevToolsRecord() {\n return window.__MOTION_DEV_TOOLS_RECORD;\n}\nfunction animateStyle(element, key, keyframesDefinition, options = {}, AnimationPolyfill) {\n const record = getDevToolsRecord();\n const isRecording = options.record !== false && record;\n let animation;\n let { duration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, easing = defaults.easing, persist = false, direction, offset, allowWebkitAcceleration = false, autoplay = true, } = options;\n const data = getAnimationData(element);\n const valueIsTransform = isTransform(key);\n let canAnimateNatively = supports.waapi();\n /**\n * If this is an individual transform, we need to map its\n * key to a CSS variable and update the element's transform style\n */\n valueIsTransform && addTransformToElement(element, key);\n const name = getStyleName(key);\n const motionValue = getMotionValue(data.values, name);\n /**\n * Get definition of value, this will be used to convert numerical\n * keyframes into the default value type.\n */\n const definition = transformDefinitions.get(name);\n /**\n * Stop the current animation, if any. Because this will trigger\n * commitStyles (DOM writes) and we might later trigger DOM reads,\n * this is fired now and we return a factory function to create\n * the actual animation that can get called in batch,\n */\n stopAnimation(motionValue.animation, !(isEasingGenerator(easing) && motionValue.generator) &&\n options.record !== false);\n /**\n * Batchable factory function containing all DOM reads.\n */\n return () => {\n const readInitialValue = () => { var _a, _b; return (_b = (_a = style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; };\n /**\n * Replace null values with the previous keyframe value, or read\n * it from the DOM if it's the first keyframe.\n */\n let keyframes = hydrateKeyframes(keyframesList(keyframesDefinition), readInitialValue);\n /**\n * Detect unit type of keyframes.\n */\n const toUnit = getUnitConverter(keyframes, definition);\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes, key !== \"opacity\", readInitialValue, name, motionValue);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n duration = custom.duration || duration;\n }\n /**\n * If this is a CSS variable we need to register it with the browser\n * before it can be animated natively. We also set it with setProperty\n * rather than directly onto the element.style object.\n */\n if (isCssVar(name)) {\n if (supports.cssRegisterProperty()) {\n registerCssVariable(name);\n }\n else {\n canAnimateNatively = false;\n }\n }\n /**\n * If we've been passed a custom easing function, and this browser\n * does **not** support linear() easing, and the value is a transform\n * (and thus a pure number) we can still support the custom easing\n * by falling back to the animation polyfill.\n */\n if (valueIsTransform &&\n !supports.linearEasing() &&\n (isFunction(easing) || (isEasingList(easing) && easing.some(isFunction)))) {\n canAnimateNatively = false;\n }\n /**\n * If we can animate this value with WAAPI, do so.\n */\n if (canAnimateNatively) {\n /**\n * Convert numbers to default value types. Currently this only supports\n * transforms but it could also support other value types.\n */\n if (definition) {\n keyframes = keyframes.map((value) => isNumber(value) ? definition.toDefaultUnit(value) : value);\n }\n /**\n * If this browser doesn't support partial/implicit keyframes we need to\n * explicitly provide one.\n */\n if (keyframes.length === 1 &&\n (!supports.partialKeyframes() || isRecording)) {\n keyframes.unshift(readInitialValue());\n }\n const animationOptions = {\n delay: time.ms(delay),\n duration: time.ms(duration),\n endDelay: time.ms(endDelay),\n easing: !isEasingList(easing)\n ? convertEasing(easing, duration)\n : undefined,\n direction,\n iterations: repeat + 1,\n fill: \"both\",\n };\n animation = element.animate({\n [name]: keyframes,\n offset,\n easing: isEasingList(easing)\n ? easing.map((thisEasing) => convertEasing(thisEasing, duration))\n : undefined,\n }, animationOptions);\n /**\n * Polyfill finished Promise in browsers that don't support it\n */\n if (!animation.finished) {\n animation.finished = new Promise((resolve, reject) => {\n animation.onfinish = resolve;\n animation.oncancel = reject;\n });\n }\n const target = keyframes[keyframes.length - 1];\n animation.finished\n .then(() => {\n if (persist)\n return;\n // Apply styles to target\n style.set(element, name, target);\n // Ensure fill modes don't persist\n animation.cancel();\n })\n .catch(noop);\n /**\n * This forces Webkit to run animations on the main thread by exploiting\n * this condition:\n * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099\n *\n * This fixes Webkit's timing bugs, like accelerated animations falling\n * out of sync with main thread animations and massive delays in starting\n * accelerated animations in WKWebView.\n */\n if (!allowWebkitAcceleration)\n animation.playbackRate = 1.000001;\n /**\n * If we can't animate the value natively then we can fallback to the numbers-only\n * polyfill for transforms.\n */\n }\n else if (AnimationPolyfill && valueIsTransform) {\n /**\n * If any keyframe is a string (because we measured it from the DOM), we need to convert\n * it into a number before passing to the Animation polyfill.\n */\n keyframes = keyframes.map((value) => typeof value === \"string\" ? parseFloat(value) : value);\n /**\n * If we only have a single keyframe, we need to create an initial keyframe by reading\n * the current value from the DOM.\n */\n if (keyframes.length === 1) {\n keyframes.unshift(parseFloat(readInitialValue()));\n }\n animation = new AnimationPolyfill((latest) => {\n style.set(element, name, toUnit ? toUnit(latest) : latest);\n }, keyframes, Object.assign(Object.assign({}, options), { duration,\n easing }));\n }\n else {\n const target = keyframes[keyframes.length - 1];\n style.set(element, name, definition && isNumber(target)\n ? definition.toDefaultUnit(target)\n : target);\n }\n if (isRecording) {\n record(element, key, keyframes, {\n duration,\n delay: delay,\n easing,\n repeat,\n offset,\n }, \"motion-one\");\n }\n motionValue.setAnimation(animation);\n if (animation && !autoplay)\n animation.pause();\n return animation;\n };\n}\n\nexport { animateStyle };\n", "const getOptions = (options, key) => \n/**\n * TODO: Make test for this\n * Always return a new object otherwise delay is overwritten by results of stagger\n * and this results in no stagger\n */\noptions[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options);\n\nexport { getOptions };\n", "function resolveElements(elements, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = document.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = document.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n", "import { defaults, noop, time } from '@motionone/utils';\nimport { stopAnimation } from './stop-animation.es.js';\n\nconst createAnimation = (factory) => factory();\nconst withControls = (animationFactory, options, duration = defaults.duration) => {\n return new Proxy({\n animations: animationFactory.map(createAnimation).filter(Boolean),\n duration,\n options,\n }, controls);\n};\n/**\n * TODO:\n * Currently this returns the first animation, ideally it would return\n * the first active animation.\n */\nconst getActiveAnimation = (state) => state.animations[0];\nconst controls = {\n get: (target, key) => {\n const activeAnimation = getActiveAnimation(target);\n switch (key) {\n case \"duration\":\n return target.duration;\n case \"currentTime\":\n return time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0);\n case \"playbackRate\":\n case \"playState\":\n return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key];\n case \"finished\":\n if (!target.finished) {\n target.finished = Promise.all(target.animations.map(selectFinished)).catch(noop);\n }\n return target.finished;\n case \"stop\":\n return () => {\n target.animations.forEach((animation) => stopAnimation(animation));\n };\n case \"forEachNative\":\n /**\n * This is for internal use only, fire a callback for each\n * underlying animation.\n */\n return (callback) => {\n target.animations.forEach((animation) => callback(animation, target));\n };\n default:\n return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) ===\n \"undefined\"\n ? undefined\n : () => target.animations.forEach((animation) => animation[key]());\n }\n },\n set: (target, key, value) => {\n switch (key) {\n case \"currentTime\":\n value = time.ms(value);\n // Fall-through\n case \"playbackRate\":\n for (let i = 0; i < target.animations.length; i++) {\n target.animations[i][key] = value;\n }\n return true;\n }\n return false;\n },\n};\nconst selectFinished = (animation) => animation.finished;\n\nexport { controls, withControls };\n", "import { isNumber, isFunction } from '@motionone/utils';\nimport { getEasingFunction } from '@motionone/animation';\n\nfunction stagger(duration = 0.1, { start = 0, from = 0, easing } = {}) {\n return (i, total) => {\n const fromIndex = isNumber(from) ? from : getFromIndex(from, total);\n const distance = Math.abs(fromIndex - i);\n let delay = duration * distance;\n if (easing) {\n const maxDelay = total * duration;\n const easingFunction = getEasingFunction(easing);\n delay = easingFunction(delay / maxDelay) * maxDelay;\n }\n return start + delay;\n };\n}\nfunction getFromIndex(from, total) {\n if (from === \"first\") {\n return 0;\n }\n else {\n const lastIndex = total - 1;\n return from === \"last\" ? lastIndex : lastIndex / 2;\n }\n}\nfunction resolveOption(option, i, total) {\n return isFunction(option) ? option(i, total) : option;\n}\n\nexport { getFromIndex, resolveOption, stagger };\n", "import { invariant } from 'hey-listen';\nimport { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n invariant(Boolean(keyframes), \"No keyframes defined.\");\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n", "import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n", "import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n", "import { animate } from 'motion'\nimport type { ViewHook } from 'phoenix_live_view'\n\nfunction isHidden(el: HTMLElement | null) {\n if (el === null) {\n return true\n }\n\n return el.offsetParent === null\n}\n\nfunction isFlash(el: HTMLElement) {\n return el.dataset.component === 'flash'\n}\n\nfunction parseDuration(value: string | undefined, fallback: number) {\n if (value === undefined) {\n return fallback\n }\n\n if (value === 'Infinity') {\n return Number.POSITIVE_INFINITY\n }\n\n const parsed = Number.parseInt(value)\n\n return Number.isNaN(parsed) ? fallback : parsed\n}\n\n// number of flashes that aren't hidden\nfunction flashCount() {\n let num = 0\n\n if (!isHidden(document.getElementById('server-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('client-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-info'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-error'))) {\n num += 1\n }\n\n return num\n}\n\n// time in ms to wait before removal, but after animation\nconst removalTime = 5\n// animation time in ms\nconst animationTime = 550\n// whether flashes should be counted in maxItems\nconst maxItemsIgnoresFlashes = true\n// gap in px between toasts\nconst gap = 15\nconst dismissEvent = 'live-toast-dismiss'\nconst clientToastEvent = 'live-toast:add'\nconst remainingSelector = '[data-live-toast-remaining]'\n\nlet lastTS: HTMLElement[] = []\n\ntype DismissTimer = {\n cancel: () => void\n}\n\nexport type ClientToastOptions = {\n duration?: number | 'infinity'\n metadata?: Record\n title?: string\n}\n\ntype ClientToastRequest = {\n kind: string\n message: string\n options: ClientToastOptions\n}\n\nconst dismissTimers = new WeakMap()\n\ndeclare global {\n interface HTMLElement {\n order: number\n targetDestination: string\n }\n}\n\nexport function addToast(\n kind: string,\n message: string,\n options: ClientToastOptions = {}\n) {\n document\n .getElementById('toast-group')\n ?.dispatchEvent(\n new CustomEvent(clientToastEvent, {\n detail: { kind, message, options }\n })\n )\n}\n\nfunction doAnimations(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number,\n elToRemove?: HTMLElement\n) {\n const ts = []\n let toasts = Array.from(\n document.querySelectorAll(\n '#toast-group [phx-hook=\"LiveToast\"]'\n )\n )\n .map(t => {\n if (isHidden(t)) {\n return null\n }\n\n return t\n })\n .filter(Boolean)\n // reverse\n .reverse()\n\n if (elToRemove) {\n toasts = toasts.filter(t => t !== elToRemove)\n }\n\n // Traverse through all toasts, in order they appear in the dom, for which they are NOT hidden, and assign el.order to\n // their index\n for (let i = 0; i < toasts.length; i++) {\n const toast = toasts[i]!\n if (isHidden(toast)) {\n continue\n }\n toast.order = i\n\n ts[i] = toast\n }\n\n // now loop through ts and animate each toast to its position\n for (let i = 0; i < ts.length; i++) {\n const max = maxItemsIgnoresFlashes ? maxItems + flashCount() : maxItems\n\n const toast = ts[i]\n\n let direction = ''\n\n if (\n toast.dataset.corner === 'bottom_left' ||\n toast.dataset.corner === 'bottom_center' ||\n toast.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n // Calculate the translateY value with gap\n // now that they can be different heights, we need to actually caluclate the real heights and add them up.\n let val = 0\n\n for (let j = 0; j < toast.order; j++) {\n val += ts[j].offsetHeight + gap\n }\n\n // Calculate opacity based on position\n const opacity = toast.order > max ? 0 : 1 - (toast.order - max + 1)\n\n // also if this item moved past the max limit, disable click events on it\n if (toast.order >= max) {\n toast.classList.remove('pointer-events-auto')\n } else {\n toast.classList.add('pointer-events-auto')\n }\n\n const keyframes = { y: [`${direction}${val}px`], opacity: [opacity] }\n\n // if element is entering for the first time, start below the fold\n if (toast.order === 0 && lastTS.includes(toast) === false) {\n const val = toast.offsetHeight + gap\n const oppositeDirection = direction === '-' ? '' : '-'\n keyframes.y.unshift(`${oppositeDirection}${val}px`)\n\n keyframes.opacity.unshift(0)\n }\n\n toast.targetDestination = `${direction}${val}px`\n\n const duration = animationTime / 1000\n\n // as of right now this is not exposed to end users, but\n // it's 'plumbed out' if we want to make it so in the future\n const delayTime = Number.parseInt(this.el.dataset.delay || '0') / 1000\n\n animate(toast, keyframes, {\n duration,\n easing: [0.22, 1.0, 0.36, 1.0],\n delay: delayTime\n })\n toast.order += 1\n\n // decrease z-index\n toast.style.zIndex = (50 - toast.order).toString()\n\n // if this element moved past the max item limit, send the signal to remove it\n // should this be shorted than delay time?\n // also what about elements moving down when you close one?\n window.setTimeout(() => {\n if (toast.order > max) {\n this.pushEventTo(toastGroupTarget(toast), 'clear', { id: toast.id })\n }\n }, animationDelayTime + removalTime)\n\n lastTS = ts\n }\n}\n\nfunction toastGroupTarget(el: HTMLElement) {\n const streamContainer = el.closest('[phx-update=\"stream\"]')\n const toastGroup = streamContainer?.parentElement\n\n return toastGroup || '#toast-group'\n}\n\nasync function animateOut(this: ViewHook) {\n const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap\n\n let direction = ''\n\n if (\n this.el.dataset.corner === 'bottom_left' ||\n this.el.dataset.corner === 'bottom_center' ||\n this.el.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n const animation = animate(\n this.el,\n { y: `${direction}${val}%`, opacity: 0 },\n {\n opacity: {\n duration: 0.2,\n easing: 'ease-out'\n },\n duration: 0.3,\n easing: 'ease-out'\n }\n )\n\n await animation.finished\n}\n\nasync function dismissToast(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number\n) {\n if (this.el.dataset.liveToastDismissing === 'true') {\n return\n }\n\n this.el.dataset.liveToastDismissing = 'true'\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n\n doAnimations.bind(this, animationDelayTime, maxItems, this.el)()\n await animateOut.bind(this)()\n\n this.pushEventTo(toastGroupTarget(this.el), 'clear', { id: this.el.id })\n}\n\nfunction isInteracting(el: HTMLElement) {\n return el.matches(':hover') || el.matches(':focus-within')\n}\n\nfunction renderRemaining(el: HTMLElement, remaining: number, paused: boolean) {\n const output = el.querySelector(remainingSelector)\n\n if (!output) {\n return\n }\n\n output.textContent = Math.ceil(remaining / 1000).toString()\n output.dataset.paused = paused.toString()\n}\n\nfunction startDismissTimer(\n this: ViewHook,\n duration: number,\n animationDelayTime: number,\n maxItems: number\n) {\n let remaining = duration\n let startedAt: number | undefined\n let timer: number | undefined\n let displayTimer: number | undefined\n\n const currentRemaining = () => {\n if (startedAt === undefined) {\n return remaining\n }\n\n return Math.max(0, remaining - (performance.now() - startedAt))\n }\n\n const clearTimers = () => {\n if (timer !== undefined) {\n window.clearTimeout(timer)\n timer = undefined\n }\n\n if (displayTimer !== undefined) {\n window.clearInterval(displayTimer)\n displayTimer = undefined\n }\n }\n\n const pause = () => {\n if (startedAt === undefined) {\n return\n }\n\n remaining = currentRemaining()\n startedAt = undefined\n clearTimers()\n renderRemaining(this.el, remaining, true)\n }\n\n const resume = () => {\n if (timer || isInteracting(this.el)) {\n return\n }\n\n startedAt = performance.now()\n renderRemaining(this.el, remaining, false)\n\n if (this.el.querySelector(remainingSelector)) {\n displayTimer = window.setInterval(() => {\n renderRemaining(this.el, currentRemaining(), false)\n }, 100)\n }\n\n timer = window.setTimeout(async () => {\n clearTimers()\n remaining = 0\n startedAt = undefined\n renderRemaining(this.el, remaining, false)\n\n await dismissToast.bind(this)(animationDelayTime, maxItems)\n }, remaining + removalTime)\n }\n\n const cancel = () => {\n clearTimers()\n this.el.removeEventListener('mouseenter', pause)\n this.el.removeEventListener('focusin', pause)\n this.el.removeEventListener('mouseleave', resume)\n this.el.removeEventListener('focusout', resume)\n }\n\n this.el.addEventListener('mouseenter', pause)\n this.el.addEventListener('focusin', pause)\n this.el.addEventListener('mouseleave', resume)\n this.el.addEventListener('focusout', resume)\n\n dismissTimers.set(this, { cancel })\n resume()\n}\n\n// Create the Phoenix Hoook for live_toast.\n// You can set custom animation durations.\nexport function createLiveToastHook(duration = 6000, maxItems = 3) {\n return {\n destroyed(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n doAnimations.bind(this)(duration, maxItems)\n },\n updated(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n // animate to targetDestination in 0ms\n const keyframes = { y: [this.el.targetDestination] }\n animate(this.el, keyframes, { duration: 0 })\n },\n mounted(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n const clientToastListener = (event: Event) => {\n const request = (event as CustomEvent).detail\n\n if (!request) {\n return\n }\n\n this.pushEventTo(this.el, 'add_toast', {\n kind: request.kind,\n message: request.message,\n options: request.options\n })\n }\n\n this.el.addEventListener(clientToastEvent, clientToastListener)\n\n return\n }\n\n this.el.addEventListener('show-error', async _event => {\n const delayTime = Number.parseInt(this.el.dataset.delay || '0')\n await new Promise(resolve => setTimeout(resolve, delayTime))\n\n // todo: in the future use this to execute the data-disconnected command\n // https://elixirforum.com/t/can-we-use-liveview-js-commands-inside-a-hook/67324/8\n\n // const command = this.el.getAttribute('data-disconnected')\n // this.liveSocket.execJS(this.el, command)\n\n // (don't want to do this quite yet because 1.0 is pretty new)\n // also repeat this on hide.\n\n this.el.style.display = 'flex'\n })\n\n this.el.addEventListener('hide-error', async _event => {\n this.el.style.display = 'none'\n })\n\n // for the special flashes, check if they are visible, and if not, return early out of here.\n if (['server-error', 'client-error'].includes(this.el.id)) {\n if (isHidden(document.getElementById(this.el.id))) {\n return\n }\n }\n\n window.addEventListener('phx:clear-flash', e => {\n this.pushEvent('lv:clear-flash', {\n key: (e as CustomEvent<{ key: string }>).detail.key\n })\n })\n\n window.addEventListener('flash-leave', async event => {\n if (event.target === this.el) {\n // animate this flash sliding out\n doAnimations.bind(this, duration, maxItems, this.el)()\n await animateOut.bind(this)()\n }\n })\n\n this.el.addEventListener(dismissEvent, async event => {\n event.stopPropagation()\n\n await dismissToast.bind(this)(duration, maxItems)\n })\n\n window.addEventListener(`phx:${dismissEvent}`, async event => {\n const detail = (event as CustomEvent<{ id?: string; uuid?: string }>)\n .detail\n const id = detail.id || `toast-${detail.uuid}`\n\n if (id === this.el.id) {\n await dismissToast.bind(this)(duration, maxItems)\n }\n })\n\n // begin actually showing the toast through this call to the animation function\n doAnimations.bind(this)(duration, maxItems)\n\n const durationOverride = parseDuration(this.el.dataset.duration, duration)\n\n let flashDuration = undefined\n if (this.el.dataset.flashDuration !== undefined) {\n flashDuration = Number.parseInt(this.el.dataset.flashDuration)\n }\n\n // skip the removal code if this is a flash, if autoHideFlash is nullish\n if (isFlash(this.el) && !flashDuration) {\n return\n }\n\n // this could be condensed\n if (flashDuration) {\n // do stuff\n window.setTimeout(async () => {\n // animate this element sliding down, opacity to 0, with delay time\n await animateOut.bind(this)()\n\n const kind = this.el.dataset.kind\n\n if (kind) {\n this.pushEvent('lv:clear-flash', { key: kind })\n }\n }, flashDuration + removalTime)\n } else {\n if (Number.isFinite(durationOverride) && durationOverride > 0) {\n startDismissTimer.bind(this)(durationOverride, duration, maxItems)\n }\n }\n }\n }\n}\n"], - "mappings": "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", + "sourcesContent": ["export * from './live_toast'\n", "function addUniqueItem(array, item) {\n array.indexOf(item) === -1 && array.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n index > -1 && arr.splice(index, 1);\n}\n\nexport { addUniqueItem, removeItem };\n", "const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n", "const defaults = {\n duration: 0.3,\n delay: 0,\n endDelay: 0,\n repeat: 0,\n easing: \"ease\",\n};\n\nexport { defaults };\n", "const isNumber = (value) => typeof value === \"number\";\n\nexport { isNumber };\n", "import { isNumber } from './is-number.es.js';\n\nconst isEasingList = (easing) => Array.isArray(easing) && !isNumber(easing[0]);\n\nexport { isEasingList };\n", "const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n", "import { isEasingList } from './is-easing-list.es.js';\nimport { wrap } from './wrap.es.js';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingList(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n", "const mix = (min, max, progress) => -progress * min + progress * max + min;\n\nexport { mix };\n", "const noop = () => { };\nconst noopReturn = (v) => v;\n\nexport { noop, noopReturn };\n", "const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\nexport { progress };\n", "import { mix } from './mix.es.js';\nimport { progress } from './progress.es.js';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\nfunction defaultOffset(length) {\n const offset = [0];\n fillOffset(offset, length - 1);\n return offset;\n}\n\nexport { defaultOffset, fillOffset };\n", "import { mix } from './mix.es.js';\nimport { noopReturn } from './noop.es.js';\nimport { fillOffset, defaultOffset } from './offset.es.js';\nimport { progress } from './progress.es.js';\nimport { getEasingForSegment } from './easing.es.js';\nimport { clamp } from './clamp.es.js';\n\nfunction interpolate(output, input = defaultOffset(output.length), easing = noopReturn) {\n const length = output.length;\n /**\n * If the input length is lower than the output we\n * fill the input to match. This currently assumes the input\n * is an animation progress value so is a good candidate for\n * moving outside the function.\n */\n const remainder = length - input.length;\n remainder > 0 && fillOffset(input, remainder);\n return (t) => {\n let i = 0;\n for (; i < length - 2; i++) {\n if (t < input[i + 1])\n break;\n }\n let progressInRange = clamp(0, 1, progress(input[i], input[i + 1], t));\n const segmentEasing = getEasingForSegment(easing, i);\n progressInRange = segmentEasing(progressInRange);\n return mix(output[i], output[i + 1], progressInRange);\n };\n}\n\nexport { interpolate };\n", "import { isNumber } from './is-number.es.js';\n\nconst isCubicBezier = (easing) => Array.isArray(easing) && isNumber(easing[0]);\n\nexport { isCubicBezier };\n", "const isEasingGenerator = (easing) => typeof easing === \"object\" &&\n Boolean(easing.createAnimation);\n\nexport { isEasingGenerator };\n", "const isFunction = (value) => typeof value === \"function\";\n\nexport { isFunction };\n", "const isString = (value) => typeof value === \"string\";\n\nexport { isString };\n", "const time = {\n ms: (seconds) => seconds * 1000,\n s: (milliseconds) => milliseconds / 1000,\n};\n\nexport { time };\n", "import { noopReturn } from '@motionone/utils';\n\n/*\n Bezier function generator\n\n This has been modified from Ga\u00EBtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noopReturn;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n", "import { clamp } from '@motionone/utils';\n\nconst steps = (steps, direction = \"end\") => (progress) => {\n progress =\n direction === \"end\"\n ? Math.min(progress, 0.999)\n : Math.max(progress, 0.001);\n const expanded = progress * steps;\n const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n return clamp(0, 1, rounded / steps);\n};\n\nexport { steps };\n", "import { cubicBezier, steps } from '@motionone/easing';\nimport { isFunction, isCubicBezier, noopReturn } from '@motionone/utils';\n\nconst namedEasings = {\n ease: cubicBezier(0.25, 0.1, 0.25, 1.0),\n \"ease-in\": cubicBezier(0.42, 0.0, 1.0, 1.0),\n \"ease-in-out\": cubicBezier(0.42, 0.0, 0.58, 1.0),\n \"ease-out\": cubicBezier(0.0, 0.0, 0.58, 1.0),\n};\nconst functionArgsRegex = /\\((.*?)\\)/;\nfunction getEasingFunction(definition) {\n // If already an easing function, return\n if (isFunction(definition))\n return definition;\n // If an easing curve definition, return bezier function\n if (isCubicBezier(definition))\n return cubicBezier(...definition);\n // If we have a predefined easing function, return\n const namedEasing = namedEasings[definition];\n if (namedEasing)\n return namedEasing;\n // If this is a steps function, attempt to create easing curve\n if (definition.startsWith(\"steps\")) {\n const args = functionArgsRegex.exec(definition);\n if (args) {\n const argsArray = args[1].split(\",\");\n return steps(parseFloat(argsArray[0]), argsArray[1].trim());\n }\n }\n return noopReturn;\n}\n\nexport { getEasingFunction };\n", "import { noopReturn, defaults, isEasingGenerator, isEasingList, interpolate } from '@motionone/utils';\nimport { getEasingFunction } from './utils/easing.es.js';\n\nclass Animation {\n constructor(output, keyframes = [0, 1], { easing, duration: initialDuration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, offset, direction = \"normal\", autoplay = true, } = {}) {\n this.startTime = null;\n this.rate = 1;\n this.t = 0;\n this.cancelTimestamp = null;\n this.easing = noopReturn;\n this.duration = 0;\n this.totalDuration = 0;\n this.repeat = 0;\n this.playState = \"idle\";\n this.finished = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n easing = easing || defaults.easing;\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n initialDuration = custom.duration || initialDuration;\n }\n this.repeat = repeat;\n this.easing = isEasingList(easing) ? noopReturn : getEasingFunction(easing);\n this.updateDuration(initialDuration);\n const interpolate$1 = interpolate(keyframes, offset, isEasingList(easing) ? easing.map(getEasingFunction) : noopReturn);\n this.tick = (timestamp) => {\n var _a;\n // TODO: Temporary fix for OptionsResolver typing\n delay = delay;\n let t = 0;\n if (this.pauseTime !== undefined) {\n t = this.pauseTime;\n }\n else {\n t = (timestamp - this.startTime) * this.rate;\n }\n this.t = t;\n // Convert to seconds\n t /= 1000;\n // Rebase on delay\n t = Math.max(t - delay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (this.playState === \"finished\" && this.pauseTime === undefined) {\n t = this.totalDuration;\n }\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = t / this.duration;\n // TODO progress += iterationStart\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n iterationProgress === 1 && currentIteration--;\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const iterationIsOdd = currentIteration % 2;\n if (direction === \"reverse\" ||\n (direction === \"alternate\" && iterationIsOdd) ||\n (direction === \"alternate-reverse\" && !iterationIsOdd)) {\n iterationProgress = 1 - iterationProgress;\n }\n const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1);\n const latest = interpolate$1(this.easing(p));\n output(latest);\n const isAnimationFinished = this.pauseTime === undefined &&\n (this.playState === \"finished\" || t >= this.totalDuration + endDelay);\n if (isAnimationFinished) {\n this.playState = \"finished\";\n (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest);\n }\n else if (this.playState !== \"idle\") {\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n };\n if (autoplay)\n this.play();\n }\n play() {\n const now = performance.now();\n this.playState = \"running\";\n if (this.pauseTime !== undefined) {\n this.startTime = now - this.pauseTime;\n }\n else if (!this.startTime) {\n this.startTime = now;\n }\n this.cancelTimestamp = this.startTime;\n this.pauseTime = undefined;\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n pause() {\n this.playState = \"paused\";\n this.pauseTime = this.t;\n }\n finish() {\n this.playState = \"finished\";\n this.tick(0);\n }\n stop() {\n var _a;\n this.playState = \"idle\";\n if (this.frameRequestId !== undefined) {\n cancelAnimationFrame(this.frameRequestId);\n }\n (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false);\n }\n cancel() {\n this.stop();\n this.tick(this.cancelTimestamp);\n }\n reverse() {\n this.rate *= -1;\n }\n commitStyles() { }\n updateDuration(duration) {\n this.duration = duration;\n this.totalDuration = duration * (this.repeat + 1);\n }\n get currentTime() {\n return this.t;\n }\n set currentTime(t) {\n if (this.pauseTime !== undefined || this.rate === 0) {\n this.pauseTime = t;\n }\n else {\n this.startTime = performance.now() - t / this.rate;\n }\n }\n get playbackRate() {\n return this.rate;\n }\n set playbackRate(rate) {\n this.rate = rate;\n }\n}\n\nexport { Animation };\n", "var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n", "/**\n * The MotionValue tracks the state of a single animatable\n * value. Currently, updatedAt and current are unused. The\n * long term idea is to use this to minimise the number\n * of DOM reads, and to abstract the DOM interactions here.\n */\nclass MotionValue {\n setAnimation(animation) {\n this.animation = animation;\n animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => { });\n }\n clearAnimation() {\n this.animation = this.generator = undefined;\n }\n}\n\nexport { MotionValue };\n", "import { MotionValue } from '@motionone/types';\n\nconst data = new WeakMap();\nfunction getAnimationData(element) {\n if (!data.has(element)) {\n data.set(element, {\n transforms: [],\n values: new Map(),\n });\n }\n return data.get(element);\n}\nfunction getMotionValue(motionValues, name) {\n if (!motionValues.has(name)) {\n motionValues.set(name, new MotionValue());\n }\n return motionValues.get(name);\n}\n\nexport { getAnimationData, getMotionValue };\n", "import { noopReturn, addUniqueItem } from '@motionone/utils';\nimport { getAnimationData } from '../data.es.js';\n\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\nconst axes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\nconst order = [\"translate\", \"scale\", \"rotate\", \"skew\"];\nconst transformAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n};\nconst rotation = {\n syntax: \"\",\n initialValue: \"0deg\",\n toDefaultUnit: (v) => v + \"deg\",\n};\nconst baseTransformProperties = {\n translate: {\n syntax: \"\",\n initialValue: \"0px\",\n toDefaultUnit: (v) => v + \"px\",\n },\n rotate: rotation,\n scale: {\n syntax: \"\",\n initialValue: 1,\n toDefaultUnit: noopReturn,\n },\n skew: rotation,\n};\nconst transformDefinitions = new Map();\nconst asTransformCssVar = (name) => `--motion-${name}`;\n/**\n * Generate a list of every possible transform key\n */\nconst transforms = [\"x\", \"y\", \"z\"];\norder.forEach((name) => {\n axes.forEach((axis) => {\n transforms.push(name + axis);\n transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b);\n/**\n * Provide a quick way to check if a string is the name of a transform\n */\nconst transformLookup = new Set(transforms);\nconst isTransform = (name) => transformLookup.has(name);\nconst addTransformToElement = (element, name) => {\n // Map x to translateX etc\n if (transformAlias[name])\n name = transformAlias[name];\n const { transforms } = getAnimationData(element);\n addUniqueItem(transforms, name);\n /**\n * TODO: An optimisation here could be to cache the transform in element data\n * and only update if this has changed.\n */\n element.style.transform = buildTransformTemplate(transforms);\n};\nconst buildTransformTemplate = (transforms) => transforms\n .sort(compareTransformOrder)\n .reduce(transformListToString, \"\")\n .trim();\nconst transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`;\n\nexport { addTransformToElement, asTransformCssVar, axes, buildTransformTemplate, compareTransformOrder, isTransform, transformAlias, transformDefinitions };\n", "import { transformDefinitions } from './transforms.es.js';\n\nconst isCssVar = (name) => name.startsWith(\"--\");\nconst registeredProperties = new Set();\nfunction registerCssVariable(name) {\n if (registeredProperties.has(name))\n return;\n registeredProperties.add(name);\n try {\n const { syntax, initialValue } = transformDefinitions.has(name)\n ? transformDefinitions.get(name)\n : {};\n CSS.registerProperty({\n name,\n inherits: false,\n syntax,\n initialValue,\n });\n }\n catch (e) { }\n}\n\nexport { isCssVar, registerCssVariable, registeredProperties };\n", "const testAnimation = (keyframes, options) => document.createElement(\"div\").animate(keyframes, options);\nconst featureTests = {\n cssRegisterProperty: () => typeof CSS !== \"undefined\" &&\n Object.hasOwnProperty.call(CSS, \"registerProperty\"),\n waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n partialKeyframes: () => {\n try {\n testAnimation({ opacity: [1] });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n finished: () => Boolean(testAnimation({ opacity: [0, 1] }, { duration: 0.001 }).finished),\n linearEasing: () => {\n try {\n testAnimation({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n};\nconst results = {};\nconst supports = {};\nfor (const key in featureTests) {\n supports[key] = () => {\n if (results[key] === undefined)\n results[key] =\n featureTests[key]();\n return results[key];\n };\n}\n\nexport { supports };\n", "import { isFunction, defaults, isCubicBezier, progress } from '@motionone/utils';\nimport { supports } from './feature-detection.es.js';\n\n// Create a linear easing point for every x second\nconst resolution = 0.015;\nconst generateLinearEasingPoints = (easing, duration) => {\n let points = \"\";\n const numPoints = Math.round(duration / resolution);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return points.substring(0, points.length - 2);\n};\nconst convertEasing = (easing, duration) => {\n if (isFunction(easing)) {\n return supports.linearEasing()\n ? `linear(${generateLinearEasingPoints(easing, duration)})`\n : defaults.easing;\n }\n else {\n return isCubicBezier(easing) ? cubicBezierAsString(easing) : easing;\n }\n};\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { convertEasing, cubicBezierAsString, generateLinearEasingPoints };\n", "function hydrateKeyframes(keyframes, readInitialValue) {\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] === null) {\n keyframes[i] = i ? keyframes[i - 1] : readInitialValue();\n }\n }\n return keyframes;\n}\nconst keyframesList = (keyframes) => Array.isArray(keyframes) ? keyframes : [keyframes];\n\nexport { hydrateKeyframes, keyframesList };\n", "import { isTransform, asTransformCssVar, transformAlias } from './transforms.es.js';\n\nfunction getStyleName(key) {\n if (transformAlias[key])\n key = transformAlias[key];\n return isTransform(key) ? asTransformCssVar(key) : key;\n}\n\nexport { getStyleName };\n", "import { isCssVar } from './utils/css-var.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { transformDefinitions } from './utils/transforms.es.js';\n\nconst style = {\n get: (element, name) => {\n name = getStyleName(name);\n let value = isCssVar(name)\n ? element.style.getPropertyValue(name)\n : getComputedStyle(element)[name];\n // TODO Decide if value can be 0\n if (!value && value !== 0) {\n const definition = transformDefinitions.get(name);\n if (definition)\n value = definition.initialValue;\n }\n return value;\n },\n set: (element, name, value) => {\n name = getStyleName(name);\n if (isCssVar(name)) {\n element.style.setProperty(name, value);\n }\n else {\n element.style[name] = value;\n }\n },\n};\n\nexport { style };\n", "function stopAnimation(animation, needsCommit = true) {\n if (!animation || animation.playState === \"finished\")\n return;\n // Suppress error thrown by WAAPI\n try {\n if (animation.stop) {\n animation.stop();\n }\n else {\n needsCommit && animation.commitStyles();\n animation.cancel();\n }\n }\n catch (e) { }\n}\n\nexport { stopAnimation };\n", "import { noopReturn, isString } from '@motionone/utils';\n\nfunction getUnitConverter(keyframes, definition) {\n var _a;\n let toUnit = (definition === null || definition === void 0 ? void 0 : definition.toDefaultUnit) || noopReturn;\n const finalKeyframe = keyframes[keyframes.length - 1];\n if (isString(finalKeyframe)) {\n const unit = ((_a = finalKeyframe.match(/(-?[\\d.]+)([a-z%]*)/)) === null || _a === void 0 ? void 0 : _a[2]) || \"\";\n if (unit)\n toUnit = (value) => value + unit;\n }\n return toUnit;\n}\n\nexport { getUnitConverter };\n", "import { getAnimationData, getMotionValue } from './data.es.js';\nimport { isCssVar, registerCssVariable } from './utils/css-var.es.js';\nimport { defaults, isEasingGenerator, isFunction, isEasingList, isNumber, time, noop } from '@motionone/utils';\nimport { isTransform, addTransformToElement, transformDefinitions } from './utils/transforms.es.js';\nimport { convertEasing } from './utils/easing.es.js';\nimport { supports } from './utils/feature-detection.es.js';\nimport { hydrateKeyframes, keyframesList } from './utils/keyframes.es.js';\nimport { style } from './style.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { stopAnimation } from './utils/stop-animation.es.js';\nimport { getUnitConverter } from './utils/get-unit.es.js';\n\nfunction getDevToolsRecord() {\n return window.__MOTION_DEV_TOOLS_RECORD;\n}\nfunction animateStyle(element, key, keyframesDefinition, options = {}, AnimationPolyfill) {\n const record = getDevToolsRecord();\n const isRecording = options.record !== false && record;\n let animation;\n let { duration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, easing = defaults.easing, persist = false, direction, offset, allowWebkitAcceleration = false, autoplay = true, } = options;\n const data = getAnimationData(element);\n const valueIsTransform = isTransform(key);\n let canAnimateNatively = supports.waapi();\n /**\n * If this is an individual transform, we need to map its\n * key to a CSS variable and update the element's transform style\n */\n valueIsTransform && addTransformToElement(element, key);\n const name = getStyleName(key);\n const motionValue = getMotionValue(data.values, name);\n /**\n * Get definition of value, this will be used to convert numerical\n * keyframes into the default value type.\n */\n const definition = transformDefinitions.get(name);\n /**\n * Stop the current animation, if any. Because this will trigger\n * commitStyles (DOM writes) and we might later trigger DOM reads,\n * this is fired now and we return a factory function to create\n * the actual animation that can get called in batch,\n */\n stopAnimation(motionValue.animation, !(isEasingGenerator(easing) && motionValue.generator) &&\n options.record !== false);\n /**\n * Batchable factory function containing all DOM reads.\n */\n return () => {\n const readInitialValue = () => { var _a, _b; return (_b = (_a = style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; };\n /**\n * Replace null values with the previous keyframe value, or read\n * it from the DOM if it's the first keyframe.\n */\n let keyframes = hydrateKeyframes(keyframesList(keyframesDefinition), readInitialValue);\n /**\n * Detect unit type of keyframes.\n */\n const toUnit = getUnitConverter(keyframes, definition);\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes, key !== \"opacity\", readInitialValue, name, motionValue);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n duration = custom.duration || duration;\n }\n /**\n * If this is a CSS variable we need to register it with the browser\n * before it can be animated natively. We also set it with setProperty\n * rather than directly onto the element.style object.\n */\n if (isCssVar(name)) {\n if (supports.cssRegisterProperty()) {\n registerCssVariable(name);\n }\n else {\n canAnimateNatively = false;\n }\n }\n /**\n * If we've been passed a custom easing function, and this browser\n * does **not** support linear() easing, and the value is a transform\n * (and thus a pure number) we can still support the custom easing\n * by falling back to the animation polyfill.\n */\n if (valueIsTransform &&\n !supports.linearEasing() &&\n (isFunction(easing) || (isEasingList(easing) && easing.some(isFunction)))) {\n canAnimateNatively = false;\n }\n /**\n * If we can animate this value with WAAPI, do so.\n */\n if (canAnimateNatively) {\n /**\n * Convert numbers to default value types. Currently this only supports\n * transforms but it could also support other value types.\n */\n if (definition) {\n keyframes = keyframes.map((value) => isNumber(value) ? definition.toDefaultUnit(value) : value);\n }\n /**\n * If this browser doesn't support partial/implicit keyframes we need to\n * explicitly provide one.\n */\n if (keyframes.length === 1 &&\n (!supports.partialKeyframes() || isRecording)) {\n keyframes.unshift(readInitialValue());\n }\n const animationOptions = {\n delay: time.ms(delay),\n duration: time.ms(duration),\n endDelay: time.ms(endDelay),\n easing: !isEasingList(easing)\n ? convertEasing(easing, duration)\n : undefined,\n direction,\n iterations: repeat + 1,\n fill: \"both\",\n };\n animation = element.animate({\n [name]: keyframes,\n offset,\n easing: isEasingList(easing)\n ? easing.map((thisEasing) => convertEasing(thisEasing, duration))\n : undefined,\n }, animationOptions);\n /**\n * Polyfill finished Promise in browsers that don't support it\n */\n if (!animation.finished) {\n animation.finished = new Promise((resolve, reject) => {\n animation.onfinish = resolve;\n animation.oncancel = reject;\n });\n }\n const target = keyframes[keyframes.length - 1];\n animation.finished\n .then(() => {\n if (persist)\n return;\n // Apply styles to target\n style.set(element, name, target);\n // Ensure fill modes don't persist\n animation.cancel();\n })\n .catch(noop);\n /**\n * This forces Webkit to run animations on the main thread by exploiting\n * this condition:\n * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099\n *\n * This fixes Webkit's timing bugs, like accelerated animations falling\n * out of sync with main thread animations and massive delays in starting\n * accelerated animations in WKWebView.\n */\n if (!allowWebkitAcceleration)\n animation.playbackRate = 1.000001;\n /**\n * If we can't animate the value natively then we can fallback to the numbers-only\n * polyfill for transforms.\n */\n }\n else if (AnimationPolyfill && valueIsTransform) {\n /**\n * If any keyframe is a string (because we measured it from the DOM), we need to convert\n * it into a number before passing to the Animation polyfill.\n */\n keyframes = keyframes.map((value) => typeof value === \"string\" ? parseFloat(value) : value);\n /**\n * If we only have a single keyframe, we need to create an initial keyframe by reading\n * the current value from the DOM.\n */\n if (keyframes.length === 1) {\n keyframes.unshift(parseFloat(readInitialValue()));\n }\n animation = new AnimationPolyfill((latest) => {\n style.set(element, name, toUnit ? toUnit(latest) : latest);\n }, keyframes, Object.assign(Object.assign({}, options), { duration,\n easing }));\n }\n else {\n const target = keyframes[keyframes.length - 1];\n style.set(element, name, definition && isNumber(target)\n ? definition.toDefaultUnit(target)\n : target);\n }\n if (isRecording) {\n record(element, key, keyframes, {\n duration,\n delay: delay,\n easing,\n repeat,\n offset,\n }, \"motion-one\");\n }\n motionValue.setAnimation(animation);\n if (animation && !autoplay)\n animation.pause();\n return animation;\n };\n}\n\nexport { animateStyle };\n", "const getOptions = (options, key) => \n/**\n * TODO: Make test for this\n * Always return a new object otherwise delay is overwritten by results of stagger\n * and this results in no stagger\n */\noptions[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options);\n\nexport { getOptions };\n", "function resolveElements(elements, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = document.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = document.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n", "import { defaults, noop, time } from '@motionone/utils';\nimport { stopAnimation } from './stop-animation.es.js';\n\nconst createAnimation = (factory) => factory();\nconst withControls = (animationFactory, options, duration = defaults.duration) => {\n return new Proxy({\n animations: animationFactory.map(createAnimation).filter(Boolean),\n duration,\n options,\n }, controls);\n};\n/**\n * TODO:\n * Currently this returns the first animation, ideally it would return\n * the first active animation.\n */\nconst getActiveAnimation = (state) => state.animations[0];\nconst controls = {\n get: (target, key) => {\n const activeAnimation = getActiveAnimation(target);\n switch (key) {\n case \"duration\":\n return target.duration;\n case \"currentTime\":\n return time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0);\n case \"playbackRate\":\n case \"playState\":\n return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key];\n case \"finished\":\n if (!target.finished) {\n target.finished = Promise.all(target.animations.map(selectFinished)).catch(noop);\n }\n return target.finished;\n case \"stop\":\n return () => {\n target.animations.forEach((animation) => stopAnimation(animation));\n };\n case \"forEachNative\":\n /**\n * This is for internal use only, fire a callback for each\n * underlying animation.\n */\n return (callback) => {\n target.animations.forEach((animation) => callback(animation, target));\n };\n default:\n return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) ===\n \"undefined\"\n ? undefined\n : () => target.animations.forEach((animation) => animation[key]());\n }\n },\n set: (target, key, value) => {\n switch (key) {\n case \"currentTime\":\n value = time.ms(value);\n // Fall-through\n case \"playbackRate\":\n for (let i = 0; i < target.animations.length; i++) {\n target.animations[i][key] = value;\n }\n return true;\n }\n return false;\n },\n};\nconst selectFinished = (animation) => animation.finished;\n\nexport { controls, withControls };\n", "import { isNumber, isFunction } from '@motionone/utils';\nimport { getEasingFunction } from '@motionone/animation';\n\nfunction stagger(duration = 0.1, { start = 0, from = 0, easing } = {}) {\n return (i, total) => {\n const fromIndex = isNumber(from) ? from : getFromIndex(from, total);\n const distance = Math.abs(fromIndex - i);\n let delay = duration * distance;\n if (easing) {\n const maxDelay = total * duration;\n const easingFunction = getEasingFunction(easing);\n delay = easingFunction(delay / maxDelay) * maxDelay;\n }\n return start + delay;\n };\n}\nfunction getFromIndex(from, total) {\n if (from === \"first\") {\n return 0;\n }\n else {\n const lastIndex = total - 1;\n return from === \"last\" ? lastIndex : lastIndex / 2;\n }\n}\nfunction resolveOption(option, i, total) {\n return isFunction(option) ? option(i, total) : option;\n}\n\nexport { getFromIndex, resolveOption, stagger };\n", "import { invariant } from 'hey-listen';\nimport { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n invariant(Boolean(keyframes), \"No keyframes defined.\");\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n", "import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n", "import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n", "import { animate } from 'motion'\nimport type { ViewHook } from 'phoenix_live_view'\n\nfunction isHidden(el: HTMLElement | null) {\n if (el === null) {\n return true\n }\n\n return el.offsetParent === null\n}\n\nfunction isFlash(el: HTMLElement) {\n return el.dataset.component === 'flash'\n}\n\nfunction parseDuration(value: string | undefined, fallback: number) {\n if (value === undefined) {\n return fallback\n }\n\n if (value === 'Infinity') {\n return Number.POSITIVE_INFINITY\n }\n\n const parsed = Number.parseInt(value)\n\n return Number.isNaN(parsed) ? fallback : parsed\n}\n\n// number of flashes that aren't hidden\nfunction flashCount() {\n let num = 0\n\n if (!isHidden(document.getElementById('server-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('client-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-info'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-error'))) {\n num += 1\n }\n\n return num\n}\n\n// time in ms to wait before removal, but after animation\nconst removalTime = 5\n// animation time in ms\nconst animationTime = 550\n// whether flashes should be counted in maxItems\nconst maxItemsIgnoresFlashes = true\n// gap in px between toasts\nconst gap = 15\nconst dismissEvent = 'live-toast-dismiss'\nconst clientToastEvent = 'live-toast:add'\nconst remainingSelector = '[data-live-toast-remaining]'\n\nlet lastTS: HTMLElement[] = []\n\ntype DismissTimer = {\n cancel: () => void\n}\n\ntype ToastElement = HTMLElement & {\n order: number\n targetDestination: string\n}\n\nexport type ClientToastOptions = {\n duration?: number | 'infinity'\n metadata?: Record\n title?: string\n}\n\ntype ClientToastRequest = {\n kind: string\n message: string\n options: ClientToastOptions\n}\n\nconst dismissTimers = new WeakMap()\n\nfunction asToastElement(el: HTMLElement): ToastElement {\n return el as ToastElement\n}\n\nexport function addToast(\n kind: string,\n message: string,\n options: ClientToastOptions = {}\n) {\n document\n .getElementById('toast-group')\n ?.dispatchEvent(\n new CustomEvent(clientToastEvent, {\n detail: { kind, message, options }\n })\n )\n}\n\nfunction doAnimations(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number,\n elToRemove?: HTMLElement\n) {\n const ts: ToastElement[] = []\n let toasts = Array.from(\n document.querySelectorAll(\n '#toast-group [phx-hook=\"LiveToast\"]'\n )\n )\n .map(t => {\n if (isHidden(t)) {\n return null\n }\n\n return t\n })\n .filter(Boolean)\n // reverse\n .reverse()\n\n if (elToRemove) {\n toasts = toasts.filter(t => t !== elToRemove)\n }\n\n // Traverse through all toasts, in order they appear in the dom, for which they are NOT hidden, and assign el.order to\n // their index\n for (let i = 0; i < toasts.length; i++) {\n const toast = toasts[i]!\n if (isHidden(toast)) {\n continue\n }\n toast.order = i\n\n ts[i] = toast\n }\n\n // now loop through ts and animate each toast to its position\n for (let i = 0; i < ts.length; i++) {\n const max = maxItemsIgnoresFlashes ? maxItems + flashCount() : maxItems\n\n const toast = ts[i]\n\n let direction = ''\n\n if (\n toast.dataset.corner === 'bottom_left' ||\n toast.dataset.corner === 'bottom_center' ||\n toast.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n // Calculate the translateY value with gap\n // now that they can be different heights, we need to actually caluclate the real heights and add them up.\n let val = 0\n\n for (let j = 0; j < toast.order; j++) {\n val += ts[j].offsetHeight + gap\n }\n\n // Calculate opacity based on position\n const opacity = toast.order > max ? 0 : 1 - (toast.order - max + 1)\n\n // also if this item moved past the max limit, disable click events on it\n if (toast.order >= max) {\n toast.classList.remove('pointer-events-auto')\n } else {\n toast.classList.add('pointer-events-auto')\n }\n\n const keyframes = { y: [`${direction}${val}px`], opacity: [opacity] }\n\n // if element is entering for the first time, start below the fold\n if (toast.order === 0 && lastTS.includes(toast) === false) {\n const val = toast.offsetHeight + gap\n const oppositeDirection = direction === '-' ? '' : '-'\n keyframes.y.unshift(`${oppositeDirection}${val}px`)\n\n keyframes.opacity.unshift(0)\n }\n\n toast.targetDestination = `${direction}${val}px`\n\n const duration = animationTime / 1000\n\n // as of right now this is not exposed to end users, but\n // it's 'plumbed out' if we want to make it so in the future\n const delayTime = Number.parseInt(this.el.dataset.delay || '0') / 1000\n\n animate(toast, keyframes, {\n duration,\n easing: [0.22, 1.0, 0.36, 1.0],\n delay: delayTime\n })\n toast.order += 1\n\n // decrease z-index\n toast.style.zIndex = (50 - toast.order).toString()\n\n // if this element moved past the max item limit, send the signal to remove it\n // should this be shorted than delay time?\n // also what about elements moving down when you close one?\n window.setTimeout(() => {\n if (toast.order > max) {\n this.pushEventTo(toastGroupTarget(toast), 'clear', { id: toast.id })\n }\n }, animationDelayTime + removalTime)\n\n lastTS = ts\n }\n}\n\nfunction toastGroupTarget(el: HTMLElement) {\n const streamContainer = el.closest('[phx-update=\"stream\"]')\n const toastGroup = streamContainer?.parentElement\n\n return toastGroup || '#toast-group'\n}\n\nasync function animateOut(this: ViewHook) {\n const toast = asToastElement(this.el)\n const val = (toast.order - 2) * 100 + (toast.order - 2) * gap\n\n let direction = ''\n\n if (\n this.el.dataset.corner === 'bottom_left' ||\n this.el.dataset.corner === 'bottom_center' ||\n this.el.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n const animation = animate(\n this.el,\n { y: `${direction}${val}%`, opacity: 0 },\n {\n opacity: {\n duration: 0.2,\n easing: 'ease-out'\n },\n duration: 0.3,\n easing: 'ease-out'\n }\n )\n\n await animation.finished\n}\n\nasync function dismissToast(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number\n) {\n if (this.el.dataset.liveToastDismissing === 'true') {\n return\n }\n\n this.el.dataset.liveToastDismissing = 'true'\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n\n doAnimations.bind(this, animationDelayTime, maxItems, this.el)()\n await animateOut.bind(this)()\n\n this.pushEventTo(toastGroupTarget(this.el), 'clear', { id: this.el.id })\n}\n\nfunction isInteracting(el: HTMLElement) {\n return el.matches(':hover') || el.matches(':focus-within')\n}\n\nfunction renderRemaining(el: HTMLElement, remaining: number, paused: boolean) {\n const output = el.querySelector(remainingSelector)\n\n if (!output) {\n return\n }\n\n output.textContent = Math.ceil(remaining / 1000).toString()\n output.dataset.paused = paused.toString()\n}\n\nfunction startDismissTimer(\n this: ViewHook,\n duration: number,\n animationDelayTime: number,\n maxItems: number\n) {\n let remaining = duration\n let startedAt: number | undefined\n let timer: number | undefined\n let displayTimer: number | undefined\n\n const currentRemaining = () => {\n if (startedAt === undefined) {\n return remaining\n }\n\n return Math.max(0, remaining - (performance.now() - startedAt))\n }\n\n const clearTimers = () => {\n if (timer !== undefined) {\n window.clearTimeout(timer)\n timer = undefined\n }\n\n if (displayTimer !== undefined) {\n window.clearInterval(displayTimer)\n displayTimer = undefined\n }\n }\n\n const pause = () => {\n if (startedAt === undefined) {\n return\n }\n\n remaining = currentRemaining()\n startedAt = undefined\n clearTimers()\n renderRemaining(this.el, remaining, true)\n }\n\n const resume = () => {\n if (timer || isInteracting(this.el)) {\n return\n }\n\n startedAt = performance.now()\n renderRemaining(this.el, remaining, false)\n\n if (this.el.querySelector(remainingSelector)) {\n displayTimer = window.setInterval(() => {\n renderRemaining(this.el, currentRemaining(), false)\n }, 100)\n }\n\n timer = window.setTimeout(async () => {\n clearTimers()\n remaining = 0\n startedAt = undefined\n renderRemaining(this.el, remaining, false)\n\n await dismissToast.bind(this)(animationDelayTime, maxItems)\n }, remaining + removalTime)\n }\n\n const cancel = () => {\n clearTimers()\n this.el.removeEventListener('mouseenter', pause)\n this.el.removeEventListener('focusin', pause)\n this.el.removeEventListener('mouseleave', resume)\n this.el.removeEventListener('focusout', resume)\n }\n\n this.el.addEventListener('mouseenter', pause)\n this.el.addEventListener('focusin', pause)\n this.el.addEventListener('mouseleave', resume)\n this.el.addEventListener('focusout', resume)\n\n dismissTimers.set(this, { cancel })\n resume()\n}\n\n// Create the Phoenix Hoook for live_toast.\n// You can set custom animation durations.\nexport function createLiveToastHook(duration = 6000, maxItems = 3) {\n return {\n destroyed(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n doAnimations.bind(this)(duration, maxItems)\n },\n updated(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n // animate to targetDestination in 0ms\n const toast = asToastElement(this.el)\n const keyframes = { y: [toast.targetDestination] }\n animate(this.el, keyframes, { duration: 0 })\n },\n mounted(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n const clientToastListener = (event: Event) => {\n const request = (event as CustomEvent).detail\n\n if (!request) {\n return\n }\n\n this.pushEventTo(this.el, 'add_toast', {\n kind: request.kind,\n message: request.message,\n options: request.options\n })\n }\n\n this.el.addEventListener(clientToastEvent, clientToastListener)\n\n return\n }\n\n this.el.addEventListener('show-error', async _event => {\n const delayTime = Number.parseInt(this.el.dataset.delay || '0')\n await new Promise(resolve => setTimeout(resolve, delayTime))\n\n // todo: in the future use this to execute the data-disconnected command\n // https://elixirforum.com/t/can-we-use-liveview-js-commands-inside-a-hook/67324/8\n\n // const command = this.el.getAttribute('data-disconnected')\n // this.liveSocket.execJS(this.el, command)\n\n // (don't want to do this quite yet because 1.0 is pretty new)\n // also repeat this on hide.\n\n this.el.style.display = 'flex'\n })\n\n this.el.addEventListener('hide-error', async _event => {\n this.el.style.display = 'none'\n })\n\n // for the special flashes, check if they are visible, and if not, return early out of here.\n if (['server-error', 'client-error'].includes(this.el.id)) {\n if (isHidden(document.getElementById(this.el.id))) {\n return\n }\n }\n\n window.addEventListener('phx:clear-flash', e => {\n this.pushEvent('lv:clear-flash', {\n key: (e as CustomEvent<{ key: string }>).detail.key\n })\n })\n\n window.addEventListener('flash-leave', async event => {\n if (event.target === this.el) {\n // animate this flash sliding out\n doAnimations.bind(this, duration, maxItems, this.el)()\n await animateOut.bind(this)()\n }\n })\n\n this.el.addEventListener(dismissEvent, async event => {\n event.stopPropagation()\n\n await dismissToast.bind(this)(duration, maxItems)\n })\n\n window.addEventListener(`phx:${dismissEvent}`, async event => {\n const detail = (event as CustomEvent<{ id?: string; uuid?: string }>)\n .detail\n const id = detail.id || `toast-${detail.uuid}`\n\n if (id === this.el.id) {\n await dismissToast.bind(this)(duration, maxItems)\n }\n })\n\n // begin actually showing the toast through this call to the animation function\n doAnimations.bind(this)(duration, maxItems)\n\n const durationOverride = parseDuration(this.el.dataset.duration, duration)\n\n let flashDuration = undefined\n if (this.el.dataset.flashDuration !== undefined) {\n flashDuration = Number.parseInt(this.el.dataset.flashDuration)\n }\n\n // skip the removal code if this is a flash, if autoHideFlash is nullish\n if (isFlash(this.el) && !flashDuration) {\n return\n }\n\n // this could be condensed\n if (flashDuration) {\n // do stuff\n window.setTimeout(async () => {\n // animate this element sliding down, opacity to 0, with delay time\n await animateOut.bind(this)()\n\n const kind = this.el.dataset.kind\n\n if (kind) {\n this.pushEvent('lv:clear-flash', { key: kind })\n }\n }, flashDuration + removalTime)\n } else {\n if (Number.isFinite(durationOverride) && durationOverride > 0) {\n startDismissTimer.bind(this)(durationOverride, duration, maxItems)\n }\n }\n }\n }\n}\n"], + "mappings": "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", "names": [] } diff --git a/priv/static/live_toast.esm.js b/priv/static/live_toast.esm.js index 79758b8..942d04d 100644 --- a/priv/static/live_toast.esm.js +++ b/priv/static/live_toast.esm.js @@ -784,6 +784,9 @@ var clientToastEvent = "live-toast:add"; var remainingSelector = "[data-live-toast-remaining]"; var lastTS = []; var dismissTimers = new WeakMap(); +function asToastElement(el) { + return el; +} function addToast(kind, message, options = {}) { document.getElementById("toast-group")?.dispatchEvent(new CustomEvent(clientToastEvent, { detail: { kind, message, options } @@ -856,7 +859,8 @@ function toastGroupTarget(el) { return toastGroup || "#toast-group"; } async function animateOut() { - const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap; + const toast = asToastElement(this.el); + const val = (toast.order - 2) * 100 + (toast.order - 2) * gap; let direction = ""; if (this.el.dataset.corner === "bottom_left" || this.el.dataset.corner === "bottom_center" || this.el.dataset.corner === "bottom_right") { direction = "-"; @@ -970,7 +974,8 @@ function createLiveToastHook(duration = 6e3, maxItems = 3) { if (this.el.dataset.liveToastGroup === "true") { return; } - const keyframes = { y: [this.el.targetDestination] }; + const toast = asToastElement(this.el); + const keyframes = { y: [toast.targetDestination] }; animate2(this.el, keyframes, { duration: 0 }); }, mounted() { diff --git a/priv/static/live_toast.esm.js.map b/priv/static/live_toast.esm.js.map index 1c2a86f..1f9d91e 100644 --- a/priv/static/live_toast.esm.js.map +++ b/priv/static/live_toast.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../assets/node_modules/@motionone/utils/dist/array.es.js", "../../assets/node_modules/@motionone/utils/dist/clamp.es.js", "../../assets/node_modules/@motionone/utils/dist/defaults.es.js", "../../assets/node_modules/@motionone/utils/dist/is-number.es.js", "../../assets/node_modules/@motionone/utils/dist/is-easing-list.es.js", "../../assets/node_modules/@motionone/utils/dist/wrap.es.js", "../../assets/node_modules/@motionone/utils/dist/easing.es.js", "../../assets/node_modules/@motionone/utils/dist/mix.es.js", "../../assets/node_modules/@motionone/utils/dist/noop.es.js", "../../assets/node_modules/@motionone/utils/dist/progress.es.js", "../../assets/node_modules/@motionone/utils/dist/offset.es.js", "../../assets/node_modules/@motionone/utils/dist/interpolate.es.js", "../../assets/node_modules/@motionone/utils/dist/is-cubic-bezier.es.js", "../../assets/node_modules/@motionone/utils/dist/is-easing-generator.es.js", "../../assets/node_modules/@motionone/utils/dist/is-function.es.js", "../../assets/node_modules/@motionone/utils/dist/is-string.es.js", "../../assets/node_modules/@motionone/utils/dist/time.es.js", "../../assets/node_modules/@motionone/easing/dist/cubic-bezier.es.js", "../../assets/node_modules/@motionone/easing/dist/steps.es.js", "../../assets/node_modules/@motionone/animation/dist/utils/easing.es.js", "../../assets/node_modules/@motionone/animation/dist/Animation.es.js", "../../assets/node_modules/hey-listen/dist/hey-listen.es.js", "../../assets/node_modules/@motionone/types/dist/MotionValue.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/data.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/transforms.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/css-var.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/easing.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/style.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/get-unit.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/animate-style.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/options.es.js", "../../assets/node_modules/@motionone/dom/dist/utils/resolve-elements.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/utils/controls.es.js", "../../assets/node_modules/@motionone/dom/dist/utils/stagger.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/create-animate.es.js", "../../assets/node_modules/@motionone/dom/dist/animate/index.es.js", "../../assets/node_modules/motion/dist/animate.es.js", "../../assets/js/live_toast/live_toast.ts"], - "sourcesContent": ["function addUniqueItem(array, item) {\n array.indexOf(item) === -1 && array.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n index > -1 && arr.splice(index, 1);\n}\n\nexport { addUniqueItem, removeItem };\n", "const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n", "const defaults = {\n duration: 0.3,\n delay: 0,\n endDelay: 0,\n repeat: 0,\n easing: \"ease\",\n};\n\nexport { defaults };\n", "const isNumber = (value) => typeof value === \"number\";\n\nexport { isNumber };\n", "import { isNumber } from './is-number.es.js';\n\nconst isEasingList = (easing) => Array.isArray(easing) && !isNumber(easing[0]);\n\nexport { isEasingList };\n", "const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n", "import { isEasingList } from './is-easing-list.es.js';\nimport { wrap } from './wrap.es.js';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingList(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n", "const mix = (min, max, progress) => -progress * min + progress * max + min;\n\nexport { mix };\n", "const noop = () => { };\nconst noopReturn = (v) => v;\n\nexport { noop, noopReturn };\n", "const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\nexport { progress };\n", "import { mix } from './mix.es.js';\nimport { progress } from './progress.es.js';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\nfunction defaultOffset(length) {\n const offset = [0];\n fillOffset(offset, length - 1);\n return offset;\n}\n\nexport { defaultOffset, fillOffset };\n", "import { mix } from './mix.es.js';\nimport { noopReturn } from './noop.es.js';\nimport { fillOffset, defaultOffset } from './offset.es.js';\nimport { progress } from './progress.es.js';\nimport { getEasingForSegment } from './easing.es.js';\nimport { clamp } from './clamp.es.js';\n\nfunction interpolate(output, input = defaultOffset(output.length), easing = noopReturn) {\n const length = output.length;\n /**\n * If the input length is lower than the output we\n * fill the input to match. This currently assumes the input\n * is an animation progress value so is a good candidate for\n * moving outside the function.\n */\n const remainder = length - input.length;\n remainder > 0 && fillOffset(input, remainder);\n return (t) => {\n let i = 0;\n for (; i < length - 2; i++) {\n if (t < input[i + 1])\n break;\n }\n let progressInRange = clamp(0, 1, progress(input[i], input[i + 1], t));\n const segmentEasing = getEasingForSegment(easing, i);\n progressInRange = segmentEasing(progressInRange);\n return mix(output[i], output[i + 1], progressInRange);\n };\n}\n\nexport { interpolate };\n", "import { isNumber } from './is-number.es.js';\n\nconst isCubicBezier = (easing) => Array.isArray(easing) && isNumber(easing[0]);\n\nexport { isCubicBezier };\n", "const isEasingGenerator = (easing) => typeof easing === \"object\" &&\n Boolean(easing.createAnimation);\n\nexport { isEasingGenerator };\n", "const isFunction = (value) => typeof value === \"function\";\n\nexport { isFunction };\n", "const isString = (value) => typeof value === \"string\";\n\nexport { isString };\n", "const time = {\n ms: (seconds) => seconds * 1000,\n s: (milliseconds) => milliseconds / 1000,\n};\n\nexport { time };\n", "import { noopReturn } from '@motionone/utils';\n\n/*\n Bezier function generator\n\n This has been modified from Ga\u00EBtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noopReturn;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n", "import { clamp } from '@motionone/utils';\n\nconst steps = (steps, direction = \"end\") => (progress) => {\n progress =\n direction === \"end\"\n ? Math.min(progress, 0.999)\n : Math.max(progress, 0.001);\n const expanded = progress * steps;\n const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n return clamp(0, 1, rounded / steps);\n};\n\nexport { steps };\n", "import { cubicBezier, steps } from '@motionone/easing';\nimport { isFunction, isCubicBezier, noopReturn } from '@motionone/utils';\n\nconst namedEasings = {\n ease: cubicBezier(0.25, 0.1, 0.25, 1.0),\n \"ease-in\": cubicBezier(0.42, 0.0, 1.0, 1.0),\n \"ease-in-out\": cubicBezier(0.42, 0.0, 0.58, 1.0),\n \"ease-out\": cubicBezier(0.0, 0.0, 0.58, 1.0),\n};\nconst functionArgsRegex = /\\((.*?)\\)/;\nfunction getEasingFunction(definition) {\n // If already an easing function, return\n if (isFunction(definition))\n return definition;\n // If an easing curve definition, return bezier function\n if (isCubicBezier(definition))\n return cubicBezier(...definition);\n // If we have a predefined easing function, return\n const namedEasing = namedEasings[definition];\n if (namedEasing)\n return namedEasing;\n // If this is a steps function, attempt to create easing curve\n if (definition.startsWith(\"steps\")) {\n const args = functionArgsRegex.exec(definition);\n if (args) {\n const argsArray = args[1].split(\",\");\n return steps(parseFloat(argsArray[0]), argsArray[1].trim());\n }\n }\n return noopReturn;\n}\n\nexport { getEasingFunction };\n", "import { noopReturn, defaults, isEasingGenerator, isEasingList, interpolate } from '@motionone/utils';\nimport { getEasingFunction } from './utils/easing.es.js';\n\nclass Animation {\n constructor(output, keyframes = [0, 1], { easing, duration: initialDuration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, offset, direction = \"normal\", autoplay = true, } = {}) {\n this.startTime = null;\n this.rate = 1;\n this.t = 0;\n this.cancelTimestamp = null;\n this.easing = noopReturn;\n this.duration = 0;\n this.totalDuration = 0;\n this.repeat = 0;\n this.playState = \"idle\";\n this.finished = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n easing = easing || defaults.easing;\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n initialDuration = custom.duration || initialDuration;\n }\n this.repeat = repeat;\n this.easing = isEasingList(easing) ? noopReturn : getEasingFunction(easing);\n this.updateDuration(initialDuration);\n const interpolate$1 = interpolate(keyframes, offset, isEasingList(easing) ? easing.map(getEasingFunction) : noopReturn);\n this.tick = (timestamp) => {\n var _a;\n // TODO: Temporary fix for OptionsResolver typing\n delay = delay;\n let t = 0;\n if (this.pauseTime !== undefined) {\n t = this.pauseTime;\n }\n else {\n t = (timestamp - this.startTime) * this.rate;\n }\n this.t = t;\n // Convert to seconds\n t /= 1000;\n // Rebase on delay\n t = Math.max(t - delay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (this.playState === \"finished\" && this.pauseTime === undefined) {\n t = this.totalDuration;\n }\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = t / this.duration;\n // TODO progress += iterationStart\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n iterationProgress === 1 && currentIteration--;\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const iterationIsOdd = currentIteration % 2;\n if (direction === \"reverse\" ||\n (direction === \"alternate\" && iterationIsOdd) ||\n (direction === \"alternate-reverse\" && !iterationIsOdd)) {\n iterationProgress = 1 - iterationProgress;\n }\n const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1);\n const latest = interpolate$1(this.easing(p));\n output(latest);\n const isAnimationFinished = this.pauseTime === undefined &&\n (this.playState === \"finished\" || t >= this.totalDuration + endDelay);\n if (isAnimationFinished) {\n this.playState = \"finished\";\n (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest);\n }\n else if (this.playState !== \"idle\") {\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n };\n if (autoplay)\n this.play();\n }\n play() {\n const now = performance.now();\n this.playState = \"running\";\n if (this.pauseTime !== undefined) {\n this.startTime = now - this.pauseTime;\n }\n else if (!this.startTime) {\n this.startTime = now;\n }\n this.cancelTimestamp = this.startTime;\n this.pauseTime = undefined;\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n pause() {\n this.playState = \"paused\";\n this.pauseTime = this.t;\n }\n finish() {\n this.playState = \"finished\";\n this.tick(0);\n }\n stop() {\n var _a;\n this.playState = \"idle\";\n if (this.frameRequestId !== undefined) {\n cancelAnimationFrame(this.frameRequestId);\n }\n (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false);\n }\n cancel() {\n this.stop();\n this.tick(this.cancelTimestamp);\n }\n reverse() {\n this.rate *= -1;\n }\n commitStyles() { }\n updateDuration(duration) {\n this.duration = duration;\n this.totalDuration = duration * (this.repeat + 1);\n }\n get currentTime() {\n return this.t;\n }\n set currentTime(t) {\n if (this.pauseTime !== undefined || this.rate === 0) {\n this.pauseTime = t;\n }\n else {\n this.startTime = performance.now() - t / this.rate;\n }\n }\n get playbackRate() {\n return this.rate;\n }\n set playbackRate(rate) {\n this.rate = rate;\n }\n}\n\nexport { Animation };\n", "var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n", "/**\n * The MotionValue tracks the state of a single animatable\n * value. Currently, updatedAt and current are unused. The\n * long term idea is to use this to minimise the number\n * of DOM reads, and to abstract the DOM interactions here.\n */\nclass MotionValue {\n setAnimation(animation) {\n this.animation = animation;\n animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => { });\n }\n clearAnimation() {\n this.animation = this.generator = undefined;\n }\n}\n\nexport { MotionValue };\n", "import { MotionValue } from '@motionone/types';\n\nconst data = new WeakMap();\nfunction getAnimationData(element) {\n if (!data.has(element)) {\n data.set(element, {\n transforms: [],\n values: new Map(),\n });\n }\n return data.get(element);\n}\nfunction getMotionValue(motionValues, name) {\n if (!motionValues.has(name)) {\n motionValues.set(name, new MotionValue());\n }\n return motionValues.get(name);\n}\n\nexport { getAnimationData, getMotionValue };\n", "import { noopReturn, addUniqueItem } from '@motionone/utils';\nimport { getAnimationData } from '../data.es.js';\n\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\nconst axes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\nconst order = [\"translate\", \"scale\", \"rotate\", \"skew\"];\nconst transformAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n};\nconst rotation = {\n syntax: \"\",\n initialValue: \"0deg\",\n toDefaultUnit: (v) => v + \"deg\",\n};\nconst baseTransformProperties = {\n translate: {\n syntax: \"\",\n initialValue: \"0px\",\n toDefaultUnit: (v) => v + \"px\",\n },\n rotate: rotation,\n scale: {\n syntax: \"\",\n initialValue: 1,\n toDefaultUnit: noopReturn,\n },\n skew: rotation,\n};\nconst transformDefinitions = new Map();\nconst asTransformCssVar = (name) => `--motion-${name}`;\n/**\n * Generate a list of every possible transform key\n */\nconst transforms = [\"x\", \"y\", \"z\"];\norder.forEach((name) => {\n axes.forEach((axis) => {\n transforms.push(name + axis);\n transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b);\n/**\n * Provide a quick way to check if a string is the name of a transform\n */\nconst transformLookup = new Set(transforms);\nconst isTransform = (name) => transformLookup.has(name);\nconst addTransformToElement = (element, name) => {\n // Map x to translateX etc\n if (transformAlias[name])\n name = transformAlias[name];\n const { transforms } = getAnimationData(element);\n addUniqueItem(transforms, name);\n /**\n * TODO: An optimisation here could be to cache the transform in element data\n * and only update if this has changed.\n */\n element.style.transform = buildTransformTemplate(transforms);\n};\nconst buildTransformTemplate = (transforms) => transforms\n .sort(compareTransformOrder)\n .reduce(transformListToString, \"\")\n .trim();\nconst transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`;\n\nexport { addTransformToElement, asTransformCssVar, axes, buildTransformTemplate, compareTransformOrder, isTransform, transformAlias, transformDefinitions };\n", "import { transformDefinitions } from './transforms.es.js';\n\nconst isCssVar = (name) => name.startsWith(\"--\");\nconst registeredProperties = new Set();\nfunction registerCssVariable(name) {\n if (registeredProperties.has(name))\n return;\n registeredProperties.add(name);\n try {\n const { syntax, initialValue } = transformDefinitions.has(name)\n ? transformDefinitions.get(name)\n : {};\n CSS.registerProperty({\n name,\n inherits: false,\n syntax,\n initialValue,\n });\n }\n catch (e) { }\n}\n\nexport { isCssVar, registerCssVariable, registeredProperties };\n", "const testAnimation = (keyframes, options) => document.createElement(\"div\").animate(keyframes, options);\nconst featureTests = {\n cssRegisterProperty: () => typeof CSS !== \"undefined\" &&\n Object.hasOwnProperty.call(CSS, \"registerProperty\"),\n waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n partialKeyframes: () => {\n try {\n testAnimation({ opacity: [1] });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n finished: () => Boolean(testAnimation({ opacity: [0, 1] }, { duration: 0.001 }).finished),\n linearEasing: () => {\n try {\n testAnimation({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n};\nconst results = {};\nconst supports = {};\nfor (const key in featureTests) {\n supports[key] = () => {\n if (results[key] === undefined)\n results[key] =\n featureTests[key]();\n return results[key];\n };\n}\n\nexport { supports };\n", "import { isFunction, defaults, isCubicBezier, progress } from '@motionone/utils';\nimport { supports } from './feature-detection.es.js';\n\n// Create a linear easing point for every x second\nconst resolution = 0.015;\nconst generateLinearEasingPoints = (easing, duration) => {\n let points = \"\";\n const numPoints = Math.round(duration / resolution);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return points.substring(0, points.length - 2);\n};\nconst convertEasing = (easing, duration) => {\n if (isFunction(easing)) {\n return supports.linearEasing()\n ? `linear(${generateLinearEasingPoints(easing, duration)})`\n : defaults.easing;\n }\n else {\n return isCubicBezier(easing) ? cubicBezierAsString(easing) : easing;\n }\n};\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { convertEasing, cubicBezierAsString, generateLinearEasingPoints };\n", "function hydrateKeyframes(keyframes, readInitialValue) {\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] === null) {\n keyframes[i] = i ? keyframes[i - 1] : readInitialValue();\n }\n }\n return keyframes;\n}\nconst keyframesList = (keyframes) => Array.isArray(keyframes) ? keyframes : [keyframes];\n\nexport { hydrateKeyframes, keyframesList };\n", "import { isTransform, asTransformCssVar, transformAlias } from './transforms.es.js';\n\nfunction getStyleName(key) {\n if (transformAlias[key])\n key = transformAlias[key];\n return isTransform(key) ? asTransformCssVar(key) : key;\n}\n\nexport { getStyleName };\n", "import { isCssVar } from './utils/css-var.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { transformDefinitions } from './utils/transforms.es.js';\n\nconst style = {\n get: (element, name) => {\n name = getStyleName(name);\n let value = isCssVar(name)\n ? element.style.getPropertyValue(name)\n : getComputedStyle(element)[name];\n // TODO Decide if value can be 0\n if (!value && value !== 0) {\n const definition = transformDefinitions.get(name);\n if (definition)\n value = definition.initialValue;\n }\n return value;\n },\n set: (element, name, value) => {\n name = getStyleName(name);\n if (isCssVar(name)) {\n element.style.setProperty(name, value);\n }\n else {\n element.style[name] = value;\n }\n },\n};\n\nexport { style };\n", "function stopAnimation(animation, needsCommit = true) {\n if (!animation || animation.playState === \"finished\")\n return;\n // Suppress error thrown by WAAPI\n try {\n if (animation.stop) {\n animation.stop();\n }\n else {\n needsCommit && animation.commitStyles();\n animation.cancel();\n }\n }\n catch (e) { }\n}\n\nexport { stopAnimation };\n", "import { noopReturn, isString } from '@motionone/utils';\n\nfunction getUnitConverter(keyframes, definition) {\n var _a;\n let toUnit = (definition === null || definition === void 0 ? void 0 : definition.toDefaultUnit) || noopReturn;\n const finalKeyframe = keyframes[keyframes.length - 1];\n if (isString(finalKeyframe)) {\n const unit = ((_a = finalKeyframe.match(/(-?[\\d.]+)([a-z%]*)/)) === null || _a === void 0 ? void 0 : _a[2]) || \"\";\n if (unit)\n toUnit = (value) => value + unit;\n }\n return toUnit;\n}\n\nexport { getUnitConverter };\n", "import { getAnimationData, getMotionValue } from './data.es.js';\nimport { isCssVar, registerCssVariable } from './utils/css-var.es.js';\nimport { defaults, isEasingGenerator, isFunction, isEasingList, isNumber, time, noop } from '@motionone/utils';\nimport { isTransform, addTransformToElement, transformDefinitions } from './utils/transforms.es.js';\nimport { convertEasing } from './utils/easing.es.js';\nimport { supports } from './utils/feature-detection.es.js';\nimport { hydrateKeyframes, keyframesList } from './utils/keyframes.es.js';\nimport { style } from './style.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { stopAnimation } from './utils/stop-animation.es.js';\nimport { getUnitConverter } from './utils/get-unit.es.js';\n\nfunction getDevToolsRecord() {\n return window.__MOTION_DEV_TOOLS_RECORD;\n}\nfunction animateStyle(element, key, keyframesDefinition, options = {}, AnimationPolyfill) {\n const record = getDevToolsRecord();\n const isRecording = options.record !== false && record;\n let animation;\n let { duration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, easing = defaults.easing, persist = false, direction, offset, allowWebkitAcceleration = false, autoplay = true, } = options;\n const data = getAnimationData(element);\n const valueIsTransform = isTransform(key);\n let canAnimateNatively = supports.waapi();\n /**\n * If this is an individual transform, we need to map its\n * key to a CSS variable and update the element's transform style\n */\n valueIsTransform && addTransformToElement(element, key);\n const name = getStyleName(key);\n const motionValue = getMotionValue(data.values, name);\n /**\n * Get definition of value, this will be used to convert numerical\n * keyframes into the default value type.\n */\n const definition = transformDefinitions.get(name);\n /**\n * Stop the current animation, if any. Because this will trigger\n * commitStyles (DOM writes) and we might later trigger DOM reads,\n * this is fired now and we return a factory function to create\n * the actual animation that can get called in batch,\n */\n stopAnimation(motionValue.animation, !(isEasingGenerator(easing) && motionValue.generator) &&\n options.record !== false);\n /**\n * Batchable factory function containing all DOM reads.\n */\n return () => {\n const readInitialValue = () => { var _a, _b; return (_b = (_a = style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; };\n /**\n * Replace null values with the previous keyframe value, or read\n * it from the DOM if it's the first keyframe.\n */\n let keyframes = hydrateKeyframes(keyframesList(keyframesDefinition), readInitialValue);\n /**\n * Detect unit type of keyframes.\n */\n const toUnit = getUnitConverter(keyframes, definition);\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes, key !== \"opacity\", readInitialValue, name, motionValue);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n duration = custom.duration || duration;\n }\n /**\n * If this is a CSS variable we need to register it with the browser\n * before it can be animated natively. We also set it with setProperty\n * rather than directly onto the element.style object.\n */\n if (isCssVar(name)) {\n if (supports.cssRegisterProperty()) {\n registerCssVariable(name);\n }\n else {\n canAnimateNatively = false;\n }\n }\n /**\n * If we've been passed a custom easing function, and this browser\n * does **not** support linear() easing, and the value is a transform\n * (and thus a pure number) we can still support the custom easing\n * by falling back to the animation polyfill.\n */\n if (valueIsTransform &&\n !supports.linearEasing() &&\n (isFunction(easing) || (isEasingList(easing) && easing.some(isFunction)))) {\n canAnimateNatively = false;\n }\n /**\n * If we can animate this value with WAAPI, do so.\n */\n if (canAnimateNatively) {\n /**\n * Convert numbers to default value types. Currently this only supports\n * transforms but it could also support other value types.\n */\n if (definition) {\n keyframes = keyframes.map((value) => isNumber(value) ? definition.toDefaultUnit(value) : value);\n }\n /**\n * If this browser doesn't support partial/implicit keyframes we need to\n * explicitly provide one.\n */\n if (keyframes.length === 1 &&\n (!supports.partialKeyframes() || isRecording)) {\n keyframes.unshift(readInitialValue());\n }\n const animationOptions = {\n delay: time.ms(delay),\n duration: time.ms(duration),\n endDelay: time.ms(endDelay),\n easing: !isEasingList(easing)\n ? convertEasing(easing, duration)\n : undefined,\n direction,\n iterations: repeat + 1,\n fill: \"both\",\n };\n animation = element.animate({\n [name]: keyframes,\n offset,\n easing: isEasingList(easing)\n ? easing.map((thisEasing) => convertEasing(thisEasing, duration))\n : undefined,\n }, animationOptions);\n /**\n * Polyfill finished Promise in browsers that don't support it\n */\n if (!animation.finished) {\n animation.finished = new Promise((resolve, reject) => {\n animation.onfinish = resolve;\n animation.oncancel = reject;\n });\n }\n const target = keyframes[keyframes.length - 1];\n animation.finished\n .then(() => {\n if (persist)\n return;\n // Apply styles to target\n style.set(element, name, target);\n // Ensure fill modes don't persist\n animation.cancel();\n })\n .catch(noop);\n /**\n * This forces Webkit to run animations on the main thread by exploiting\n * this condition:\n * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099\n *\n * This fixes Webkit's timing bugs, like accelerated animations falling\n * out of sync with main thread animations and massive delays in starting\n * accelerated animations in WKWebView.\n */\n if (!allowWebkitAcceleration)\n animation.playbackRate = 1.000001;\n /**\n * If we can't animate the value natively then we can fallback to the numbers-only\n * polyfill for transforms.\n */\n }\n else if (AnimationPolyfill && valueIsTransform) {\n /**\n * If any keyframe is a string (because we measured it from the DOM), we need to convert\n * it into a number before passing to the Animation polyfill.\n */\n keyframes = keyframes.map((value) => typeof value === \"string\" ? parseFloat(value) : value);\n /**\n * If we only have a single keyframe, we need to create an initial keyframe by reading\n * the current value from the DOM.\n */\n if (keyframes.length === 1) {\n keyframes.unshift(parseFloat(readInitialValue()));\n }\n animation = new AnimationPolyfill((latest) => {\n style.set(element, name, toUnit ? toUnit(latest) : latest);\n }, keyframes, Object.assign(Object.assign({}, options), { duration,\n easing }));\n }\n else {\n const target = keyframes[keyframes.length - 1];\n style.set(element, name, definition && isNumber(target)\n ? definition.toDefaultUnit(target)\n : target);\n }\n if (isRecording) {\n record(element, key, keyframes, {\n duration,\n delay: delay,\n easing,\n repeat,\n offset,\n }, \"motion-one\");\n }\n motionValue.setAnimation(animation);\n if (animation && !autoplay)\n animation.pause();\n return animation;\n };\n}\n\nexport { animateStyle };\n", "const getOptions = (options, key) => \n/**\n * TODO: Make test for this\n * Always return a new object otherwise delay is overwritten by results of stagger\n * and this results in no stagger\n */\noptions[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options);\n\nexport { getOptions };\n", "function resolveElements(elements, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = document.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = document.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n", "import { defaults, noop, time } from '@motionone/utils';\nimport { stopAnimation } from './stop-animation.es.js';\n\nconst createAnimation = (factory) => factory();\nconst withControls = (animationFactory, options, duration = defaults.duration) => {\n return new Proxy({\n animations: animationFactory.map(createAnimation).filter(Boolean),\n duration,\n options,\n }, controls);\n};\n/**\n * TODO:\n * Currently this returns the first animation, ideally it would return\n * the first active animation.\n */\nconst getActiveAnimation = (state) => state.animations[0];\nconst controls = {\n get: (target, key) => {\n const activeAnimation = getActiveAnimation(target);\n switch (key) {\n case \"duration\":\n return target.duration;\n case \"currentTime\":\n return time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0);\n case \"playbackRate\":\n case \"playState\":\n return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key];\n case \"finished\":\n if (!target.finished) {\n target.finished = Promise.all(target.animations.map(selectFinished)).catch(noop);\n }\n return target.finished;\n case \"stop\":\n return () => {\n target.animations.forEach((animation) => stopAnimation(animation));\n };\n case \"forEachNative\":\n /**\n * This is for internal use only, fire a callback for each\n * underlying animation.\n */\n return (callback) => {\n target.animations.forEach((animation) => callback(animation, target));\n };\n default:\n return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) ===\n \"undefined\"\n ? undefined\n : () => target.animations.forEach((animation) => animation[key]());\n }\n },\n set: (target, key, value) => {\n switch (key) {\n case \"currentTime\":\n value = time.ms(value);\n // Fall-through\n case \"playbackRate\":\n for (let i = 0; i < target.animations.length; i++) {\n target.animations[i][key] = value;\n }\n return true;\n }\n return false;\n },\n};\nconst selectFinished = (animation) => animation.finished;\n\nexport { controls, withControls };\n", "import { isNumber, isFunction } from '@motionone/utils';\nimport { getEasingFunction } from '@motionone/animation';\n\nfunction stagger(duration = 0.1, { start = 0, from = 0, easing } = {}) {\n return (i, total) => {\n const fromIndex = isNumber(from) ? from : getFromIndex(from, total);\n const distance = Math.abs(fromIndex - i);\n let delay = duration * distance;\n if (easing) {\n const maxDelay = total * duration;\n const easingFunction = getEasingFunction(easing);\n delay = easingFunction(delay / maxDelay) * maxDelay;\n }\n return start + delay;\n };\n}\nfunction getFromIndex(from, total) {\n if (from === \"first\") {\n return 0;\n }\n else {\n const lastIndex = total - 1;\n return from === \"last\" ? lastIndex : lastIndex / 2;\n }\n}\nfunction resolveOption(option, i, total) {\n return isFunction(option) ? option(i, total) : option;\n}\n\nexport { getFromIndex, resolveOption, stagger };\n", "import { invariant } from 'hey-listen';\nimport { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n invariant(Boolean(keyframes), \"No keyframes defined.\");\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n", "import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n", "import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n", "import { animate } from 'motion'\nimport type { ViewHook } from 'phoenix_live_view'\n\nfunction isHidden(el: HTMLElement | null) {\n if (el === null) {\n return true\n }\n\n return el.offsetParent === null\n}\n\nfunction isFlash(el: HTMLElement) {\n return el.dataset.component === 'flash'\n}\n\nfunction parseDuration(value: string | undefined, fallback: number) {\n if (value === undefined) {\n return fallback\n }\n\n if (value === 'Infinity') {\n return Number.POSITIVE_INFINITY\n }\n\n const parsed = Number.parseInt(value)\n\n return Number.isNaN(parsed) ? fallback : parsed\n}\n\n// number of flashes that aren't hidden\nfunction flashCount() {\n let num = 0\n\n if (!isHidden(document.getElementById('server-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('client-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-info'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-error'))) {\n num += 1\n }\n\n return num\n}\n\n// time in ms to wait before removal, but after animation\nconst removalTime = 5\n// animation time in ms\nconst animationTime = 550\n// whether flashes should be counted in maxItems\nconst maxItemsIgnoresFlashes = true\n// gap in px between toasts\nconst gap = 15\nconst dismissEvent = 'live-toast-dismiss'\nconst clientToastEvent = 'live-toast:add'\nconst remainingSelector = '[data-live-toast-remaining]'\n\nlet lastTS: HTMLElement[] = []\n\ntype DismissTimer = {\n cancel: () => void\n}\n\nexport type ClientToastOptions = {\n duration?: number | 'infinity'\n metadata?: Record\n title?: string\n}\n\ntype ClientToastRequest = {\n kind: string\n message: string\n options: ClientToastOptions\n}\n\nconst dismissTimers = new WeakMap()\n\ndeclare global {\n interface HTMLElement {\n order: number\n targetDestination: string\n }\n}\n\nexport function addToast(\n kind: string,\n message: string,\n options: ClientToastOptions = {}\n) {\n document\n .getElementById('toast-group')\n ?.dispatchEvent(\n new CustomEvent(clientToastEvent, {\n detail: { kind, message, options }\n })\n )\n}\n\nfunction doAnimations(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number,\n elToRemove?: HTMLElement\n) {\n const ts = []\n let toasts = Array.from(\n document.querySelectorAll(\n '#toast-group [phx-hook=\"LiveToast\"]'\n )\n )\n .map(t => {\n if (isHidden(t)) {\n return null\n }\n\n return t\n })\n .filter(Boolean)\n // reverse\n .reverse()\n\n if (elToRemove) {\n toasts = toasts.filter(t => t !== elToRemove)\n }\n\n // Traverse through all toasts, in order they appear in the dom, for which they are NOT hidden, and assign el.order to\n // their index\n for (let i = 0; i < toasts.length; i++) {\n const toast = toasts[i]!\n if (isHidden(toast)) {\n continue\n }\n toast.order = i\n\n ts[i] = toast\n }\n\n // now loop through ts and animate each toast to its position\n for (let i = 0; i < ts.length; i++) {\n const max = maxItemsIgnoresFlashes ? maxItems + flashCount() : maxItems\n\n const toast = ts[i]\n\n let direction = ''\n\n if (\n toast.dataset.corner === 'bottom_left' ||\n toast.dataset.corner === 'bottom_center' ||\n toast.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n // Calculate the translateY value with gap\n // now that they can be different heights, we need to actually caluclate the real heights and add them up.\n let val = 0\n\n for (let j = 0; j < toast.order; j++) {\n val += ts[j].offsetHeight + gap\n }\n\n // Calculate opacity based on position\n const opacity = toast.order > max ? 0 : 1 - (toast.order - max + 1)\n\n // also if this item moved past the max limit, disable click events on it\n if (toast.order >= max) {\n toast.classList.remove('pointer-events-auto')\n } else {\n toast.classList.add('pointer-events-auto')\n }\n\n const keyframes = { y: [`${direction}${val}px`], opacity: [opacity] }\n\n // if element is entering for the first time, start below the fold\n if (toast.order === 0 && lastTS.includes(toast) === false) {\n const val = toast.offsetHeight + gap\n const oppositeDirection = direction === '-' ? '' : '-'\n keyframes.y.unshift(`${oppositeDirection}${val}px`)\n\n keyframes.opacity.unshift(0)\n }\n\n toast.targetDestination = `${direction}${val}px`\n\n const duration = animationTime / 1000\n\n // as of right now this is not exposed to end users, but\n // it's 'plumbed out' if we want to make it so in the future\n const delayTime = Number.parseInt(this.el.dataset.delay || '0') / 1000\n\n animate(toast, keyframes, {\n duration,\n easing: [0.22, 1.0, 0.36, 1.0],\n delay: delayTime\n })\n toast.order += 1\n\n // decrease z-index\n toast.style.zIndex = (50 - toast.order).toString()\n\n // if this element moved past the max item limit, send the signal to remove it\n // should this be shorted than delay time?\n // also what about elements moving down when you close one?\n window.setTimeout(() => {\n if (toast.order > max) {\n this.pushEventTo(toastGroupTarget(toast), 'clear', { id: toast.id })\n }\n }, animationDelayTime + removalTime)\n\n lastTS = ts\n }\n}\n\nfunction toastGroupTarget(el: HTMLElement) {\n const streamContainer = el.closest('[phx-update=\"stream\"]')\n const toastGroup = streamContainer?.parentElement\n\n return toastGroup || '#toast-group'\n}\n\nasync function animateOut(this: ViewHook) {\n const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap\n\n let direction = ''\n\n if (\n this.el.dataset.corner === 'bottom_left' ||\n this.el.dataset.corner === 'bottom_center' ||\n this.el.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n const animation = animate(\n this.el,\n { y: `${direction}${val}%`, opacity: 0 },\n {\n opacity: {\n duration: 0.2,\n easing: 'ease-out'\n },\n duration: 0.3,\n easing: 'ease-out'\n }\n )\n\n await animation.finished\n}\n\nasync function dismissToast(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number\n) {\n if (this.el.dataset.liveToastDismissing === 'true') {\n return\n }\n\n this.el.dataset.liveToastDismissing = 'true'\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n\n doAnimations.bind(this, animationDelayTime, maxItems, this.el)()\n await animateOut.bind(this)()\n\n this.pushEventTo(toastGroupTarget(this.el), 'clear', { id: this.el.id })\n}\n\nfunction isInteracting(el: HTMLElement) {\n return el.matches(':hover') || el.matches(':focus-within')\n}\n\nfunction renderRemaining(el: HTMLElement, remaining: number, paused: boolean) {\n const output = el.querySelector(remainingSelector)\n\n if (!output) {\n return\n }\n\n output.textContent = Math.ceil(remaining / 1000).toString()\n output.dataset.paused = paused.toString()\n}\n\nfunction startDismissTimer(\n this: ViewHook,\n duration: number,\n animationDelayTime: number,\n maxItems: number\n) {\n let remaining = duration\n let startedAt: number | undefined\n let timer: number | undefined\n let displayTimer: number | undefined\n\n const currentRemaining = () => {\n if (startedAt === undefined) {\n return remaining\n }\n\n return Math.max(0, remaining - (performance.now() - startedAt))\n }\n\n const clearTimers = () => {\n if (timer !== undefined) {\n window.clearTimeout(timer)\n timer = undefined\n }\n\n if (displayTimer !== undefined) {\n window.clearInterval(displayTimer)\n displayTimer = undefined\n }\n }\n\n const pause = () => {\n if (startedAt === undefined) {\n return\n }\n\n remaining = currentRemaining()\n startedAt = undefined\n clearTimers()\n renderRemaining(this.el, remaining, true)\n }\n\n const resume = () => {\n if (timer || isInteracting(this.el)) {\n return\n }\n\n startedAt = performance.now()\n renderRemaining(this.el, remaining, false)\n\n if (this.el.querySelector(remainingSelector)) {\n displayTimer = window.setInterval(() => {\n renderRemaining(this.el, currentRemaining(), false)\n }, 100)\n }\n\n timer = window.setTimeout(async () => {\n clearTimers()\n remaining = 0\n startedAt = undefined\n renderRemaining(this.el, remaining, false)\n\n await dismissToast.bind(this)(animationDelayTime, maxItems)\n }, remaining + removalTime)\n }\n\n const cancel = () => {\n clearTimers()\n this.el.removeEventListener('mouseenter', pause)\n this.el.removeEventListener('focusin', pause)\n this.el.removeEventListener('mouseleave', resume)\n this.el.removeEventListener('focusout', resume)\n }\n\n this.el.addEventListener('mouseenter', pause)\n this.el.addEventListener('focusin', pause)\n this.el.addEventListener('mouseleave', resume)\n this.el.addEventListener('focusout', resume)\n\n dismissTimers.set(this, { cancel })\n resume()\n}\n\n// Create the Phoenix Hoook for live_toast.\n// You can set custom animation durations.\nexport function createLiveToastHook(duration = 6000, maxItems = 3) {\n return {\n destroyed(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n doAnimations.bind(this)(duration, maxItems)\n },\n updated(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n // animate to targetDestination in 0ms\n const keyframes = { y: [this.el.targetDestination] }\n animate(this.el, keyframes, { duration: 0 })\n },\n mounted(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n const clientToastListener = (event: Event) => {\n const request = (event as CustomEvent).detail\n\n if (!request) {\n return\n }\n\n this.pushEventTo(this.el, 'add_toast', {\n kind: request.kind,\n message: request.message,\n options: request.options\n })\n }\n\n this.el.addEventListener(clientToastEvent, clientToastListener)\n\n return\n }\n\n this.el.addEventListener('show-error', async _event => {\n const delayTime = Number.parseInt(this.el.dataset.delay || '0')\n await new Promise(resolve => setTimeout(resolve, delayTime))\n\n // todo: in the future use this to execute the data-disconnected command\n // https://elixirforum.com/t/can-we-use-liveview-js-commands-inside-a-hook/67324/8\n\n // const command = this.el.getAttribute('data-disconnected')\n // this.liveSocket.execJS(this.el, command)\n\n // (don't want to do this quite yet because 1.0 is pretty new)\n // also repeat this on hide.\n\n this.el.style.display = 'flex'\n })\n\n this.el.addEventListener('hide-error', async _event => {\n this.el.style.display = 'none'\n })\n\n // for the special flashes, check if they are visible, and if not, return early out of here.\n if (['server-error', 'client-error'].includes(this.el.id)) {\n if (isHidden(document.getElementById(this.el.id))) {\n return\n }\n }\n\n window.addEventListener('phx:clear-flash', e => {\n this.pushEvent('lv:clear-flash', {\n key: (e as CustomEvent<{ key: string }>).detail.key\n })\n })\n\n window.addEventListener('flash-leave', async event => {\n if (event.target === this.el) {\n // animate this flash sliding out\n doAnimations.bind(this, duration, maxItems, this.el)()\n await animateOut.bind(this)()\n }\n })\n\n this.el.addEventListener(dismissEvent, async event => {\n event.stopPropagation()\n\n await dismissToast.bind(this)(duration, maxItems)\n })\n\n window.addEventListener(`phx:${dismissEvent}`, async event => {\n const detail = (event as CustomEvent<{ id?: string; uuid?: string }>)\n .detail\n const id = detail.id || `toast-${detail.uuid}`\n\n if (id === this.el.id) {\n await dismissToast.bind(this)(duration, maxItems)\n }\n })\n\n // begin actually showing the toast through this call to the animation function\n doAnimations.bind(this)(duration, maxItems)\n\n const durationOverride = parseDuration(this.el.dataset.duration, duration)\n\n let flashDuration = undefined\n if (this.el.dataset.flashDuration !== undefined) {\n flashDuration = Number.parseInt(this.el.dataset.flashDuration)\n }\n\n // skip the removal code if this is a flash, if autoHideFlash is nullish\n if (isFlash(this.el) && !flashDuration) {\n return\n }\n\n // this could be condensed\n if (flashDuration) {\n // do stuff\n window.setTimeout(async () => {\n // animate this element sliding down, opacity to 0, with delay time\n await animateOut.bind(this)()\n\n const kind = this.el.dataset.kind\n\n if (kind) {\n this.pushEvent('lv:clear-flash', { key: kind })\n }\n }, flashDuration + removalTime)\n } else {\n if (Number.isFinite(durationOverride) && durationOverride > 0) {\n startDismissTimer.bind(this)(durationOverride, duration, maxItems)\n }\n }\n }\n }\n}\n"], - "mappings": "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", + "sourcesContent": ["function addUniqueItem(array, item) {\n array.indexOf(item) === -1 && array.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n index > -1 && arr.splice(index, 1);\n}\n\nexport { addUniqueItem, removeItem };\n", "const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n", "const defaults = {\n duration: 0.3,\n delay: 0,\n endDelay: 0,\n repeat: 0,\n easing: \"ease\",\n};\n\nexport { defaults };\n", "const isNumber = (value) => typeof value === \"number\";\n\nexport { isNumber };\n", "import { isNumber } from './is-number.es.js';\n\nconst isEasingList = (easing) => Array.isArray(easing) && !isNumber(easing[0]);\n\nexport { isEasingList };\n", "const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n", "import { isEasingList } from './is-easing-list.es.js';\nimport { wrap } from './wrap.es.js';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingList(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n", "const mix = (min, max, progress) => -progress * min + progress * max + min;\n\nexport { mix };\n", "const noop = () => { };\nconst noopReturn = (v) => v;\n\nexport { noop, noopReturn };\n", "const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\nexport { progress };\n", "import { mix } from './mix.es.js';\nimport { progress } from './progress.es.js';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\nfunction defaultOffset(length) {\n const offset = [0];\n fillOffset(offset, length - 1);\n return offset;\n}\n\nexport { defaultOffset, fillOffset };\n", "import { mix } from './mix.es.js';\nimport { noopReturn } from './noop.es.js';\nimport { fillOffset, defaultOffset } from './offset.es.js';\nimport { progress } from './progress.es.js';\nimport { getEasingForSegment } from './easing.es.js';\nimport { clamp } from './clamp.es.js';\n\nfunction interpolate(output, input = defaultOffset(output.length), easing = noopReturn) {\n const length = output.length;\n /**\n * If the input length is lower than the output we\n * fill the input to match. This currently assumes the input\n * is an animation progress value so is a good candidate for\n * moving outside the function.\n */\n const remainder = length - input.length;\n remainder > 0 && fillOffset(input, remainder);\n return (t) => {\n let i = 0;\n for (; i < length - 2; i++) {\n if (t < input[i + 1])\n break;\n }\n let progressInRange = clamp(0, 1, progress(input[i], input[i + 1], t));\n const segmentEasing = getEasingForSegment(easing, i);\n progressInRange = segmentEasing(progressInRange);\n return mix(output[i], output[i + 1], progressInRange);\n };\n}\n\nexport { interpolate };\n", "import { isNumber } from './is-number.es.js';\n\nconst isCubicBezier = (easing) => Array.isArray(easing) && isNumber(easing[0]);\n\nexport { isCubicBezier };\n", "const isEasingGenerator = (easing) => typeof easing === \"object\" &&\n Boolean(easing.createAnimation);\n\nexport { isEasingGenerator };\n", "const isFunction = (value) => typeof value === \"function\";\n\nexport { isFunction };\n", "const isString = (value) => typeof value === \"string\";\n\nexport { isString };\n", "const time = {\n ms: (seconds) => seconds * 1000,\n s: (milliseconds) => milliseconds / 1000,\n};\n\nexport { time };\n", "import { noopReturn } from '@motionone/utils';\n\n/*\n Bezier function generator\n\n This has been modified from Ga\u00EBtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noopReturn;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n", "import { clamp } from '@motionone/utils';\n\nconst steps = (steps, direction = \"end\") => (progress) => {\n progress =\n direction === \"end\"\n ? Math.min(progress, 0.999)\n : Math.max(progress, 0.001);\n const expanded = progress * steps;\n const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n return clamp(0, 1, rounded / steps);\n};\n\nexport { steps };\n", "import { cubicBezier, steps } from '@motionone/easing';\nimport { isFunction, isCubicBezier, noopReturn } from '@motionone/utils';\n\nconst namedEasings = {\n ease: cubicBezier(0.25, 0.1, 0.25, 1.0),\n \"ease-in\": cubicBezier(0.42, 0.0, 1.0, 1.0),\n \"ease-in-out\": cubicBezier(0.42, 0.0, 0.58, 1.0),\n \"ease-out\": cubicBezier(0.0, 0.0, 0.58, 1.0),\n};\nconst functionArgsRegex = /\\((.*?)\\)/;\nfunction getEasingFunction(definition) {\n // If already an easing function, return\n if (isFunction(definition))\n return definition;\n // If an easing curve definition, return bezier function\n if (isCubicBezier(definition))\n return cubicBezier(...definition);\n // If we have a predefined easing function, return\n const namedEasing = namedEasings[definition];\n if (namedEasing)\n return namedEasing;\n // If this is a steps function, attempt to create easing curve\n if (definition.startsWith(\"steps\")) {\n const args = functionArgsRegex.exec(definition);\n if (args) {\n const argsArray = args[1].split(\",\");\n return steps(parseFloat(argsArray[0]), argsArray[1].trim());\n }\n }\n return noopReturn;\n}\n\nexport { getEasingFunction };\n", "import { noopReturn, defaults, isEasingGenerator, isEasingList, interpolate } from '@motionone/utils';\nimport { getEasingFunction } from './utils/easing.es.js';\n\nclass Animation {\n constructor(output, keyframes = [0, 1], { easing, duration: initialDuration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, offset, direction = \"normal\", autoplay = true, } = {}) {\n this.startTime = null;\n this.rate = 1;\n this.t = 0;\n this.cancelTimestamp = null;\n this.easing = noopReturn;\n this.duration = 0;\n this.totalDuration = 0;\n this.repeat = 0;\n this.playState = \"idle\";\n this.finished = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n easing = easing || defaults.easing;\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n initialDuration = custom.duration || initialDuration;\n }\n this.repeat = repeat;\n this.easing = isEasingList(easing) ? noopReturn : getEasingFunction(easing);\n this.updateDuration(initialDuration);\n const interpolate$1 = interpolate(keyframes, offset, isEasingList(easing) ? easing.map(getEasingFunction) : noopReturn);\n this.tick = (timestamp) => {\n var _a;\n // TODO: Temporary fix for OptionsResolver typing\n delay = delay;\n let t = 0;\n if (this.pauseTime !== undefined) {\n t = this.pauseTime;\n }\n else {\n t = (timestamp - this.startTime) * this.rate;\n }\n this.t = t;\n // Convert to seconds\n t /= 1000;\n // Rebase on delay\n t = Math.max(t - delay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (this.playState === \"finished\" && this.pauseTime === undefined) {\n t = this.totalDuration;\n }\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = t / this.duration;\n // TODO progress += iterationStart\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n iterationProgress === 1 && currentIteration--;\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const iterationIsOdd = currentIteration % 2;\n if (direction === \"reverse\" ||\n (direction === \"alternate\" && iterationIsOdd) ||\n (direction === \"alternate-reverse\" && !iterationIsOdd)) {\n iterationProgress = 1 - iterationProgress;\n }\n const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1);\n const latest = interpolate$1(this.easing(p));\n output(latest);\n const isAnimationFinished = this.pauseTime === undefined &&\n (this.playState === \"finished\" || t >= this.totalDuration + endDelay);\n if (isAnimationFinished) {\n this.playState = \"finished\";\n (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest);\n }\n else if (this.playState !== \"idle\") {\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n };\n if (autoplay)\n this.play();\n }\n play() {\n const now = performance.now();\n this.playState = \"running\";\n if (this.pauseTime !== undefined) {\n this.startTime = now - this.pauseTime;\n }\n else if (!this.startTime) {\n this.startTime = now;\n }\n this.cancelTimestamp = this.startTime;\n this.pauseTime = undefined;\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n pause() {\n this.playState = \"paused\";\n this.pauseTime = this.t;\n }\n finish() {\n this.playState = \"finished\";\n this.tick(0);\n }\n stop() {\n var _a;\n this.playState = \"idle\";\n if (this.frameRequestId !== undefined) {\n cancelAnimationFrame(this.frameRequestId);\n }\n (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false);\n }\n cancel() {\n this.stop();\n this.tick(this.cancelTimestamp);\n }\n reverse() {\n this.rate *= -1;\n }\n commitStyles() { }\n updateDuration(duration) {\n this.duration = duration;\n this.totalDuration = duration * (this.repeat + 1);\n }\n get currentTime() {\n return this.t;\n }\n set currentTime(t) {\n if (this.pauseTime !== undefined || this.rate === 0) {\n this.pauseTime = t;\n }\n else {\n this.startTime = performance.now() - t / this.rate;\n }\n }\n get playbackRate() {\n return this.rate;\n }\n set playbackRate(rate) {\n this.rate = rate;\n }\n}\n\nexport { Animation };\n", "var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n", "/**\n * The MotionValue tracks the state of a single animatable\n * value. Currently, updatedAt and current are unused. The\n * long term idea is to use this to minimise the number\n * of DOM reads, and to abstract the DOM interactions here.\n */\nclass MotionValue {\n setAnimation(animation) {\n this.animation = animation;\n animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => { });\n }\n clearAnimation() {\n this.animation = this.generator = undefined;\n }\n}\n\nexport { MotionValue };\n", "import { MotionValue } from '@motionone/types';\n\nconst data = new WeakMap();\nfunction getAnimationData(element) {\n if (!data.has(element)) {\n data.set(element, {\n transforms: [],\n values: new Map(),\n });\n }\n return data.get(element);\n}\nfunction getMotionValue(motionValues, name) {\n if (!motionValues.has(name)) {\n motionValues.set(name, new MotionValue());\n }\n return motionValues.get(name);\n}\n\nexport { getAnimationData, getMotionValue };\n", "import { noopReturn, addUniqueItem } from '@motionone/utils';\nimport { getAnimationData } from '../data.es.js';\n\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\nconst axes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\nconst order = [\"translate\", \"scale\", \"rotate\", \"skew\"];\nconst transformAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n};\nconst rotation = {\n syntax: \"\",\n initialValue: \"0deg\",\n toDefaultUnit: (v) => v + \"deg\",\n};\nconst baseTransformProperties = {\n translate: {\n syntax: \"\",\n initialValue: \"0px\",\n toDefaultUnit: (v) => v + \"px\",\n },\n rotate: rotation,\n scale: {\n syntax: \"\",\n initialValue: 1,\n toDefaultUnit: noopReturn,\n },\n skew: rotation,\n};\nconst transformDefinitions = new Map();\nconst asTransformCssVar = (name) => `--motion-${name}`;\n/**\n * Generate a list of every possible transform key\n */\nconst transforms = [\"x\", \"y\", \"z\"];\norder.forEach((name) => {\n axes.forEach((axis) => {\n transforms.push(name + axis);\n transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b);\n/**\n * Provide a quick way to check if a string is the name of a transform\n */\nconst transformLookup = new Set(transforms);\nconst isTransform = (name) => transformLookup.has(name);\nconst addTransformToElement = (element, name) => {\n // Map x to translateX etc\n if (transformAlias[name])\n name = transformAlias[name];\n const { transforms } = getAnimationData(element);\n addUniqueItem(transforms, name);\n /**\n * TODO: An optimisation here could be to cache the transform in element data\n * and only update if this has changed.\n */\n element.style.transform = buildTransformTemplate(transforms);\n};\nconst buildTransformTemplate = (transforms) => transforms\n .sort(compareTransformOrder)\n .reduce(transformListToString, \"\")\n .trim();\nconst transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`;\n\nexport { addTransformToElement, asTransformCssVar, axes, buildTransformTemplate, compareTransformOrder, isTransform, transformAlias, transformDefinitions };\n", "import { transformDefinitions } from './transforms.es.js';\n\nconst isCssVar = (name) => name.startsWith(\"--\");\nconst registeredProperties = new Set();\nfunction registerCssVariable(name) {\n if (registeredProperties.has(name))\n return;\n registeredProperties.add(name);\n try {\n const { syntax, initialValue } = transformDefinitions.has(name)\n ? transformDefinitions.get(name)\n : {};\n CSS.registerProperty({\n name,\n inherits: false,\n syntax,\n initialValue,\n });\n }\n catch (e) { }\n}\n\nexport { isCssVar, registerCssVariable, registeredProperties };\n", "const testAnimation = (keyframes, options) => document.createElement(\"div\").animate(keyframes, options);\nconst featureTests = {\n cssRegisterProperty: () => typeof CSS !== \"undefined\" &&\n Object.hasOwnProperty.call(CSS, \"registerProperty\"),\n waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n partialKeyframes: () => {\n try {\n testAnimation({ opacity: [1] });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n finished: () => Boolean(testAnimation({ opacity: [0, 1] }, { duration: 0.001 }).finished),\n linearEasing: () => {\n try {\n testAnimation({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n};\nconst results = {};\nconst supports = {};\nfor (const key in featureTests) {\n supports[key] = () => {\n if (results[key] === undefined)\n results[key] =\n featureTests[key]();\n return results[key];\n };\n}\n\nexport { supports };\n", "import { isFunction, defaults, isCubicBezier, progress } from '@motionone/utils';\nimport { supports } from './feature-detection.es.js';\n\n// Create a linear easing point for every x second\nconst resolution = 0.015;\nconst generateLinearEasingPoints = (easing, duration) => {\n let points = \"\";\n const numPoints = Math.round(duration / resolution);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return points.substring(0, points.length - 2);\n};\nconst convertEasing = (easing, duration) => {\n if (isFunction(easing)) {\n return supports.linearEasing()\n ? `linear(${generateLinearEasingPoints(easing, duration)})`\n : defaults.easing;\n }\n else {\n return isCubicBezier(easing) ? cubicBezierAsString(easing) : easing;\n }\n};\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { convertEasing, cubicBezierAsString, generateLinearEasingPoints };\n", "function hydrateKeyframes(keyframes, readInitialValue) {\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] === null) {\n keyframes[i] = i ? keyframes[i - 1] : readInitialValue();\n }\n }\n return keyframes;\n}\nconst keyframesList = (keyframes) => Array.isArray(keyframes) ? keyframes : [keyframes];\n\nexport { hydrateKeyframes, keyframesList };\n", "import { isTransform, asTransformCssVar, transformAlias } from './transforms.es.js';\n\nfunction getStyleName(key) {\n if (transformAlias[key])\n key = transformAlias[key];\n return isTransform(key) ? asTransformCssVar(key) : key;\n}\n\nexport { getStyleName };\n", "import { isCssVar } from './utils/css-var.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { transformDefinitions } from './utils/transforms.es.js';\n\nconst style = {\n get: (element, name) => {\n name = getStyleName(name);\n let value = isCssVar(name)\n ? element.style.getPropertyValue(name)\n : getComputedStyle(element)[name];\n // TODO Decide if value can be 0\n if (!value && value !== 0) {\n const definition = transformDefinitions.get(name);\n if (definition)\n value = definition.initialValue;\n }\n return value;\n },\n set: (element, name, value) => {\n name = getStyleName(name);\n if (isCssVar(name)) {\n element.style.setProperty(name, value);\n }\n else {\n element.style[name] = value;\n }\n },\n};\n\nexport { style };\n", "function stopAnimation(animation, needsCommit = true) {\n if (!animation || animation.playState === \"finished\")\n return;\n // Suppress error thrown by WAAPI\n try {\n if (animation.stop) {\n animation.stop();\n }\n else {\n needsCommit && animation.commitStyles();\n animation.cancel();\n }\n }\n catch (e) { }\n}\n\nexport { stopAnimation };\n", "import { noopReturn, isString } from '@motionone/utils';\n\nfunction getUnitConverter(keyframes, definition) {\n var _a;\n let toUnit = (definition === null || definition === void 0 ? void 0 : definition.toDefaultUnit) || noopReturn;\n const finalKeyframe = keyframes[keyframes.length - 1];\n if (isString(finalKeyframe)) {\n const unit = ((_a = finalKeyframe.match(/(-?[\\d.]+)([a-z%]*)/)) === null || _a === void 0 ? void 0 : _a[2]) || \"\";\n if (unit)\n toUnit = (value) => value + unit;\n }\n return toUnit;\n}\n\nexport { getUnitConverter };\n", "import { getAnimationData, getMotionValue } from './data.es.js';\nimport { isCssVar, registerCssVariable } from './utils/css-var.es.js';\nimport { defaults, isEasingGenerator, isFunction, isEasingList, isNumber, time, noop } from '@motionone/utils';\nimport { isTransform, addTransformToElement, transformDefinitions } from './utils/transforms.es.js';\nimport { convertEasing } from './utils/easing.es.js';\nimport { supports } from './utils/feature-detection.es.js';\nimport { hydrateKeyframes, keyframesList } from './utils/keyframes.es.js';\nimport { style } from './style.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { stopAnimation } from './utils/stop-animation.es.js';\nimport { getUnitConverter } from './utils/get-unit.es.js';\n\nfunction getDevToolsRecord() {\n return window.__MOTION_DEV_TOOLS_RECORD;\n}\nfunction animateStyle(element, key, keyframesDefinition, options = {}, AnimationPolyfill) {\n const record = getDevToolsRecord();\n const isRecording = options.record !== false && record;\n let animation;\n let { duration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, easing = defaults.easing, persist = false, direction, offset, allowWebkitAcceleration = false, autoplay = true, } = options;\n const data = getAnimationData(element);\n const valueIsTransform = isTransform(key);\n let canAnimateNatively = supports.waapi();\n /**\n * If this is an individual transform, we need to map its\n * key to a CSS variable and update the element's transform style\n */\n valueIsTransform && addTransformToElement(element, key);\n const name = getStyleName(key);\n const motionValue = getMotionValue(data.values, name);\n /**\n * Get definition of value, this will be used to convert numerical\n * keyframes into the default value type.\n */\n const definition = transformDefinitions.get(name);\n /**\n * Stop the current animation, if any. Because this will trigger\n * commitStyles (DOM writes) and we might later trigger DOM reads,\n * this is fired now and we return a factory function to create\n * the actual animation that can get called in batch,\n */\n stopAnimation(motionValue.animation, !(isEasingGenerator(easing) && motionValue.generator) &&\n options.record !== false);\n /**\n * Batchable factory function containing all DOM reads.\n */\n return () => {\n const readInitialValue = () => { var _a, _b; return (_b = (_a = style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; };\n /**\n * Replace null values with the previous keyframe value, or read\n * it from the DOM if it's the first keyframe.\n */\n let keyframes = hydrateKeyframes(keyframesList(keyframesDefinition), readInitialValue);\n /**\n * Detect unit type of keyframes.\n */\n const toUnit = getUnitConverter(keyframes, definition);\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes, key !== \"opacity\", readInitialValue, name, motionValue);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n duration = custom.duration || duration;\n }\n /**\n * If this is a CSS variable we need to register it with the browser\n * before it can be animated natively. We also set it with setProperty\n * rather than directly onto the element.style object.\n */\n if (isCssVar(name)) {\n if (supports.cssRegisterProperty()) {\n registerCssVariable(name);\n }\n else {\n canAnimateNatively = false;\n }\n }\n /**\n * If we've been passed a custom easing function, and this browser\n * does **not** support linear() easing, and the value is a transform\n * (and thus a pure number) we can still support the custom easing\n * by falling back to the animation polyfill.\n */\n if (valueIsTransform &&\n !supports.linearEasing() &&\n (isFunction(easing) || (isEasingList(easing) && easing.some(isFunction)))) {\n canAnimateNatively = false;\n }\n /**\n * If we can animate this value with WAAPI, do so.\n */\n if (canAnimateNatively) {\n /**\n * Convert numbers to default value types. Currently this only supports\n * transforms but it could also support other value types.\n */\n if (definition) {\n keyframes = keyframes.map((value) => isNumber(value) ? definition.toDefaultUnit(value) : value);\n }\n /**\n * If this browser doesn't support partial/implicit keyframes we need to\n * explicitly provide one.\n */\n if (keyframes.length === 1 &&\n (!supports.partialKeyframes() || isRecording)) {\n keyframes.unshift(readInitialValue());\n }\n const animationOptions = {\n delay: time.ms(delay),\n duration: time.ms(duration),\n endDelay: time.ms(endDelay),\n easing: !isEasingList(easing)\n ? convertEasing(easing, duration)\n : undefined,\n direction,\n iterations: repeat + 1,\n fill: \"both\",\n };\n animation = element.animate({\n [name]: keyframes,\n offset,\n easing: isEasingList(easing)\n ? easing.map((thisEasing) => convertEasing(thisEasing, duration))\n : undefined,\n }, animationOptions);\n /**\n * Polyfill finished Promise in browsers that don't support it\n */\n if (!animation.finished) {\n animation.finished = new Promise((resolve, reject) => {\n animation.onfinish = resolve;\n animation.oncancel = reject;\n });\n }\n const target = keyframes[keyframes.length - 1];\n animation.finished\n .then(() => {\n if (persist)\n return;\n // Apply styles to target\n style.set(element, name, target);\n // Ensure fill modes don't persist\n animation.cancel();\n })\n .catch(noop);\n /**\n * This forces Webkit to run animations on the main thread by exploiting\n * this condition:\n * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099\n *\n * This fixes Webkit's timing bugs, like accelerated animations falling\n * out of sync with main thread animations and massive delays in starting\n * accelerated animations in WKWebView.\n */\n if (!allowWebkitAcceleration)\n animation.playbackRate = 1.000001;\n /**\n * If we can't animate the value natively then we can fallback to the numbers-only\n * polyfill for transforms.\n */\n }\n else if (AnimationPolyfill && valueIsTransform) {\n /**\n * If any keyframe is a string (because we measured it from the DOM), we need to convert\n * it into a number before passing to the Animation polyfill.\n */\n keyframes = keyframes.map((value) => typeof value === \"string\" ? parseFloat(value) : value);\n /**\n * If we only have a single keyframe, we need to create an initial keyframe by reading\n * the current value from the DOM.\n */\n if (keyframes.length === 1) {\n keyframes.unshift(parseFloat(readInitialValue()));\n }\n animation = new AnimationPolyfill((latest) => {\n style.set(element, name, toUnit ? toUnit(latest) : latest);\n }, keyframes, Object.assign(Object.assign({}, options), { duration,\n easing }));\n }\n else {\n const target = keyframes[keyframes.length - 1];\n style.set(element, name, definition && isNumber(target)\n ? definition.toDefaultUnit(target)\n : target);\n }\n if (isRecording) {\n record(element, key, keyframes, {\n duration,\n delay: delay,\n easing,\n repeat,\n offset,\n }, \"motion-one\");\n }\n motionValue.setAnimation(animation);\n if (animation && !autoplay)\n animation.pause();\n return animation;\n };\n}\n\nexport { animateStyle };\n", "const getOptions = (options, key) => \n/**\n * TODO: Make test for this\n * Always return a new object otherwise delay is overwritten by results of stagger\n * and this results in no stagger\n */\noptions[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options);\n\nexport { getOptions };\n", "function resolveElements(elements, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = document.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = document.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n", "import { defaults, noop, time } from '@motionone/utils';\nimport { stopAnimation } from './stop-animation.es.js';\n\nconst createAnimation = (factory) => factory();\nconst withControls = (animationFactory, options, duration = defaults.duration) => {\n return new Proxy({\n animations: animationFactory.map(createAnimation).filter(Boolean),\n duration,\n options,\n }, controls);\n};\n/**\n * TODO:\n * Currently this returns the first animation, ideally it would return\n * the first active animation.\n */\nconst getActiveAnimation = (state) => state.animations[0];\nconst controls = {\n get: (target, key) => {\n const activeAnimation = getActiveAnimation(target);\n switch (key) {\n case \"duration\":\n return target.duration;\n case \"currentTime\":\n return time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0);\n case \"playbackRate\":\n case \"playState\":\n return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key];\n case \"finished\":\n if (!target.finished) {\n target.finished = Promise.all(target.animations.map(selectFinished)).catch(noop);\n }\n return target.finished;\n case \"stop\":\n return () => {\n target.animations.forEach((animation) => stopAnimation(animation));\n };\n case \"forEachNative\":\n /**\n * This is for internal use only, fire a callback for each\n * underlying animation.\n */\n return (callback) => {\n target.animations.forEach((animation) => callback(animation, target));\n };\n default:\n return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) ===\n \"undefined\"\n ? undefined\n : () => target.animations.forEach((animation) => animation[key]());\n }\n },\n set: (target, key, value) => {\n switch (key) {\n case \"currentTime\":\n value = time.ms(value);\n // Fall-through\n case \"playbackRate\":\n for (let i = 0; i < target.animations.length; i++) {\n target.animations[i][key] = value;\n }\n return true;\n }\n return false;\n },\n};\nconst selectFinished = (animation) => animation.finished;\n\nexport { controls, withControls };\n", "import { isNumber, isFunction } from '@motionone/utils';\nimport { getEasingFunction } from '@motionone/animation';\n\nfunction stagger(duration = 0.1, { start = 0, from = 0, easing } = {}) {\n return (i, total) => {\n const fromIndex = isNumber(from) ? from : getFromIndex(from, total);\n const distance = Math.abs(fromIndex - i);\n let delay = duration * distance;\n if (easing) {\n const maxDelay = total * duration;\n const easingFunction = getEasingFunction(easing);\n delay = easingFunction(delay / maxDelay) * maxDelay;\n }\n return start + delay;\n };\n}\nfunction getFromIndex(from, total) {\n if (from === \"first\") {\n return 0;\n }\n else {\n const lastIndex = total - 1;\n return from === \"last\" ? lastIndex : lastIndex / 2;\n }\n}\nfunction resolveOption(option, i, total) {\n return isFunction(option) ? option(i, total) : option;\n}\n\nexport { getFromIndex, resolveOption, stagger };\n", "import { invariant } from 'hey-listen';\nimport { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n invariant(Boolean(keyframes), \"No keyframes defined.\");\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n", "import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n", "import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n", "import { animate } from 'motion'\nimport type { ViewHook } from 'phoenix_live_view'\n\nfunction isHidden(el: HTMLElement | null) {\n if (el === null) {\n return true\n }\n\n return el.offsetParent === null\n}\n\nfunction isFlash(el: HTMLElement) {\n return el.dataset.component === 'flash'\n}\n\nfunction parseDuration(value: string | undefined, fallback: number) {\n if (value === undefined) {\n return fallback\n }\n\n if (value === 'Infinity') {\n return Number.POSITIVE_INFINITY\n }\n\n const parsed = Number.parseInt(value)\n\n return Number.isNaN(parsed) ? fallback : parsed\n}\n\n// number of flashes that aren't hidden\nfunction flashCount() {\n let num = 0\n\n if (!isHidden(document.getElementById('server-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('client-error'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-info'))) {\n num += 1\n }\n\n if (!isHidden(document.getElementById('flash-error'))) {\n num += 1\n }\n\n return num\n}\n\n// time in ms to wait before removal, but after animation\nconst removalTime = 5\n// animation time in ms\nconst animationTime = 550\n// whether flashes should be counted in maxItems\nconst maxItemsIgnoresFlashes = true\n// gap in px between toasts\nconst gap = 15\nconst dismissEvent = 'live-toast-dismiss'\nconst clientToastEvent = 'live-toast:add'\nconst remainingSelector = '[data-live-toast-remaining]'\n\nlet lastTS: HTMLElement[] = []\n\ntype DismissTimer = {\n cancel: () => void\n}\n\ntype ToastElement = HTMLElement & {\n order: number\n targetDestination: string\n}\n\nexport type ClientToastOptions = {\n duration?: number | 'infinity'\n metadata?: Record\n title?: string\n}\n\ntype ClientToastRequest = {\n kind: string\n message: string\n options: ClientToastOptions\n}\n\nconst dismissTimers = new WeakMap()\n\nfunction asToastElement(el: HTMLElement): ToastElement {\n return el as ToastElement\n}\n\nexport function addToast(\n kind: string,\n message: string,\n options: ClientToastOptions = {}\n) {\n document\n .getElementById('toast-group')\n ?.dispatchEvent(\n new CustomEvent(clientToastEvent, {\n detail: { kind, message, options }\n })\n )\n}\n\nfunction doAnimations(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number,\n elToRemove?: HTMLElement\n) {\n const ts: ToastElement[] = []\n let toasts = Array.from(\n document.querySelectorAll(\n '#toast-group [phx-hook=\"LiveToast\"]'\n )\n )\n .map(t => {\n if (isHidden(t)) {\n return null\n }\n\n return t\n })\n .filter(Boolean)\n // reverse\n .reverse()\n\n if (elToRemove) {\n toasts = toasts.filter(t => t !== elToRemove)\n }\n\n // Traverse through all toasts, in order they appear in the dom, for which they are NOT hidden, and assign el.order to\n // their index\n for (let i = 0; i < toasts.length; i++) {\n const toast = toasts[i]!\n if (isHidden(toast)) {\n continue\n }\n toast.order = i\n\n ts[i] = toast\n }\n\n // now loop through ts and animate each toast to its position\n for (let i = 0; i < ts.length; i++) {\n const max = maxItemsIgnoresFlashes ? maxItems + flashCount() : maxItems\n\n const toast = ts[i]\n\n let direction = ''\n\n if (\n toast.dataset.corner === 'bottom_left' ||\n toast.dataset.corner === 'bottom_center' ||\n toast.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n // Calculate the translateY value with gap\n // now that they can be different heights, we need to actually caluclate the real heights and add them up.\n let val = 0\n\n for (let j = 0; j < toast.order; j++) {\n val += ts[j].offsetHeight + gap\n }\n\n // Calculate opacity based on position\n const opacity = toast.order > max ? 0 : 1 - (toast.order - max + 1)\n\n // also if this item moved past the max limit, disable click events on it\n if (toast.order >= max) {\n toast.classList.remove('pointer-events-auto')\n } else {\n toast.classList.add('pointer-events-auto')\n }\n\n const keyframes = { y: [`${direction}${val}px`], opacity: [opacity] }\n\n // if element is entering for the first time, start below the fold\n if (toast.order === 0 && lastTS.includes(toast) === false) {\n const val = toast.offsetHeight + gap\n const oppositeDirection = direction === '-' ? '' : '-'\n keyframes.y.unshift(`${oppositeDirection}${val}px`)\n\n keyframes.opacity.unshift(0)\n }\n\n toast.targetDestination = `${direction}${val}px`\n\n const duration = animationTime / 1000\n\n // as of right now this is not exposed to end users, but\n // it's 'plumbed out' if we want to make it so in the future\n const delayTime = Number.parseInt(this.el.dataset.delay || '0') / 1000\n\n animate(toast, keyframes, {\n duration,\n easing: [0.22, 1.0, 0.36, 1.0],\n delay: delayTime\n })\n toast.order += 1\n\n // decrease z-index\n toast.style.zIndex = (50 - toast.order).toString()\n\n // if this element moved past the max item limit, send the signal to remove it\n // should this be shorted than delay time?\n // also what about elements moving down when you close one?\n window.setTimeout(() => {\n if (toast.order > max) {\n this.pushEventTo(toastGroupTarget(toast), 'clear', { id: toast.id })\n }\n }, animationDelayTime + removalTime)\n\n lastTS = ts\n }\n}\n\nfunction toastGroupTarget(el: HTMLElement) {\n const streamContainer = el.closest('[phx-update=\"stream\"]')\n const toastGroup = streamContainer?.parentElement\n\n return toastGroup || '#toast-group'\n}\n\nasync function animateOut(this: ViewHook) {\n const toast = asToastElement(this.el)\n const val = (toast.order - 2) * 100 + (toast.order - 2) * gap\n\n let direction = ''\n\n if (\n this.el.dataset.corner === 'bottom_left' ||\n this.el.dataset.corner === 'bottom_center' ||\n this.el.dataset.corner === 'bottom_right'\n ) {\n direction = '-'\n }\n\n const animation = animate(\n this.el,\n { y: `${direction}${val}%`, opacity: 0 },\n {\n opacity: {\n duration: 0.2,\n easing: 'ease-out'\n },\n duration: 0.3,\n easing: 'ease-out'\n }\n )\n\n await animation.finished\n}\n\nasync function dismissToast(\n this: ViewHook,\n animationDelayTime: number,\n maxItems: number\n) {\n if (this.el.dataset.liveToastDismissing === 'true') {\n return\n }\n\n this.el.dataset.liveToastDismissing = 'true'\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n\n doAnimations.bind(this, animationDelayTime, maxItems, this.el)()\n await animateOut.bind(this)()\n\n this.pushEventTo(toastGroupTarget(this.el), 'clear', { id: this.el.id })\n}\n\nfunction isInteracting(el: HTMLElement) {\n return el.matches(':hover') || el.matches(':focus-within')\n}\n\nfunction renderRemaining(el: HTMLElement, remaining: number, paused: boolean) {\n const output = el.querySelector(remainingSelector)\n\n if (!output) {\n return\n }\n\n output.textContent = Math.ceil(remaining / 1000).toString()\n output.dataset.paused = paused.toString()\n}\n\nfunction startDismissTimer(\n this: ViewHook,\n duration: number,\n animationDelayTime: number,\n maxItems: number\n) {\n let remaining = duration\n let startedAt: number | undefined\n let timer: number | undefined\n let displayTimer: number | undefined\n\n const currentRemaining = () => {\n if (startedAt === undefined) {\n return remaining\n }\n\n return Math.max(0, remaining - (performance.now() - startedAt))\n }\n\n const clearTimers = () => {\n if (timer !== undefined) {\n window.clearTimeout(timer)\n timer = undefined\n }\n\n if (displayTimer !== undefined) {\n window.clearInterval(displayTimer)\n displayTimer = undefined\n }\n }\n\n const pause = () => {\n if (startedAt === undefined) {\n return\n }\n\n remaining = currentRemaining()\n startedAt = undefined\n clearTimers()\n renderRemaining(this.el, remaining, true)\n }\n\n const resume = () => {\n if (timer || isInteracting(this.el)) {\n return\n }\n\n startedAt = performance.now()\n renderRemaining(this.el, remaining, false)\n\n if (this.el.querySelector(remainingSelector)) {\n displayTimer = window.setInterval(() => {\n renderRemaining(this.el, currentRemaining(), false)\n }, 100)\n }\n\n timer = window.setTimeout(async () => {\n clearTimers()\n remaining = 0\n startedAt = undefined\n renderRemaining(this.el, remaining, false)\n\n await dismissToast.bind(this)(animationDelayTime, maxItems)\n }, remaining + removalTime)\n }\n\n const cancel = () => {\n clearTimers()\n this.el.removeEventListener('mouseenter', pause)\n this.el.removeEventListener('focusin', pause)\n this.el.removeEventListener('mouseleave', resume)\n this.el.removeEventListener('focusout', resume)\n }\n\n this.el.addEventListener('mouseenter', pause)\n this.el.addEventListener('focusin', pause)\n this.el.addEventListener('mouseleave', resume)\n this.el.addEventListener('focusout', resume)\n\n dismissTimers.set(this, { cancel })\n resume()\n}\n\n// Create the Phoenix Hoook for live_toast.\n// You can set custom animation durations.\nexport function createLiveToastHook(duration = 6000, maxItems = 3) {\n return {\n destroyed(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n dismissTimers.get(this)?.cancel()\n dismissTimers.delete(this)\n doAnimations.bind(this)(duration, maxItems)\n },\n updated(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n return\n }\n\n // animate to targetDestination in 0ms\n const toast = asToastElement(this.el)\n const keyframes = { y: [toast.targetDestination] }\n animate(this.el, keyframes, { duration: 0 })\n },\n mounted(this: ViewHook) {\n if (this.el.dataset.liveToastGroup === 'true') {\n const clientToastListener = (event: Event) => {\n const request = (event as CustomEvent).detail\n\n if (!request) {\n return\n }\n\n this.pushEventTo(this.el, 'add_toast', {\n kind: request.kind,\n message: request.message,\n options: request.options\n })\n }\n\n this.el.addEventListener(clientToastEvent, clientToastListener)\n\n return\n }\n\n this.el.addEventListener('show-error', async _event => {\n const delayTime = Number.parseInt(this.el.dataset.delay || '0')\n await new Promise(resolve => setTimeout(resolve, delayTime))\n\n // todo: in the future use this to execute the data-disconnected command\n // https://elixirforum.com/t/can-we-use-liveview-js-commands-inside-a-hook/67324/8\n\n // const command = this.el.getAttribute('data-disconnected')\n // this.liveSocket.execJS(this.el, command)\n\n // (don't want to do this quite yet because 1.0 is pretty new)\n // also repeat this on hide.\n\n this.el.style.display = 'flex'\n })\n\n this.el.addEventListener('hide-error', async _event => {\n this.el.style.display = 'none'\n })\n\n // for the special flashes, check if they are visible, and if not, return early out of here.\n if (['server-error', 'client-error'].includes(this.el.id)) {\n if (isHidden(document.getElementById(this.el.id))) {\n return\n }\n }\n\n window.addEventListener('phx:clear-flash', e => {\n this.pushEvent('lv:clear-flash', {\n key: (e as CustomEvent<{ key: string }>).detail.key\n })\n })\n\n window.addEventListener('flash-leave', async event => {\n if (event.target === this.el) {\n // animate this flash sliding out\n doAnimations.bind(this, duration, maxItems, this.el)()\n await animateOut.bind(this)()\n }\n })\n\n this.el.addEventListener(dismissEvent, async event => {\n event.stopPropagation()\n\n await dismissToast.bind(this)(duration, maxItems)\n })\n\n window.addEventListener(`phx:${dismissEvent}`, async event => {\n const detail = (event as CustomEvent<{ id?: string; uuid?: string }>)\n .detail\n const id = detail.id || `toast-${detail.uuid}`\n\n if (id === this.el.id) {\n await dismissToast.bind(this)(duration, maxItems)\n }\n })\n\n // begin actually showing the toast through this call to the animation function\n doAnimations.bind(this)(duration, maxItems)\n\n const durationOverride = parseDuration(this.el.dataset.duration, duration)\n\n let flashDuration = undefined\n if (this.el.dataset.flashDuration !== undefined) {\n flashDuration = Number.parseInt(this.el.dataset.flashDuration)\n }\n\n // skip the removal code if this is a flash, if autoHideFlash is nullish\n if (isFlash(this.el) && !flashDuration) {\n return\n }\n\n // this could be condensed\n if (flashDuration) {\n // do stuff\n window.setTimeout(async () => {\n // animate this element sliding down, opacity to 0, with delay time\n await animateOut.bind(this)()\n\n const kind = this.el.dataset.kind\n\n if (kind) {\n this.pushEvent('lv:clear-flash', { key: kind })\n }\n }, flashDuration + removalTime)\n } else {\n if (Number.isFinite(durationOverride) && durationOverride > 0) {\n startDismissTimer.bind(this)(durationOverride, duration, maxItems)\n }\n }\n }\n }\n}\n"], + "mappings": "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", "names": [] } diff --git a/priv/static/live_toast.js b/priv/static/live_toast.js index 2e478fd..2d72269 100644 --- a/priv/static/live_toast.js +++ b/priv/static/live_toast.js @@ -820,6 +820,9 @@ var LiveMotion = (() => { var remainingSelector = "[data-live-toast-remaining]"; var lastTS = []; var dismissTimers = new WeakMap(); + function asToastElement(el) { + return el; + } function addToast(kind, message, options = {}) { var _a; (_a = document.getElementById("toast-group")) == null ? void 0 : _a.dispatchEvent(new CustomEvent(clientToastEvent, { @@ -894,7 +897,8 @@ var LiveMotion = (() => { } function animateOut() { return __async(this, null, function* () { - const val = (this.el.order - 2) * 100 + (this.el.order - 2) * gap; + const toast = asToastElement(this.el); + const val = (toast.order - 2) * 100 + (toast.order - 2) * gap; let direction = ""; if (this.el.dataset.corner === "bottom_left" || this.el.dataset.corner === "bottom_center" || this.el.dataset.corner === "bottom_right") { direction = "-"; @@ -1013,7 +1017,8 @@ var LiveMotion = (() => { if (this.el.dataset.liveToastGroup === "true") { return; } - const keyframes = { y: [this.el.targetDestination] }; + const toast = asToastElement(this.el); + const keyframes = { y: [toast.targetDestination] }; animate2(this.el, keyframes, { duration: 0 }); }, mounted() { diff --git a/priv/static/live_toast.min.js b/priv/static/live_toast.min.js index 3363402..19f17bd 100644 --- a/priv/static/live_toast.min.js +++ b/priv/static/live_toast.min.js @@ -1 +1 @@ -var LiveMotion=(()=>{var St=Object.defineProperty;var Zt=t=>St(t,"__esModule",{value:!0});var Yt=(t,e)=>{Zt(t);for(var i in e)St(t,i,{get:e[i],enumerable:!0})};var b=(t,e,i)=>new Promise((s,n)=>{var o=l=>{try{r(i.next(l))}catch(m){n(m)}},a=l=>{try{r(i.throw(l))}catch(m){n(m)}},r=l=>l.done?s(l.value):Promise.resolve(l.value).then(o,a);r((i=i.apply(t,e)).next())});var Le={};Yt(Le,{addToast:()=>we,createLiveToastHook:()=>De});function lt(t,e){t.indexOf(e)===-1&&t.push(e)}var P=(t,e,i)=>Math.min(Math.max(i,t),e);var p={duration:.3,delay:0,endDelay:0,repeat:0,easing:"ease"};var E=t=>typeof t=="number";var T=t=>Array.isArray(t)&&!E(t[0]);var At=(t,e,i)=>{let s=e-t;return((i-t)%s+s)%s+t};function Dt(t,e){return T(t)?t[At(0,t.length,e)]:t}var Q=(t,e,i)=>-i*t+i*e+t;var H=()=>{},g=t=>t;var I=(t,e,i)=>e-t==0?1:(i-t)/(e-t);function mt(t,e){let i=t[t.length-1];for(let s=1;s<=e;s++){let n=I(0,e,s);t.push(Q(i,1,n))}}function Lt(t){let e=[0];return mt(e,t-1),e}function ct(t,e=Lt(t.length),i=g){let s=t.length,n=s-e.length;return n>0&&mt(e,n),o=>{let a=0;for(;aArray.isArray(t)&&E(t[0]);var R=t=>typeof t=="object"&&Boolean(t.createAnimation);var x=t=>typeof t=="function";var ut=t=>typeof t=="string";var D={ms:t=>t*1e3,s:t=>t/1e3};var Ot=(t,e,i)=>(((1-3*i+3*e)*t+(3*i-6*e))*t+3*e)*t,Jt=1e-7,Qt=12;function te(t,e,i,s,n){let o,a,r=0;do a=e+(i-e)/2,o=Ot(a,s,n)-t,o>0?i=a:e=a;while(Math.abs(o)>Jt&&++rte(o,0,1,t,i);return o=>o===0||o===1?o:Ot(n(o),e,s)}var ft=(t,e="end")=>i=>{i=e==="end"?Math.min(i,.999):Math.max(i,.001);let s=i*t,n=e==="end"?Math.floor(s):Math.ceil(s);return P(0,1,n/t)};var ee={ease:F(.25,.1,.25,1),"ease-in":F(.42,0,1,1),"ease-in-out":F(.42,0,.58,1),"ease-out":F(0,0,.58,1)},ie=/\((.*?)\)/;function dt(t){if(x(t))return t;if($(t))return F(...t);let e=ee[t];if(e)return e;if(t.startsWith("steps")){let i=ie.exec(t);if(i){let s=i[1].split(",");return ft(parseFloat(s[0]),s[1].trim())}}return g}var N=class{constructor(e,i=[0,1],{easing:s,duration:n=p.duration,delay:o=p.delay,endDelay:a=p.endDelay,repeat:r=p.repeat,offset:l,direction:m="normal",autoplay:h=!0}={}){if(this.startTime=null,this.rate=1,this.t=0,this.cancelTimestamp=null,this.easing=g,this.duration=0,this.totalDuration=0,this.repeat=0,this.playState="idle",this.finished=new Promise((c,j)=>{this.resolve=c,this.reject=j}),s=s||p.easing,R(s)){let c=s.createAnimation(i);s=c.easing,i=c.keyframes||i,n=c.duration||n}this.repeat=r,this.easing=T(s)?g:dt(s),this.updateDuration(n);let y=ct(i,l,T(s)?s.map(dt):g);this.tick=c=>{var j;o=o;let d=0;this.pauseTime!==void 0?d=this.pauseTime:d=(c-this.startTime)*this.rate,this.t=d,d/=1e3,d=Math.max(d-o,0),this.playState==="finished"&&this.pauseTime===void 0&&(d=this.totalDuration);let w=d/this.duration,X=Math.floor(w),S=w%1;!S&&w>=1&&(S=1),S===1&&X--;let Z=X%2;(m==="reverse"||m==="alternate"&&Z||m==="alternate-reverse"&&!Z)&&(S=1-S);let _=d>=this.totalDuration?1:Math.min(S,1),C=y(this.easing(_));e(C),this.pauseTime===void 0&&(this.playState==="finished"||d>=this.totalDuration+a)?(this.playState="finished",(j=this.resolve)===null||j===void 0||j.call(this,C)):this.playState!=="idle"&&(this.frameRequestId=requestAnimationFrame(this.tick))},h&&this.play()}play(){let e=performance.now();this.playState="running",this.pauseTime!==void 0?this.startTime=e-this.pauseTime:this.startTime||(this.startTime=e),this.cancelTimestamp=this.startTime,this.pauseTime=void 0,this.frameRequestId=requestAnimationFrame(this.tick)}pause(){this.playState="paused",this.pauseTime=this.t}finish(){this.playState="finished",this.tick(0)}stop(){var e;this.playState="idle",this.frameRequestId!==void 0&&cancelAnimationFrame(this.frameRequestId),(e=this.reject)===null||e===void 0||e.call(this,!1)}cancel(){this.stop(),this.tick(this.cancelTimestamp)}reverse(){this.rate*=-1}commitStyles(){}updateDuration(e){this.duration=e,this.totalDuration=e*(this.repeat+1)}get currentTime(){return this.t}set currentTime(e){this.pauseTime!==void 0||this.rate===0?this.pauseTime=e:this.startTime=performance.now()-e/this.rate}get playbackRate(){return this.rate}set playbackRate(e){this.rate=e}};var pt=function(){};var tt=class{setAnimation(e){this.animation=e,e==null||e.finished.then(()=>this.clearAnimation()).catch(()=>{})}clearAnimation(){this.animation=this.generator=void 0}};var ht=new WeakMap;function et(t){return ht.has(t)||ht.set(t,{transforms:[],values:new Map}),ht.get(t)}function Mt(t,e){return t.has(e)||t.set(e,new tt),t.get(e)}var se=["","X","Y","Z"],ne=["translate","scale","rotate","skew"],z={x:"translateX",y:"translateY",z:"translateZ"},It={syntax:"",initialValue:"0deg",toDefaultUnit:t=>t+"deg"},oe={translate:{syntax:"",initialValue:"0px",toDefaultUnit:t=>t+"px"},rotate:It,scale:{syntax:"",initialValue:1,toDefaultUnit:g},skew:It},L=new Map,it=t=>`--motion-${t}`,st=["x","y","z"];ne.forEach(t=>{se.forEach(e=>{st.push(t+e),L.set(it(t+e),oe[t])})});var re=(t,e)=>st.indexOf(t)-st.indexOf(e),ae=new Set(st),nt=t=>ae.has(t),Ft=(t,e)=>{z[e]&&(e=z[e]);let{transforms:i}=et(t);lt(i,e),t.style.transform=le(i)},le=t=>t.sort(re).reduce(me,"").trim(),me=(t,e)=>`${t} ${e}(var(${it(e)}))`;var q=t=>t.startsWith("--"),Vt=new Set;function Ct(t){if(!Vt.has(t)){Vt.add(t);try{let{syntax:e,initialValue:i}=L.has(t)?L.get(t):{};CSS.registerProperty({name:t,inherits:!1,syntax:e,initialValue:i})}catch(e){}}}var gt=(t,e)=>document.createElement("div").animate(t,e),Rt={cssRegisterProperty:()=>typeof CSS!="undefined"&&Object.hasOwnProperty.call(CSS,"registerProperty"),waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate"),partialKeyframes:()=>{try{gt({opacity:[1]})}catch(t){return!1}return!0},finished:()=>Boolean(gt({opacity:[0,1]},{duration:.001}).finished),linearEasing:()=>{try{gt({opacity:0},{easing:"linear(0, 1)"})}catch(t){return!1}return!0}},yt={},O={};for(let t in Rt)O[t]=()=>(yt[t]===void 0&&(yt[t]=Rt[t]()),yt[t]);var ce=.015,ue=(t,e)=>{let i="",s=Math.round(e/ce);for(let n=0;nx(t)?O.linearEasing()?`linear(${ue(t,e)})`:p.easing:$(t)?fe(t):t,fe=([t,e,i,s])=>`cubic-bezier(${t}, ${e}, ${i}, ${s})`;function Nt(t,e){for(let i=0;iArray.isArray(t)?t:[t];function B(t){return z[t]&&(t=z[t]),nt(t)?it(t):t}var U={get:(t,e)=>{e=B(e);let i=q(e)?t.style.getPropertyValue(e):getComputedStyle(t)[e];if(!i&&i!==0){let s=L.get(e);s&&(i=s.initialValue)}return i},set:(t,e,i)=>{e=B(e),q(e)?t.style.setProperty(e,i):t.style[e]=i}};function ot(t,e=!0){if(!(!t||t.playState==="finished"))try{t.stop?t.stop():(e&&t.commitStyles(),t.cancel())}catch(i){}}function kt(t,e){var i;let s=(e==null?void 0:e.toDefaultUnit)||g,n=t[t.length-1];if(ut(n)){let o=((i=n.match(/(-?[\d.]+)([a-z%]*)/))===null||i===void 0?void 0:i[2])||"";o&&(s=a=>a+o)}return s}function de(){return window.__MOTION_DEV_TOOLS_RECORD}function Pt(t,e,i,s={},n){let o=de(),a=s.record!==!1&&o,r,{duration:l=p.duration,delay:m=p.delay,endDelay:h=p.endDelay,repeat:y=p.repeat,easing:c=p.easing,persist:j=!1,direction:d,offset:w,allowWebkitAcceleration:X=!1,autoplay:S=!0}=s,Z=et(t),_=nt(e),C=O.waapi();_&&Ft(t,e);let v=B(e),Y=Mt(Z.values,v),A=L.get(v);return ot(Y.animation,!(R(c)&&Y.generator)&&s.record!==!1),()=>{let J=()=>{var u,k;return(k=(u=U.get(t,v))!==null&&u!==void 0?u:A==null?void 0:A.initialValue)!==null&&k!==void 0?k:0},f=Nt(_t(i),J),wt=kt(f,A);if(R(c)){let u=c.createAnimation(f,e!=="opacity",J,v,Y);c=u.easing,f=u.keyframes||f,l=u.duration||l}if(q(v)&&(O.cssRegisterProperty()?Ct(v):C=!1),_&&!O.linearEasing()&&(x(c)||T(c)&&c.some(x))&&(C=!1),C){A&&(f=f.map(M=>E(M)?A.toDefaultUnit(M):M)),f.length===1&&(!O.partialKeyframes()||a)&&f.unshift(J());let u={delay:D.ms(m),duration:D.ms(l),endDelay:D.ms(h),easing:T(c)?void 0:xt(c,l),direction:d,iterations:y+1,fill:"both"};r=t.animate({[v]:f,offset:w,easing:T(c)?c.map(M=>xt(M,l)):void 0},u),r.finished||(r.finished=new Promise((M,Xt)=>{r.onfinish=M,r.oncancel=Xt}));let k=f[f.length-1];r.finished.then(()=>{j||(U.set(t,v,k),r.cancel())}).catch(H),X||(r.playbackRate=1.000001)}else if(n&&_)f=f.map(u=>typeof u=="string"?parseFloat(u):u),f.length===1&&f.unshift(parseFloat(J())),r=new n(u=>{U.set(t,v,wt?wt(u):u)},f,Object.assign(Object.assign({},s),{duration:l,easing:c}));else{let u=f[f.length-1];U.set(t,v,A&&E(u)?A.toDefaultUnit(u):u)}return a&&o(t,e,f,{duration:l,delay:m,easing:c,repeat:y,offset:w},"motion-one"),Y.setAnimation(r),r&&!S&&r.pause(),r}}var Ht=(t,e)=>t[e]?Object.assign(Object.assign({},t),t[e]):Object.assign({},t);function $t(t,e){var i;return typeof t=="string"?e?((i=e[t])!==null&&i!==void 0||(e[t]=document.querySelectorAll(t)),t=e[t]):t=document.querySelectorAll(t):t instanceof Element&&(t=[t]),Array.from(t||[])}var pe=t=>t(),G=(t,e,i=p.duration)=>new Proxy({animations:t.map(pe).filter(Boolean),duration:i,options:e},ge),he=t=>t.animations[0],ge={get:(t,e)=>{let i=he(t);switch(e){case"duration":return t.duration;case"currentTime":return D.s((i==null?void 0:i[e])||0);case"playbackRate":case"playState":return i==null?void 0:i[e];case"finished":return t.finished||(t.finished=Promise.all(t.animations.map(ye)).catch(H)),t.finished;case"stop":return()=>{t.animations.forEach(s=>ot(s))};case"forEachNative":return s=>{t.animations.forEach(n=>s(n,t))};default:return typeof(i==null?void 0:i[e])=="undefined"?void 0:()=>t.animations.forEach(s=>s[e]())}},set:(t,e,i)=>{switch(e){case"currentTime":i=D.ms(i);case"playbackRate":for(let s=0;st.finished;function zt(t,e,i){return x(t)?t(e,i):t}function qt(t){return function(i,s,n={}){i=$t(i);let o=i.length;pt(Boolean(o),"No valid element provided."),pt(Boolean(s),"No keyframes defined.");let a=[];for(let r=0;r{let i=new N(t,[0,1],e);return i.finished.catch(()=>{}),i}],e,e.duration)}function K(t,e,i){return(x(t)?xe:vt)(t,e,i)}function V(t){return t===null?!0:t.offsetParent===null}function ve(t){return t.dataset.component==="flash"}function be(t,e){if(t===void 0)return e;if(t==="Infinity")return Number.POSITIVE_INFINITY;let i=Number.parseInt(t);return Number.isNaN(i)?e:i}function Te(){let t=0;return V(document.getElementById("server-error"))||(t+=1),V(document.getElementById("client-error"))||(t+=1),V(document.getElementById("flash-info"))||(t+=1),V(document.getElementById("flash-error"))||(t+=1),t}var bt=5,je=550,Ee=!0,Tt=15,Bt="live-toast-dismiss",Ut="live-toast:add",Gt="[data-live-toast-remaining]",Kt=[],W=new WeakMap;function we(t,e,i={}){var s;(s=document.getElementById("toast-group"))==null||s.dispatchEvent(new CustomEvent(Ut,{detail:{kind:t,message:e,options:i}}))}function rt(t,e,i){let s=[],n=Array.from(document.querySelectorAll('#toast-group [phx-hook="LiveToast"]')).map(o=>V(o)?null:o).filter(Boolean).reverse();i&&(n=n.filter(o=>o!==i));for(let o=0;oa?0:1-(r.order-a+1);r.order>=a?r.classList.remove("pointer-events-auto"):r.classList.add("pointer-events-auto");let y={y:[`${l}${m}px`],opacity:[h]};if(r.order===0&&Kt.includes(r)===!1){let d=r.offsetHeight+Tt,w=l==="-"?"":"-";y.y.unshift(`${w}${d}px`),y.opacity.unshift(0)}r.targetDestination=`${l}${m}px`;let c=je/1e3,j=Number.parseInt(this.el.dataset.delay||"0")/1e3;K(r,y,{duration:c,easing:[.22,1,.36,1],delay:j}),r.order+=1,r.style.zIndex=(50-r.order).toString(),window.setTimeout(()=>{r.order>a&&this.pushEventTo(Wt(r),"clear",{id:r.id})},t+bt),Kt=s}}function Wt(t){let e=t.closest('[phx-update="stream"]');return(e==null?void 0:e.parentElement)||"#toast-group"}function jt(){return b(this,null,function*(){let t=(this.el.order-2)*100+(this.el.order-2)*Tt,e="";(this.el.dataset.corner==="bottom_left"||this.el.dataset.corner==="bottom_center"||this.el.dataset.corner==="bottom_right")&&(e="-"),yield K(this.el,{y:`${e}${t}%`,opacity:0},{opacity:{duration:.2,easing:"ease-out"},duration:.3,easing:"ease-out"}).finished})}function Et(t,e){return b(this,null,function*(){var i;this.el.dataset.liveToastDismissing!=="true"&&(this.el.dataset.liveToastDismissing="true",(i=W.get(this))==null||i.cancel(),W.delete(this),rt.bind(this,t,e,this.el)(),yield jt.bind(this)(),this.pushEventTo(Wt(this.el),"clear",{id:this.el.id}))})}function Se(t){return t.matches(":hover")||t.matches(":focus-within")}function at(t,e,i){let s=t.querySelector(Gt);!s||(s.textContent=Math.ceil(e/1e3).toString(),s.dataset.paused=i.toString())}function Ae(t,e,i){let s=t,n,o,a,r=()=>n===void 0?s:Math.max(0,s-(performance.now()-n)),l=()=>{o!==void 0&&(window.clearTimeout(o),o=void 0),a!==void 0&&(window.clearInterval(a),a=void 0)},m=()=>{n!==void 0&&(s=r(),n=void 0,l(),at(this.el,s,!0))},h=()=>{o||Se(this.el)||(n=performance.now(),at(this.el,s,!1),this.el.querySelector(Gt)&&(a=window.setInterval(()=>{at(this.el,r(),!1)},100)),o=window.setTimeout(()=>b(this,null,function*(){l(),s=0,n=void 0,at(this.el,s,!1),yield Et.bind(this)(e,i)}),s+bt))},y=()=>{l(),this.el.removeEventListener("mouseenter",m),this.el.removeEventListener("focusin",m),this.el.removeEventListener("mouseleave",h),this.el.removeEventListener("focusout",h)};this.el.addEventListener("mouseenter",m),this.el.addEventListener("focusin",m),this.el.addEventListener("mouseleave",h),this.el.addEventListener("focusout",h),W.set(this,{cancel:y}),h()}function De(t=6e3,e=3){return{destroyed(){var i;this.el.dataset.liveToastGroup!=="true"&&((i=W.get(this))==null||i.cancel(),W.delete(this),rt.bind(this)(t,e))},updated(){if(this.el.dataset.liveToastGroup==="true")return;let i={y:[this.el.targetDestination]};K(this.el,i,{duration:0})},mounted(){if(this.el.dataset.liveToastGroup==="true"){let n=o=>{let a=o.detail;!a||this.pushEventTo(this.el,"add_toast",{kind:a.kind,message:a.message,options:a.options})};this.el.addEventListener(Ut,n);return}if(this.el.addEventListener("show-error",n=>b(this,null,function*(){let o=Number.parseInt(this.el.dataset.delay||"0");yield new Promise(a=>setTimeout(a,o)),this.el.style.display="flex"})),this.el.addEventListener("hide-error",n=>b(this,null,function*(){this.el.style.display="none"})),["server-error","client-error"].includes(this.el.id)&&V(document.getElementById(this.el.id)))return;window.addEventListener("phx:clear-flash",n=>{this.pushEvent("lv:clear-flash",{key:n.detail.key})}),window.addEventListener("flash-leave",n=>b(this,null,function*(){n.target===this.el&&(rt.bind(this,t,e,this.el)(),yield jt.bind(this)())})),this.el.addEventListener(Bt,n=>b(this,null,function*(){n.stopPropagation(),yield Et.bind(this)(t,e)})),window.addEventListener(`phx:${Bt}`,n=>b(this,null,function*(){let o=n.detail;(o.id||`toast-${o.uuid}`)===this.el.id&&(yield Et.bind(this)(t,e))})),rt.bind(this)(t,e);let i=be(this.el.dataset.duration,t),s;this.el.dataset.flashDuration!==void 0&&(s=Number.parseInt(this.el.dataset.flashDuration)),!(ve(this.el)&&!s)&&(s?window.setTimeout(()=>b(this,null,function*(){yield jt.bind(this)();let n=this.el.dataset.kind;n&&this.pushEvent("lv:clear-flash",{key:n})}),s+bt):Number.isFinite(i)&&i>0&&Ae.bind(this)(i,t,e))}}}return Le;})(); +var LiveMotion=(()=>{var St=Object.defineProperty;var Yt=t=>St(t,"__esModule",{value:!0});var Jt=(t,e)=>{Yt(t);for(var s in e)St(t,s,{get:e[s],enumerable:!0})};var T=(t,e,s)=>new Promise((i,n)=>{var o=l=>{try{r(s.next(l))}catch(m){n(m)}},a=l=>{try{r(s.throw(l))}catch(m){n(m)}},r=l=>l.done?i(l.value):Promise.resolve(l.value).then(o,a);r((s=s.apply(t,e)).next())});var Oe={};Jt(Oe,{addToast:()=>Se,createLiveToastHook:()=>Le});function lt(t,e){t.indexOf(e)===-1&&t.push(e)}var P=(t,e,s)=>Math.min(Math.max(s,t),e);var p={duration:.3,delay:0,endDelay:0,repeat:0,easing:"ease"};var j=t=>typeof t=="number";var E=t=>Array.isArray(t)&&!j(t[0]);var At=(t,e,s)=>{let i=e-t;return((s-t)%i+i)%i+t};function Dt(t,e){return E(t)?t[At(0,t.length,e)]:t}var Q=(t,e,s)=>-s*t+s*e+t;var H=()=>{},g=t=>t;var I=(t,e,s)=>e-t==0?1:(s-t)/(e-t);function mt(t,e){let s=t[t.length-1];for(let i=1;i<=e;i++){let n=I(0,e,i);t.push(Q(s,1,n))}}function Lt(t){let e=[0];return mt(e,t-1),e}function ut(t,e=Lt(t.length),s=g){let i=t.length,n=i-e.length;return n>0&&mt(e,n),o=>{let a=0;for(;aArray.isArray(t)&&j(t[0]);var R=t=>typeof t=="object"&&Boolean(t.createAnimation);var x=t=>typeof t=="function";var ct=t=>typeof t=="string";var D={ms:t=>t*1e3,s:t=>t/1e3};var Ot=(t,e,s)=>(((1-3*s+3*e)*t+(3*s-6*e))*t+3*e)*t,Qt=1e-7,te=12;function ee(t,e,s,i,n){let o,a,r=0;do a=e+(s-e)/2,o=Ot(a,i,n)-t,o>0?s=a:e=a;while(Math.abs(o)>Qt&&++ree(o,0,1,t,s);return o=>o===0||o===1?o:Ot(n(o),e,i)}var ft=(t,e="end")=>s=>{s=e==="end"?Math.min(s,.999):Math.max(s,.001);let i=s*t,n=e==="end"?Math.floor(i):Math.ceil(i);return P(0,1,n/t)};var se={ease:F(.25,.1,.25,1),"ease-in":F(.42,0,1,1),"ease-in-out":F(.42,0,.58,1),"ease-out":F(0,0,.58,1)},ie=/\((.*?)\)/;function dt(t){if(x(t))return t;if($(t))return F(...t);let e=se[t];if(e)return e;if(t.startsWith("steps")){let s=ie.exec(t);if(s){let i=s[1].split(",");return ft(parseFloat(i[0]),i[1].trim())}}return g}var N=class{constructor(e,s=[0,1],{easing:i,duration:n=p.duration,delay:o=p.delay,endDelay:a=p.endDelay,repeat:r=p.repeat,offset:l,direction:m="normal",autoplay:h=!0}={}){if(this.startTime=null,this.rate=1,this.t=0,this.cancelTimestamp=null,this.easing=g,this.duration=0,this.totalDuration=0,this.repeat=0,this.playState="idle",this.finished=new Promise((u,b)=>{this.resolve=u,this.reject=b}),i=i||p.easing,R(i)){let u=i.createAnimation(s);i=u.easing,s=u.keyframes||s,n=u.duration||n}this.repeat=r,this.easing=E(i)?g:dt(i),this.updateDuration(n);let y=ut(s,l,E(i)?i.map(dt):g);this.tick=u=>{var b;o=o;let d=0;this.pauseTime!==void 0?d=this.pauseTime:d=(u-this.startTime)*this.rate,this.t=d,d/=1e3,d=Math.max(d-o,0),this.playState==="finished"&&this.pauseTime===void 0&&(d=this.totalDuration);let w=d/this.duration,X=Math.floor(w),S=w%1;!S&&w>=1&&(S=1),S===1&&X--;let Z=X%2;(m==="reverse"||m==="alternate"&&Z||m==="alternate-reverse"&&!Z)&&(S=1-S);let _=d>=this.totalDuration?1:Math.min(S,1),C=y(this.easing(_));e(C),this.pauseTime===void 0&&(this.playState==="finished"||d>=this.totalDuration+a)?(this.playState="finished",(b=this.resolve)===null||b===void 0||b.call(this,C)):this.playState!=="idle"&&(this.frameRequestId=requestAnimationFrame(this.tick))},h&&this.play()}play(){let e=performance.now();this.playState="running",this.pauseTime!==void 0?this.startTime=e-this.pauseTime:this.startTime||(this.startTime=e),this.cancelTimestamp=this.startTime,this.pauseTime=void 0,this.frameRequestId=requestAnimationFrame(this.tick)}pause(){this.playState="paused",this.pauseTime=this.t}finish(){this.playState="finished",this.tick(0)}stop(){var e;this.playState="idle",this.frameRequestId!==void 0&&cancelAnimationFrame(this.frameRequestId),(e=this.reject)===null||e===void 0||e.call(this,!1)}cancel(){this.stop(),this.tick(this.cancelTimestamp)}reverse(){this.rate*=-1}commitStyles(){}updateDuration(e){this.duration=e,this.totalDuration=e*(this.repeat+1)}get currentTime(){return this.t}set currentTime(e){this.pauseTime!==void 0||this.rate===0?this.pauseTime=e:this.startTime=performance.now()-e/this.rate}get playbackRate(){return this.rate}set playbackRate(e){this.rate=e}};var pt=function(){};var tt=class{setAnimation(e){this.animation=e,e==null||e.finished.then(()=>this.clearAnimation()).catch(()=>{})}clearAnimation(){this.animation=this.generator=void 0}};var ht=new WeakMap;function et(t){return ht.has(t)||ht.set(t,{transforms:[],values:new Map}),ht.get(t)}function Mt(t,e){return t.has(e)||t.set(e,new tt),t.get(e)}var ne=["","X","Y","Z"],oe=["translate","scale","rotate","skew"],z={x:"translateX",y:"translateY",z:"translateZ"},It={syntax:"",initialValue:"0deg",toDefaultUnit:t=>t+"deg"},re={translate:{syntax:"",initialValue:"0px",toDefaultUnit:t=>t+"px"},rotate:It,scale:{syntax:"",initialValue:1,toDefaultUnit:g},skew:It},L=new Map,st=t=>`--motion-${t}`,it=["x","y","z"];oe.forEach(t=>{ne.forEach(e=>{it.push(t+e),L.set(st(t+e),re[t])})});var ae=(t,e)=>it.indexOf(t)-it.indexOf(e),le=new Set(it),nt=t=>le.has(t),Ft=(t,e)=>{z[e]&&(e=z[e]);let{transforms:s}=et(t);lt(s,e),t.style.transform=me(s)},me=t=>t.sort(ae).reduce(ue,"").trim(),ue=(t,e)=>`${t} ${e}(var(${st(e)}))`;var q=t=>t.startsWith("--"),Vt=new Set;function Ct(t){if(!Vt.has(t)){Vt.add(t);try{let{syntax:e,initialValue:s}=L.has(t)?L.get(t):{};CSS.registerProperty({name:t,inherits:!1,syntax:e,initialValue:s})}catch(e){}}}var gt=(t,e)=>document.createElement("div").animate(t,e),Rt={cssRegisterProperty:()=>typeof CSS!="undefined"&&Object.hasOwnProperty.call(CSS,"registerProperty"),waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate"),partialKeyframes:()=>{try{gt({opacity:[1]})}catch(t){return!1}return!0},finished:()=>Boolean(gt({opacity:[0,1]},{duration:.001}).finished),linearEasing:()=>{try{gt({opacity:0},{easing:"linear(0, 1)"})}catch(t){return!1}return!0}},yt={},O={};for(let t in Rt)O[t]=()=>(yt[t]===void 0&&(yt[t]=Rt[t]()),yt[t]);var ce=.015,fe=(t,e)=>{let s="",i=Math.round(e/ce);for(let n=0;nx(t)?O.linearEasing()?`linear(${fe(t,e)})`:p.easing:$(t)?de(t):t,de=([t,e,s,i])=>`cubic-bezier(${t}, ${e}, ${s}, ${i})`;function Nt(t,e){for(let s=0;sArray.isArray(t)?t:[t];function B(t){return z[t]&&(t=z[t]),nt(t)?st(t):t}var U={get:(t,e)=>{e=B(e);let s=q(e)?t.style.getPropertyValue(e):getComputedStyle(t)[e];if(!s&&s!==0){let i=L.get(e);i&&(s=i.initialValue)}return s},set:(t,e,s)=>{e=B(e),q(e)?t.style.setProperty(e,s):t.style[e]=s}};function ot(t,e=!0){if(!(!t||t.playState==="finished"))try{t.stop?t.stop():(e&&t.commitStyles(),t.cancel())}catch(s){}}function kt(t,e){var s;let i=(e==null?void 0:e.toDefaultUnit)||g,n=t[t.length-1];if(ct(n)){let o=((s=n.match(/(-?[\d.]+)([a-z%]*)/))===null||s===void 0?void 0:s[2])||"";o&&(i=a=>a+o)}return i}function pe(){return window.__MOTION_DEV_TOOLS_RECORD}function Pt(t,e,s,i={},n){let o=pe(),a=i.record!==!1&&o,r,{duration:l=p.duration,delay:m=p.delay,endDelay:h=p.endDelay,repeat:y=p.repeat,easing:u=p.easing,persist:b=!1,direction:d,offset:w,allowWebkitAcceleration:X=!1,autoplay:S=!0}=i,Z=et(t),_=nt(e),C=O.waapi();_&&Ft(t,e);let v=B(e),Y=Mt(Z.values,v),A=L.get(v);return ot(Y.animation,!(R(u)&&Y.generator)&&i.record!==!1),()=>{let J=()=>{var c,k;return(k=(c=U.get(t,v))!==null&&c!==void 0?c:A==null?void 0:A.initialValue)!==null&&k!==void 0?k:0},f=Nt(_t(s),J),wt=kt(f,A);if(R(u)){let c=u.createAnimation(f,e!=="opacity",J,v,Y);u=c.easing,f=c.keyframes||f,l=c.duration||l}if(q(v)&&(O.cssRegisterProperty()?Ct(v):C=!1),_&&!O.linearEasing()&&(x(u)||E(u)&&u.some(x))&&(C=!1),C){A&&(f=f.map(M=>j(M)?A.toDefaultUnit(M):M)),f.length===1&&(!O.partialKeyframes()||a)&&f.unshift(J());let c={delay:D.ms(m),duration:D.ms(l),endDelay:D.ms(h),easing:E(u)?void 0:xt(u,l),direction:d,iterations:y+1,fill:"both"};r=t.animate({[v]:f,offset:w,easing:E(u)?u.map(M=>xt(M,l)):void 0},c),r.finished||(r.finished=new Promise((M,Zt)=>{r.onfinish=M,r.oncancel=Zt}));let k=f[f.length-1];r.finished.then(()=>{b||(U.set(t,v,k),r.cancel())}).catch(H),X||(r.playbackRate=1.000001)}else if(n&&_)f=f.map(c=>typeof c=="string"?parseFloat(c):c),f.length===1&&f.unshift(parseFloat(J())),r=new n(c=>{U.set(t,v,wt?wt(c):c)},f,Object.assign(Object.assign({},i),{duration:l,easing:u}));else{let c=f[f.length-1];U.set(t,v,A&&j(c)?A.toDefaultUnit(c):c)}return a&&o(t,e,f,{duration:l,delay:m,easing:u,repeat:y,offset:w},"motion-one"),Y.setAnimation(r),r&&!S&&r.pause(),r}}var Ht=(t,e)=>t[e]?Object.assign(Object.assign({},t),t[e]):Object.assign({},t);function $t(t,e){var s;return typeof t=="string"?e?((s=e[t])!==null&&s!==void 0||(e[t]=document.querySelectorAll(t)),t=e[t]):t=document.querySelectorAll(t):t instanceof Element&&(t=[t]),Array.from(t||[])}var he=t=>t(),G=(t,e,s=p.duration)=>new Proxy({animations:t.map(he).filter(Boolean),duration:s,options:e},ye),ge=t=>t.animations[0],ye={get:(t,e)=>{let s=ge(t);switch(e){case"duration":return t.duration;case"currentTime":return D.s((s==null?void 0:s[e])||0);case"playbackRate":case"playState":return s==null?void 0:s[e];case"finished":return t.finished||(t.finished=Promise.all(t.animations.map(xe)).catch(H)),t.finished;case"stop":return()=>{t.animations.forEach(i=>ot(i))};case"forEachNative":return i=>{t.animations.forEach(n=>i(n,t))};default:return typeof(s==null?void 0:s[e])=="undefined"?void 0:()=>t.animations.forEach(i=>i[e]())}},set:(t,e,s)=>{switch(e){case"currentTime":s=D.ms(s);case"playbackRate":for(let i=0;it.finished;function zt(t,e,s){return x(t)?t(e,s):t}function qt(t){return function(s,i,n={}){s=$t(s);let o=s.length;pt(Boolean(o),"No valid element provided."),pt(Boolean(i),"No keyframes defined.");let a=[];for(let r=0;r{let s=new N(t,[0,1],e);return s.finished.catch(()=>{}),s}],e,e.duration)}function K(t,e,s){return(x(t)?ve:vt)(t,e,s)}function V(t){return t===null?!0:t.offsetParent===null}function Te(t){return t.dataset.component==="flash"}function Ee(t,e){if(t===void 0)return e;if(t==="Infinity")return Number.POSITIVE_INFINITY;let s=Number.parseInt(t);return Number.isNaN(s)?e:s}function be(){let t=0;return V(document.getElementById("server-error"))||(t+=1),V(document.getElementById("client-error"))||(t+=1),V(document.getElementById("flash-info"))||(t+=1),V(document.getElementById("flash-error"))||(t+=1),t}var Tt=5,je=550,we=!0,Et=15,Bt="live-toast-dismiss",Ut="live-toast:add",Gt="[data-live-toast-remaining]",Kt=[],W=new WeakMap;function Wt(t){return t}function Se(t,e,s={}){var i;(i=document.getElementById("toast-group"))==null||i.dispatchEvent(new CustomEvent(Ut,{detail:{kind:t,message:e,options:s}}))}function rt(t,e,s){let i=[],n=Array.from(document.querySelectorAll('#toast-group [phx-hook="LiveToast"]')).map(o=>V(o)?null:o).filter(Boolean).reverse();s&&(n=n.filter(o=>o!==s));for(let o=0;oa?0:1-(r.order-a+1);r.order>=a?r.classList.remove("pointer-events-auto"):r.classList.add("pointer-events-auto");let y={y:[`${l}${m}px`],opacity:[h]};if(r.order===0&&Kt.includes(r)===!1){let d=r.offsetHeight+Et,w=l==="-"?"":"-";y.y.unshift(`${w}${d}px`),y.opacity.unshift(0)}r.targetDestination=`${l}${m}px`;let u=je/1e3,b=Number.parseInt(this.el.dataset.delay||"0")/1e3;K(r,y,{duration:u,easing:[.22,1,.36,1],delay:b}),r.order+=1,r.style.zIndex=(50-r.order).toString(),window.setTimeout(()=>{r.order>a&&this.pushEventTo(Xt(r),"clear",{id:r.id})},t+Tt),Kt=i}}function Xt(t){let e=t.closest('[phx-update="stream"]');return(e==null?void 0:e.parentElement)||"#toast-group"}function bt(){return T(this,null,function*(){let t=Wt(this.el),e=(t.order-2)*100+(t.order-2)*Et,s="";(this.el.dataset.corner==="bottom_left"||this.el.dataset.corner==="bottom_center"||this.el.dataset.corner==="bottom_right")&&(s="-"),yield K(this.el,{y:`${s}${e}%`,opacity:0},{opacity:{duration:.2,easing:"ease-out"},duration:.3,easing:"ease-out"}).finished})}function jt(t,e){return T(this,null,function*(){var s;this.el.dataset.liveToastDismissing!=="true"&&(this.el.dataset.liveToastDismissing="true",(s=W.get(this))==null||s.cancel(),W.delete(this),rt.bind(this,t,e,this.el)(),yield bt.bind(this)(),this.pushEventTo(Xt(this.el),"clear",{id:this.el.id}))})}function Ae(t){return t.matches(":hover")||t.matches(":focus-within")}function at(t,e,s){let i=t.querySelector(Gt);!i||(i.textContent=Math.ceil(e/1e3).toString(),i.dataset.paused=s.toString())}function De(t,e,s){let i=t,n,o,a,r=()=>n===void 0?i:Math.max(0,i-(performance.now()-n)),l=()=>{o!==void 0&&(window.clearTimeout(o),o=void 0),a!==void 0&&(window.clearInterval(a),a=void 0)},m=()=>{n!==void 0&&(i=r(),n=void 0,l(),at(this.el,i,!0))},h=()=>{o||Ae(this.el)||(n=performance.now(),at(this.el,i,!1),this.el.querySelector(Gt)&&(a=window.setInterval(()=>{at(this.el,r(),!1)},100)),o=window.setTimeout(()=>T(this,null,function*(){l(),i=0,n=void 0,at(this.el,i,!1),yield jt.bind(this)(e,s)}),i+Tt))},y=()=>{l(),this.el.removeEventListener("mouseenter",m),this.el.removeEventListener("focusin",m),this.el.removeEventListener("mouseleave",h),this.el.removeEventListener("focusout",h)};this.el.addEventListener("mouseenter",m),this.el.addEventListener("focusin",m),this.el.addEventListener("mouseleave",h),this.el.addEventListener("focusout",h),W.set(this,{cancel:y}),h()}function Le(t=6e3,e=3){return{destroyed(){var s;this.el.dataset.liveToastGroup!=="true"&&((s=W.get(this))==null||s.cancel(),W.delete(this),rt.bind(this)(t,e))},updated(){if(this.el.dataset.liveToastGroup==="true")return;let i={y:[Wt(this.el).targetDestination]};K(this.el,i,{duration:0})},mounted(){if(this.el.dataset.liveToastGroup==="true"){let n=o=>{let a=o.detail;!a||this.pushEventTo(this.el,"add_toast",{kind:a.kind,message:a.message,options:a.options})};this.el.addEventListener(Ut,n);return}if(this.el.addEventListener("show-error",n=>T(this,null,function*(){let o=Number.parseInt(this.el.dataset.delay||"0");yield new Promise(a=>setTimeout(a,o)),this.el.style.display="flex"})),this.el.addEventListener("hide-error",n=>T(this,null,function*(){this.el.style.display="none"})),["server-error","client-error"].includes(this.el.id)&&V(document.getElementById(this.el.id)))return;window.addEventListener("phx:clear-flash",n=>{this.pushEvent("lv:clear-flash",{key:n.detail.key})}),window.addEventListener("flash-leave",n=>T(this,null,function*(){n.target===this.el&&(rt.bind(this,t,e,this.el)(),yield bt.bind(this)())})),this.el.addEventListener(Bt,n=>T(this,null,function*(){n.stopPropagation(),yield jt.bind(this)(t,e)})),window.addEventListener(`phx:${Bt}`,n=>T(this,null,function*(){let o=n.detail;(o.id||`toast-${o.uuid}`)===this.el.id&&(yield jt.bind(this)(t,e))})),rt.bind(this)(t,e);let s=Ee(this.el.dataset.duration,t),i;this.el.dataset.flashDuration!==void 0&&(i=Number.parseInt(this.el.dataset.flashDuration)),!(Te(this.el)&&!i)&&(i?window.setTimeout(()=>T(this,null,function*(){yield bt.bind(this)();let n=this.el.dataset.kind;n&&this.pushEvent("lv:clear-flash",{key:n})}),i+Tt):Number.isFinite(s)&&s>0&&De.bind(this)(s,t,e))}}}return Oe;})();