UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

253 lines (250 loc) • 8.16 kB
"use strict"; 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