one
Version:
One is a React framework for web, iOS, and Android apps.
253 lines (250 loc) • 8.16 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var animatorStyle_exports = {};
__export(animatorStyle_exports, {
animatedSwiftStyle: () => animatedSwiftStyle,
animatorStyleNative: () => animatorStyleNative,
animatorStyleOf: () => animatorStyleOf
});
module.exports = __toCommonJS(animatorStyle_exports);
var animatorKey = /* @__PURE__ */ Symbol.for("one.native.animator");
function animatedSwiftStyle(animator) {
return {
...animator.samples[0],
[animatorKey]: animator
};
}
function animatorStyleOf(style) {
return style[animatorKey];
}
var colorFields = /* @__PURE__ */ new Set([
"foregroundStyle",
"tint",
"background",
"borderColor",
"glassEffectTint"
]);
function same(a, b) {
return a === b || JSON.stringify(a) === JSON.stringify(b);
}
function sdkPairs(style) {
return style.sdkModifiers ? JSON.parse(style.sdkModifiers) : [];
}
function withPayload(base, payload) {
return {
...base,
sdkModifiers: JSON.stringify([...sdkPairs(base), ["oneNativeAnimator", JSON.stringify(payload)]])
};
}
function phaseNative(animator, natives) {
var keys = [...new Set(natives.flatMap(function(native) {
return Object.keys(native);
}))];
var varying = keys.filter(function(key) {
return natives.some(function(native) {
return !same(native[key], natives[0][key]);
});
});
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
var _loop = function() {
var key = _step.value;
if (colorFields.has(key) && natives.some(function(native) {
return native[key] !== void 0 && typeof native[key] !== "number";
})) throw new Error(`${animator.owner} content can vary ${key} by phase only with plain colors, not platform colors`);
};
for (var _iterator = varying[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var phases = natives.map(function(native) {
return Object.fromEntries(varying.filter(function(key) {
return native[key] !== void 0;
}).map(function(key) {
return [key, native[key]];
}));
});
return withPayload(natives[0], {
id: animator.id,
kind: "phase",
varying,
phases
});
}
var numericText = /^-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i;
function leavesOf(value) {
var leaves = [];
var texts = [];
var leaf = function leaf2(number, text, quoted) {
leaves.push(number);
texts.push(text);
return quoted ? `__oneKS${leaves.length - 1}__` : `__oneKN${leaves.length - 1}__`;
};
if (numericText.test(value)) return {
shape: leaf(Number(value), value, true),
leaves,
texts
};
var parsed;
try {
parsed = /^[[{]/.test(value) ? JSON.parse(value) : void 0;
} catch (unused) {
parsed = void 0;
}
if (parsed === void 0) return {
shape: value,
leaves,
texts
};
var walk = function walk1(item) {
if (typeof item === "number") return leaf(item, JSON.stringify(item), false);
if (typeof item === "string" && numericText.test(item)) return leaf(Number(item), item, true);
if (Array.isArray(item)) return item.map(walk);
if (item && typeof item === "object") return Object.fromEntries(Object.entries(item).map(function(param) {
var [key, entry] = param;
return [key, walk(entry)];
}));
return item;
};
return {
shape: JSON.stringify(walk(parsed)),
leaves,
texts
};
}
function keyframeNative(animator, natives) {
var { owner, values } = animator;
var fieldCount = values[0].length;
var tokens = [];
var bind = function bind2(samples, where) {
if (samples.every(function(sample) {
return sample === samples[0];
})) return void 0;
var coefficients = Array.from({ length: fieldCount }, function(_, field2) {
return samples[field2 + 1] - samples[0];
});
var check = values[fieldCount + 1];
var predicted = samples[0];
for (var field = 0; field < fieldCount; field++) predicted += coefficients[field] * (check[field] - values[0][field]);
var actual = samples[fieldCount + 1];
if (!(Math.abs(predicted - actual) <= 1e-6 * Math.max(1, Math.abs(actual)))) throw new Error(`${owner} content must map its value linearly to swiftStyle numbers; ${where} does not`);
var base = samples[0];
for (var field1 = 0; field1 < fieldCount; field1++) base -= coefficients[field1] * values[0][field1];
tokens.push({
base,
coefficients
});
return tokens.length - 1;
};
var keys = [...new Set(natives.flatMap(function(native) {
return Object.keys(native);
}))].filter(function(key) {
return key !== "sdkModifiers";
});
var fields = {};
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
var _loop = function() {
var key = _step.value;
var samples = natives.map(function(native) {
return native[key];
});
if (samples.every(function(sample) {
return same(sample, samples[0]);
})) return "continue";
if (colorFields.has(key) || !samples.every(function(sample) {
return typeof sample === "number";
})) throw new Error(`${owner} content can follow its value only through swiftStyle numbers; ${key} changed`);
var token = bind(samples, key);
if (token !== void 0) fields[key] = token;
};
for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var pairs = natives.map(sdkPairs);
var names = pairs[0].map(function(param) {
var [name] = param;
return name;
});
if (pairs.some(function(list) {
return !same(list.map(function(param) {
var [name] = param;
return name;
}), names);
})) throw new Error(`${owner} content must apply the same swiftStyle modifiers at every value`);
var template = names.map(function(name, index) {
var parts = pairs.map(function(list) {
return leavesOf(list[index][1]);
});
if (parts.some(function(part) {
return part.shape !== parts[0].shape;
})) throw new Error(`${owner} content can follow its value only through swiftStyle numbers; ${name} changed`);
var value = parts[0].shape;
parts[0].leaves.forEach(function(_, leaf) {
var token = bind(parts.map(function(part) {
return part.leaves[leaf];
}), name);
var text = token === void 0 ? parts[0].texts[leaf] : `@@${token}@@`;
value = value.replace(`"__oneKN${leaf}__"`, text).replace(`__oneKS${leaf}__`, text);
});
return [name, value];
});
return withPayload(natives[0], {
id: animator.id,
kind: "keyframe",
fields,
sdkModifiers: template.length ? JSON.stringify(template) : void 0,
tokens
});
}
function animatorStyleNative(animator, convert) {
var natives = animator.samples.map(function(sample) {
var _convert;
return (_convert = convert(sample)) !== null && _convert !== void 0 ? _convert : {};
});
var native = animator.kind === "phase" ? phaseNative(animator, natives) : keyframeNative(animator, natives);
return native;
}
//# sourceMappingURL=animatorStyle.native.js.map