{"version":3,"file":"index.min.mjs","sources":["../src/utils.ts","../src/directives/each.ts","../src/directives/ref.ts","../src/directives/decorator.ts","../src/directives/bind.ts","../src/directives/call.ts","../src/directives/capture.ts","../src/directives/once.ts","../src/directives/passive.ts","../src/directives/prevent.ts","../src/directives/stop.ts","../src/directives/self.ts","../src/index.ts"],"sourcesContent":["import { render, nothing } from 'lit-html';\n\nexport const unrender = (target: Element | DocumentFragment) => render(nothing, target);\n\nexport const noop = (...args: any[]) => { };\n\nexport const tick = (fn: (() => any) = noop): Promise<undefined> => new Promise((resolve) => setTimeout(resolve)).then(fn);\n\nexport const memo = (fn: (...args: any[]) => any, invalidate?: (...args: any[]) => any) => {\n    const cache = new Map();\n    return (...args: any[]) => {\n        let key;\n        if (typeof invalidate === 'function') {\n            const validOrKey = invalidate.apply(fn, args);\n            if (validOrKey === false) { // invalidate the cache\n                key = JSON.stringify(args);\n                cache.delete(key);\n            } else if (validOrKey !== true) { // set custom cache key\n                key = validOrKey;\n            }\n        }\n\n        if (key === undefined) {\n            key = JSON.stringify(args);\n        }\n\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n\n        const result = fn.apply(fn, args);\n        cache.set(key, result);\n\n        return result;\n    };\n};\n\nexport function attrToVal(str: string): any {\n    if (str === 'true' || str === 'false') {\n        return str === 'true';\n    } else if (str === 'null') {\n        return null;\n    } else if (str === 'undefined') {\n        return undefined;\n    } else if (str !== '' && !isNaN(Number(str))) {\n        return Number(str);\n    } else {\n        try {\n            return JSON.parse(str);\n        } catch (e) { }\n    }\n    return str;\n}\n\nexport function camelCase(str: string, pascal: boolean = false): string {\n    const camel = str.replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n    return pascal ? camel.replace(/^\\w/, s => s.toUpperCase()) : camel;\n}\n\nexport function kebabCase(str: string): string {\n    return str.replace(/[A-Z]/g, '-$&').toLowerCase();\n}","import { repeat } from 'lit-html/directives/repeat';\n\nexport const each = (items, template, keyFn = (item) => item) =>\n    repeat(items, keyFn, template);\n","import { directive } from 'lit-html';\n\nexport const ref = directive((fn) => (part) => fn(part.element));","import { directive } from 'lit-html';\n\nconst decorators = new WeakMap();\n\nexport const decorator = directive((handler, ...state) => {\n    const self = (part) => {\n        const el = part.element;\n\n        if (decorators.has(part)) {\n            const [decorator, prevHandler] = decorators.get(part);\n            if (prevHandler !== handler) {\n                decorator.destroy();\n                decorators.delete(part);\n                self(part);\n            } else {\n                decorator.update(...state);\n            }\n        } else {\n            const decorator = handler(el, ...state);\n            decorators.set(part, [decorator, handler]);\n            // decorator.destroy() + decorators.delete(part) ???\n            // https://github.com/Polymer/lit-html/issues/283\n            // wait till lit-html 2 ?\n        }\n    };\n    return self;\n});\n","import { directive, EventPart } from 'lit-html';\n\n// check this later: https://codesandbox.io/s/hyperactiv-tests-works-u47wt?file=/src/bind.js\n\ntype HTMLConrolElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLButtonElement;\n\nexport const bind = directive((handleEvent) => (part) => {\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"bind\" directive can only be used in event listeners');\n    }\n\n    const el: any = part.element as HTMLConrolElement;\n    const isInput = el instanceof HTMLInputElement;\n    const isSelect = el instanceof HTMLSelectElement;\n    const isTextarea = el instanceof HTMLTextAreaElement;\n    const isButton = el instanceof HTMLButtonElement;\n\n    if (!isInput && !isSelect && !isTextarea && !isButton) {\n        throw new Error(\n            '\"bind\" directive can only be applied to input/select/textarea/button elements.'\n        );\n    }\n\n    part.setValue(function (...args) {\n        let value: string | boolean | any = el.defaultValue;\n        if (isSelect && el.options.length > 0) {\n            const i = el.selectedIndex >= 0 ? el.selectedIndex : 0;\n            value = el.options[i].value;\n        } else if (isInput) {\n            switch (el.type) {\n                case 'number':\n                case 'range':\n                    value = el.valueAsNumber;\n                    break;\n                case 'checkbox':\n                case 'radio':\n                    value = !!el.checked;\n                    break;\n                case 'time':\n                case 'date':\n                case 'datetime':\n                case 'datetime-local':\n                    value = el.valueAsDate;\n                    break;\n                default:\n                    value = el.value;\n            }\n        } else {\n            value = el.value;\n        }\n\n        handleEvent.call(this, value, ...args);\n    });\n});\n","export const call = (handleEvent, ...args) => function (...argv) {\n    handleEvent.call(this, ...argv, ...args);\n};","import { directive, EventPart } from 'lit-html';\n\nexport const capture = directive((handleEvent) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"capture\" directive can only be used in event listeners');\n    }\n\n    part.setValue(typeof handleEvent === 'object' ?\n        { ...handleEvent, capture: true } :\n        { handleEvent, capture: true }\n    );\n});","import { directive, EventPart } from 'lit-html';\n\nexport const once = directive((handleEvent) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"once\" directive can only be used in event listeners');\n    }\n\n    part.setValue(typeof handleEvent === 'object' ?\n        { ...handleEvent, once: true } :\n        { handleEvent, once: true }\n    );\n});","import { directive, EventPart } from 'lit-html';\n\nexport const passive = directive((handleEvent) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"passive\" directive can only be used in event listeners');\n    }\n\n    part.setValue(typeof handleEvent === 'object' ?\n        { ...handleEvent, passive: true } :\n        { handleEvent, passive: true }\n    );\n});","import { directive, EventPart } from 'lit-html';\n\nexport const prevent = directive((handler) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"prevent\" directive can only be used in event listeners');\n    }\n\n    const { handleEvent, ...options } = handler;\n\n    part.setValue({\n        handleEvent: function (event) {\n            event.preventDefault();\n            (handleEvent || handler).call(this, event);\n        },\n        ...options\n    });\n});","import { directive, EventPart } from 'lit-html';\n\nexport const stop = directive((handler, immediate = false) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"stop\" directive can only be used in event listeners');\n    }\n\n    const { handleEvent, ...options } = handler;\n\n    part.setValue({\n        handleEvent: function (event) {\n            immediate ? event.stopImmediatePropagation() : event.stopPropagation();\n            (handleEvent || handler).call(this, event);\n        },\n        ...options\n    });\n});","import { directive, EventPart } from 'lit-html';\n\nexport const self = directive((handler) => (part) => {\n\n    if (!(part instanceof EventPart)) {\n        throw new Error('\"self\" directive can only be used in event listeners');\n    }\n\n    const { handleEvent, ...options } = handler;\n\n    part.setValue({\n        handleEvent: function (event) {\n            (event.target === event.currentTarget)\n                && (handleEvent || handler).call(this, event);\n        },\n        ...options\n    });\n});","import hr from 'hyperactiv';\nimport { render, nothing } from 'lit-html';\n\nimport { attrToVal, camelCase, kebabCase, noop, unrender } from './utils';\n\nimport type * as Type from './types';\n\nconst { observe, computed, dispose } = hr;\n\nexport * from './utils';\nexport * from './types';\nexport * from './directives';\nexport * from 'lit-html';\n\nexport { observe, computed, dispose };\n\nexport const $ = (\n    {\n        render: template = () => nothing,\n        state: data = {},\n        target = document.body,\n        ...options\n    }: Type.Config,\n    ...context\n): Type.Widget => {\n    const model: {} = (typeof data === 'function') ? data(...context) : data;\n\n    Object.entries(target.dataset).forEach(([key, value]) => {\n        if (key in model) model[key] = attrToVal(value);\n    });\n\n    const state: ProxyConstructor = observe(model, {\n        batch: true,\n        deep: true,\n        bind: true,\n        ...options\n    });\n\n    const emit = (type: string, detail: object, { bubbles = false, cancelable = true } = {}) => {\n        target.dispatchEvent(\n            new CustomEvent(type, { detail, bubbles, cancelable })\n        );\n    };\n\n    let mounted = false;\n    const rerender = () => {\n        render(template(state, emit, ...context), target);\n        if (!mounted) {\n            emit('mount', model);\n            mounted = true;\n        }\n        emit('update', model);\n    };\n    const renderer = computed(({ computeAsync }) => {\n        if (mounted && !document.contains(target)) return destroy();\n        emit('state', model);\n        return Promise.resolve()\n            .then(() => computeAsync(rerender))\n            .catch(err => emit('error', err));\n    });\n\n    const events = new Set();\n    const on = (type: string, fn: (e: CustomEvent) => void, opts?: object | boolean) => {\n        target.addEventListener(type, fn, opts);\n        const off = () => {\n            target.removeEventListener(type, fn, opts);\n            return events.delete(off);\n        };\n        events.add(off);\n        return off;\n    };\n\n    const effects = new Set();\n    const effect = (fn: () => void, opts?: object) => {\n        const handle = computed(fn, opts);\n        const cancel = () => {\n            dispose(handle);\n            return effects.delete(cancel);\n        };\n        effects.add(cancel);\n        return cancel;\n    };\n\n    const observer = new MutationObserver((mutations: MutationRecord[]) => {\n        mutations.forEach((mutation) => {\n            if (mutation.type !== 'attributes') return;\n\n            const el: Element = mutation.target as Element;\n            const key = camelCase(mutation.attributeName.replace('data-', ''));\n\n            if (!(key in state)) return;\n\n            const value = el.getAttribute(mutation.attributeName);\n            if (value !== mutation.oldValue) {\n                const val = attrToVal(value);\n                if (state[key] !== val) state[key] = val;\n            }\n        });\n    });\n\n    observer.observe(target, {\n        attributeFilter: Object.entries(model).reduce((attrs, [key, val]) => {\n            if (typeof val !== 'function') {\n                attrs.push(`data-${kebabCase(key)}`);\n            }\n            return attrs;\n        }, []),\n        attributeOldValue: true,\n        characterData: false,\n        childList: false,\n        subtree: false\n    });\n\n    const destroy = (cb = noop) => {\n        observer.disconnect();\n        dispose(renderer);\n        effects.forEach((cancel: () => void) => cancel());\n        effects.clear();\n        emit('destroy', model);\n        events.forEach((off: () => void) => off());\n        events.clear();\n        unrender(target);\n        cb(model);\n    };\n\n    const ctx = (fn: (...ctx: any[]) => any) => fn(...context);\n\n    return {\n        on,\n        ctx,\n        model, // plain state (object)\n        state, // reactive state (proxy)\n        effect,\n        target,\n        destroy,\n        render: rerender,\n    };\n};\n\nexport const $$ = ({ target, ...config }: Type.Configs, ...context): Type.Widgets => {\n    if (!(target as NodeList | Node[]).length) {\n        target = [target] as Node[];\n    }\n\n    const widgets = Array.prototype.map.call(target, (target: HTMLElement) => {\n        return $({ ...config, target } as Type.Config, ...context);\n    });\n\n    return {\n        ...widgets,\n        effect: (fn, opts): () => void => {\n            const cancels = widgets.map((widget: Type.Widget) => widget.effect(fn(widget.state), opts));\n            return () => cancels.forEach(cancel => cancel());\n        },\n        on: (...args): () => void => {\n            const offs = widgets.map((widget: Type.Widget) => widget.on(...args));\n            return () => offs.forEach(off => off());\n        },\n        destroy: (cb): void => widgets.forEach((widget: Type.Widget) => widget.destroy(cb)),\n        render: (): void => widgets.forEach((widget: Type.Widget) => widget.render()),\n        state: (fn: (state: ProxyConstructor) => void): void => {\n            widgets.forEach((widget: Type.Widget) => fn(widget.state))\n        },\n        ctx: (fn: (...ctx: any[]) => any) => fn(...context),\n        forEach: Array.prototype.forEach.bind(widgets),\n        target,\n    };\n};"],"names":["unrender","target","render","nothing","noop","args","tick","fn","Promise","resolve","setTimeout","then","memo","invalidate","cache","Map","key","validOrKey","apply","JSON","stringify","delete","undefined","has","get","result","set","attrToVal","str","isNaN","Number","parse","e","camelCase","pascal","camel","replace","_","w","toUpperCase","s","kebabCase","toLowerCase","each","items","template","keyFn","item","repeat","ref","directive","part","element","decorators","WeakMap","decorator","handler","state","self","el","prevHandler","destroy","update","bind","handleEvent","EventPart","Error","isInput","HTMLInputElement","isSelect","HTMLSelectElement","isTextarea","HTMLTextAreaElement","isButton","HTMLButtonElement","setValue","value","defaultValue","options","length","i","selectedIndex","type","valueAsNumber","checked","valueAsDate","call","this","argv","capture","once","passive","prevent","event","preventDefault","stop","immediate","stopImmediatePropagation","stopPropagation","currentTarget","observe","computed","dispose","hr","$","data","document","body","context","model","Object","entries","dataset","forEach","batch","deep","emit","detail","bubbles","cancelable","dispatchEvent","CustomEvent","mounted","rerender","renderer","computeAsync","contains","catch","err","events","Set","effects","observer","MutationObserver","mutations","mutation","attributeName","getAttribute","oldValue","val","attributeFilter","reduce","attrs","push","attributeOldValue","characterData","childList","subtree","cb","disconnect","cancel","clear","off","on","opts","addEventListener","removeEventListener","add","ctx","effect","handle","$$","config","widgets","Array","prototype","map","cancels","widget","offs"],"mappings":"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"}