{"version":3,"file":"Focus.mjs","sourceRoot":"","sources":["../../../src/mixins/Focus.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAY5D,mBAAmB,gBAA0B,EAAE,WAAqB;IACnE,MAAM,MAAM,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;IAC5C,MAAM,CAAC;QACN,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,WAAW;KAClB,CAAC;AACH,CAAC;AAED,MAAM,qBAAyE,IAAO;IACrF,WAAqB,SAAQ,IAAI;QAAjC;;YAGS,kBAAa,GAAG,CAAC,CAAC;YAElB,mBAAc,GAAG,CAAC,CAAC;YAOpB,gBAAW,GAAG,GAAG,EAAE;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,cAAc,CAAC;gBAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC;YACf,CAAC,CAAC;QAMH,CAAC;QAdU,iBAAiB;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;QAQM,KAAK;YACX,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;KACD;IAdA;QADC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;;;;kDAGhC;IAaF,MAAM,CAAC,KAAK,CAAC;AACd,CAAC;AAED,eAAe,UAAU,CAAC","sourcesContent":["import { Constructor } from './../interfaces';\nimport { WidgetBase } from './../WidgetBase';\nimport { diffProperty } from './../decorators/diffProperty';\n\nexport interface FocusProperties {\n\tfocus?: (() => boolean);\n}\n\nexport interface FocusMixin {\n\tfocus: () => void;\n\tshouldFocus: () => boolean;\n\tproperties: FocusProperties;\n}\n\nfunction diffFocus(previousProperty: Function, newProperty: Function) {\n\tconst result = newProperty && newProperty();\n\treturn {\n\t\tchanged: result,\n\t\tvalue: newProperty\n\t};\n}\n\nexport function FocusMixin<T extends Constructor<WidgetBase<FocusProperties>>>(Base: T): T & Constructor<FocusMixin> {\n\tabstract class Focus extends Base {\n\t\tpublic abstract properties: FocusProperties;\n\n\t\tprivate _currentToken = 0;\n\n\t\tprivate _previousToken = 0;\n\n\t\t@diffProperty('focus', diffFocus)\n\t\tprotected isFocusedReaction() {\n\t\t\tthis._currentToken++;\n\t\t}\n\n\t\tpublic shouldFocus = () => {\n\t\t\tconst result = this._currentToken !== this._previousToken;\n\t\t\tthis._previousToken = this._currentToken;\n\t\t\treturn result;\n\t\t};\n\n\t\tpublic focus() {\n\t\t\tthis._currentToken++;\n\t\t\tthis.invalidate();\n\t\t}\n\t}\n\treturn Focus;\n}\n\nexport default FocusMixin;\n"]}