From bebaebc8728ee5893f80d61032719e24140e0acd Mon Sep 17 00:00:00 2001 From: Kartik Mehta <77505989+kartikmehta8@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:37:24 +0530 Subject: [PATCH] QR code SDK Redesign (#1536) * Refactor NFC scanner tests to use a global variable for platform OS, allowing dynamic switching between iOS and Android during tests. This change improves test isolation and avoids hoisting issues with jest.mock. * Triggering GitHub workflows * Add status animations and self logos * Update utilities and styles for statuses * Remove old LED implementation and occurences * Update Self QR Code with new design * Add status banner * Remove console and use QRcodeSteps in styles * Add ARIA and use Memo to prevent re-renders * Add refs for success and error callbacks * Use ref for self app in qrcode * Use selfapp ref consistently * Update connected state animtion * Skip 'parses Android response' test in nfcScanner --------- Co-authored-by: Justin Hernandez Co-authored-by: Javier Cortejoso --- README.md | 1 + sdk/qrcode/animations/check_animation.json | 506 ------- sdk/qrcode/animations/index.ts | 6 + sdk/qrcode/animations/status-connecting.json | 386 ++++++ sdk/qrcode/animations/status-error.json | 712 ++++++++++ sdk/qrcode/animations/status-failed.json | 704 ++++++++++ sdk/qrcode/animations/status-success.json | 704 ++++++++++ sdk/qrcode/animations/x_animation.json | 1285 ------------------ sdk/qrcode/assets/self-logo-qr.svg | 6 + sdk/qrcode/assets/self-logo.svg | 5 + sdk/qrcode/components/LED.tsx | 40 - sdk/qrcode/components/QRCode.tsx | 67 + sdk/qrcode/components/SelfQRcode.tsx | 108 +- sdk/qrcode/components/StatusBanner.tsx | 24 + sdk/qrcode/package.json | 5 - sdk/qrcode/tsconfig.json | 2 + sdk/qrcode/tsup.config.ts | 9 +- sdk/qrcode/types/svg.d.ts | 4 + sdk/qrcode/utils/styles.ts | 74 +- sdk/qrcode/utils/utils.ts | 47 + 20 files changed, 2774 insertions(+), 1921 deletions(-) delete mode 100644 sdk/qrcode/animations/check_animation.json create mode 100644 sdk/qrcode/animations/index.ts create mode 100644 sdk/qrcode/animations/status-connecting.json create mode 100644 sdk/qrcode/animations/status-error.json create mode 100644 sdk/qrcode/animations/status-failed.json create mode 100644 sdk/qrcode/animations/status-success.json delete mode 100644 sdk/qrcode/animations/x_animation.json create mode 100644 sdk/qrcode/assets/self-logo-qr.svg create mode 100644 sdk/qrcode/assets/self-logo.svg delete mode 100644 sdk/qrcode/components/LED.tsx create mode 100644 sdk/qrcode/components/QRCode.tsx create mode 100644 sdk/qrcode/components/StatusBanner.tsx create mode 100644 sdk/qrcode/types/svg.d.ts diff --git a/README.md b/README.md index 086f12569..fe03629dd 100644 --- a/README.md +++ b/README.md @@ -101,3 +101,4 @@ We are actively looking for contributors. Please check the [open issues](https:/ Thanks [Rémi](https://github.com/remicolin), [Florent](https://github.com/0xturboblitz), [Ayman](https://github.com/Nesopie), [Justin](https://github.com/transphorm), [Seshanth](https://github.com/seshanthS), [Nico](https://github.com/motemotech) and all other contributors for building Self. Thanks [Aayush](https://twitter.com/yush_g), [Vivek](https://twitter.com/viv_boop), [Andy](https://twitter.com/AndyGuzmanEth) and [Vitalik](https://github.com/vbuterin) for contributing ideas and inspiring us to build this technology, and [PSE](https://pse.dev/) for supporting the initial work through grants! + diff --git a/sdk/qrcode/animations/check_animation.json b/sdk/qrcode/animations/check_animation.json deleted file mode 100644 index 607081eed..000000000 --- a/sdk/qrcode/animations/check_animation.json +++ /dev/null @@ -1,506 +0,0 @@ -{ - "v": "5.7.12", - "fr": 24, - "ip": 0, - "op": 63, - "w": 520, - "h": 520, - "nm": "Checklist 2", - "ddd": 0, - "assets": [], - "layers": [ - { - "ddd": 0, - "ind": 1, - "ty": 4, - "nm": "Checklist", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 50, - "s": [100] - }, - { "t": 62, "s": [0] } - ], - "ix": 11 - }, - "r": { "a": 0, "k": 0, "ix": 10 }, - "p": { "a": 0, "k": [259.587, 260.119, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [297.587, 298.119, 0], "ix": 1, "l": 2 }, - "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [0, 0] - ], - "v": [ - [54.754, -36.121], - [-17.487, 36.12], - [-54.754, -1.147] - ], - "c": false - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "st", - "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, - "o": { "a": 0, "k": 100, "ix": 4 }, - "w": { "a": 0, "k": 23, "ix": 5 }, - "lc": 2, - "lj": 2, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false - }, - { - "ty": "tr", - "p": { "a": 0, "k": [294.971, 298.679], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "tm", - "s": { - "a": 1, - "k": [ - { "i": { "x": [0], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 24, "s": [100] }, - { "t": 36, "s": [0] } - ], - "ix": 1 - }, - "e": { "a": 0, "k": 100, "ix": 2 }, - "o": { "a": 0, "k": 0, "ix": 3 }, - "m": 1, - "ix": 2, - "nm": "Trim Paths 1", - "mn": "ADBE Vector Filter - Trim", - "hd": false - } - ], - "ip": 0, - "op": 720, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 2, - "ty": 4, - "nm": "Cricle", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 50, - "s": [100] - }, - { "t": 62, "s": [0] } - ], - "ix": 11 - }, - "r": { "a": 0, "k": 0, "ix": 10 }, - "p": { "a": 0, "k": [260, 260, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [-7.627, -7.691, 0], "ix": 1, "l": 2 }, - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0, 0] }, - "t": 18, - "s": [124.222, 124.222, 100] - }, - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, - "t": 20, - "s": [134.222, 134.222, 100] - }, - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, - "t": 22, - "s": [114.222, 114.222, 100] - }, - { "t": 24, "s": [124.222, 124.222, 100] } - ], - "ix": 6, - "l": 2 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { "a": 0, "k": [178.46, 178.46], "ix": 2 }, - "p": { "a": 0, "k": [0, 0], "ix": 3 }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "tm", - "s": { "a": 0, "k": 0, "ix": 1 }, - "e": { - "a": 1, - "k": [ - { - "i": { "x": [0.239], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 0, - "s": [0] - }, - { "t": 24, "s": [100] } - ], - "ix": 2 - }, - "o": { "a": 0, "k": 0, "ix": 3 }, - "m": 1, - "ix": 2, - "nm": "Trim Paths 1", - "mn": "ADBE Vector Filter - Trim", - "hd": false - }, - { - "ty": "st", - "c": { "a": 0, "k": [0.3137, 0.7569, 0.3294, 1], "ix": 3 }, - "o": { "a": 0, "k": 100, "ix": 4 }, - "w": { "a": 0, "k": 10, "ix": 5 }, - "lc": 2, - "lj": 2, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false - }, - { - "ty": "fl", - "c": { "a": 0, "k": [0.3137, 0.7569, 0.3294, 1], "ix": 4 }, - "o": { - "a": 1, - "k": [ - { - "i": { "x": [0], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 22, - "s": [0] - }, - { "t": 24, "s": [100] } - ], - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { "a": 0, "k": [-7.627, -7.691], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform" - } - ], - "nm": "Ellipse 1", - "np": 4, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 720, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 3, - "ty": 4, - "nm": "Line", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 28, "s": [0] }, - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 39, - "s": [100] - }, - { "t": 50, "s": [0] } - ], - "ix": 11 - }, - "r": { "a": 0, "k": 0, "ix": 10 }, - "p": { "a": 0, "k": [260, 260, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [298, 298, 0], "ix": 1, "l": 2 }, - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, - "t": 28, - "s": [46, 46, 100] - }, - { "t": 50, "s": [100, 100, 100] } - ], - "ix": 6, - "l": 2 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [-120.208, 0], - [0, -120.208], - [120.207, 0], - [0, 120.208] - ], - "o": [ - [120.207, 0], - [0, 120.208], - [-120.208, 0], - [0, -120.208] - ], - "v": [ - [0, -217.655], - [217.655, 0], - [0, 217.655], - [-217.655, 0] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "st", - "c": { "a": 0, "k": [0.6516, 0.8284, 0.6575, 1], "ix": 3 }, - "o": { "a": 0, "k": 100, "ix": 4 }, - "w": { "a": 0, "k": 2, "ix": 5 }, - "lc": 1, - "lj": 1, - "ml": 10, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false - }, - { - "ty": "tr", - "p": { "a": 0, "k": [297.587, 298.119], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 28, - "op": 720, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 4, - "ty": 4, - "nm": "Shadow", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 22, "s": [0] }, - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 33, - "s": [100] - }, - { "t": 44, "s": [0] } - ], - "ix": 11 - }, - "r": { "a": 0, "k": 0, "ix": 10 }, - "p": { "a": 0, "k": [260, 260, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [298, 298, 0], "ix": 1, "l": 2 }, - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, - "t": 22, - "s": [60, 60, 100] - }, - { "t": 44, "s": [100, 100, 100] } - ], - "ix": 6, - "l": 2 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [-94.797, 0], - [0, -94.797], - [94.797, 0], - [0, 94.798] - ], - "o": [ - [94.797, 0], - [0, 94.798], - [-94.797, 0], - [0, -94.797] - ], - "v": [ - [0, -171.646], - [171.646, 0], - [0, 171.646], - [-171.646, 0] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "fl", - "c": { "a": 0, "k": [0.8936, 0.9464, 0.8954, 1], "ix": 4 }, - "o": { "a": 0, "k": 100, "ix": 5 }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { "a": 0, "k": [297.587, 298.119], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 22, - "op": 720, - "st": 0, - "bm": 0 - } - ], - "markers": [] -} diff --git a/sdk/qrcode/animations/index.ts b/sdk/qrcode/animations/index.ts new file mode 100644 index 000000000..0c0f521ff --- /dev/null +++ b/sdk/qrcode/animations/index.ts @@ -0,0 +1,6 @@ +import statusConnecting from './status-connecting.json' with { type: 'json' }; +import statusError from './status-error.json' with { type: 'json' }; +import statusFailed from './status-failed.json' with { type: 'json' }; +import statusSuccess from './status-success.json' with { type: 'json' }; + +export { statusConnecting, statusError, statusFailed, statusSuccess }; diff --git a/sdk/qrcode/animations/status-connecting.json b/sdk/qrcode/animations/status-connecting.json new file mode 100644 index 000000000..26fc63f44 --- /dev/null +++ b/sdk/qrcode/animations/status-connecting.json @@ -0,0 +1,386 @@ +{ + "assets": [ + { + "h": 594, + "id": "0", + "p": "data:image/png;base64,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", + "u": "", + "w": 594, + "e": 1 + }, + { + "id": "26", + "layers": [ + { + "ind": 25, + "ty": 4, + "parent": 24, + "ks": {}, + "ip": 0, + "op": 109, + "st": 0, + "shapes": [ + { + "ty": "rc", + "p": { "a": 0, "k": [99, 99] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [198, 198] } + }, + { "ty": "fl", "c": { "a": 0, "k": [0, 0, 0] }, "o": { "a": 0, "k": 100 } } + ] + }, + { "ind": 24, "ty": 3, "ks": {}, "ip": 0, "op": 109, "st": 0 } + ] + }, + { + "id": "30", + "layers": [ + { + "ind": 28, + "ty": 0, + "ks": {}, + "w": 198, + "h": 198, + "ip": 0, + "op": 109, + "st": 0, + "refId": "26" + }, + { + "ind": 29, + "ty": 4, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 0, "s": [100], "h": 1 }, + { "t": 48, "s": [100], "h": 1 }, + { "t": 48, "s": [0], "h": 1 }, + { "t": 108, "s": [0], "h": 1 } + ] + } + }, + "ip": 0, + "op": 109, + "st": 0, + "shapes": [ + { + "ty": "rc", + "p": { "a": 0, "k": [99, 99] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [198, 198] } + }, + { "ty": "fl", "c": { "a": 0, "k": [0, 0, 0] }, "o": { "a": 0, "k": 100 } } + ] + } + ] + }, + { + "id": "14", + "layers": [ + { + "ind": 13, + "ty": 4, + "parent": 12, + "ks": {}, + "ip": 0, + "op": 109, + "st": 0, + "shapes": [ + { + "ty": "rc", + "p": { + "a": 1, + "k": [ + { + "t": 0, + "s": [140.007, 140.007], + "i": { "x": [1, 1], "y": [1, 1] }, + "o": { "x": [0, 0], "y": [0, 0] } + }, + { + "t": 48, + "s": [140.007, 140.007], + "i": { "x": [1, 0], "y": [1, 1] }, + "o": { "x": [0, 0.5], "y": [0, 0] } + }, + { "t": 108, "s": [140.007, 0], "h": 1 } + ] + }, + "r": { "a": 0, "k": 0 }, + "s": { + "a": 1, + "k": [ + { + "t": 0, + "s": [280.014, 280.014], + "i": { "x": [1, 1], "y": [1, 1] }, + "o": { "x": [0, 0], "y": [0, 0] } + }, + { + "t": 48, + "s": [280.014, 280.014], + "i": { "x": [1, 0], "y": [1, 1] }, + "o": { "x": [0, 0.5], "y": [0, 0] } + }, + { "t": 108, "s": [280.014, 0], "h": 1 } + ] + } + }, + { "ty": "fl", "c": { "a": 0, "k": [0, 0, 0] }, "o": { "a": 0, "k": 100 } } + ] + }, + { + "ind": 12, + "ty": 3, + "parent": 11, + "ks": { + "a": { + "a": 1, + "k": [ + { + "t": 0, + "s": [140.007, 140.007], + "i": { "x": [1, 1], "y": [1, 1] }, + "o": { "x": [0, 0], "y": [0, 0] } + }, + { + "t": 48, + "s": [140.007, 140.007], + "i": { "x": [1, 0], "y": [1, 1] }, + "o": { "x": [0, 0.5], "y": [0, 0] } + }, + { "t": 108, "s": [140.007, 0], "h": 1 } + ] + }, + "p": { "a": 0, "k": [99, 99] }, + "r": { "a": 0, "k": -45 } + }, + "ip": 0, + "op": 109, + "st": 0 + }, + { + "ind": 11, + "ty": 3, + "ks": { "p": { "a": 0, "k": [198, 198] } }, + "ip": 0, + "op": 109, + "st": 0 + } + ] + }, + { + "id": "18", + "layers": [ + { + "ind": 16, + "ty": 0, + "parent": 10, + "ks": { "a": { "a": 0, "k": [198, 198] } }, + "w": 594, + "h": 594, + "ip": 0, + "op": 109, + "st": 0, + "refId": "14" + }, + { + "ind": 17, + "ty": 4, + "parent": 10, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 0, "s": [100], "h": 1 }, + { "t": 48, "s": [100], "h": 1 }, + { "t": 48, "s": [0], "h": 1 }, + { "t": 108, "s": [0], "h": 1 } + ] + } + }, + "ip": 0, + "op": 109, + "st": 0, + "shapes": [ + { + "ty": "rc", + "p": { "a": 0, "k": [99, 99] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [198, 198] } + }, + { "ty": "fl", "c": { "a": 0, "k": [0, 0, 0] }, "o": { "a": 0, "k": 100 } } + ] + }, + { + "ind": 10, + "ty": 3, + "ks": { "p": { "a": 0, "k": [198, 198] } }, + "ip": 0, + "op": 109, + "st": 0 + } + ] + }, + { + "id": "7", + "layers": [ + { + "ind": 6, + "ty": 2, + "parent": 5, + "ks": { "s": { "a": 0, "k": [12.12, 12.12] } }, + "ip": 0, + "op": 109, + "st": 0, + "refId": "0" + }, + { + "ind": 5, + "ty": 3, + "parent": 4, + "ks": { "s": { "a": 0, "k": [275, 275] } }, + "ip": 0, + "op": 109, + "st": 0 + }, + { "ind": 4, "ty": 3, "ks": {}, "ip": 0, "op": 109, "st": 0 } + ] + }, + { + "id": "21", + "layers": [ + { + "ind": 20, + "ty": 0, + "td": 1, + "ks": { "a": { "a": 0, "k": [198, 198] } }, + "w": 792, + "h": 792, + "ip": 0, + "op": 109, + "st": 0, + "refId": "18" + }, + { + "ind": 9, + "ty": 0, + "tt": 1, + "ks": {}, + "w": 198, + "h": 198, + "ip": 0, + "op": 109, + "st": 0, + "refId": "7" + } + ] + }, + { + "id": "33", + "layers": [ + { + "ind": 32, + "ty": 0, + "td": 1, + "ks": {}, + "w": 198, + "h": 198, + "ip": 0, + "op": 109, + "st": 0, + "refId": "30" + }, + { + "ind": 23, + "ty": 0, + "tt": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 0, "s": [100], "h": 1 }, + { "t": 108, "s": [100], "h": 1 }, + { "t": 108, "s": [0], "h": 1 } + ] + } + }, + "w": 198, + "h": 198, + "ip": 0, + "op": 109, + "st": 0, + "refId": "21" + } + ] + } + ], + "fr": 60, + "h": 200, + "ip": 0, + "layers": [ + { + "ind": 35, + "ty": 0, + "parent": 3, + "ks": { + "a": { "a": 0, "k": [99, 99] }, + "p": { "a": 0, "k": [99, 99] }, + "o": { + "a": 1, + "k": [ + { "t": 0, "s": [0], "i": { "x": 0, "y": 1 }, "o": { "x": 0, "y": 0 } }, + { "t": 48, "s": [100], "h": 1 }, + { "t": 108, "s": [100], "h": 1 } + ] + }, + "s": { "a": 0, "k": [82, 82] } + }, + "w": 198, + "h": 198, + "ip": 0, + "op": 109, + "st": 0, + "refId": "33" + } + , + { + "ind": 3, + "ty": 3, + "parent": 2, + "ks": { "p": { "a": 0, "k": [1, 1] } }, + "ip": 0, + "op": 109, + "st": 0 + }, + { "ind": 2, "ty": 3, "parent": 1, "ks": {}, "ip": 0, "op": 109, "st": 0 }, + { "ind": 1, "ty": 3, "ks": {}, "ip": 0, "op": 109, "st": 0 }, + { + "ty": 4, + "nm": "Background", + "ks": { + "o": { "a": 0, "k": 100 }, + "p": { "a": 0, "k": [100, 100] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 } + }, + "shapes": [ + { + "ty": "rc", + "s": { "a": 0, "k": [200, 200] }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 } + }, + { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1] }, "o": { "a": 0, "k": 100 } } + ], + "ip": 0, + "op": 109, + "st": 0 + } + ], + "meta": { "g": "https://jitter.video" }, + "op": 108, + "v": "5.7.4", + "w": 200 +} diff --git a/sdk/qrcode/animations/status-error.json b/sdk/qrcode/animations/status-error.json new file mode 100644 index 000000000..e860fc5eb --- /dev/null +++ b/sdk/qrcode/animations/status-error.json @@ -0,0 +1,712 @@ +{ + "nm": "newScene", + "ddd": 0, + "h": 93, + "w": 93, + "meta": { "g": "SVG to Lottie" }, + "layers": [ + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [46, 46.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [4, 11] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 3.5 + }, + { "s": [100, 100], "t": 20 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 3.5 + }, + { "s": [0, 0], "t": 20 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 3.5 }, + { "s": [100], "t": 20 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [46, 56] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [4, 4] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 3 + }, + { "s": [100, 100], "t": 17.5 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 3 + }, + { "s": [0, 0], "t": 17.5 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 3 }, + { "s": [100], "t": 17.5 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [46.3205, 31], + [63.641, 61], + [29, 61], + [46.3205, 31] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0.9922, 0.8784, 0.2784] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2.5 + }, + { "s": [100, 100], "t": 15 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2.5 + }, + { "s": [0, 0], "t": 15 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 2.5 }, + { "s": [100], "t": 15 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0.8000000000000043, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0.8000000000000043], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [62.42, 36.38], + [62.42, 60.65], + [60.98, 62.09], + [36.71, 62.09], + [16.79, 82.01], + [64.78, 82.01], + [82, 64.79], + [82, 36.39], + [62.42, 36.39], + [62.42, 36.38] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2 + }, + { "s": [100, 100], "t": 12.5 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2 + }, + { "s": [0, 0], "t": 12.5 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 2 }, + { "s": [100], "t": 12.5 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [-0.8000000000000007, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, -0.8000000000000007], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [29.58, 30.69], + [31.02, 29.25], + [55.96, 29.25], + [75.21, 10], + [27.22, 10], + [10, 27.22], + [10, 55.55], + [29.58, 55.55], + [29.58, 30.68], + [29.58, 30.69] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1.5 + }, + { "s": [100, 100], "t": 10 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1.5 + }, + { "s": [0, 0], "t": 10 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 1.5 }, + { "s": [100], "t": 10 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [37, 55.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1 + }, + { "s": [100, 100], "t": 7.5 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1 + }, + { "s": [0, 0], "t": 7.5 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 1 }, + { "s": [100], "t": 7.5 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [55, 36.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0.5 + }, + { "s": [100, 100], "t": 5 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0.5 + }, + { "s": [0, 0], "t": 5 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 0.5 }, + { "s": [100], "t": 5 } + ] + } + } + ] + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [46.0817, 46.0817] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [92.1634, 92.1634] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [1, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0 + }, + { "s": [100, 100], "t": 2.5 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0 + }, + { "s": [0, 0], "t": 2.5 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 0 }, + { "s": [100], "t": 2.5 } + ] + } + } + ] + } + ], + "ind": 3, + "parent": 1 + } + ], + "v": "5.7.0", + "fr": 60, + "op": 50, + "ip": 0, + "assets": [] +} diff --git a/sdk/qrcode/animations/status-failed.json b/sdk/qrcode/animations/status-failed.json new file mode 100644 index 000000000..841f3ffd2 --- /dev/null +++ b/sdk/qrcode/animations/status-failed.json @@ -0,0 +1,704 @@ +{ + "nm": "newScene", + "ddd": 0, + "h": 93, + "w": 93, + "meta": { "g": "SVG to Lottie" }, + "layers": [ + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [52, 57.3333], + [57.6667, 51.6666], + [40.6667, 34.6666], + [35, 40.3333], + [52, 57.3333] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0.9373, 0.2667, 0.2667] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 3.428571428571429 + }, + { "s": [100, 100], "t": 20 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 3.428571428571429 + }, + { "s": [0, 0], "t": 20 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 3.428571428571429 + }, + { "s": [100], "t": 20 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [57.6667, 40.3333], + [52, 34.6666], + [35, 51.6666], + [40.6667, 57.3333], + [57.6667, 40.3333] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0.9373, 0.2667, 0.2667] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2.857142857142858 + }, + { "s": [100, 100], "t": 17.142857142857142 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2.857142857142858 + }, + { "s": [0, 0], "t": 17.142857142857142 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 2.857142857142858 + }, + { "s": [100], "t": 17.142857142857142 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0.8000000000000043, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0.8000000000000043], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [62.42, 36.38], + [62.42, 60.65], + [60.98, 62.09], + [36.71, 62.09], + [16.79, 82.01], + [64.78, 82.01], + [82, 64.79], + [82, 36.39], + [62.42, 36.39], + [62.42, 36.38] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2.285714285714286 + }, + { "s": [100, 100], "t": 14.285714285714286 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2.285714285714286 + }, + { "s": [0, 0], "t": 14.285714285714286 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 2.285714285714286 + }, + { "s": [100], "t": 14.285714285714286 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [-0.8000000000000007, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, -0.8000000000000007], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [29.58, 30.69], + [31.02, 29.25], + [55.96, 29.25], + [75.21, 10], + [27.22, 10], + [10, 27.22], + [10, 55.55], + [29.58, 55.55], + [29.58, 30.68], + [29.58, 30.69] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1.714285714285714 + }, + { "s": [100, 100], "t": 11.428571428571427 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1.714285714285714 + }, + { "s": [0, 0], "t": 11.428571428571427 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 1.714285714285714 + }, + { "s": [100], "t": 11.428571428571427 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [37, 55.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1.142857142857143 + }, + { "s": [100, 100], "t": 8.571428571428571 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1.142857142857143 + }, + { "s": [0, 0], "t": 8.571428571428571 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 1.142857142857143 + }, + { "s": [100], "t": 8.571428571428571 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [55, 36.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0.571428571428571 + }, + { "s": [100, 100], "t": 5.714285714285714 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0.571428571428571 + }, + { "s": [0, 0], "t": 5.714285714285714 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 0.571428571428571 + }, + { "s": [100], "t": 5.714285714285714 } + ] + } + } + ] + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [46.0817, 46.0817] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [92.1634, 92.1634] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [1, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0 + }, + { "s": [100, 100], "t": 2.857142857142857 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0 + }, + { "s": [0, 0], "t": 2.857142857142857 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 0 }, + { "s": [100], "t": 2.857142857142857 } + ] + } + } + ] + } + ], + "ind": 3, + "parent": 1 + } + ], + "v": "5.7.0", + "fr": 60, + "op": 50, + "ip": 0, + "assets": [] +} diff --git a/sdk/qrcode/animations/status-success.json b/sdk/qrcode/animations/status-success.json new file mode 100644 index 000000000..cc581d507 --- /dev/null +++ b/sdk/qrcode/animations/status-success.json @@ -0,0 +1,704 @@ +{ + "nm": "newScene", + "ddd": 0, + "h": 93, + "w": 93, + "meta": { "g": "SVG to Lottie" }, + "layers": [ + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [49, 51.6666], + [37.6667, 40.3333], + [32, 46], + [43.3333, 57.3333], + [49, 51.6666] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 1, 0.7137] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 3.428571428571429 + }, + { "s": [100, 100], "t": 20 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 3.428571428571429 + }, + { "s": [0, 0], "t": 20 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 3.428571428571429 + }, + { "s": [100], "t": 20 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [60.3333, 40.3334], + [54.6667, 34.6667], + [37.6667, 51.6667], + [43.3333, 57.3334], + [60.3333, 40.3334] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 1, 0.7137] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2.857142857142858 + }, + { "s": [100, 100], "t": 17.142857142857142 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2.857142857142858 + }, + { "s": [0, 0], "t": 17.142857142857142 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 2.857142857142858 + }, + { "s": [100], "t": 17.142857142857142 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [0, 0], + [0.8000000000000043, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0.8000000000000043], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [62.42, 36.38], + [62.42, 60.65], + [60.98, 62.09], + [36.71, 62.09], + [16.79, 82.01], + [64.78, 82.01], + [82, 64.79], + [82, 36.39], + [62.42, 36.39], + [62.42, 36.38] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 2.285714285714286 + }, + { "s": [100, 100], "t": 14.285714285714286 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 2.285714285714286 + }, + { "s": [0, 0], "t": 14.285714285714286 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 2.285714285714286 + }, + { "s": [100], "t": 14.285714285714286 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [0, 0], + [-0.8000000000000007, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, -0.8000000000000007], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [29.58, 30.69], + [31.02, 29.25], + [55.96, 29.25], + [75.21, 10], + [27.22, 10], + [10, 27.22], + [10, 55.55], + [29.58, 55.55], + [29.58, 30.68], + [29.58, 30.69] + ] + } + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1.714285714285714 + }, + { "s": [100, 100], "t": 11.428571428571427 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1.714285714285714 + }, + { "s": [0, 0], "t": 11.428571428571427 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 1.714285714285714 + }, + { "s": [100], "t": 11.428571428571427 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [37, 55.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 1.142857142857143 + }, + { "s": [100, 100], "t": 8.571428571428571 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 1.142857142857143 + }, + { "s": [0, 0], "t": 8.571428571428571 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 1.142857142857143 + }, + { "s": [100], "t": 8.571428571428571 } + ] + } + } + ] + }, + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [55, 36.5] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [54, 53] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [0, 0, 0] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0.571428571428571 + }, + { "s": [100, 100], "t": 5.714285714285714 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0.571428571428571 + }, + { "s": [0, 0], "t": 5.714285714285714 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0], + "t": 0.571428571428571 + }, + { "s": [100], "t": 5.714285714285714 } + ] + } + } + ] + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "", + "sr": 1, + "st": 0, + "op": 50, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "nm": "", + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "nm": "", + "d": 1, + "p": { "a": 0, "k": [46.0817, 46.0817] }, + "r": { "a": 0, "k": 0 }, + "s": { "a": 0, "k": [92.1634, 92.1634] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "nm": "", + "c": { "a": 0, "k": [1, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [0, 0], + "t": 0 + }, + { "s": [100, 100], "t": 2.857142857142857 } + ] + }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.34, "y": 1.55 }, + "i": { "x": 0.65, "y": 1 }, + "s": [46.5, 46.5], + "t": 0 + }, + { "s": [0, 0], "t": 2.857142857142857 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { + "a": 1, + "k": [ + { "o": { "x": 0.34, "y": 1.55 }, "i": { "x": 0.65, "y": 1 }, "s": [0], "t": 0 }, + { "s": [100], "t": 2.857142857142857 } + ] + } + } + ] + } + ], + "ind": 3, + "parent": 1 + } + ], + "v": "5.7.0", + "fr": 60, + "op": 50, + "ip": 0, + "assets": [] +} diff --git a/sdk/qrcode/animations/x_animation.json b/sdk/qrcode/animations/x_animation.json deleted file mode 100644 index 58a54d061..000000000 --- a/sdk/qrcode/animations/x_animation.json +++ /dev/null @@ -1,1285 +0,0 @@ -{ - "v": "5.7.11", - "fr": 30, - "ip": 0, - "op": 60, - "w": 512, - "h": 512, - "nm": "Bouncy Fail", - "ddd": 0, - "assets": [], - "layers": [ - { - "ddd": 0, - "ind": 1, - "ty": 4, - "nm": "X line 2", - "sr": 1, - "ks": { - "o": { "a": 0, "k": 100, "ix": 11 }, - "r": { "a": 0, "k": 90, "ix": 10 }, - "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [41, -3, 0], "ix": 1, "l": 2 }, - "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [112, -74], - [-30, 68] - ], - "o": [ - [112, -74], - [-30, 68] - ], - "v": [ - [112, -74], - [-30, 68] - ], - "c": false - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false, - "_render": true - }, - { - "ty": "st", - "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, - "o": { "a": 0, "k": 100, "ix": 4 }, - "w": { "a": 0, "k": 40, "ix": 5 }, - "lc": 2, - "lj": 2, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false, - "_render": true - }, - { - "ty": "fl", - "c": { "a": 0, "k": [1, 0.5412, 0.4902, 1], "ix": 4 }, - "o": { "a": 0, "k": 100, "ix": 5 }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false, - "_render": true - }, - { - "ty": "tr", - "p": { "a": 0, "k": [0, 0], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform", - "_render": true - } - ], - "nm": "Shape 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false, - "_render": true - }, - { - "ty": "tm", - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 26, - "s": [100] - }, - { "t": 40, "s": [0] } - ], - "ix": 1 - }, - "e": { "a": 0, "k": 100, "ix": 2 }, - "o": { "a": 0, "k": 0, "ix": 3 }, - "m": 1, - "ix": 2, - "nm": "Trim Paths 1", - "mn": "ADBE Vector Filter - Trim", - "hd": false, - "_render": true - } - ], - "ip": 26, - "op": 60, - "st": 0, - "bm": 0, - "completed": true - }, - { - "ddd": 0, - "ind": 2, - "ty": 4, - "nm": "X line 1", - "sr": 1, - "ks": { - "o": { "a": 0, "k": 100, "ix": 11 }, - "r": { "a": 0, "k": 0, "ix": 10 }, - "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, - "a": { "a": 0, "k": [41, -3, 0], "ix": 1, "l": 2 }, - "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [112, -74], - [-30, 68] - ], - "o": [ - [112, -74], - [-30, 68] - ], - "v": [ - [112, -74], - [-30, 68] - ], - "c": false - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false, - "_render": true - }, - { - "ty": "st", - "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, - "o": { "a": 0, "k": 100, "ix": 4 }, - "w": { "a": 0, "k": 40, "ix": 5 }, - "lc": 2, - "lj": 2, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false, - "_render": true - }, - { - "ty": "fl", - "c": { "a": 0, "k": [1, 0.5412, 0.4902, 1], "ix": 4 }, - "o": { "a": 0, "k": 100, "ix": 5 }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false, - "_render": true - }, - { - "ty": "tr", - "p": { "a": 0, "k": [0, 0], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform", - "_render": true - } - ], - "nm": "Shape 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false, - "_render": true - }, - { - "ty": "tm", - "s": { "a": 0, "k": 0, "ix": 1 }, - "e": { - "a": 1, - "k": [ - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.333], "y": [0] }, - "t": 26, - "s": [0] - }, - { "t": 40, "s": [100] } - ], - "ix": 2 - }, - "o": { "a": 0, "k": 0, "ix": 3 }, - "m": 1, - "ix": 2, - "nm": "Trim Paths 1", - "mn": "ADBE Vector Filter - Trim", - "hd": false, - "_render": true - } - ], - "ip": 26, - "op": 60, - "st": 0, - "bm": 0, - "completed": true - }, - { - "ddd": 0, - "ind": 4, - "ty": 4, - "nm": "Circle 2", - "sr": 1, - "ks": { - "o": { - "a": 0, - "k": 100, - "ix": 11, - "x": "var $bm_rt;\nvar opacityInertialBounce, opacityBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nopacityInertialBounce = effect('Bounce & Drop - ukramedia.com')(44);\nopacityBounceBack = effect('Bounce & Drop - ukramedia.com')(45);\ntry {\n if (opacityInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(47);\n freq = effect('Bounce & Drop - ukramedia.com')(48);\n decay = effect('Bounce & Drop - ukramedia.com')(49);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (opacityBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(52);\n g = effect('Bounce & Drop - ukramedia.com')(53);\n nMax = effect('Bounce & Drop - ukramedia.com')(54);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "r": { - "a": 0, - "k": 0, - "ix": 10, - "x": "var $bm_rt;\nvar rotationInertialBounce, rotationBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nrotationInertialBounce = effect('Bounce & Drop - ukramedia.com')(30);\nrotationBounceBack = effect('Bounce & Drop - ukramedia.com')(31);\ntry {\n if (rotationInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(33);\n freq = effect('Bounce & Drop - ukramedia.com')(34);\n decay = effect('Bounce & Drop - ukramedia.com')(35);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (rotationBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(38);\n g = effect('Bounce & Drop - ukramedia.com')(39);\n nMax = effect('Bounce & Drop - ukramedia.com')(40);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "p": { - "a": 0, - "k": [256, 256, 0], - "ix": 2, - "l": 2, - "x": "var $bm_rt;\nvar positionInertialBounce, positionBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\npositionInertialBounce = effect('Bounce & Drop - ukramedia.com')(2);\npositionBounceBack = effect('Bounce & Drop - ukramedia.com')(3);\ntry {\n if (positionInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(5);\n freq = effect('Bounce & Drop - ukramedia.com')(6);\n decay = effect('Bounce & Drop - ukramedia.com')(7);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (positionBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(10);\n g = effect('Bounce & Drop - ukramedia.com')(11);\n nMax = effect('Bounce & Drop - ukramedia.com')(12);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "a": { "a": 0, "k": [140.061, 140.061, 0], "ix": 1, "l": 2 }, - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 1.01] }, - "t": 10, - "s": [0, 0, 100] - }, - { "t": 20, "s": [140, 140, 100] } - ], - "ix": 6, - "l": 2, - "x": "var $bm_rt;\nvar scaleInertialBounce, scaleBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nscaleInertialBounce = effect('Bounce & Drop - ukramedia.com')(16);\nscaleBounceBack = effect('Bounce & Drop - ukramedia.com')(17);\ntry {\n if (scaleInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(19);\n freq = effect('Bounce & Drop - ukramedia.com')(20);\n decay = effect('Bounce & Drop - ukramedia.com')(21);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (scaleBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(24);\n g = effect('Bounce & Drop - ukramedia.com')(25);\n nMax = effect('Bounce & Drop - ukramedia.com')(26);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - } - }, - "ao": 0, - "ef": [ - { - "ty": 5, - "nm": "Bounce & Drop - ukramedia.com", - "np": 70, - "mn": "Pseudo/animationControl", - "ix": 1, - "en": 1, - "ef": [ - { "ty": 6, "nm": "Position", "mn": "Pseudo/animationControl-0001", "ix": 1, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0002", - "ix": 2, - "v": { "a": 0, "k": 0, "ix": 2 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0003", - "ix": 3, - "v": { "a": 0, "k": 0, "ix": 3 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0004", - "ix": 4, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0005", - "ix": 5, - "v": { "a": 0, "k": 0.05, "ix": 5 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0006", - "ix": 6, - "v": { "a": 0, "k": 4, "ix": 6 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0007", - "ix": 7, - "v": { "a": 0, "k": 8, "ix": 7 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0008", "ix": 8, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0009", - "ix": 9, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0010", - "ix": 10, - "v": { "a": 0, "k": 0.7, "ix": 10 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0011", - "ix": 11, - "v": { "a": 0, "k": 5000, "ix": 11 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0012", - "ix": 12, - "v": { "a": 0, "k": 9, "ix": 12 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0013", "ix": 13, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0014", "ix": 14, "v": 0 }, - { "ty": 6, "nm": "Scale", "mn": "Pseudo/animationControl-0015", "ix": 15, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0016", - "ix": 16, - "v": { "a": 0, "k": 1, "ix": 16 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0017", - "ix": 17, - "v": { "a": 0, "k": 0, "ix": 17 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0018", - "ix": 18, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0019", - "ix": 19, - "v": { "a": 0, "k": 0.8, "ix": 19 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0020", - "ix": 20, - "v": { "a": 0, "k": 4, "ix": 20 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0021", - "ix": 21, - "v": { "a": 0, "k": 8, "ix": 21 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0022", "ix": 22, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0023", - "ix": 23, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0024", - "ix": 24, - "v": { "a": 0, "k": 0.7, "ix": 24 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0025", - "ix": 25, - "v": { "a": 0, "k": 5000, "ix": 25 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0026", - "ix": 26, - "v": { "a": 0, "k": 9, "ix": 26 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0027", "ix": 27, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0028", "ix": 28, "v": 0 }, - { "ty": 6, "nm": "Rotation", "mn": "Pseudo/animationControl-0029", "ix": 29, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0030", - "ix": 30, - "v": { "a": 0, "k": 0, "ix": 30 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0031", - "ix": 31, - "v": { "a": 0, "k": 0, "ix": 31 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0032", - "ix": 32, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0033", - "ix": 33, - "v": { "a": 0, "k": 0.05, "ix": 33 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0034", - "ix": 34, - "v": { "a": 0, "k": 4, "ix": 34 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0035", - "ix": 35, - "v": { "a": 0, "k": 8, "ix": 35 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0036", "ix": 36, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0037", - "ix": 37, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0038", - "ix": 38, - "v": { "a": 0, "k": 0.7, "ix": 38 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0039", - "ix": 39, - "v": { "a": 0, "k": 5000, "ix": 39 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0040", - "ix": 40, - "v": { "a": 0, "k": 9, "ix": 40 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0041", "ix": 41, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0042", "ix": 42, "v": 0 }, - { "ty": 6, "nm": "Opacity", "mn": "Pseudo/animationControl-0043", "ix": 43, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0044", - "ix": 44, - "v": { "a": 0, "k": 0, "ix": 44 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0045", - "ix": 45, - "v": { "a": 0, "k": 0, "ix": 45 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0046", - "ix": 46, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0047", - "ix": 47, - "v": { "a": 0, "k": 0.05, "ix": 47 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0048", - "ix": 48, - "v": { "a": 0, "k": 4, "ix": 48 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0049", - "ix": 49, - "v": { "a": 0, "k": 8, "ix": 49 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0050", "ix": 50, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0051", - "ix": 51, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0052", - "ix": 52, - "v": { "a": 0, "k": 0.7, "ix": 52 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0053", - "ix": 53, - "v": { "a": 0, "k": 5000, "ix": 53 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0054", - "ix": 54, - "v": { "a": 0, "k": 9, "ix": 54 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0055", "ix": 55, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0056", "ix": 56, "v": 0 }, - { - "ty": 6, - "nm": "Global Inertial Bounce Options", - "mn": "Pseudo/animationControl-0057", - "ix": 57, - "v": 0 - }, - { - "ty": 7, - "nm": "Enable Global Inertial Bounce", - "mn": "Pseudo/animationControl-0058", - "ix": 58, - "v": { "a": 0, "k": 0, "ix": 58 } - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0059", - "ix": 59, - "v": { "a": 0, "k": 0.05, "ix": 59 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0060", - "ix": 60, - "v": { "a": 0, "k": 4, "ix": 60 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0061", - "ix": 61, - "v": { "a": 0, "k": 8, "ix": 61 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0062", "ix": 62, "v": 0 }, - { - "ty": 6, - "nm": "Global Bounce Back Options", - "mn": "Pseudo/animationControl-0063", - "ix": 63, - "v": 0 - }, - { - "ty": 7, - "nm": "Enable Global Bounce Back", - "mn": "Pseudo/animationControl-0064", - "ix": 64, - "v": { "a": 0, "k": 0, "ix": 64 } - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0065", - "ix": 65, - "v": { "a": 0, "k": 0.7, "ix": 65 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0066", - "ix": 66, - "v": { "a": 0, "k": 5000, "ix": 66 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0067", - "ix": 67, - "v": { "a": 0, "k": 9, "ix": 67 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0068", "ix": 68, "v": 0 } - ] - } - ], - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [139.811, -77.215], - [77.216, 139.811], - [-139.811, 77.215], - [-77.215, -139.811] - ], - "o": [ - [139.811, 77.215], - [-77.215, 139.811], - [-139.811, -77.215], - [77.216, -139.811] - ], - "v": [ - [139.811, 0], - [0, 139.811], - [-139.811, 0], - [0, -139.811] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false, - "_render": true - }, - { - "ty": "fl", - "c": { "a": 0, "k": [1, 0.5412, 0.4902, 1], "ix": 4 }, - "o": { "a": 0, "k": 100, "ix": 5 }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false, - "_render": true - }, - { - "ty": "tr", - "p": { "a": 0, "k": [140.061, 140.061], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform", - "_render": true - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false, - "_render": true - } - ], - "ip": 10, - "op": 360, - "st": 0, - "bm": 0, - "completed": true - }, - { - "ddd": 0, - "ind": 5, - "ty": 4, - "nm": "Circle 1", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { "x": [0.667], "y": [1] }, - "o": { "x": [0.167], "y": [0.167] }, - "t": 41.25, - "s": [50] - }, - { "t": 55, "s": [0] } - ], - "ix": 11, - "x": "var $bm_rt;\nvar opacityInertialBounce, opacityBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nopacityInertialBounce = effect('Bounce & Drop - ukramedia.com')(44);\nopacityBounceBack = effect('Bounce & Drop - ukramedia.com')(45);\ntry {\n if (opacityInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(47);\n freq = effect('Bounce & Drop - ukramedia.com')(48);\n decay = effect('Bounce & Drop - ukramedia.com')(49);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (opacityBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(52);\n g = effect('Bounce & Drop - ukramedia.com')(53);\n nMax = effect('Bounce & Drop - ukramedia.com')(54);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "r": { - "a": 0, - "k": 0, - "ix": 10, - "x": "var $bm_rt;\nvar rotationInertialBounce, rotationBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nrotationInertialBounce = effect('Bounce & Drop - ukramedia.com')(30);\nrotationBounceBack = effect('Bounce & Drop - ukramedia.com')(31);\ntry {\n if (rotationInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(33);\n freq = effect('Bounce & Drop - ukramedia.com')(34);\n decay = effect('Bounce & Drop - ukramedia.com')(35);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (rotationBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(38);\n g = effect('Bounce & Drop - ukramedia.com')(39);\n nMax = effect('Bounce & Drop - ukramedia.com')(40);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "p": { - "a": 0, - "k": [256, 256, 0], - "ix": 2, - "l": 2, - "x": "var $bm_rt;\nvar positionInertialBounce, positionBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\npositionInertialBounce = effect('Bounce & Drop - ukramedia.com')(2);\npositionBounceBack = effect('Bounce & Drop - ukramedia.com')(3);\ntry {\n if (positionInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(5);\n freq = effect('Bounce & Drop - ukramedia.com')(6);\n decay = effect('Bounce & Drop - ukramedia.com')(7);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (positionBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(10);\n g = effect('Bounce & Drop - ukramedia.com')(11);\n nMax = effect('Bounce & Drop - ukramedia.com')(12);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - }, - "a": { "a": 0, "k": [140.061, 140.061, 0], "ix": 1, "l": 2 }, - "s": { - "a": 1, - "k": [ - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 16.794] }, - "t": 0, - "s": [0, 0, 100] - }, - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, -0.38] }, - "t": 10, - "s": [132, 132, 100] - }, - { - "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, - "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, -0.21] }, - "t": 35, - "s": [130, 130, 100] - }, - { "t": 55, "s": [175, 175, 100] } - ], - "ix": 6, - "l": 2, - "x": "var $bm_rt;\nvar scaleInertialBounce, scaleBounceBack, n, n, t, t, v, amp, freq, decay, v, amp, freq, decay, e, g, nMax, e, g, nMax, n, n, t, v, vl, vu, vu, tCur, segDur, tNext, nb, delta;\nscaleInertialBounce = effect('Bounce & Drop - ukramedia.com')(16);\nscaleBounceBack = effect('Bounce & Drop - ukramedia.com')(17);\ntry {\n if (scaleInertialBounce == 1) {\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (effect('Bounce & Drop - ukramedia.com')(58) == 1) {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(59);\n freq = effect('Bounce & Drop - ukramedia.com')(60);\n decay = effect('Bounce & Drop - ukramedia.com')(61);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n } else {\n if (n > 0 && t < 1) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n amp = effect('Bounce & Drop - ukramedia.com')(19);\n freq = effect('Bounce & Drop - ukramedia.com')(20);\n decay = effect('Bounce & Drop - ukramedia.com')(21);\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n }\n } else if (scaleBounceBack == 1) {\n if (effect('Bounce & Drop - ukramedia.com')(64) == 1) {\n e = effect('Bounce & Drop - ukramedia.com')(65);\n g = effect('Bounce & Drop - ukramedia.com')(66);\n nMax = effect('Bounce & Drop - ukramedia.com')(67);\n } else {\n e = effect('Bounce & Drop - ukramedia.com')(24);\n g = effect('Bounce & Drop - ukramedia.com')(25);\n nMax = effect('Bounce & Drop - ukramedia.com')(26);\n }\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time)\n n--;\n }\n if (n > 0) {\n t = $bm_sub(time, key(n).time);\n v = $bm_mul($bm_neg(velocityAtTime($bm_sub(key(n).time, 0.001))), e);\n vl = length(v);\n if ($bm_isInstanceOfArray(value)) {\n vu = vl > 0 ? normalize(v) : [\n 0,\n 0,\n 0\n ];\n } else {\n vu = v < 0 ? -1 : 1;\n }\n tCur = 0;\n segDur = $bm_div($bm_mul(2, vl), g);\n tNext = segDur;\n nb = 1;\n while (tNext < t && nb <= nMax) {\n vl *= e;\n segDur *= e;\n tCur = tNext;\n tNext = $bm_sum(tNext, segDur);\n nb++;\n }\n if (nb <= nMax) {\n delta = $bm_sub(t, tCur);\n $bm_rt = $bm_sum(value, $bm_mul($bm_mul(vu, delta), $bm_sub(vl, $bm_div($bm_mul(g, delta), 2))));\n } else {\n $bm_rt = value;\n }\n } else\n $bm_rt = value;\n } else {\n $bm_rt = value;\n }\n} catch (err) {\n $bm_rt = value;\n}" - } - }, - "ao": 0, - "ef": [ - { - "ty": 5, - "nm": "Bounce & Drop - ukramedia.com", - "np": 70, - "mn": "Pseudo/animationControl", - "ix": 1, - "en": 1, - "ef": [ - { "ty": 6, "nm": "Position", "mn": "Pseudo/animationControl-0001", "ix": 1, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0002", - "ix": 2, - "v": { "a": 0, "k": 0, "ix": 2 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0003", - "ix": 3, - "v": { "a": 0, "k": 0, "ix": 3 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0004", - "ix": 4, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0005", - "ix": 5, - "v": { "a": 0, "k": 0.05, "ix": 5 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0006", - "ix": 6, - "v": { "a": 0, "k": 4, "ix": 6 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0007", - "ix": 7, - "v": { "a": 0, "k": 8, "ix": 7 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0008", "ix": 8, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0009", - "ix": 9, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0010", - "ix": 10, - "v": { "a": 0, "k": 0.7, "ix": 10 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0011", - "ix": 11, - "v": { "a": 0, "k": 5000, "ix": 11 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0012", - "ix": 12, - "v": { "a": 0, "k": 9, "ix": 12 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0013", "ix": 13, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0014", "ix": 14, "v": 0 }, - { "ty": 6, "nm": "Scale", "mn": "Pseudo/animationControl-0015", "ix": 15, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0016", - "ix": 16, - "v": { "a": 0, "k": 1, "ix": 16 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0017", - "ix": 17, - "v": { "a": 0, "k": 0, "ix": 17 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0018", - "ix": 18, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0019", - "ix": 19, - "v": { "a": 0, "k": 0.8, "ix": 19 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0020", - "ix": 20, - "v": { "a": 0, "k": 4, "ix": 20 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0021", - "ix": 21, - "v": { "a": 0, "k": 8, "ix": 21 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0022", "ix": 22, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0023", - "ix": 23, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0024", - "ix": 24, - "v": { "a": 0, "k": 0.7, "ix": 24 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0025", - "ix": 25, - "v": { "a": 0, "k": 5000, "ix": 25 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0026", - "ix": 26, - "v": { "a": 0, "k": 9, "ix": 26 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0027", "ix": 27, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0028", "ix": 28, "v": 0 }, - { "ty": 6, "nm": "Rotation", "mn": "Pseudo/animationControl-0029", "ix": 29, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0030", - "ix": 30, - "v": { "a": 0, "k": 0, "ix": 30 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0031", - "ix": 31, - "v": { "a": 0, "k": 0, "ix": 31 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0032", - "ix": 32, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0033", - "ix": 33, - "v": { "a": 0, "k": 0.05, "ix": 33 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0034", - "ix": 34, - "v": { "a": 0, "k": 4, "ix": 34 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0035", - "ix": 35, - "v": { "a": 0, "k": 8, "ix": 35 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0036", "ix": 36, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0037", - "ix": 37, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0038", - "ix": 38, - "v": { "a": 0, "k": 0.7, "ix": 38 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0039", - "ix": 39, - "v": { "a": 0, "k": 5000, "ix": 39 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0040", - "ix": 40, - "v": { "a": 0, "k": 9, "ix": 40 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0041", "ix": 41, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0042", "ix": 42, "v": 0 }, - { "ty": 6, "nm": "Opacity", "mn": "Pseudo/animationControl-0043", "ix": 43, "v": 0 }, - { - "ty": 7, - "nm": "Enable Inertial Bounce", - "mn": "Pseudo/animationControl-0044", - "ix": 44, - "v": { "a": 0, "k": 0, "ix": 44 } - }, - { - "ty": 7, - "nm": "Enable Bounce Back", - "mn": "Pseudo/animationControl-0045", - "ix": 45, - "v": { "a": 0, "k": 0, "ix": 45 } - }, - { - "ty": 6, - "nm": "Inertial Bounce Options", - "mn": "Pseudo/animationControl-0046", - "ix": 46, - "v": 0 - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0047", - "ix": 47, - "v": { "a": 0, "k": 0.05, "ix": 47 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0048", - "ix": 48, - "v": { "a": 0, "k": 4, "ix": 48 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0049", - "ix": 49, - "v": { "a": 0, "k": 8, "ix": 49 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0050", "ix": 50, "v": 0 }, - { - "ty": 6, - "nm": "Bounce Back Options", - "mn": "Pseudo/animationControl-0051", - "ix": 51, - "v": 0 - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0052", - "ix": 52, - "v": { "a": 0, "k": 0.7, "ix": 52 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0053", - "ix": 53, - "v": { "a": 0, "k": 5000, "ix": 53 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0054", - "ix": 54, - "v": { "a": 0, "k": 9, "ix": 54 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0055", "ix": 55, "v": 0 }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0056", "ix": 56, "v": 0 }, - { - "ty": 6, - "nm": "Global Inertial Bounce Options", - "mn": "Pseudo/animationControl-0057", - "ix": 57, - "v": 0 - }, - { - "ty": 7, - "nm": "Enable Global Inertial Bounce", - "mn": "Pseudo/animationControl-0058", - "ix": 58, - "v": { "a": 0, "k": 0, "ix": 58 } - }, - { - "ty": 0, - "nm": "Amplitude", - "mn": "Pseudo/animationControl-0059", - "ix": 59, - "v": { "a": 0, "k": 0.05, "ix": 59 } - }, - { - "ty": 0, - "nm": "Frequency", - "mn": "Pseudo/animationControl-0060", - "ix": 60, - "v": { "a": 0, "k": 4, "ix": 60 } - }, - { - "ty": 0, - "nm": "Decay", - "mn": "Pseudo/animationControl-0061", - "ix": 61, - "v": { "a": 0, "k": 8, "ix": 61 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0062", "ix": 62, "v": 0 }, - { - "ty": 6, - "nm": "Global Bounce Back Options", - "mn": "Pseudo/animationControl-0063", - "ix": 63, - "v": 0 - }, - { - "ty": 7, - "nm": "Enable Global Bounce Back", - "mn": "Pseudo/animationControl-0064", - "ix": 64, - "v": { "a": 0, "k": 0, "ix": 64 } - }, - { - "ty": 0, - "nm": "Elasticity", - "mn": "Pseudo/animationControl-0065", - "ix": 65, - "v": { "a": 0, "k": 0.7, "ix": 65 } - }, - { - "ty": 0, - "nm": "Gravity", - "mn": "Pseudo/animationControl-0066", - "ix": 66, - "v": { "a": 0, "k": 5000, "ix": 66 } - }, - { - "ty": 0, - "nm": "nMax", - "mn": "Pseudo/animationControl-0067", - "ix": 67, - "v": { "a": 0, "k": 9, "ix": 67 } - }, - { "ty": 6, "nm": "", "mn": "Pseudo/animationControl-0068", "ix": 68, "v": 0 } - ] - } - ], - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [139.811, -77.215], - [77.216, 139.811], - [-139.811, 77.215], - [-77.215, -139.811] - ], - "o": [ - [139.811, 77.215], - [-77.215, 139.811], - [-139.811, -77.215], - [77.216, -139.811] - ], - "v": [ - [139.811, 0], - [0, 139.811], - [-139.811, 0], - [0, -139.811] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false, - "_render": true - }, - { - "ty": "fl", - "c": { "a": 0, "k": [1, 0.5412, 0.4902, 1], "ix": 4 }, - "o": { "a": 0, "k": 100, "ix": 5 }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false, - "_render": true - }, - { - "ty": "tr", - "p": { "a": 0, "k": [140.061, 140.061], "ix": 2 }, - "a": { "a": 0, "k": [0, 0], "ix": 1 }, - "s": { "a": 0, "k": [100, 100], "ix": 3 }, - "r": { "a": 0, "k": 0, "ix": 6 }, - "o": { "a": 0, "k": 100, "ix": 7 }, - "sk": { "a": 0, "k": 0, "ix": 4 }, - "sa": { "a": 0, "k": 0, "ix": 5 }, - "nm": "Transform", - "_render": true - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false, - "_render": true - } - ], - "ip": 0, - "op": 360, - "st": 0, - "bm": 0, - "completed": true - } - ], - "markers": [], - "__complete": true -} diff --git a/sdk/qrcode/assets/self-logo-qr.svg b/sdk/qrcode/assets/self-logo-qr.svg new file mode 100644 index 000000000..9effc128a --- /dev/null +++ b/sdk/qrcode/assets/self-logo-qr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/sdk/qrcode/assets/self-logo.svg b/sdk/qrcode/assets/self-logo.svg new file mode 100644 index 000000000..30274a666 --- /dev/null +++ b/sdk/qrcode/assets/self-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/sdk/qrcode/components/LED.tsx b/sdk/qrcode/components/LED.tsx deleted file mode 100644 index c3a90fed0..000000000 --- a/sdk/qrcode/components/LED.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; - -import { QRcodeSteps } from '../utils/utils.js'; - -interface LEDProps { - size?: number; - connectionStatus?: number; -} - -const green = '#31F040'; -const blue = '#424AD8'; -const gray = '#95a5a6'; - -const LED: React.FC = ({ size = 8, connectionStatus = QRcodeSteps.DISCONNECTED }) => { - const getColor = () => { - if (connectionStatus >= QRcodeSteps.MOBILE_CONNECTED) { - return green; - } else if (connectionStatus >= QRcodeSteps.WAITING_FOR_MOBILE) { - return blue; - } else { - return gray; - } - }; - - return ( -
- ); -}; - -export default LED; diff --git a/sdk/qrcode/components/QRCode.tsx b/sdk/qrcode/components/QRCode.tsx new file mode 100644 index 000000000..8e30f1f0d --- /dev/null +++ b/sdk/qrcode/components/QRCode.tsx @@ -0,0 +1,67 @@ +import Lottie from 'lottie-react'; +import { QRCodeSVG } from 'qrcode.react'; +import React, { memo } from 'react'; + +import { qrAnimationOverlayStyle, qrContainerStyle } from '../utils/styles.js'; +import { getStatusAnimation, getStatusIcon, QRcodeSteps } from '../utils/utils.js'; + +const LottieComponent = Lottie.default || Lottie; +const QR_IMAGE_SIZE_RATIO = 0.32; + +interface QRCodeProps { + value: string; + size: number; + darkMode: boolean; + proofStep: number; +} + +const QRCode = memo(({ value, size, darkMode, proofStep }: QRCodeProps) => { + const isInitialState = + proofStep === QRcodeSteps.DISCONNECTED || proofStep === QRcodeSteps.WAITING_FOR_MOBILE; + + const isConnectingState = + proofStep === QRcodeSteps.MOBILE_CONNECTED || + proofStep === QRcodeSteps.PROOF_GENERATION_STARTED || + proofStep === QRcodeSteps.PROOF_GENERATED; + + const showAnimation = !isInitialState; + + const statusIcon = getStatusIcon(proofStep); + const bgColor = darkMode ? '#000000' : '#ffffff'; + const fgColor = darkMode ? '#ffffff' : '#000000'; + const imageSize = size * QR_IMAGE_SIZE_RATIO; + + return ( +
+ + {showAnimation && ( +
+ {/* @ts-expect-error Lottie typings don't match the default export shape */} + +
+ )} +
+ ); +}); + +export default QRCode; diff --git a/sdk/qrcode/components/SelfQRcode.tsx b/sdk/qrcode/components/SelfQRcode.tsx index fcd6edf73..feb9ab075 100644 --- a/sdk/qrcode/components/SelfQRcode.tsx +++ b/sdk/qrcode/components/SelfQRcode.tsx @@ -1,19 +1,13 @@ import type { SelfApp } from '@selfxyz/sdk-common'; import { getUniversalLink, REDIRECT_URL, WS_DB_RELAYER } from '@selfxyz/sdk-common'; -import Lottie from 'lottie-react'; -import { QRCodeSVG } from 'qrcode.react'; import React, { useEffect, useRef, useState } from 'react'; -import { BounceLoader } from 'react-spinners'; import { v4 as uuidv4 } from 'uuid'; -import CHECK_ANIMATION from '../animations/check_animation.json' with { type: 'json' }; -import X_ANIMATION from '../animations/x_animation.json' with { type: 'json' }; -import { containerStyle, ledContainerStyle, qrContainerStyle } from '../utils/styles.js'; +import { qrWrapperStyle } from '../utils/styles.js'; import { QRcodeSteps } from '../utils/utils.js'; import { initWebSocket } from '../utils/websocket.js'; -import LED from './LED.js'; - -const LottieComponent = Lottie.default || Lottie; +import QRCode from './QRCode.js'; +import StatusBanner from './StatusBanner.js'; interface SelfQRcodeProps { selfApp: SelfApp; @@ -23,7 +17,8 @@ interface SelfQRcodeProps { websocketUrl?: string; size?: number; darkMode?: boolean; - children?: React.ReactNode; + showBorder?: boolean; + showStatusText?: boolean; } const SelfQRcodeWrapper = (props: SelfQRcodeProps) => { @@ -46,11 +41,24 @@ const SelfQRcode = ({ websocketUrl = WS_DB_RELAYER, size = 300, darkMode = false, + showBorder = true, + showStatusText = true, }: SelfQRcodeProps) => { const [proofStep, setProofStep] = useState(QRcodeSteps.WAITING_FOR_MOBILE); const [sessionId, setSessionId] = useState(''); const socketRef = useRef | null>(null); + // Refs for callbacks to avoid unnecessary WebSocket reconnections. + const onSuccessRef = useRef(onSuccess); + const onErrorRef = useRef(onError); + const selfAppRef = useRef(selfApp); + + useEffect(() => { + onSuccessRef.current = onSuccess; + onErrorRef.current = onError; + selfAppRef.current = selfApp; + }, [onSuccess, onError, selfApp]); + useEffect(() => { setSessionId(uuidv4()); }, []); @@ -61,13 +69,13 @@ const SelfQRcode = ({ socketRef.current = initWebSocket( websocketUrl, { - ...selfApp, + ...selfAppRef.current, sessionId: sessionId, }, type, setProofStep, - onSuccess, - onError + () => onSuccessRef.current(), + (data) => onErrorRef.current(data) ); } @@ -78,70 +86,30 @@ const SelfQRcode = ({ socketRef.current = null; } }; - }, [sessionId, type, websocketUrl, onSuccess, selfApp]); + }, [sessionId, type, websocketUrl]); if (!sessionId) { return null; } - const renderProofStatus = () => ( -
-
- -
-
- {(() => { - switch (proofStep) { - case QRcodeSteps.PROOF_GENERATION_STARTED: - case QRcodeSteps.PROOF_GENERATED: - return ; - case QRcodeSteps.PROOF_GENERATION_FAILED: - return ( - // @ts-expect-error Lottie typings don't match the default export shape - { - setProofStep(QRcodeSteps.WAITING_FOR_MOBILE); - }} - loop={false} - /> - ); - case QRcodeSteps.PROOF_VERIFIED: - return ( - // @ts-expect-error Lottie typings don't match the default export shape - { - setProofStep(QRcodeSteps.WAITING_FOR_MOBILE); - }} - loop={false} - /> - ); - default: - return ( - - ); - } - })()} -
+ const qrValue = + type === 'websocket' + ? `${REDIRECT_URL}?sessionId=${sessionId}` + : getUniversalLink({ + ...selfAppRef.current, + sessionId: sessionId, + }); + + return ( +
+ + {showStatusText && }
); - - return
{renderProofStatus()}
; }; // Also export other components/types that might be needed diff --git a/sdk/qrcode/components/StatusBanner.tsx b/sdk/qrcode/components/StatusBanner.tsx new file mode 100644 index 000000000..792d55e36 --- /dev/null +++ b/sdk/qrcode/components/StatusBanner.tsx @@ -0,0 +1,24 @@ +import React, { memo } from 'react'; + +import selfLogo from '../assets/self-logo.svg'; +import { statusBannerLogoStyle, statusBannerStyle } from '../utils/styles.js'; +import { getStatusText, QRcodeSteps } from '../utils/utils.js'; + +interface StatusBannerProps { + proofStep: number; + qrSize: number; +} + +const StatusBanner = memo(({ proofStep, qrSize }: StatusBannerProps) => { + const showLogo = + proofStep === QRcodeSteps.DISCONNECTED || proofStep === QRcodeSteps.WAITING_FOR_MOBILE; + + return ( +
+ {showLogo && Self Logo} + {getStatusText(proofStep)} +
+ ); +}); + +export default StatusBanner; diff --git a/sdk/qrcode/package.json b/sdk/qrcode/package.json index e13096586..32f72ed3d 100644 --- a/sdk/qrcode/package.json +++ b/sdk/qrcode/package.json @@ -21,11 +21,6 @@ "import": "./dist/esm/index.js", "require": "./dist/cjs/index.cjs" }, - "./components/LED": { - "types": "./dist/esm/components/LED.d.ts", - "import": "./dist/esm/components/LED.js", - "require": "./dist/cjs/components/LED.cjs" - }, "./components/SelfQRcode": { "types": "./dist/esm/components/SelfQRcode.d.ts", "import": "./dist/esm/components/SelfQRcode.js", diff --git a/sdk/qrcode/tsconfig.json b/sdk/qrcode/tsconfig.json index 1eb0ffb47..c9cfed711 100644 --- a/sdk/qrcode/tsconfig.json +++ b/sdk/qrcode/tsconfig.json @@ -15,6 +15,8 @@ }, "include": [ "animations", + "assets", + "types", "index.ts", "components/**.tsx", "utils/*.ts" diff --git a/sdk/qrcode/tsup.config.ts b/sdk/qrcode/tsup.config.ts index b49f53b95..c498b0e26 100644 --- a/sdk/qrcode/tsup.config.ts +++ b/sdk/qrcode/tsup.config.ts @@ -8,7 +8,6 @@ const __dirname = path.dirname(__filename); const entries = { index: 'index.ts', - 'components/LED': 'components/LED.tsx', 'components/SelfQRcode': 'components/SelfQRcode.tsx', 'utils/utils': 'utils/utils.ts', 'utils/styles': 'utils/styles.ts', @@ -28,6 +27,10 @@ export default defineConfig([ sourcemap: true, target: 'es2020', platform: 'neutral', + loader: { + '.svg': 'dataurl', + }, + publicDir: path.resolve(__dirname, 'assets'), external: [ /^react/, /^react-dom/, @@ -50,6 +53,10 @@ export default defineConfig([ sourcemap: true, target: 'es2020', platform: 'neutral', + loader: { + '.svg': 'dataurl', + }, + publicDir: path.resolve(__dirname, 'assets'), external: [ /^react/, /^react-dom/, diff --git a/sdk/qrcode/types/svg.d.ts b/sdk/qrcode/types/svg.d.ts new file mode 100644 index 000000000..cdb2b1a9a --- /dev/null +++ b/sdk/qrcode/types/svg.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: string; + export default content; +} diff --git a/sdk/qrcode/utils/styles.ts b/sdk/qrcode/utils/styles.ts index df025b1d3..142420f65 100644 --- a/sdk/qrcode/utils/styles.ts +++ b/sdk/qrcode/utils/styles.ts @@ -1,22 +1,68 @@ -const containerStyle: React.CSSProperties = { - display: 'flex', +import React from 'react'; + +import { QRcodeSteps } from './utils.js'; + +const getBorderColor = (step: number): string => { + switch (step) { + case QRcodeSteps.DISCONNECTED: + case QRcodeSteps.WAITING_FOR_MOBILE: + return '#E2E8F0'; + case QRcodeSteps.MOBILE_CONNECTED: + case QRcodeSteps.PROOF_GENERATION_STARTED: + case QRcodeSteps.PROOF_GENERATED: + return '#3B82F6'; + case QRcodeSteps.PROOF_GENERATION_FAILED: + return '#EF4444'; + case QRcodeSteps.PROOF_VERIFIED: + return '#01BFFF'; + default: + return '#E2E8F0'; + } +}; + +export const qrAnimationOverlayStyle = (imageSize: number): React.CSSProperties => ({ + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: imageSize, + height: imageSize, + pointerEvents: 'none', +}); + +export const qrContainerStyle = (size: number): React.CSSProperties => ({ + position: 'relative', + width: size, + height: size, +}); + +export const qrWrapperStyle = (step: number, showBorder: boolean = true): React.CSSProperties => ({ + display: 'inline-flex', flexDirection: 'column', alignItems: 'center', - width: '100%', + gap: '6px', + padding: '3px', + borderRadius: '10px', + border: showBorder ? `6px solid ${getBorderColor(step)}` : 'none', + backgroundColor: '#FFF', + transition: 'border-color 0.3s ease', +}); + +export const statusBannerLogoStyle: React.CSSProperties = { + width: 28, + height: 28, + marginRight: 8, }; -const ledContainerStyle: React.CSSProperties = { - marginBottom: '4px', -}; - -const qrContainerStyle = (size: number): React.CSSProperties => ({ - width: `${size}px`, - height: `${size}px`, +export const statusBannerStyle = (qrSize: number): React.CSSProperties => ({ + backgroundColor: '#000', + color: '#fff', + borderRadius: '5px', + width: qrSize, + fontWeight: '700', + fontSize: '18px', + height: '50px', display: 'flex', alignItems: 'center', justifyContent: 'center', }); - -export { containerStyle }; -export { ledContainerStyle }; -export { qrContainerStyle }; diff --git a/sdk/qrcode/utils/utils.ts b/sdk/qrcode/utils/utils.ts index 9ecbed5ea..c419ecc9c 100644 --- a/sdk/qrcode/utils/utils.ts +++ b/sdk/qrcode/utils/utils.ts @@ -1,3 +1,6 @@ +import { statusConnecting, statusError, statusFailed, statusSuccess } from '../animations/index.js'; +import selfLogoBlack from '../assets/self-logo-qr.svg'; + export const QRcodeSteps = { DISCONNECTED: 0, WAITING_FOR_MOBILE: 1, @@ -7,3 +10,47 @@ export const QRcodeSteps = { PROOF_GENERATED: 5, PROOF_VERIFIED: 6, }; + +export const getStatusAnimation = (proofStep: number) => { + switch (proofStep) { + case QRcodeSteps.MOBILE_CONNECTED: + case QRcodeSteps.PROOF_GENERATION_STARTED: + case QRcodeSteps.PROOF_GENERATED: + return statusConnecting; + case QRcodeSteps.PROOF_VERIFIED: + return statusSuccess; + case QRcodeSteps.PROOF_GENERATION_FAILED: + return statusFailed; + default: + return statusError; + } +}; + +export const getStatusIcon = (proofStep: number): string => { + switch (proofStep) { + case QRcodeSteps.DISCONNECTED: + case QRcodeSteps.WAITING_FOR_MOBILE: + return selfLogoBlack; + default: + return ''; + } +}; + +export const getStatusText = (proofStep: number): string => { + switch (proofStep) { + case QRcodeSteps.DISCONNECTED: + case QRcodeSteps.WAITING_FOR_MOBILE: + return 'Prove your Self'; + case QRcodeSteps.MOBILE_CONNECTED: + case QRcodeSteps.PROOF_GENERATION_STARTED: + return 'Connected to Self'; + case QRcodeSteps.PROOF_GENERATED: + return 'Proof Generated'; + case QRcodeSteps.PROOF_VERIFIED: + return 'Proof Successful'; + case QRcodeSteps.PROOF_GENERATION_FAILED: + return 'Proof Failed'; + default: + return 'An error occurred'; + } +};