import { DataObject } from 'dom-renderer'; import { ObservableValue } from 'mobx/dist/internal'; import { delegate } from 'web-utility'; export class Defer { resolve: (value: T | PromiseLike) => void; reject: (reason?: any) => void; promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); } export function getMobxData(observable: T) { for (const key of Object.getOwnPropertySymbols(observable)) { const store = observable[key as keyof T]?.values_ as Map< string, ObservableValue >; if (store instanceof Map) return Object.fromEntries( Array.from(store, ([key, { value_ }]) => [key, value_]) ) as T; } } export const animated = ( root: T, targetSelector: string ) => new Promise(resolve => { const ended = delegate(targetSelector, (event: AnimationEvent) => { root.removeEventListener('animationend', ended); root.removeEventListener('animationcancel', ended); resolve(event); }); root.addEventListener('animationend', ended); root.addEventListener('animationcancel', ended); });