nativescript-ng-shadow
Version:
Angular directive to apply shadows to native elements according to the elevation level guidelines of material design specification
101 lines • 18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var color_1 = require("tns-core-modules/color");
var shape_enum_1 = require("./shape.enum");
var Shadow = /** @class */ (function () {
function Shadow() {
}
Shadow.apply = function (tnsView, data) {
if (tnsView.android &&
android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.LOLLIPOP) {
Shadow.applyOnAndroid(tnsView, Shadow.getDefaults(data));
}
else if (tnsView.ios) {
Shadow.applyOnIOS(tnsView, Shadow.getDefaults(data));
}
};
Shadow.getDefaults = function (data) {
return Object.assign({}, data, {
shape: data.shape || Shadow.DEFAULT_SHAPE,
bgcolor: data.bgcolor || Shadow.DEFAULT_BGCOLOR,
shadowColor: data.shadowColor ||
Shadow.DEFAULT_SHADOW_COLOR,
});
};
Shadow.applyOnAndroid = function (tnsView, data) {
var nativeView = tnsView.android;
var shape = new android.graphics.drawable.GradientDrawable();
shape.setShape(android.graphics.drawable.GradientDrawable[data.shape]);
shape.setColor(android.graphics.Color.parseColor(data.bgcolor));
shape.setCornerRadius(Shadow.androidDipToPx(nativeView, data.cornerRadius));
nativeView.setBackgroundDrawable(shape);
nativeView.setElevation(Shadow.androidDipToPx(nativeView, data.elevation));
nativeView.setTranslationZ(Shadow.androidDipToPx(nativeView, data.translationZ));
if (nativeView.getStateListAnimator()) {
this.overrideDefaultAnimator(nativeView, data);
}
};
Shadow.overrideDefaultAnimator = function (nativeView, data) {
var sla = new android.animation.StateListAnimator();
var ObjectAnimator = android.animation.ObjectAnimator;
var AnimatorSet = android.animation.AnimatorSet;
var shortAnimTime = android.R.integer.config_shortAnimTime;
var buttonDuration = nativeView.getContext().getResources().getInteger(shortAnimTime) / 2;
var pressedElevation = this.androidDipToPx(nativeView, 2);
var pressedZ = this.androidDipToPx(nativeView, 4);
var elevation = this.androidDipToPx(nativeView, data.elevation);
var z = this.androidDipToPx(nativeView, data.translationZ || 0);
var pressedSet = new AnimatorSet();
var notPressedSet = new AnimatorSet();
var defaultSet = new AnimatorSet();
pressedSet.playTogether(java.util.Arrays.asList([
ObjectAnimator.ofFloat(nativeView, "translationZ", [pressedZ])
.setDuration(buttonDuration),
ObjectAnimator.ofFloat(nativeView, "elevation", [pressedElevation])
.setDuration(0),
]));
notPressedSet.playTogether(java.util.Arrays.asList([
ObjectAnimator.ofFloat(nativeView, "translationZ", [z])
.setDuration(buttonDuration),
ObjectAnimator.ofFloat(nativeView, "elevation", [elevation])
.setDuration(0),
]));
defaultSet.playTogether(java.util.Arrays.asList([
ObjectAnimator.ofFloat(nativeView, "translationZ", [0]).setDuration(0),
ObjectAnimator.ofFloat(nativeView, "elevation", [0]).setDuration(0),
]));
sla.addState([android.R.attr.state_pressed, android.R.attr.state_enabled], pressedSet);
sla.addState([android.R.attr.state_enabled], notPressedSet);
sla.addState([], defaultSet);
nativeView.setStateListAnimator(sla);
};
Shadow.applyOnIOS = function (tnsView, data) {
var nativeView = tnsView.ios;
var elevation = parseFloat((data.elevation - 0).toFixed(2));
nativeView.layer.maskToBounds = false;
nativeView.layer.shadowColor = new color_1.Color(data.shadowColor).ios.CGColor;
nativeView.layer.shadowOffset =
data.shadowOffset ?
CGSizeMake(0, parseFloat(String(data.shadowOffset))) :
CGSizeMake(0, 0.54 * elevation - 0.14);
nativeView.layer.shadowOpacity =
data.shadowOpacity ?
parseFloat(String(data.shadowOpacity)) :
0.006 * elevation + 0.25;
nativeView.layer.shadowRadius =
data.shadowRadius ?
parseFloat(String(data.shadowRadius)) :
0.66 * elevation - 0.5;
};
Shadow.androidDipToPx = function (nativeView, dip) {
var metrics = nativeView.getContext().getResources().getDisplayMetrics();
return android.util.TypedValue.applyDimension(android.util.TypedValue.COMPLEX_UNIT_DIP, dip, metrics);
};
Shadow.DEFAULT_SHAPE = shape_enum_1.ShapeEnum.RECTANGLE;
Shadow.DEFAULT_BGCOLOR = '#FFFFFF';
Shadow.DEFAULT_SHADOW_COLOR = '#000000';
return Shadow;
}());
exports.Shadow = Shadow;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2hhZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQStDO0FBSS9DLDJDQUF5QztBQU96QztJQUFBO0lBMkhBLENBQUM7SUF0SFEsWUFBSyxHQUFaLFVBQWEsT0FBWSxFQUFFLElBQTJCO1FBQ3BELEVBQUUsQ0FBQyxDQUNELE9BQU8sQ0FBQyxPQUFPO1lBQ2YsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87Z0JBQzlCLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVjLGtCQUFXLEdBQTFCLFVBQTJCLElBQTJCO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNsQixFQUFFLEVBQ0YsSUFBSSxFQUNKO1lBQ0UsS0FBSyxFQUFHLElBQW9CLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxhQUFhO1lBQzFELE9BQU8sRUFBRyxJQUFvQixDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsZUFBZTtZQUNoRSxXQUFXLEVBQUcsSUFBZ0IsQ0FBQyxXQUFXO2dCQUN4QyxNQUFNLENBQUMsb0JBQW9CO1NBQzlCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFYyxxQkFBYyxHQUE3QixVQUE4QixPQUFZLEVBQUUsSUFBaUI7UUFDM0QsSUFBTSxV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QUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUN4QyxHQUFHLEVBQ0gsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBekhNLG9CQUFhLEdBQUcsc0JBQVMsQ0FBQyxTQUFTLENBQUM7SUFDcEMsc0JBQWUsR0FBRyxTQUFTLENBQUM7SUFDNUIsMkJBQW9CLEdBQUcsU0FBUyxDQUFDO0lBd0gxQyxhQUFDO0NBQUEsQUEzSEQsSUEySEM7QUEzSFksd0JBQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ3Rucy1jb3JlLW1vZHVsZXMvY29sb3InO1xuXG5pbXBvcnQgeyBBbmRyb2lkRGF0YSB9IGZyb20gXCIuL2FuZHJvaWQtZGF0YS5tb2RlbFwiO1xuaW1wb3J0IHsgSU9TRGF0YSB9IGZyb20gXCIuL2lvcy1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBTaGFwZUVudW0gfSBmcm9tICcuL3NoYXBlLmVudW0nO1xuXG5kZWNsYXJlIGNvbnN0IGFuZHJvaWQ6IGFueTtcbmRlY2xhcmUgY29uc3QgamF2YTogYW55O1xuZGVjbGFyZSBjb25zdCBDR1NpemVNYWtlOiBhbnk7XG5kZWNsYXJlIGNvbnN0IFVJU2NyZWVuOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBTaGFkb3cge1xuICBzdGF0aWMgREVGQVVMVF9TSEFQRSA9IFNoYXBlRW51bS5SRUNUQU5HTEU7XG4gIHN0YXRpYyBERUZBVUxUX0JHQ09MT1IgPSAnI0ZGRkZGRic7XG4gIHN0YXRpYyBERUZBVUxUX1NIQURPV19DT0xPUiA9ICcjMDAwMDAwJztcblxuICBzdGF0aWMgYXBwbHkodG5zVmlldzogYW55LCBkYXRhOiBJT1NEYXRhIHwgQW5kcm9pZERhdGEpIHtcbiAgICBpZiAoXG4gICAgICB0bnNWaWV3LmFuZHJvaWQgJiZcbiAgICAgIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTi5TREtfSU5UID49XG4gICAgICAgIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUFxuICAgICkge1xuICAgICAgU2hhZG93LmFwcGx5T25BbmRyb2lkKHRuc1ZpZXcsIFNoYWRvdy5nZXREZWZhdWx0cyhkYXRhKSk7XG4gICAgfSBlbHNlIGlmICh0bnNWaWV3Lmlvcykge1xuICAgICAgU2hhZG93LmFwcGx5T25JT1ModG5zVmlldywgU2hhZG93LmdldERlZmF1bHRzKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREZWZhdWx0cyhkYXRhOiBJT1NEYXRhIHwgQW5kcm9pZERhdGEpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHtcbiAgICAgICAgc2hhcGU6IChkYXRhIGFzIEFuZHJvaWREYXRhKS5zaGFwZSB8fCBTaGFkb3cuREVGQVVMVF9TSEFQRSxcbiAgICAgICAgYmdjb2xvcjogKGRhdGEgYXMgQW5kcm9pZERhdGEpLmJnY29sb3IgfHwgU2hhZG93LkRFRkFVTFRfQkdDT0xPUixcbiAgICAgICAgc2hhZG93Q29sb3I6IChkYXRhIGFzIElPU0RhdGEpLnNoYWRvd0NvbG9yIHx8XG4gICAgICAgICAgU2hhZG93LkRFRkFVTFRfU0hBRE9XX0NPTE9SLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlPbkFuZHJvaWQodG5zVmlldzogYW55LCBkYXRhOiBBbmRyb2lkRGF0YSkge1xuICAgIGNvbnN0IG5hdGl2ZVZpZXcgPSB0bnNWaWV3LmFuZHJvaWQ7XG4gICAgY29uc3Qgc2hhcGUgPSBuZXcgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlKCk7XG4gICAgc2hhcGUuc2V0U2hhcGUoXG4gICAgICBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkdyYWRpZW50RHJhd2FibGVbZGF0YS5zaGFwZV0sXG4gICAgKTtcbiAgICBzaGFwZS5zZXRDb2xvcihhbmRyb2lkLmdyYXBoaWNzLkNvbG9yLnBhcnNlQ29sb3IoZGF0YS5iZ2NvbG9yKSk7XG4gICAgc2hhcGUuc2V0Q29ybmVyUmFkaXVzKFxuICAgICAgU2hhZG93LmFuZHJvaWREaXBUb1B4KG5hdGl2ZVZpZXcsIGRhdGEuY29ybmVyUmFkaXVzIGFzIG51bWJlciksXG4gICAgKTtcbiAgICBuYXRpdmVWaWV3LnNldEJhY2tncm91bmREcmF3YWJsZShzaGFwZSk7XG4gICAgbmF0aXZlVmlldy5zZXRFbGV2YXRpb24oXG4gICAgICBTaGFkb3cuYW5kcm9pZERpcFRvUHgobmF0aXZlVmlldywgZGF0YS5lbGV2YXRpb24gYXMgbnVtYmVyKSxcbiAgICApO1xuICAgIG5hdGl2ZVZpZXcuc2V0VHJhbnNsYXRpb25aKFxuICAgICAgU2hhZG93LmFuZHJvaWREaXBUb1B4KG5hdGl2ZVZpZXcsIGRhdGEudHJhbnNsYXRpb25aIGFzIG51bWJlciksXG4gICAgKTtcbiAgICBpZiAobmF0aXZlVmlldy5nZXRTdGF0ZUxpc3RBbmltYXRvcigpKSB7XG4gICAgICB0aGlzLm92ZXJyaWRlRGVmYXVsdEFuaW1hdG9yKG5hdGl2ZVZpZXcsIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJyaWRlRGVmYXVsdEFuaW1hdG9yKG5hdGl2ZVZpZXc6IGFueSwgZGF0YTogQW5kcm9pZERhdGEpIHtcbiAgICBjb25zdCBzbGEgPSBuZXcgYW5kcm9pZC5hbmltYXRpb24uU3RhdGVMaXN0QW5pbWF0b3IoKTtcblxuICAgIGNvbnN0IE9iamVjdEFuaW1hdG9yID0gYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7XG4gICAgY29uc3QgQW5pbWF0b3JTZXQgICAgPSBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvclNldDtcbiAgICBjb25zdCBzaG9ydEFuaW1UaW1lICA9IGFuZHJvaWQuUi5pbnRlZ2VyLmNvbmZpZ19zaG9ydEFuaW1UaW1lO1xuXG4gICAgY29uc3QgYnV0dG9uRHVyYXRpb24gPVxuICAgICAgbmF0aXZlVmlldy5nZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcihzaG9ydEFuaW1UaW1lKSAvIDI7XG4gICAgY29uc3QgcHJlc3NlZEVsZXZhdGlvbiA9IHRoaXMuYW5kcm9pZERpcFRvUHgobmF0aXZlVmlldywgMik7XG4gICAgY29uc3QgcHJlc3NlZFogPSB0aGlzLmFuZHJvaWREaXBUb1B4KG5hdGl2ZVZpZXcsIDQpO1xuICAgIGNvbnN0IGVsZXZhdGlvbiA9IHRoaXMuYW5kcm9pZERpcFRvUHgobmF0aXZlVmlldywgZGF0YS5lbGV2YXRpb24pO1xuICAgIGNvbnN0IHogPSB0aGlzLmFuZHJvaWREaXBUb1B4KG5hdGl2ZVZpZXcsIGRhdGEudHJhbnNsYXRpb25aIHx8IDApO1xuXG4gICAgY29uc3QgcHJlc3NlZFNldCA9IG5ldyBBbmltYXRvclNldCgpO1xuICAgIGNvbnN0IG5vdFByZXNzZWRTZXQgPSBuZXcgQW5pbWF0b3JTZXQoKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0ID0gbmV3IEFuaW1hdG9yU2V0KCk7XG5cbiAgICBwcmVzc2VkU2V0LnBsYXlUb2dldGhlcihqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdChbXG4gICAgICBPYmplY3RBbmltYXRvci5vZkZsb2F0KG5hdGl2ZVZpZXcsIFwidHJhbnNsYXRpb25aXCIsIFtwcmVzc2VkWl0pXG4gICAgICAgIC5zZXREdXJhdGlvbihidXR0b25EdXJhdGlvbiksXG4gICAgICBPYmplY3RBbmltYXRvci5vZkZsb2F0KG5hdGl2ZVZpZXcsIFwiZWxldmF0aW9uXCIsIFtwcmVzc2VkRWxldmF0aW9uXSlcbiAgICAgICAgLnNldER1cmF0aW9uKDApLFxuICAgIF0pKTtcbiAgICBub3RQcmVzc2VkU2V0LnBsYXlUb2dldGhlcihqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdChbXG4gICAgICBPYmplY3RBbmltYXRvci5vZkZsb2F0KG5hdGl2ZVZpZXcsIFwidHJhbnNsYXRpb25aXCIsIFt6XSlcbiAgICAgICAgLnNldER1cmF0aW9uKGJ1dHRvbkR1cmF0aW9uKSxcbiAgICAgIE9iamVjdEFuaW1hdG9yLm9mRmxvYXQobmF0aXZlVmlldywgXCJlbGV2YXRpb25cIiwgW2VsZXZhdGlvbl0pXG4gICAgICAgIC5zZXREdXJhdGlvbigwKSxcbiAgICBdKSk7XG4gICAgZGVmYXVsdFNldC5wbGF5VG9nZXRoZXIoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoW1xuICAgICAgT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdChuYXRpdmVWaWV3LCBcInRyYW5zbGF0aW9uWlwiLCBbMF0pLnNldER1cmF0aW9uKDApLFxuICAgICAgT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdChuYXRpdmVWaWV3LCBcImVsZXZhdGlvblwiLCBbMF0pLnNldER1cmF0aW9uKDApLFxuICAgIF0pKTtcblxuICAgIHNsYS5hZGRTdGF0ZShcbiAgICAgIFthbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkLCBhbmRyb2lkLlIuYXR0ci5zdGF0ZV9lbmFibGVkXSxcbiAgICAgIHByZXNzZWRTZXQsXG4gICAgKTtcbiAgICBzbGEuYWRkU3RhdGUoW2FuZHJvaWQuUi5hdHRyLnN0YXRlX2VuYWJsZWRdLCBub3RQcmVzc2VkU2V0KTtcbiAgICBzbGEuYWRkU3RhdGUoW10sIGRlZmF1bHRTZXQpO1xuICAgIG5hdGl2ZVZpZXcuc2V0U3RhdGVMaXN0QW5pbWF0b3Ioc2xhKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5T25JT1ModG5zVmlldzogYW55LCBkYXRhOiBJT1NEYXRhKSB7XG4gICAgY29uc3QgbmF0aXZlVmlldyA9IHRuc1ZpZXcuaW9zO1xuICAgIGNvbnN0IGVsZXZhdGlvbiA9IHBhcnNlRmxvYXQoKChkYXRhLmVsZXZhdGlvbiBhcyBudW1iZXIpIC0gMCkudG9GaXhlZCgyKSk7XG4gICAgbmF0aXZlVmlldy5sYXllci5tYXNrVG9Cb3VuZHMgPSBmYWxzZTtcbiAgICBuYXRpdmVWaWV3LmxheWVyLnNoYWRvd0NvbG9yID0gbmV3IENvbG9yKGRhdGEuc2hhZG93Q29sb3IpLmlvcy5DR0NvbG9yO1xuICAgIG5hdGl2ZVZpZXcubGF5ZXIuc2hhZG93T2Zmc2V0ID1cbiAgICAgIGRhdGEuc2hhZG93T2Zmc2V0ID9cbiAgICAgIENHU2l6ZU1ha2UoMCwgcGFyc2VGbG9hdChTdHJpbmcoZGF0YS5zaGFkb3dPZmZzZXQpKSkgOlxuICAgICAgQ0dTaXplTWFrZSgwLCAwLjU0ICogZWxldmF0aW9uIC0gMC4xNCk7XG4gICAgbmF0aXZlVmlldy5sYXllci5zaGFkb3dPcGFjaXR5ID1cbiAgICAgIGRhdGEuc2hhZG93T3BhY2l0eSA/XG4gICAgICBwYXJzZUZsb2F0KFN0cmluZyhkYXRhLnNoYWRvd09wYWNpdHkpKSA6XG4gICAgICAwLjAwNiAqIGVsZXZhdGlvbiArIDAuMjU7XG4gICAgbmF0aXZlVmlldy5sYXllci5zaGFkb3dSYWRpdXMgPVxuICAgICAgZGF0YS5zaGFkb3dSYWRpdXMgP1xuICAgICAgcGFyc2VGbG9hdChTdHJpbmcoZGF0YS5zaGFkb3dSYWRpdXMpKSA6XG4gICAgICAwLjY2ICogZWxldmF0aW9uIC0gMC41O1xuICB9XG5cbiAgc3RhdGljIGFuZHJvaWREaXBUb1B4KG5hdGl2ZVZpZXc6IGFueSwgZGlwOiBudW1iZXIpIHtcbiAgICBjb25zdCBtZXRyaWNzID0gbmF0aXZlVmlldy5nZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKTtcbiAgICByZXR1cm4gYW5kcm9pZC51dGlsLlR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oXG4gICAgICBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLFxuICAgICAgZGlwLFxuICAgICAgbWV0cmljcyxcbiAgICApO1xuICB9XG59XG4iXX0=