{"version":3,"file":"state.min.cjs","sources":["../../../../../../src/in/packages/state/src/decorator.ts","../../../../../../src/in/packages/state/src/helper.ts","../../../../../../src/in/packages/state/src/style.ts","../../../../../../src/in/packages/state/src/set.ts","../../../../../../src/in/packages/state/src/unset.ts","../../../../../../src/in/packages/state/src/check.ts","../../../../../../src/in/packages/state/src/index.ts","../../../../../../src/in/packages/state/src/event.ts"],"sourcesContent":["import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, State } from '@leafer-ui/core'\n\nexport function stateType(defaultValue?: IValue, styleName?: string) {\n    return decorateLeafAttr(defaultValue, (key: string) => attr({\n        set(value: any) {\n            this.__setAttr(key, value)\n            if (this.leaferIsReady) styleName ? State.setStyleName(this, styleName, value) : State.set(this, value)\n            else this.__layout.stateStyleChanged = true\n        }\n    }))\n}\n\nexport function stateStyleType(defaultValue?: IValue) {\n    return decorateLeafAttr(defaultValue, (key: string) => attr({\n        set(value: any) {\n            this.__setAttr(key, value)\n            this.__layout.stateStyleChanged = true\n        }\n    }))\n}","import { IUI } from '@leafer-ui/interface'\n\n\nexport function findParentButton(leaf: IUI, button?: IUI | boolean): IUI {\n    if (button && button !== true) return button\n    if (!leaf.button) {\n        let { parent } = leaf\n        for (let i = 0; i < 2; i++) {\n            if (parent) {\n                if (parent.button) return parent\n                parent = parent.parent\n            }\n        }\n    }\n    return null\n}","import { IUI, IObject, IUIInputData, IStateStyle, IScaleData, ITransition } from '@leafer-ui/interface'\nimport { State, MathHelper, isNull, isObject } from '@leafer-ui/core'\n\nimport { findParentButton } from './helper'\n\n\nexport function setStyle(leaf: IUI, style: IStateStyle): void {\n    if (!isObject(style)) style = undefined\n    updateStyle(leaf, style, 'in')\n}\n\nexport function unsetStyle(leaf: IUI, style?: IStateStyle): void {\n    const { normalStyle } = leaf\n    if (!isObject(style)) style = undefined\n    if (normalStyle) {\n        if (!style) style = normalStyle\n        updateStyle(leaf, style, 'out')\n    }\n}\n\nconst emprtyStyle = {}\n\nexport function updateStyle(leaf: IUI, style?: IStateStyle, type?: 'in' | 'out'): void {\n    const { normalStyle } = leaf\n\n    if (!style) style = emprtyStyle\n\n    if (style.scale) {\n        MathHelper.assignScale(style as IScaleData, style.scale)\n        delete style.scale\n    }\n\n    if (style === emprtyStyle || !State.canAnimate) type = null\n    let transition = type ? getTransition(type, style, leaf) : false\n    const fromStyle = transition ? getFromStyle(leaf, style) : undefined\n\n    // 回到正常状态\n    const nextStyle = State.canAnimate && getStyle(leaf)\n    if (nextStyle) leaf.killAnimate('transition')\n    if (normalStyle) leaf.set(normalStyle, 'temp')\n\n\n    const statesStyle = getStyle(leaf) // 必须在回到正常状态之后获取\n    if (statesStyle) {\n\n        const { animation } = statesStyle\n        if (animation) {\n            const animate = leaf.animate(animation, undefined, 'animation', true)\n            Object.assign(statesStyle, animate.endingStyle) // 加上最终的动画样式\n\n            if (type !== 'in' || style.animation !== animation) animate.kill()\n            else transition = false\n\n            delete statesStyle.animation\n        }\n\n\n        leaf.normalStyle = filterStyle(statesStyle, leaf)\n        leaf.set(statesStyle, 'temp')\n    } else {\n        leaf.normalStyle = undefined\n    }\n\n    if (transition) {\n        const toStyle = filterStyle(fromStyle, leaf)\n        leaf.set(fromStyle, 'temp')\n        leaf.animate([fromStyle, toStyle], transition, 'transition', true)\n    }\n\n    leaf.__layout.stateStyleChanged = false\n}\n\nexport function getStyle(leaf: IUI): IStateStyle {\n\n    //   从低到高依次覆盖:  states < selected < placeholder < focus < hover < press < disabled\n\n    let exist: boolean\n    const style: IUIInputData = {}, button = findParentButton(leaf)\n    const state = button ? (leaf.state || button.state) : leaf.state\n\n    const stateStyle = state && leaf.states[state]\n    if (stateStyle && State.isState(state, leaf, button)) exist = assign(style, stateStyle)\n\n    const selectedStyle = style.selectedStyle || leaf.selectedStyle\n    if (selectedStyle && State.isSelected(leaf, button)) exist = assign(style, selectedStyle)\n\n    const placeholderStyle = style.placeholderStyle || leaf.placeholderStyle\n    if (placeholderStyle && State.isPlacehold(leaf, button)) exist = assign(style, placeholderStyle)\n\n    if (State.isDisabled(leaf, button)) {\n\n        const disabledStyle = style.disabledStyle || leaf.disabledStyle\n        if (disabledStyle) exist = assign(style, disabledStyle)\n\n    } else {\n\n        const focusStyle = style.focusStyle || leaf.focusStyle\n        if (focusStyle && State.isFocus(leaf, button)) exist = assign(style, focusStyle)\n\n        const hoverStyle = style.hoverStyle || leaf.hoverStyle\n        if (hoverStyle && State.isHover(leaf, button)) exist = assign(style, hoverStyle)\n\n        const pressStyle = style.pressStyle || leaf.pressStyle\n        if (pressStyle && State.isPress(leaf, button)) exist = assign(style, pressStyle)\n\n    }\n\n    return exist ? style : undefined\n}\n\n\nfunction filterStyle(style: IObject, data: IObject, addStyle?: IObject, useAnimateExcludes?: boolean): IObject {\n    const to: IObject = addStyle ? style : {}, forStyle = addStyle || style\n    for (let key in forStyle) {\n        if (useAnimateExcludes) {\n            if (!State.animateExcludes[key]) to[key] = data[key]\n        } else to[key] = data[key]\n    }\n    return to\n}\n\nfunction filterAnimateStyle(style: IObject, data: IObject, addStyle?: IObject): IObject {\n    return filterStyle(style, data, addStyle, true)\n}\n\nfunction getFromStyle(leaf: IUI, style: IObject): IObject {\n    const fromStyle = filterAnimateStyle(style, leaf), animate = leaf.animate()\n    if (animate) filterAnimateStyle(fromStyle, leaf, animate.fromStyle)\n    return fromStyle\n}\n\nfunction getTransition(type: 'in' | 'out', style: IStateStyle, data: IUI): ITransition {\n    let name: 'transition' | 'transitionOut' = type === 'in' ? 'transition' : 'transitionOut'\n    if (type === 'out' && isNull(data[name]) && isNull(style[name])) name = 'transition'\n    return isNull(style[name]) ? data[name] : style[name]\n}\n\nfunction assign(style: IStateStyle, stateStyle: IStateStyle): boolean {\n    Object.assign(style, stateStyle)\n    return true\n}","import { IUI, IStateStyle, IStateStyleType, IStateName } from '@leafer-ui/interface'\nimport { State, isUndefined } from '@leafer-ui/core'\n\nimport { setStyle } from './style'\n\n\nexport function setPointerState(leaf: IUI, stateName: IStateStyleType): void {\n    const style = leaf[stateName]\n    if (style) setStyle(leaf, style)\n    if (leaf.button) setChildrenState(leaf.children, stateName)\n}\n\nexport function setState(leaf: IUI, stateName: string, stateStyle?: IStateStyle): void {\n    if (!stateStyle) stateStyle = leaf.states[stateName]\n    setStyle(leaf, stateStyle)\n    if (leaf.button) setChildrenState(leaf.children, null, stateName)\n}\n\n\nfunction setChildrenState(children: IUI[], stateType: IStateStyleType, stateName?: IStateName): void {\n    if (!children) return\n\n    let leaf: IUI, update: boolean\n    for (let i = 0, len = children.length; i < len; i++) {\n        leaf = children[i]\n        if (stateType) {\n\n            update = true\n            switch (stateType) {\n                case 'hoverStyle':\n                    if (State.isHover(leaf)) update = false\n                    break\n                case 'pressStyle':\n                    if (State.isPress(leaf)) update = false\n                    break\n                case 'focusStyle':\n                    if (State.isFocus(leaf)) update = false\n            }\n            if (update) setPointerState(leaf, stateType)\n\n        } else if (!isUndefined(stateName)) setState(leaf, stateName)\n\n        if (leaf.isBranch) setChildrenState(leaf.children, stateType, stateName)\n    }\n}","import { IUI, IStateStyleType, IStateStyle, IStateName } from '@leafer-ui/interface'\nimport { isUndefined } from '@leafer-ui/core'\n\nimport { unsetStyle } from './style'\n\n\nexport function unsetPointerState(leaf: IUI, stateName: IStateStyleType): void {\n    const style = leaf[stateName]\n    if (style) unsetStyle(leaf, style)\n    if (leaf.button) unsetChildrenState(leaf.children, stateName)\n}\n\nexport function unsetState(leaf: IUI, stateName: string, stateStyle?: IStateStyle): void {\n    unsetStyle(leaf, stateStyle)\n    if (leaf.button) unsetChildrenState(leaf.children, null, stateName)\n}\n\n\nfunction unsetChildrenState(children: IUI[], stateType: IStateStyleType, stateName?: IStateName): void {\n    if (!children) return\n\n    let leaf: IUI\n    for (let i = 0, len = children.length; i < len; i++) {\n        leaf = children[i]\n        if (stateType) unsetPointerState(leaf, stateType)\n        else if (!isUndefined(stateName)) unsetState(leaf, stateName)\n\n        if (leaf.isBranch) unsetChildrenState(leaf.children, stateType, stateName)\n    }\n}","import { IUI, IStateName, } from '@leafer-ui/interface'\n\nimport { findParentButton } from './helper'\n\n\nexport function checkPointerState(fnName: 'isHover' | 'isPress' | 'isFocus' | 'isDrag', leaf: IUI, button?: IUI | boolean): boolean {\n    let find: boolean\n    const interaction = leaf.leafer ? leaf.leafer.interaction : null\n    if (interaction) {\n        find = interaction[fnName](leaf)\n        if (!find && button) {\n            const parentButton = findParentButton(leaf, button)\n            if (parentButton) find = interaction[fnName](parentButton)\n        }\n    }\n    return find\n}\n\nexport function checkFixedState(attrName: 'selected' | 'disabled', leaf: IUI, button?: IUI | boolean): boolean {\n    let find = leaf[attrName]\n    if (!find && button) {\n        const parentButton = findParentButton(leaf, button)\n        if (parentButton) find = parentButton[attrName]\n    }\n    return find\n}\n\nexport function checkState(stateName: IStateName, leaf: IUI, button?: IUI | boolean): boolean {\n    let find = leaf.states[stateName]\n    if (!find && button) {\n        const parentButton = findParentButton(leaf, button)\n        if (parentButton) find = parentButton.states[stateName]\n    }\n    return !!find\n}\n","export { stateType, stateStyleType } from './decorator'\n\nimport { IUI, IStateStyleType, IStateName, IText, IUIInputData, ITransition } from '@leafer-ui/interface'\nimport { State, UI, Text, dataType, Plugin, getDescriptor, doBoundsType, defineKey } from '@leafer-ui/core'\n\nimport { setPointerState, setState } from './set'\nimport { unsetPointerState, unsetState } from './unset'\nimport { updateEventStyle } from './event'\nimport { checkPointerState, checkFixedState, checkState } from './check'\nimport { getStyle, updateStyle } from './style'\nimport { stateType, stateStyleType } from './decorator'\n\n\nPlugin.add('state')\n\n\nState.animateExcludes = {\n    animation: 1,\n    animationOut: 1,\n\n    transition: 1,\n    transitionOut: 1,\n\n    states: 1,\n    state: 1,\n\n    placeholder: 1,\n\n    normalStyle: 1,\n    hoverStyle: 1,\n    pressStyle: 1,\n    focusStyle: 1,\n    selectedStyle: 1,\n    disabledStyle: 1,\n    placeholderStyle: 1\n}\n\n\nState.isState = function (state: IStateName, leaf: IUI, button?: IUI | boolean): boolean { return checkState(state, leaf, button) }\nState.isSelected = function (leaf: IUI, button?: IUI | boolean): boolean { return checkFixedState('selected', leaf, button) }\nState.isDisabled = function (leaf: IUI, button?: IUI | boolean): boolean { return checkFixedState('disabled', leaf, button) }\n\nState.isFocus = function (leaf: IUI, button?: IUI | boolean): boolean { return checkPointerState('isFocus', leaf, button) }\nState.isHover = function (leaf: IUI, button?: IUI | boolean): boolean { return checkPointerState('isHover', leaf, button) }\nState.isPress = function (leaf: IUI, button?: IUI | boolean): boolean { return checkPointerState('isPress', leaf, button) }\nState.isPlacehold = function (leaf: IUI, _button?: IUI | boolean): boolean { return (leaf as IText).__.__isPlacehold }\n\nState.isDrag = function (leaf: IUI, button?: IUI | boolean): boolean { return checkPointerState('isDrag', leaf, button) }\n\nState.setStyleName = function (leaf: IUI, stateType: IStateStyleType, value: boolean): void { value ? setState(leaf, stateType, leaf[stateType]) : unsetState(leaf, stateType, leaf[stateType]) }\nState.set = function (leaf: IUI, stateName: string): void { const style = leaf.states[stateName]; style ? setState(leaf, stateName, style) : unsetState(leaf, stateName, style) }\n\nState.getStyle = getStyle\nState.updateStyle = updateStyle\nState.updateEventStyle = updateEventStyle\n\n\nconst ui = UI.prototype\n\n// addAttr\nUI.addAttr('selected', false, stateType, 'selectedStyle')\nUI.addAttr('disabled', false, stateType, 'disabledStyle')\n\nUI.addAttr('states', {}, stateStyleType)\nUI.addAttr('state', '', stateType)\n\nUI.addAttr('normalStyle', undefined, dataType)\nUI.addAttr('hoverStyle', undefined, stateStyleType)\nUI.addAttr('pressStyle', undefined, stateStyleType)\nUI.addAttr('focusStyle', undefined, stateStyleType)\nUI.addAttr('selectedStyle', undefined, stateStyleType)\nUI.addAttr('disabledStyle', undefined, stateStyleType)\nUI.addAttr('placeholderStyle', undefined, stateStyleType)\n\nUI.addAttr('button', false, dataType)\n\n// @leafer-in/animate will rewrite\nui.set = function (data: IUIInputData, transition?: ITransition | 'temp'): void {\n    if (data) {\n        if (transition) {\n            if (transition === 'temp') {\n                this.lockNormalStyle = true\n                Object.assign(this, data)\n                this.lockNormalStyle = false\n            } else this.animate(data, transition)\n        } else Object.assign(this, data)\n    }\n}\n\nui.focus = function (value: boolean = true): void {\n    this.waitLeafer(() => {\n        let { focusData } = this.app.interaction\n        if (value) {\n            if (focusData) focusData.focus(false)\n            focusData = this\n        } else focusData = null\n        this.app.interaction.focusData = focusData\n        value ? setPointerState(this, 'focusStyle') : unsetPointerState(this, 'focusStyle')\n    })\n}\n\nui.updateState = function (): void {\n    State.updateStyle(this, undefined, 'in')\n}\n\n\nconst text = Text.prototype, textKey = 'text'\n\ndefineKey(text, textKey, {\n    ...getDescriptor(text, textKey),\n    set(value: string) {\n        const t = this as Text, oldValue = t.text\n        if (t.__setAttr(textKey, value)) {\n            doBoundsType(t)\n            if (t.placeholderStyle && t.placeholder && (oldValue === '' || value === '')) t.__layout.stateStyleChanged = true\n        }\n    }\n})\n","import { IUI } from '@leafer-ui/interface'\nimport { PointerEvent } from '@leafer-ui/core'\n\nimport { setPointerState } from './set'\nimport { unsetPointerState } from './unset'\n\n\nexport function updateEventStyle(leaf: IUI, eventType: string): void {\n    switch (eventType) {\n        case PointerEvent.ENTER:\n            setPointerState(leaf, 'hoverStyle')\n            break\n        case PointerEvent.LEAVE:\n            unsetPointerState(leaf, 'hoverStyle')\n            break\n        case PointerEvent.DOWN:\n            setPointerState(leaf, 'pressStyle')\n            break\n        case PointerEvent.UP:\n            unsetPointerState(leaf, 'pressStyle')\n            break\n    }\n}"],"names":["stateType","defaultValue","styleName","decorateLeafAttr","key","attr","set","value","this","__setAttr","leaferIsReady","State","setStyleName","__layout","stateStyleChanged","stateStyleType","findParentButton","leaf","button","parent","i","setStyle","style","isObject","undefined","updateStyle","unsetStyle","normalStyle","emprtyStyle","type","scale","MathHelper","assignScale","canAnimate","transition","data","name","isNull","getTransition","fromStyle","filterAnimateStyle","animate","getFromStyle","getStyle","killAnimate","statesStyle","animation","Object","assign","endingStyle","kill","filterStyle","toStyle","exist","state","stateStyle","states","isState","selectedStyle","isSelected","placeholderStyle","isPlacehold","isDisabled","disabledStyle","focusStyle","isFocus","hoverStyle","isHover","pressStyle","isPress","addStyle","useAnimateExcludes","to","forStyle","animateExcludes","setPointerState","stateName","setChildrenState","children","setState","update","len","length","isUndefined","isBranch","unsetPointerState","unsetChildrenState","unsetState","checkPointerState","fnName","find","interaction","leafer","parentButton","checkFixedState","attrName","Plugin","add","animationOut","transitionOut","placeholder","checkState","_button","__","__isPlacehold","isDrag","updateEventStyle","eventType","PointerEvent","ENTER","LEAVE","DOWN","UP","ui","UI","prototype","addAttr","dataType","lockNormalStyle","focus","waitLeafer","focusData","app","updateState","text","Text","textKey","defineKey","getDescriptor","t","oldValue","doBoundsType"],"mappings":"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"}