{"version":3,"file":"Button.mjs","sources":["../src/Button.ts"],"sourcesContent":["import { Container, FederatedPointerEvent } from 'pixi.js';\nimport { Signal } from 'typed-signals';\nimport { ButtonEvents } from './ButtonEvents';\n\n/**\n * Adds button events to a given container-based view\n *\n * so you can subscribe to them and use your container-based instance as a button.\n * @example\n * const container = new Container();\n * const button = new Button(\n *      new Graphics()\n *          .rect(0, 0, 100, 50, 15)\n *          .fill(0xFFFFFF)\n * );\n *\n * button.onPress.connect(() => console.log('onPress'));\n *\n * container.addChild(button.view);\n */\nexport class Button extends ButtonEvents\n{\n    /** Container, given as a constructor parameter that is a button view. */\n    protected _view: Container | undefined;\n\n    /**\n     * Turns a given container-based view into a button by adding all button events.\n     * @param {Container} view - instance of container, to be turned into button.\n     */\n    constructor(view?: Container)\n    {\n        super();\n\n        if (view)\n        {\n            this.view = view;\n            this.enabled = true;\n        }\n    }\n\n    /** Set button view, that all the interaction events are applied to. */\n    set view(view: Container)\n    {\n        const wasItInitiated = !!this._view;\n\n        if (wasItInitiated && this._view) this.disconnectEvents(this._view);\n\n        this._view = view;\n        this.connectEvents(this._view);\n    }\n\n    /** Get button view, that all the interaction events are applied to. */\n    get view(): Container | undefined\n    {\n        return this._view;\n    }\n\n    /**\n     * Switcher, which prevents all button events from firing if off.\n     * @param {boolean} enabled\n     */\n    set enabled(enabled: boolean)\n    {\n        if (!this.view)\n        {\n            console.error('Button view is not set. Please set it before enabling the button.');\n\n            return;\n        }\n\n        this.view.eventMode = enabled ? 'static' : 'auto';\n        this.view.cursor = enabled ? 'pointer' : 'default';\n\n        if (!enabled && this.isDown)\n        {\n            this.processUp();\n        }\n    }\n\n    /** Getter that returns button state. */\n    get enabled(): boolean\n    {\n        return this.view?.eventMode === 'static';\n    }\n}\n\n/**\n * Button based on container. You can use it same {@link Button}\n * but without need to pre create a container and interact with it through `.view` accessor.\n * @example\n * const button = new ButtonContainer(\n *      new Graphics()\n *          .fill(0xFFFFFF)\n *          .roundRect(0, 0, 100, 50, 15)\n * );\n *\n * button.onPress.connect(() => console.log('onPress'));\n *\n * container.addChild(button);\n */\nexport class ButtonContainer extends Container\n{\n    button: Button;\n\n    onDown: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n    onUp: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n    onUpOut: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n    onOut: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n    onPress: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n    onHover: Signal<(btn?: Button, e?: FederatedPointerEvent) => void>;\n\n    constructor(view?: Container)\n    {\n        super();\n\n        this.button = new Button(this);\n\n        this.button.enabled = true;\n\n        if (view)\n        {\n            this.addChild(view);\n        }\n\n        this.onPress = this.button.onPress;\n        this.onDown = this.button.onDown;\n        this.onUp = this.button.onUp;\n        this.onHover = this.button.onHover;\n        this.onOut = this.button.onOut;\n        this.onUpOut = this.button.onUpOut;\n    }\n\n    set enabled(enabled: boolean)\n    {\n        this.button.enabled = enabled;\n    }\n\n    get enabled(): boolean\n    {\n        return this.button.enabled;\n    }\n}\n"],"names":[],"mappings":"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"}