material-motion
Version:
Makes it easy to add rich, interactive motion to your application.
51 lines • 2.45 kB
JavaScript
/** @license
* Copyright 2016 - present The Material Motion Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
import * as tslib_1 from "tslib";
import { isDefined, isDimensions, isPoint2D, } from '../../typeGuards';
export function withMathOperator(superclass) {
return class extends superclass {
/**
* Applies the operation to each dimension and emits the result.
*/
_mathOperator(_a) {
var { operation, value$ } = _a, reactiveMapOptions = tslib_1.__rest(_a, ["operation", "value$"]);
return this._reactiveMap(Object.assign({ transform: ({ upstream, value }) => {
if (isPoint2D(upstream)) {
return {
x: operation(upstream.x, isDefined(value) ? value.x : undefined),
y: operation(upstream.y, isDefined(value) ? value.y : undefined),
};
// This block is just copy/pasted from the isPoint2D block. It may
// eventually be worth making this smart enough to handle arbitrarily-
// shaped objects, but for now, we can cover most cases with just
// these two shapes.
}
else if (isDimensions(upstream)) {
return {
width: operation(upstream.width, isDefined(value) ? value.width : undefined),
height: operation(upstream.height, isDefined(value) ? value.height : undefined),
};
}
else {
return operation(upstream, value);
}
}, inputs: {
value: value$,
} }, reactiveMapOptions));
}
};
}
//# sourceMappingURL=_mathOperator.js.map