├── .gitignore ├── .stackblitzrc ├── .vscode └── extensions.json ├── App_Resources ├── Android │ ├── app.gradle │ ├── before-plugins.gradle │ ├── settings.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ ├── drawable-hdpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable-ldpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable-mdpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable-nodpi │ │ └── splash_screen.xml │ │ ├── drawable-xhdpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable-xxhdpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable-xxxhdpi │ │ ├── background.png │ │ └── logo.png │ │ ├── drawable │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ └── ic_launcher.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ ├── colors.xml │ │ └── styles.xml │ │ ├── values-v29 │ │ └── styles.xml │ │ └── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ └── styles.xml └── iOS │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── icon-1024.png │ │ ├── icon-20.png │ │ ├── icon-20@2x.png │ │ ├── icon-20@3x.png │ │ ├── icon-29.png │ │ ├── icon-29@2x.png │ │ ├── icon-29@3x.png │ │ ├── icon-40.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-76.png │ │ ├── icon-76@2x.png │ │ └── icon-83.5@2x.png │ ├── Contents.json │ ├── LaunchScreen.AspectFill.imageset │ │ ├── Contents.json │ │ ├── LaunchScreen-AspectFill.png │ │ ├── LaunchScreen-AspectFill@2x.png │ │ └── LaunchScreen-AspectFill@3x.png │ └── LaunchScreen.Center.imageset │ │ ├── Contents.json │ │ ├── LaunchScreen-Center.png │ │ ├── LaunchScreen-Center@2x.png │ │ └── LaunchScreen-Center@3x.png │ ├── Info.plist │ ├── LaunchScreen.storyboard │ ├── Podfile │ └── build.xcconfig ├── README.md ├── nativescript.config.ts ├── package-lock.json ├── package.json ├── patches ├── @nativescript-community+ui-material-bottomsheet+7.2.7.patch └── @nativescript-community+ui-popover+0.1.9.patch ├── src ├── app.css ├── app.ts ├── assets │ └── lottie │ │ ├── confetti.json │ │ └── empty.json ├── components │ ├── AddHabit.vue │ ├── AddHabitSteps.vue │ ├── Emoji.vue │ ├── GlobalPage.vue │ ├── Icon.vue │ ├── ItemWeek.vue │ ├── Menu.vue │ ├── Overlay.vue │ ├── PeriodicityHabit.vue │ └── Undo.vue ├── composables │ ├── usePopover.ts │ └── useSyncObservableArray.ts ├── fonts │ ├── MaterialSymbolsOutlined.ttf │ ├── MaterialSymbolsRounded.ttf │ ├── UberMove-Light.ttf │ ├── UberMoveBold.otf │ └── UberMoveMedium.otf ├── native │ └── ColorPicker │ │ ├── index.android.ts │ │ ├── index.d.ts │ │ └── index.ios.ts ├── repositories │ └── habitRepository.ts ├── stores │ └── habitStore.ts ├── types.ts ├── utils.ts ├── utils │ ├── animation.ts │ ├── collectionViewUtils.ts │ ├── colorUtils.ts │ ├── dateUtils.ts │ ├── emoji.ts │ ├── habitUtils.ts │ ├── mockData.ts │ ├── rootLayoutUtils.ts │ └── touchManagerUtils.ts └── views │ ├── Habit.vue │ ├── Home.vue │ └── Settings.vue ├── tailwind.config.js ├── tsconfig.json ├── types ├── colorpickerview.d.ts ├── references.d.ts └── shims.vue.d.ts └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # NativeScript 2 | hooks/ 3 | node_modules/ 4 | platforms/ 5 | 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | 13 | # General 14 | .DS_Store 15 | .AppleDouble 16 | .LSOverride 17 | .idea 18 | .cloud 19 | .project 20 | tmp/ 21 | typings/ 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | -------------------------------------------------------------------------------- /.stackblitzrc: -------------------------------------------------------------------------------- 1 | { 2 | "installDependencies": true, 3 | "compileTrigger": "save", 4 | "startCommand": "setup-nativescript-stackblitz && ns preview" 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["nativescript.nativescript", "vue.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /App_Resources/Android/app.gradle: -------------------------------------------------------------------------------- 1 | // You can add your native dependencies here 2 | dependencies { 3 | implementation "androidx.dynamicanimation:dynamicanimation:1.0.0" 4 | implementation "com.github.skydoves:colorpickerview:2.3.0" 5 | } 6 | 7 | android { 8 | compileSdkVersion 33 9 | buildToolsVersion "33" 10 | // ndkVersion "" 11 | 12 | defaultConfig { 13 | minSdkVersion 23 14 | targetSdkVersion 33 15 | 16 | // Version Information 17 | versionCode 1 18 | versionName "1.0.0" 19 | 20 | generatedDensities = [] 21 | } 22 | 23 | aaptOptions { 24 | additionalParameters "--no-version-vectors" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /App_Resources/Android/before-plugins.gradle: -------------------------------------------------------------------------------- 1 | // this configurations is loaded before building plugins, as well as before building 2 | // the app - this is where you can apply global settings and overrides 3 | apply from: new File(["node", "--print", "require.resolve('@open-native/core/package.json')"].execute(null, rootDir).text.trim(), "../scripts/open-native.gradle"); 4 | 5 | project.ext { 6 | // androidXAppCompat = "1.4.1" 7 | // androidXExifInterface = "1.3.3" 8 | // androidXFragment = "1.4.1" 9 | // androidXMaterial = "1.5.0" 10 | // androidXMultidex = "2.0.1" 11 | // androidXTransition = "1.4.1" 12 | // androidXViewPager = "1.0.0" 13 | 14 | // useKotlin = true 15 | // kotlinVersion = "1.6.0" 16 | } 17 | -------------------------------------------------------------------------------- /App_Resources/Android/settings.gradle: -------------------------------------------------------------------------------- 1 | apply from: new File(["node", "--print", "require.resolve('@open-native/core/package.json')"].execute(null, rootDir).text.trim(), "../scripts/native_modules.gradle"); 2 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 23 | 24 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-hdpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-ldpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-ldpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-ldpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-ldpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-mdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-mdpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xhdpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values-v21/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 15 | 16 | 17 | 21 | 22 | 23 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values-v29/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | 17 | 18 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #F5F5F5 5 | 6 | 7 | #757575 8 | 9 | 10 | #65ADF1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /App_Resources/Android/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 17 | 18 | 20 | 21 | 22 | 29 | 30 | 32 | 33 | 34 | 39 | 40 | 42 | 43 | -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon-29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "icon-29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon-40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "icon-40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon-60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "icon-60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "icon-20.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "icon-20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "icon-29.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "icon-29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "icon-40.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "icon-40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "icon-76.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "icon-76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "icon-83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "icon-1024.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-AspectFill.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-AspectFill@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchScreen-AspectFill@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-Center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-Center@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchScreen-Center@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png -------------------------------------------------------------------------------- /App_Resources/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiresFullScreen 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /App_Resources/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /App_Resources/iOS/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '14.0' 2 | 3 | 4 | post_install do |installer| 5 | installer.pods_project.targets.each do |target| 6 | target.build_configurations.each do |config| 7 | config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0' 8 | end 9 | end 10 | end -------------------------------------------------------------------------------- /App_Resources/iOS/build.xcconfig: -------------------------------------------------------------------------------- 1 | // You can add custom settings here 2 | // for example you can uncomment the following line to force distribution code signing 3 | // CODE_SIGN_IDENTITY = iPhone Distribution 4 | // To build for device with XCode you need to specify your development team. 5 | // DEVELOPMENT_TEAM = YOUR_TEAM_ID; 6 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | NativeScript-Vue3 example 2 | 3 | [Playground Preview](https://stackblitz.com/~/github.com/vallemar/nativescript-reordering) ⚡ 4 | -------------------------------------------------------------------------------- /nativescript.config.ts: -------------------------------------------------------------------------------- 1 | import { NativeScriptConfig } from '@nativescript/core'; 2 | 3 | export default { 4 | id: 'org.nativescript.nativescriptreordering', 5 | appPath: 'src', 6 | appResourcesPath: 'App_Resources', 7 | android: { 8 | v8Flags: '--expose_gc', 9 | markingMode: 'none' 10 | } 11 | } as NativeScriptConfig; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-reordering", 3 | "main": "src/app.ts", 4 | "version": "1.0.0", 5 | "private": true, 6 | "scripts": { 7 | "postinstall": "patch-package" 8 | }, 9 | "dependencies": { 10 | "@nativescript-community/ui-collectionview": "^5.3.3", 11 | "@nativescript-community/ui-collectionview-swipemenu": "^5.3.3", 12 | "@nativescript-community/ui-lottie": "^5.0.6", 13 | "@nativescript-community/ui-material-bottomsheet": "^7.2.4", 14 | "@nativescript-community/ui-material-tabs": "^7.2.4", 15 | "@nativescript-community/ui-popover": "^0.1.9", 16 | "@nativescript-use/vue": "^0.0.29", 17 | "@nativescript/core": "^8.6.1", 18 | "@nativescript/stackblitz": "^0.0.8", 19 | "@open-native/core": "^2.0.0-alpha.16", 20 | "dayjs": "^1.11.10", 21 | "nativescript-vue": "3.0.0-beta.10", 22 | "patch-package": "^8.0.0", 23 | "pinia": "^2.1.7", 24 | "react-native-theme-switch-animation": "^0.4.1", 25 | "setimmediate": "^1.0.5" 26 | }, 27 | "devDependencies": { 28 | "@nativescript/android": "8.6.2", 29 | "@nativescript/ios": "8.6.1", 30 | "@nativescript/preview-cli": "1.0.5", 31 | "@nativescript/tailwind": "^2.0.1", 32 | "@nativescript/types": "~8.5.0", 33 | "@nativescript/webpack": "~5.0.0", 34 | "@types/node": "~17.0.21", 35 | "tailwindcss": "^3.1.8", 36 | "typescript": "^5.2.2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /patches/@nativescript-community+ui-material-bottomsheet+7.2.7.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/@nativescript-community/ui-material-bottomsheet/bottomsheet.ios.js b/node_modules/@nativescript-community/ui-material-bottomsheet/bottomsheet.ios.js 2 | index cfb9105..6185fed 100644 3 | --- a/node_modules/@nativescript-community/ui-material-bottomsheet/bottomsheet.ios.js 4 | +++ b/node_modules/@nativescript-community/ui-material-bottomsheet/bottomsheet.ios.js 5 | @@ -382,7 +382,7 @@ export class ViewWithBottomSheet extends ViewWithBottomSheetBase { 6 | return; 7 | } 8 | const parentController = parentWithController.viewController; 9 | - const animated = this.viewController.nsAnimated; 10 | + const animated = true; 11 | parentController.dismissViewControllerAnimatedCompletion(animated, whenClosedCallback); 12 | } 13 | _unloadBottomSheet() { 14 | diff --git a/node_modules/@nativescript-community/ui-material-bottomsheet/platforms/android/ui_material_bottomsheet.aar b/node_modules/@nativescript-community/ui-material-bottomsheet/platforms/android/ui_material_bottomsheet.aar 15 | new file mode 100644 16 | index 0000000..b9b2f04 17 | Binary files /dev/null and b/node_modules/@nativescript-community/ui-material-bottomsheet/platforms/android/ui_material_bottomsheet.aar differ 18 | -------------------------------------------------------------------------------- /patches/@nativescript-community+ui-popover+0.1.9.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/@nativescript-community/ui-popover/index.ios.js b/node_modules/@nativescript-community/ui-popover/index.ios.js 2 | index 5f913ab..6665a07 100644 3 | --- a/node_modules/@nativescript-community/ui-popover/index.ios.js 4 | +++ b/node_modules/@nativescript-community/ui-popover/index.ios.js 5 | @@ -21,6 +21,10 @@ var UIPopoverPresentationControllerDelegateImpl = /** @class */ (function (_supe 6 | }; 7 | UIPopoverPresentationControllerDelegateImpl.prototype.popoverPresentationControllerShouldDismissPopover = function (popoverPresentationController) { 8 | var _a; 9 | + if (this._options.onTapOutside) { 10 | + this._options.onTapOutside(); 11 | + } 12 | + 13 | return !((_a = this._options) === null || _a === void 0 ? void 0 : _a.outsideTouchable); 14 | }; 15 | UIPopoverPresentationControllerDelegateImpl.ObjCProtocols = [UIPopoverPresentationControllerDelegate]; 16 | @@ -85,7 +89,7 @@ function createUIViewAutoSizeUIViewAutoSize(view) { 17 | view.nativeViewProtected.autoresizingMask = 2 /* UIViewAutoresizing.FlexibleWidth */ | 16 /* UIViewAutoresizing.FlexibleHeight */; 18 | return self; 19 | } 20 | -export function showPopover(view, { anchor, vertPos = VerticalPosition.BELOW, horizPos = HorizontalPosition.CENTER, x = 0, y = 0, fitInScreen = true, transparent = false, onDismiss, outsideTouchable = false, backgroundColor, canOverlapSourceViewRect = false, context = {}, hideArrow = false }) { 21 | +export function showPopover(view, { anchor, vertPos = VerticalPosition.BELOW, horizPos = HorizontalPosition.CENTER, x = 0, y = 0, fitInScreen = true, transparent = false, onDismiss, onTapOutside, outsideTouchable = false, backgroundColor, canOverlapSourceViewRect = false, context = {}, hideArrow = false }) { 22 | _commonShowNativePopover(view); 23 | const parentWithController = IOSHelper.getParentWithViewController(anchor); 24 | if (!parentWithController) { 25 | @@ -118,7 +122,8 @@ export function showPopover(view, { anchor, vertPos = VerticalPosition.BELOW, ho 26 | if (!controller.popoverPresentationController.delegate) { 27 | controller.popoverPresentationController.delegate = UIPopoverPresentationControllerDelegateImpl.initWithOptions({ 28 | outsideTouchable, 29 | - onDismiss: _onDismiss 30 | + onDismiss: _onDismiss, 31 | + onTapOutside: onTapOutside 32 | }); 33 | } 34 | if (hideArrow) { 35 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | .m-icon-round { 6 | font-family: "Material Symbols Rounded", "MaterialSymbolsRounded"; 7 | font-weight: 100; 8 | font-size: 34; 9 | } 10 | 11 | .m-icon-outline { 12 | font-family: "Material Symbols Outlined", "MaterialSymbolsOutlined"; 13 | font-weight: 100; 14 | font-size: 34; 15 | } 16 | 17 | .ns-root, 18 | .ns-modal { 19 | /* Definition */ 20 | --bg-light: #FFFFFF; 21 | --bg-dark: #1C2128; 22 | --bg-secondary-light: #f5f5f5e5; 23 | --bg-secondary-dark: #21272f; 24 | --text-light: #1C2128; 25 | --text-dark: white; 26 | 27 | /* Default | light mode */ 28 | --bg: var(--bg-light); 29 | --bg-secondary: var(--bg-secondary-light); 30 | --text: var(--text-light); 31 | } 32 | 33 | .ns-root.ns-dark, 34 | .ns-modal.ns-dark { 35 | --bg: var(--bg-dark); 36 | --bg-secondary: var(--bg-secondary-dark); 37 | --text: var(--text-dark); 38 | } 39 | 40 | Label, 41 | TextView, 42 | TextField { 43 | color: var(--text); 44 | } 45 | 46 | TextView, 47 | TextField { 48 | placeholder-color: var(--text); 49 | } 50 | 51 | Page, 52 | .bg { 53 | background-color: var(--bg); 54 | } 55 | 56 | .bg-secondary { 57 | background-color: var(--bg-secondary); 58 | } 59 | 60 | .shadow { 61 | box-shadow: 0px px 8px 0px rgba(189, 189, 189, 0.75); 62 | } 63 | 64 | 65 | TextField.uber, 66 | Label.uber { 67 | font-family: "Uber Move", "UberMoveMedium"; 68 | font-weight: 500; 69 | } 70 | 71 | .light { 72 | font-family: "Uber Move", "UberMove-Light"; 73 | font-weight: 300; 74 | } 75 | 76 | .bold { 77 | font-family: "Uber Move", "UberMoveBold"; 78 | font-weight: 700; 79 | } -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import { createApp, registerElement } from 'nativescript-vue'; 2 | import Home from './views/Home.vue'; 3 | import CollectionView from '@nativescript-community/ui-collectionview/vue3'; 4 | import { createPinia } from 'pinia'; 5 | import TabsPlugin from '@nativescript-community/ui-material-tabs/vue'; 6 | import LottieView from '@nativescript-community/ui-lottie/vue'; 7 | import { habitRepository } from './repositories/habitRepository'; 8 | import { habitUtils } from './utils/habitUtils'; 9 | import { mockData } from './utils/mockData'; 10 | import SwipeMenuPlugin from '@nativescript-community/ui-collectionview-swipemenu/vue3'; 11 | import { BottomSheetPlugin } from '@nativescript-community/ui-material-bottomsheet/vue3'; 12 | import { install as installBottomSheet } from "@nativescript-community/ui-material-bottomsheet"; 13 | import { useColorMode, useColorPalette } from '@nativescript-use/vue'; 14 | import "@/utils/touchManagerUtils" 15 | installBottomSheet(); 16 | 17 | useColorMode(); 18 | useColorPalette({ 19 | palettes: [ 20 | { theme: "light", colors: { bg: "#FFFFFF", bgSecondary: "#f5f5f5e5", textColor: "black" } }, 21 | { theme: "dark", colors: { bg: "#1C2128", bgSecondary: "#21272f", textColor: "#white" } } 22 | ] 23 | }); 24 | 25 | habitRepository.removeAll() 26 | if (habitRepository.findAll().length === 0) { 27 | console.log("ADDING ITEMS TO STORAGE"); 28 | habitRepository.saveAll(habitUtils.buildNormalizedWeek(mockData)); 29 | } 30 | 31 | const pinia = createPinia(); 32 | const app = createApp(Home); 33 | // @ts-ignore 34 | app.use(pinia); 35 | app.use(CollectionView); 36 | app.use(TabsPlugin); 37 | app.use(BottomSheetPlugin); 38 | app.use(LottieView); 39 | app.use(SwipeMenuPlugin); 40 | 41 | app.start(); 42 | 43 | 44 | 45 | 46 | 47 | /* registerElement('BottomSheet', () => require('@nativescript-community/ui-persistent-bottomsheet').PersistentBottomSheet, { 48 | model: { 49 | prop: 'stepIndex', 50 | event: 'stepIndexChange', 51 | }, 52 | overwriteExisting: true, 53 | // @ts-ignore 54 | nodeOps: { 55 | insert(child, parent) { 56 | if (child.nativeView['~bottomSheet'] === '') { 57 | parent.nativeView.bottomSheet = child.nativeView; 58 | } 59 | } 60 | } 61 | }); */ -------------------------------------------------------------------------------- /src/assets/lottie/confetti.json: -------------------------------------------------------------------------------- 1 | {"v":"4.12.0","fr":29.9700012207031,"ip":0,"op":59.0000024031193,"w":800,"h":800,"nm":"confettis2","ddd":0,"assets":[{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"p20","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[71,152,0],"to":[1.83333337306976,-220.66667175293,0],"ti":[85.1666641235352,-23.3333339691162,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"p19","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[579,746,0],"to":[101.833335876465,91.3333358764648,0],"ti":[27.1666660308838,-153.33332824707,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"p18","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[503,238,0],"to":[-84.1666641235352,-74.6666641235352,0],"ti":[-88.8333358764648,-45.3333320617676,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"p17","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[91,556,0],"to":[-82.1666641235352,-112.666664123535,0],"ti":[73.1666641235352,-199.33332824707,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"p16","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[511,308,0],"to":[77.8333358764648,91.3333358764648,0],"ti":[51.1666679382324,60.6666679382324,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"p15","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[155,280,0],"to":[-30.1666660308838,-122.666664123535,0],"ti":[95.1666641235352,-53.3333320617676,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"p14","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[681,388.872,0],"to":[143.83332824707,49.3333320617676,0],"ti":[-58.8333320617676,48.6666679382324,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"p13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[257,284,0],"to":[-24.1666660308838,-72.6666641235352,0],"ti":[75.1666641235352,-5.33333349227905,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"p12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[301,474,0],"to":[-14.1666669845581,31.3333339691162,0],"ti":[65.1666641235352,-13.3333330154419,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"p11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[499,570,0],"to":[-8.16666698455811,63.3333320617676,0],"ti":[-62.8333320617676,-29.3333339691162,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"p10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[557,68,0],"to":[81.8333358764648,-104.666664123535,0],"ti":[-58.8333320617676,104.666664123535,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"p9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[715,138,0],"to":[151.83332824707,-46.6666679382324,0],"ti":[-26.8333339691162,72.6666641235352,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"p8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[679,664,0],"to":[107.833335876465,89.3333358764648,0],"ti":[-92.8333358764648,-103.333335876465,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"p7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[97,686,0],"to":[-36.1666679382324,53.3333320617676,0],"ti":[75.1666641235352,-39.3333320617676,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"p6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":5,"s":[100],"e":[0]},{"t":44.0000017921567}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":5,"s":[400,400,0],"e":[65,340,0],"to":[-148.16667175293,-132.66667175293,0],"ti":[61.1666679382324,-65.3333358764648,0]},{"t":44.0000017921567}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":5.00000020365417,"op":365.000014866755,"st":5.00000020365417,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"p5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":6,"s":[100],"e":[0]},{"t":45.0000018328876}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.004,"y":0.691},"o":{"x":0.014,"y":0},"n":"0p004_0p691_0p014_0","t":6,"s":[400,400,0],"e":[400,23.613,0],"to":[-55.3803939819336,-168.204071044922,0],"ti":[27.0301876068115,124.269813537598,0]},{"t":45.0000018328876}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":6.00000024438501,"op":366.000014907486,"st":6.00000024438501,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"p4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":7,"s":[100],"e":[0]},{"t":46.0000018736184}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":7,"s":[400,400,0],"e":[303,660,0],"to":[109.833335876465,69.3333358764648,0],"ti":[97.1666641235352,0.66666668653488,0]},{"t":46.0000018736184}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":7.00000028511585,"op":367.000014948216,"st":7.00000028511585,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"p3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":8,"s":[100],"e":[0]},{"t":47.0000019143492}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":8,"s":[400,400,0],"e":[663,498,0],"to":[41.8333320617676,109.333335876465,0],"ti":[-71.8333358764648,39.6666679382324,0]},{"t":47.0000019143492}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.076272718608,0.735462605953,0.171031266451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8.00000032584668,"op":368.000014988947,"st":8.00000032584668,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"p2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":9,"s":[100],"e":[0]},{"t":48.0000019550801}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":9,"s":[400,400,0],"e":[187,88,0],"to":[-0.16666667163372,-158.66667175293,0],"ti":[89.1666641235352,6.66666650772095,0]},{"t":48.0000019550801}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.271778345108,0.528400123119,0.952267169952,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":9.00000036657752,"op":369.000015029678,"st":9.00000036657752,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"p1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[621,234,0],"to":[-0.16666667163372,-158.66667175293,0],"ti":[-92.8333358764648,-103.333335876465,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.903676450253,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"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":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":42,"ix":10},"p":{"a":0,"k":[396,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":9.00000036657752,"op":369.000015029678,"st":9.00000036657752,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":267,"ix":10},"p":{"a":0,"k":[416,420,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":7.00000028511585,"op":367.000014948216,"st":7.00000028511585,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":358,"ix":10},"p":{"a":0,"k":[436,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":5.00000020365417,"op":365.000014866755,"st":5.00000020365417,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":177,"ix":10},"p":{"a":0,"k":[416,380,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":132,"ix":10},"p":{"a":0,"k":[416,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[396,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":8.00000032584668,"op":368.000014988947,"st":8.00000032584668,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":135,"ix":10},"p":{"a":0,"k":[416,420,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":6.00000024438501,"op":366.000014907486,"st":6.00000024438501,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":226,"ix":10},"p":{"a":0,"k":[436,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":45,"ix":10},"p":{"a":0,"k":[416,380,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[416,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":360.000014663101,"st":0,"bm":0}]} -------------------------------------------------------------------------------- /src/assets/lottie/empty.json: -------------------------------------------------------------------------------- 1 | {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.0.2","a":"","k":"","d":"","tc":"none"},"fr":30,"ip":0,"op":166,"w":600,"h":600,"nm":"fantoma","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"pupile Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[285.25,300,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[285.716,300,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[285.25,300,0],"to":[6,0,0],"ti":[-6,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.5,"s":[321.25,300,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[321.25,300,0],"to":[-6,0,0],"ti":[6,0,0]},{"t":123,"s":[285.25,300,0]}],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":1,"k":[{"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":18,"s":[100,100,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":[100,0,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":[100,100,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":105,"s":[100,100,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":107,"s":[100,0,100]},{"t":109,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.076],[4.076,0],[0,-4.076],[-4.076,0]],"o":[[0,-4.076],[-4.076,0],[0,4.076],[4.076,0]],"v":[[7.381,0],[0,-7.381],[-7.381,0],[0,7.381]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,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":[321.848,268.202],"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":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.076],[4.076,0],[0,-4.076],[-4.076,0]],"o":[[0,-4.076],[-4.076,0],[0,4.076],[4.076,0]],"v":[[7.381,0],[0,-7.381],[-7.381,0],[0,7.381]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,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":[271.206,268.202],"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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":166,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"ochi Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[300,300,0],"to":[3.75,0,0],"ti":[-3.75,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.5,"s":[322.5,300,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.8},"o":{"x":0.167,"y":0.167},"t":120,"s":[322.5,300,0],"to":[-3.75,0,0],"ti":[3.75,0,0]},{"t":123,"s":[300,300,0]}],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,10.987],[10.987,0],[0,-10.987],[-10.987,0]],"o":[[0,-10.987],[-10.987,0],[0,10.987],[10.987,0]],"v":[[19.893,0],[-0.001,-19.894],[-19.894,0],[-0.001,19.894]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.945098099054,0.949019667682,0.949019667682,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":[314.467,268.202],"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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,10.987],[10.987,0],[0,-10.987],[-10.987,0]],"o":[[0,-10.987],[-10.987,0],[0,10.987],[10.987,0]],"v":[[19.893,0],[-0.001,-19.894],[-19.894,0],[-0.001,19.894]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.945098099054,0.949019667682,0.949019667682,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":[262.734,268.202],"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 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":166,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"gura Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[300,300,0],"to":[3.75,0,0],"ti":[-3.75,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.5,"s":[322.5,300,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[322.5,300,0],"to":[-3.75,0,0],"ti":[3.75,0,0]},{"t":123,"s":[300,300,0]}],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.586,0],[0,0],[0,1.585],[0,0],[-1.586,0],[0,0],[0,-1.585],[0,0]],"o":[[0,0],[-1.586,0],[0,0],[0,-1.585],[0,0],[1.586,0],[0,0],[0,1.585]],"v":[[21.817,3.196],[-21.816,3.196],[-24.688,0.325],[-24.688,-0.325],[-21.816,-3.196],[21.817,-3.196],[24.688,-0.325],[24.688,0.325]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,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":[289.779,313.178],"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":0,"op":166,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"corp Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[300,300,0],"to":[-25,0,0],"ti":[-25,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[150,300,0],"to":[25,0,0],"ti":[-25,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[450,300,0],"to":[25,0,0],"ti":[25,0,0]},{"t":165,"s":[300,300,0]}],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[107.364,107.364,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,-0.029],[-5.404,0],[0,5.403],[0,0.026],[0,0],[-6.19,0],[0,-6.2],[0,0],[0,-0.007],[-4.612,0],[-0.002,4.61],[0,0],[0,0.001],[0,0.001],[0,0],[-6.12,0],[0,-7.11],[0,0],[0,-0.139],[-4.789,0],[0,4.789],[0.007,0.138],[0,0],[0,0],[-7.42,0],[-1.215,-6.4],[0,0],[-3.569,0],[-0.146,3.533],[0,0],[0,0],[39.19,0],[-0.142,-38.616]],"o":[[0,0],[0,0.029],[0,5.403],[5.403,0],[0,-0.026],[0,0],[0,-6.2],[6.2,0],[0,0],[0,0.007],[0,4.612],[4.61,0],[0,0],[0,-0.001],[0,-0.001],[0,0],[1.29,-5.73],[7.11,0],[0,0],[-0.007,0.138],[0,4.789],[4.789,0],[0,-0.139],[0,0],[0,0],[0,-7.43],[6.69,0],[0,0],[0.147,3.533],[3.569,0],[0,0],[0,0],[0.171,-39.19],[-39.19,0],[0,0]],"v":[[-70.798,47.727],[-70.798,99.573],[-70.802,99.659],[-61.018,109.443],[-51.234,99.659],[-51.238,99.582],[-51.238,85.617],[-40.018,74.397],[-28.798,85.617],[-28.798,113.853],[-28.799,113.872],[-20.448,122.224],[-12.098,113.877],[-12.098,113.875],[-12.098,113.872],[-12.098,113.87],[-12.098,95.096],[0.442,85.086],[13.312,97.947],[13.312,107.637],[13.309,108.049],[21.98,116.721],[30.651,108.049],[30.63,107.637],[30.652,107.637],[30.652,85.617],[44.092,72.167],[57.547,83.447],[57.553,99.656],[64.171,106.012],[70.789,99.656],[70.789,47.727],[70.789,-51.263],[0,-122.223],[-70.818,-51.837]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.43529411764705883,0.43529411764705883,0.43529411764705883,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,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":[300,307.076],"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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":166,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"fantoma fara umbra","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[300,300,0],"to":[0,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[300,310,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[300,300,0],"to":[0,0,0],"ti":[0,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[300,310,0],"to":[0,-1.667,0],"ti":[0,5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[300,290,0],"to":[0,-5,0],"ti":[0,-5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":70,"s":[300,280,0],"to":[0,5,0],"ti":[0,-5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[300,320,0],"to":[0,5,0],"ti":[0,6.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[300,310,0],"to":[0,-6.667,0],"ti":[0,3.333,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[300,280,0],"to":[0,-3.333,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[300,290,0],"to":[0,0,0],"ti":[0,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[300,280,0],"to":[0,1.667,0],"ti":[0,-3.333,0]},{"t":165,"s":[300,300,0]}],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"(Transform)","np":14,"mn":"ADBE Geometry2","ix":1,"en":1,"ef":[{"ty":3,"nm":"Anchor Point","mn":"ADBE Geometry2-0001","ix":1,"v":{"a":0,"k":[0,0],"ix":1}},{"ty":3,"nm":"Position","mn":"ADBE Geometry2-0002","ix":2,"v":{"a":0,"k":[0,0],"ix":2}},{"ty":7,"nm":"Uniform Scale","mn":"ADBE Geometry2-0011","ix":3,"v":{"a":0,"k":1,"ix":3}},{"ty":0,"nm":"Scale","mn":"ADBE Geometry2-0003","ix":4,"v":{"a":0,"k":100,"ix":4}},{"ty":0,"nm":" ","mn":"ADBE Geometry2-0004","ix":5,"v":{"a":0,"k":100,"ix":5}},{"ty":0,"nm":"Skew","mn":"ADBE Geometry2-0005","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Skew Axis","mn":"ADBE Geometry2-0006","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":0,"nm":"Rotation","mn":"ADBE Geometry2-0007","ix":8,"v":{"a":0,"k":0,"ix":8}},{"ty":0,"nm":"Opacity","mn":"ADBE Geometry2-0008","ix":9,"v":{"a":0,"k":100,"ix":9}},{"ty":7,"nm":"Use Composition’s Shutter Angle","mn":"ADBE Geometry2-0009","ix":10,"v":{"a":0,"k":1,"ix":10}},{"ty":0,"nm":"Shutter Angle","mn":"ADBE Geometry2-0010","ix":11,"v":{"a":0,"k":0,"ix":11}},{"ty":7,"nm":"Sampling","mn":"ADBE Geometry2-0012","ix":12,"v":{"a":0,"k":1,"ix":12}}]}],"w":600,"h":600,"ip":0,"op":167,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"umbra Outlines","sr":1,"ks":{"o":{"a":0,"k":60,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[300,493,0],"to":[-25,-0.167,0],"ti":[-25,0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[150,492,0],"to":[25,-0.167,0],"ti":[-25.042,-0.021,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[450,492,0],"to":[25.042,0.021,0],"ti":[24.958,-0.021,0]},{"t":165,"s":[300.25,492.125,0]}],"ix":2},"a":{"a":0,"k":[300,493,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.228]},"o":{"x":[0.937,0.937,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[92,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[110,110,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":130,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[90,90,100]},{"t":165,"s":[100,100,100]}],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Wiggle - scale","np":6,"mn":"ADBE CM WiggleScale","ix":1,"en":1,"ef":[{"ty":0,"nm":"Wiggle Speed (wigs/sec)","mn":"ADBE CM WiggleScale-0001","ix":1,"v":{"a":0,"k":1,"ix":1}},{"ty":0,"nm":"Wiggle Amount","mn":"ADBE CM WiggleScale-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[8]},{"t":161,"s":[0]}],"ix":2}},{"ty":7,"nm":"Wiggle Width Separately?","mn":"ADBE CM WiggleScale-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Wiggle Width","mn":"ADBE CM WiggleScale-0004","ix":4,"v":{"a":0,"k":10,"ix":4}}]},{"ty":5,"nm":"(Transform)","np":14,"mn":"ADBE Geometry2","ix":2,"en":1,"ef":[{"ty":3,"nm":"Anchor Point","mn":"ADBE Geometry2-0001","ix":1,"v":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\n$bm_rt = $bm_transform.anchorPoint;"}},{"ty":3,"nm":"Position","mn":"ADBE Geometry2-0002","ix":2,"v":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\n$bm_rt = $bm_transform.anchorPoint;"}},{"ty":7,"nm":"Uniform Scale","mn":"ADBE Geometry2-0011","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Scale Height","mn":"ADBE Geometry2-0003","ix":4,"v":{"a":0,"k":100,"ix":4,"x":"var $bm_rt;\nvar newScale;\nnewScale = wiggle(effect('Wiggle - scale')('Wiggle Speed (wigs/sec)'), effect('Wiggle - scale')('Wiggle Amount'));\n$bm_rt = newScale < 0 ? 0 : newScale;"}},{"ty":0,"nm":"Scale Width","mn":"ADBE Geometry2-0004","ix":5,"v":{"a":0,"k":100,"ix":5,"x":"var $bm_rt;\nvar newScale, newScale;\nif (effect('Wiggle - scale')('Wiggle Width Separately?') == true) {\n newScale = wiggle(effect('Wiggle - scale')('Wiggle Speed (wigs/sec)'), effect('Wiggle - scale')('Wiggle Width'), 1, 0.5, $bm_sum(time, 30));\n} else {\n newScale = effect('(Transform)')('Scale Height');\n}\n;\n$bm_rt = newScale < 0 ? 0 : newScale;"}},{"ty":0,"nm":"Skew","mn":"ADBE Geometry2-0005","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Skew Axis","mn":"ADBE Geometry2-0006","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":0,"nm":"Rotation","mn":"ADBE Geometry2-0007","ix":8,"v":{"a":0,"k":0,"ix":8}},{"ty":0,"nm":"Opacity","mn":"ADBE Geometry2-0008","ix":9,"v":{"a":0,"k":100,"ix":9}},{"ty":7,"nm":"Use Composition’s Shutter Angle","mn":"ADBE Geometry2-0009","ix":10,"v":{"a":0,"k":1,"ix":10}},{"ty":0,"nm":"Shutter Angle","mn":"ADBE Geometry2-0010","ix":11,"v":{"a":0,"k":0,"ix":11}},{"ty":7,"nm":"Sampling","mn":"ADBE Geometry2-0012","ix":12,"v":{"a":0,"k":1,"ix":12}}]}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.883],[43.436,0],[0,-4.883],[-43.435,0]],"o":[[0,-4.883],[-43.435,0],[0,4.883],[43.436,0]],"v":[[78.647,0],[0,-8.841],[-78.647,0],[0,8.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862745157878,0.866666726505,0.870588295133,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":[300,479.093],"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":0,"op":167,"st":0,"bm":0}],"markers":[{"tm":166,"cm":"1","dr":0}]} -------------------------------------------------------------------------------- /src/components/AddHabit.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | -------------------------------------------------------------------------------- /src/components/AddHabitSteps.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 81 | -------------------------------------------------------------------------------- /src/components/Emoji.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 39 | 40 | -------------------------------------------------------------------------------- /src/components/GlobalPage.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/Icon.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/components/ItemWeek.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/components/Menu.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 39 | -------------------------------------------------------------------------------- /src/components/Overlay.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | -------------------------------------------------------------------------------- /src/components/PeriodicityHabit.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 86 | -------------------------------------------------------------------------------- /src/components/Undo.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | -------------------------------------------------------------------------------- /src/composables/usePopover.ts: -------------------------------------------------------------------------------- 1 | import { showPopover, PopoverOptions } from "@nativescript-community/ui-popover"; 2 | import { useColorPalette } from "@nativescript-use/vue"; 3 | import { Color, StackLayout, View } from "@nativescript/core"; 4 | import { createNativeView, ref } from "nativescript-vue"; 5 | import { Palette } from "~/types"; 6 | 7 | const popovers: any[] = [] 8 | 9 | export function usePopover(component?: any, options?: Omit) { 10 | const isOpen = ref(); 11 | const isPresented = ref(); 12 | const { palette } = useColorPalette(); 13 | 14 | function open(viewTarget: View) { 15 | if (!isOpen.value) { 16 | const node = createNativeView(component); 17 | node.mount(); 18 | const view = node.nativeView; 19 | const stackLayout = new StackLayout(); 20 | stackLayout.addChild(view); 21 | isOpen.value, isPresented.value = true; 22 | 23 | const { close } = showPopover(stackLayout, 24 | Object.assign({ 25 | anchor: viewTarget, 26 | onDismiss: () => (isOpen.value, isPresented.value = false), 27 | onTapOutside: () => (isPresented.value = false), 28 | backgroundColor: new Color(palette.value.colors.bgSecondary) 29 | }, options) 30 | ); 31 | popovers.push(close); 32 | } 33 | } 34 | 35 | function close() { 36 | if (popovers.length > 0) { 37 | popovers[popovers.length - 1](); 38 | popovers.pop(); 39 | } 40 | } 41 | 42 | return { 43 | isOpen, 44 | isPresented, 45 | open, 46 | close 47 | } 48 | } -------------------------------------------------------------------------------- /src/composables/useSyncObservableArray.ts: -------------------------------------------------------------------------------- 1 | import { ObservableArray } from "@nativescript/core"; 2 | import { toRaw, watch, isReactive, isRef, ref, Ref } from "nativescript-vue"; 3 | 4 | const baseExcludeCompareFields = { startingSide: null, menuOpened: null }; 5 | 6 | export function useSyncObservableArray(arrayRef: Ref | T[], 7 | options: { 8 | addRemoveByField: string, 9 | excludeCompareFields?: string[], 10 | watchUpdates?: boolean, 11 | checkRemoved?: boolean, 12 | checkAdded?: boolean, 13 | checkUpdate?: boolean, 14 | } = { addRemoveByField: "" }) { 15 | const { checkRemoved = true, checkAdded = true, checkUpdate = true, excludeCompareFields = undefined, addRemoveByField } = options; 16 | const excludeFields = { ...baseExcludeCompareFields, ...excludeCompareFields?.reduce((a: any, b) => { a[b] = null; return a }, {}) }; 17 | console.log(addRemoveByField); 18 | watch(arrayRef, sync, { deep: true }) 19 | 20 | const observableArray = new ObservableArray(getClearArray(arrayRef)); 21 | /* let length = arrayRef.length; 22 | if (options?.watchUpdates && (isReactive(arrayRef) || isRef(arrayRef))) { 23 | watch(arrayRef, (newValue, oldValue) => { 24 | 25 | 26 | if (length === newValue.length) { 27 | // sync(); 28 | } else { 29 | length = newValue.length; 30 | } 31 | }, { deep: true }) 32 | 33 | watch( 34 | () => arrayRef.length, 35 | (newValue, oldValue) => { 36 | console.log("CALLED"); 37 | 38 | console.log(newValue); 39 | console.log(oldValue); 40 | console.time("TIME_[useSyncObservableArray.length]"); 41 | if (newValue > oldValue) { 42 | 43 | runAdded(cloneObject(arrayRef)); 44 | } else { 45 | runRemoved(cloneObject(arrayRef)); 46 | } 47 | console.timeEnd("TIME_[useSyncObservableArray.length]"); 48 | 49 | } 50 | ) 51 | } */ 52 | /* function syncdd(newArray?: any) { 53 | console.time("TIME_[useSyncObservableArray]"); 54 | const itemList = newArray ? cloneObject(newArray) : cloneObject(arrayRef); 55 | console.log(itemList.length) 56 | const indexRemoved: number[] = []; 57 | const indexAdd: number[] = []; 58 | const indexToUpdate: number[] = []; 59 | itemList.forEach((item: any, index: number) => { 60 | if (checkRemoved) { 61 | const findIndex = observableArray.findIndex((itemObservable: any) => item[addRemoveByField] === itemObservable[addRemoveByField]) 62 | if (findIndex != -1) { 63 | indexRemoved.push(findIndex); 64 | } 65 | } 66 | 67 | if (checkAdded) { 68 | const findIndex = observableArray.findIndex((itemObservable: any) => item[addRemoveByField] === itemObservable[addRemoveByField]) 69 | if (findIndex != -1) { 70 | indexRemoved.push(findIndex); 71 | } 72 | } 73 | 74 | if (checkUpdate) { 75 | const itemObservable = observableArray.getItem(index); 76 | if (!isEqualObject(itemObservable, item, excludeFields)) { 77 | indexToUpdate.push(index); 78 | } 79 | } 80 | }); 81 | indexAdd.forEach(index => (observableArray.splice(index, 0, itemList[index]))); 82 | indexAdd.forEach(index => (observableArray.splice(index, 0, itemList[index]))); 83 | 84 | indexRemoved.forEach(index => observableArray.splice(index, 1)); 85 | if (checkRemoved) { 86 | const indexRemoved: number[] = []; 87 | observableArray.forEach((itemObservable: any, index: number) => { 88 | const findItem = addRemoveByField ? 89 | itemList.find((item: any) => item[addRemoveByField] === itemObservable[addRemoveByField]) : 90 | itemList.find((item: any) => isEqualObject(item, itemObservable, excludeFields)) 91 | if (!findItem) { 92 | indexRemoved.push(index); 93 | } 94 | }) 95 | indexRemoved.forEach(index => observableArray.splice(index, 1)); 96 | } 97 | 98 | if (checkAdded) { 99 | 100 | const indexAdd: number[] = []; 101 | itemList.forEach((item: any, index: number) => { 102 | const findItem = addRemoveByField ? 103 | observableArray.find((itemObservable: any) => itemObservable[addRemoveByField] === item[addRemoveByField]) : 104 | observableArray.find((itemObservable: any) => isEqualObject(itemObservable, item, excludeFields)) 105 | if (!findItem) { 106 | indexAdd.push(index); 107 | } 108 | }) 109 | indexAdd.forEach(index => (observableArray.splice(index, 0, itemList[index]))); 110 | } 111 | 112 | if (checkUpdate) { 113 | itemList.forEach((item: any, index: number) => { 114 | const itemObservable = observableArray.getItem(index); 115 | if (!isEqualObject(itemObservable, item, excludeFields)) { 116 | observableArray.setItem(index, item); 117 | } 118 | }); 119 | } 120 | console.timeEnd("TIME_[useSyncObservableArray]"); 121 | } */ 122 | function sync(newArray?: Ref | T[]) { 123 | console.time("TIME_[useSyncObservableArray]"); 124 | const itemList = newArray ? getClearArray(newArray) : getClearArray(arrayRef); 125 | console.log(itemList.length) 126 | 127 | if (checkRemoved) { 128 | const indexRemoved: number[] = []; 129 | observableArray.forEach((itemObservable: any, index: number) => { 130 | const findItem = addRemoveByField ? 131 | itemList.find((item: any) => item[addRemoveByField] === itemObservable[addRemoveByField]) : 132 | itemList.find((item: any) => isEqualObject(item, itemObservable, excludeFields)) 133 | if (!findItem) { 134 | indexRemoved.push(index); 135 | } 136 | }) 137 | indexRemoved.forEach(index => observableArray.splice(index, 1)); 138 | } 139 | 140 | if (checkAdded) { 141 | const indexAdd: number[] = []; 142 | itemList.forEach((item: any, index: number) => { 143 | const findItem = addRemoveByField ? 144 | observableArray.find((itemObservable: any) => itemObservable[addRemoveByField] === item[addRemoveByField]) : 145 | observableArray.find((itemObservable: any) => isEqualObject(itemObservable, item, excludeFields)) 146 | if (!findItem) { 147 | indexAdd.push(index); 148 | } 149 | }) 150 | indexAdd.forEach(index => (observableArray.splice(index, 0, itemList[index]))); 151 | } 152 | 153 | if (checkUpdate) { 154 | itemList.forEach((item: any, index: number) => { 155 | const itemObservable = observableArray.getItem(index); 156 | if (!isEqualObject(itemObservable, item, excludeFields)) { 157 | observableArray.setItem(index, item); 158 | } 159 | }); 160 | } 161 | console.timeEnd("TIME_[useSyncObservableArray]"); 162 | } 163 | 164 | function runUpdates(itemList: any[]) { 165 | if (checkUpdate) { 166 | itemList.forEach((item: any, index: number) => { 167 | const itemObservable = observableArray.getItem(index); 168 | if (!isEqualObject(itemObservable, item, excludeFields)) { 169 | observableArray.setItem(index, item); 170 | } 171 | }); 172 | } 173 | 174 | } 175 | function runAdded(itemList: any[]) { 176 | if (checkAdded) { 177 | const indexAdd: number[] = []; 178 | itemList.forEach((item: any, index: number) => { 179 | const findItem = addRemoveByField ? 180 | observableArray.find((itemObservable: any) => itemObservable[addRemoveByField] === item[addRemoveByField]) : 181 | observableArray.find((itemObservable: any) => isEqualObject(itemObservable, item, excludeFields)) 182 | if (!findItem) { 183 | indexAdd.push(index); 184 | } 185 | }) 186 | indexAdd.forEach(index => (observableArray.splice(index, 0, itemList[index]))); 187 | } 188 | } 189 | function runRemoved(itemList: any[]) { 190 | console.log("runRemoved"); 191 | 192 | if (checkRemoved) { 193 | 194 | const indexRemoved: number[] = []; 195 | observableArray.forEach((itemObservable: any, index: number) => { 196 | const findItem = addRemoveByField ? 197 | itemList.find((item: any) => item[addRemoveByField] === itemObservable[addRemoveByField]) : 198 | itemList.find((item: any) => isEqualObject(item, itemObservable, excludeFields)) 199 | if (!findItem) { 200 | indexRemoved.push(index); 201 | } 202 | }) 203 | 204 | 205 | indexRemoved.forEach(index => observableArray.splice(index, 1)); 206 | } 207 | } 208 | 209 | /* function syncs(newArray?: any) { 210 | console.time("TIME_[useSyncObservableArray]"); 211 | const itemList = newArray ? cloneObject(newArray) : cloneObject(arrayRef); 212 | console.log(itemList.length) 213 | 214 | runRemoved(checkRemoved, observableArray, addRemoveByField!, itemList, excludeFields); 215 | runAdded(checkAdded, observableArray, addRemoveByField!, itemList, excludeFields); 216 | runUpdates(checkUpdate, observableArray, itemList, excludeFields); 217 | 218 | console.timeEnd("TIME_[useSyncObservableArray]"); 219 | } */ 220 | 221 | return { 222 | sync, 223 | observableArray 224 | } 225 | } 226 | 227 | function getClearArray(array: Ref | T[]) { 228 | return cloneObject(extractArray(array)); 229 | } 230 | 231 | function extractArray(array: Ref | T[]) { 232 | return isRef(array) ? array.value : array; 233 | } 234 | export function isEqualObject(a: any, b: any, excludeFields: any) { 235 | const aObject = { ...a, ...excludeFields }; 236 | const bObject = { ...b, ...excludeFields }; 237 | return JSON.stringify(aObject) === JSON.stringify(bObject); 238 | } 239 | 240 | export function cloneObject(object: any) { 241 | return JSON.parse(JSON.stringify(toRaw(object))); 242 | } -------------------------------------------------------------------------------- /src/fonts/MaterialSymbolsOutlined.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/src/fonts/MaterialSymbolsOutlined.ttf -------------------------------------------------------------------------------- /src/fonts/MaterialSymbolsRounded.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/src/fonts/MaterialSymbolsRounded.ttf -------------------------------------------------------------------------------- /src/fonts/UberMove-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/src/fonts/UberMove-Light.ttf -------------------------------------------------------------------------------- /src/fonts/UberMoveBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/src/fonts/UberMoveBold.otf -------------------------------------------------------------------------------- /src/fonts/UberMoveMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vallemar/nativescript-reordering/96d491dd55c6ac3850174049f76954be64c6c79f/src/fonts/UberMoveMedium.otf -------------------------------------------------------------------------------- /src/native/ColorPicker/index.android.ts: -------------------------------------------------------------------------------- 1 | import { Color, Utils } from "@nativescript/core"; 2 | 3 | @NativeClass() 4 | export class ColorPicker { 5 | onChangeColor: (color: Color) => void = null! 6 | 7 | constructor(onChangeColor: (color: Color) => void) { 8 | this.onChangeColor = onChangeColor; 9 | } 10 | 11 | open(color: Color) { 12 | try { 13 | const self = this; 14 | const builder = new com.skydoves.colorpickerview.ColorPickerDialog.Builder(Utils.android.getCurrentActivity()) 15 | .setTitle("ColorPicker Dialog") 16 | .setPreferenceName("MyColorPickerDialog") 17 | .setPositiveButton("OK", 18 | new com.skydoves.colorpickerview.listeners.ColorEnvelopeListener({ 19 | onColorSelected(colorEnvelope: com.skydoves.colorpickerview.ColorEnvelope, fromUser: boolean) { 20 | if (self.onChangeColor) { 21 | const color = java.lang.Long.parseLong(colorEnvelope.getHexCode(), 16); 22 | const red = (color >> 16) & 0xFF; 23 | const green = (color >> 8) & 0xFF; 24 | const blue = (color) & 0xFF; 25 | const alpha = (color >> 24) & 0xFF; 26 | self.onChangeColor(new Color(alpha, red, green, blue, "rgb")); 27 | } 28 | } 29 | })) 30 | .setNegativeButton("Cancel", 31 | new android.content.DialogInterface.OnClickListener({ 32 | onClick(dialogInterface, i) { 33 | dialogInterface.dismiss(); 34 | } 35 | })) 36 | .attachAlphaSlideBar(true) // the default value is true. 37 | .attachBrightnessSlideBar(true) // the default value is true. 38 | .setBottomSpace(12) // set a bottom space between the last slidebar and buttons. 39 | ; 40 | const colorPickerView = builder.getColorPickerView(); 41 | const bubbleFlag = new com.skydoves.colorpickerview.flag.BubbleFlag(Utils.android.getCurrentActivity()); 42 | bubbleFlag.setFlagMode(com.skydoves.colorpickerview.flag.FlagMode.FADE); 43 | colorPickerView.setFlagView(bubbleFlag); 44 | builder.show() 45 | } catch (error) { 46 | console.log(error); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/native/ColorPicker/index.d.ts: -------------------------------------------------------------------------------- 1 | 2 | export declare class ColorPicker{ 3 | constructor(onChangeColor: (color: Color) => void); 4 | open: (color: Color) => void; 5 | } -------------------------------------------------------------------------------- /src/native/ColorPicker/index.ios.ts: -------------------------------------------------------------------------------- 1 | import { Color, Utils } from "@nativescript/core"; 2 | 3 | @NativeClass() 4 | export class ColorPicker 5 | extends NSObject 6 | implements UIColorPickerViewControllerDelegate { 7 | static ObjCProtocols = [UIColorPickerViewControllerDelegate]; 8 | 9 | onChangeColor: (color: Color) => void = null! 10 | 11 | constructor(onChangeColor: (color: Color) => void) { 12 | super(); 13 | this.onChangeColor = onChangeColor; 14 | } 15 | 16 | open(color: Color) { 17 | const picker = UIColorPickerViewController.alloc().init(); 18 | const colorDelegate = this; 19 | picker.delegate = colorDelegate; 20 | picker.selectedColor = color.ios; 21 | Utils.ios 22 | .getRootViewController() 23 | .presentViewControllerAnimatedCompletion(picker, true, null!); 24 | } 25 | 26 | colorPickerViewControllerDidFinish( 27 | viewController: UIColorPickerViewController 28 | ) { 29 | console.log( 30 | 'DidFinish:', 31 | Color.fromIosColor(viewController.selectedColor).hex 32 | ); 33 | 34 | if (this.onChangeColor) 35 | this.onChangeColor(Color.fromIosColor(viewController.selectedColor)) 36 | 37 | } 38 | 39 | colorPickerViewControllerDidSelectColorContinuously( 40 | viewController: UIColorPickerViewController, 41 | color: UIColor, 42 | continuously: boolean 43 | ) { 44 | console.log( 45 | 'DidSelectColor:', 46 | Color.fromIosColor(viewController.selectedColor).hex, 47 | 'continuously?', 48 | continuously 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/repositories/habitRepository.ts: -------------------------------------------------------------------------------- 1 | import { useStorage } from "@nativescript-use/vue"; 2 | import { Habit } from "~/types"; 3 | 4 | const storage = useStorage(); 5 | 6 | 7 | export const habitRepository = { 8 | key: "habits", 9 | findAll() { 10 | return storage.getObject(habitRepository.key) ?? []; 11 | }, 12 | saveAll(habits: Habit[]) { 13 | storage.setObject(habitRepository.key, habits); 14 | }, 15 | removeAll() { 16 | storage.remove(habitRepository.key); 17 | } 18 | } -------------------------------------------------------------------------------- /src/stores/habitStore.ts: -------------------------------------------------------------------------------- 1 | import { ref } from "nativescript-vue" 2 | import { defineStore } from "pinia" 3 | import { habitRepository } from "~/repositories/habitRepository"; 4 | import { HabitDay, Habit } from "~/types"; 5 | import { habitUtils } from "~/utils/habitUtils"; 6 | import { getTodayDayFormat } from "~/utils/dateUtils"; 7 | 8 | export const useHabitStore = defineStore('habit', () => { 9 | const habits = ref(habitRepository.findAll()); 10 | 11 | function findById(id: string): Habit | undefined { 12 | return habits.value.find(habit => habit.id === id); 13 | } 14 | 15 | function getIndex(id: string) { 16 | return habits.value.findIndex(habit => habit.id === id)!; 17 | } 18 | 19 | function deleteItemById(id: string) { 20 | habits.value.splice(findIndexById(id), 1) 21 | habitRepository.saveAll(habits.value); 22 | } 23 | 24 | function findIndexById(id: string) { 25 | return habits.value.findIndex(habit => habit.id === id); 26 | } 27 | 28 | function updateOrAddItemWeek(id: string, habitDay: HabitDay, value: number) { 29 | const index = getIndex(id); 30 | const habit = habits.value[index]; 31 | const storedHabitDay = findIndexHabitDay(habitDay.date, habit); 32 | const updatedOrAddDay = storedHabitDay?.habitDay ?? habitDay; 33 | updatedOrAddDay.value = value; 34 | if (storedHabitDay?.index) { 35 | habit.week[storedHabitDay?.index] = updatedOrAddDay; 36 | } else { 37 | habit.week.push(updatedOrAddDay); 38 | } 39 | habit.normalizedWeek = habitUtils.buildNormalizedWeek([habit])[0]?.normalizedWeek; 40 | habits.value[index] = habit; 41 | habitRepository.saveAll(habits.value); 42 | } 43 | 44 | function updateItem(habit: Habit) { 45 | const index = getIndex(habit.id); 46 | habits.value[index] = habit; 47 | habitRepository.saveAll(habits.value); 48 | } 49 | 50 | function addItem(habit: Habit, index?: number) { 51 | habit.normalizedWeek = habitUtils.buildNormalizedWeek([habit])[0]?.normalizedWeek; 52 | if (typeof index === "number") { 53 | habits.value.splice(index, 0, habit); 54 | } else { 55 | habits.value.push(habit); 56 | } 57 | 58 | habitRepository.saveAll(habits.value); 59 | } 60 | 61 | function findIndexHabitDay(targetDate: String, habitTarget?: Habit): { habit: Habit, habitDay: HabitDay, index: number } | undefined { 62 | for (let habitIndex = 0; habitIndex < habits.value.length; habitIndex++) { 63 | const habit = habits.value[habitIndex]; 64 | if (habitTarget && habitTarget?.id != habit.id) { 65 | continue; 66 | } 67 | 68 | const dateIndex = habit.week.findIndex((day) => day.date === targetDate); 69 | if (dateIndex !== -1) { 70 | return { habit, habitDay: habit.week[dateIndex], index: dateIndex }; 71 | } 72 | } 73 | return undefined; 74 | } 75 | 76 | function getTodayHabitDayIndex(habit: Habit) { 77 | return findIndexHabitDay(getTodayDayFormat(), habit)?.index; 78 | } 79 | 80 | function clone(listToCloneIndex: Habit[]) { 81 | habits.value = listToCloneIndex; 82 | } 83 | return { habits, findById, getIndex, getTodayHabitDayIndex, updateOrAddItemWeek, updateItem, addItem, findIndexHabitDay, findIndexById, deleteItemById, clone } 84 | }) -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { View } from "@nativescript/core"; 2 | 3 | export type HabitDay = { 4 | date: string, 5 | value: number, 6 | } 7 | 8 | export type Habit = { 9 | id: string, 10 | title: string, 11 | periodicity: Periodicity, 12 | color: string, 13 | icon: string, 14 | week: HabitDay[], 15 | normalizedWeek?: HabitDay[], 16 | index?: number 17 | } 18 | 19 | export enum Periodicity { 20 | Day, 21 | Week 22 | } 23 | 24 | export type SpringParams = { 25 | tension?: number; 26 | friction?: number; 27 | mass?: number; 28 | delay?: number; 29 | velocity?: number; 30 | } 31 | 32 | export type AnimateOptions = { 33 | translate?: { x?: number, y?: number }, 34 | scale?: { x?: number, y?: number }, 35 | rotation?: number, 36 | alpha?: number, 37 | size?: { 38 | width: number, 39 | height: number 40 | }, 41 | params?: SpringParams, 42 | onBeforeStartAnimation?: (view: View) => void 43 | onCompletion?: (view: View) => void 44 | } 45 | 46 | export type Palette = { 47 | bg: string, 48 | bgSecondary: string, 49 | textColor: string, 50 | } 51 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { toRaw } from "nativescript-vue"; 2 | import { Habit, HabitDay } from "./types"; 3 | import dayjs from 'dayjs' 4 | 5 | export function getRandomColor() { 6 | return `hsla(${~~(360 * Math.random())}, 70%, 72%, 0.8)`; 7 | } 8 | 9 | export function UUID() { // Public Domain/MIT 10 | var d = new Date().getTime();//Timestamp 11 | var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1000)) || 0;//Time in microseconds since page-load or 0 if unsupported 12 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 13 | var r = Math.random() * 16;//random number between 0 and 16 14 | if (d > 0) {//Use timestamp until depleted 15 | r = (d + r) % 16 | 0; 16 | d = Math.floor(d / 16); 17 | } else {//Use microseconds since page-load if supported 18 | r = (d2 + r) % 16 | 0; 19 | d2 = Math.floor(d2 / 16); 20 | } 21 | return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); 22 | }); 23 | } 24 | 25 | export function buildRandomDayWeek() { 26 | const habitDays: HabitDay[] = []; 27 | for (let index = 4; index >= 0; index--) { 28 | habitDays.push({ 29 | date: dayjs().subtract(index, 'day').format('YYYY-MM-DD'), 30 | value: Math.floor(Math.random() * (5 - 1 + 1) + 1) 31 | }) 32 | } 33 | return habitDays; 34 | } 35 | 36 | export function isEqualObject(a: any, b: any){ 37 | return JSON.stringify(a) === JSON.stringify(b); 38 | } 39 | 40 | export function cloneObject(object: any){ 41 | return JSON.parse(JSON.stringify(toRaw(object))); 42 | } -------------------------------------------------------------------------------- /src/utils/animation.ts: -------------------------------------------------------------------------------- 1 | import { isAndroid, View, Utils } from "@nativescript/core"; 2 | 3 | import { AnimateOptions, SpringParams } from "~/types"; 4 | 5 | type Overwrite = Pick> & U; 6 | type Required = { 7 | [P in keyof T]-?: T[P]; 8 | }; 9 | type Params = Required; 10 | type AnimateOptionsInternal = Overwrite; 11 | 12 | export const animateView = (view: View, options: AnimateOptions) => { 13 | options.params = Object.assign({}, { 14 | tension: 150, 15 | friction: isAndroid ? 0.6 : 10, 16 | mass: 1, 17 | velocity: 0, 18 | } as Params) 19 | 20 | if (isAndroid) { 21 | animateAndroid(view, options as AnimateOptionsInternal); 22 | } else { 23 | animateIOS(view, options as AnimateOptionsInternal); 24 | } 25 | } 26 | 27 | function animateAndroid(view: View, animation: AnimateOptionsInternal) { 28 | if (typeof animation.translate?.x === "number") { 29 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation( 30 | view.android, androidx.dynamicanimation.animation.DynamicAnimation.TRANSLATION_X, 31 | Utils.layout.toDevicePixels( 32 | animation.translate?.x 33 | ) 34 | ); 35 | 36 | springAnim.getSpring().setStiffness(animation.params.tension) 37 | springAnim.getSpring().setDampingRatio(animation.params.friction) 38 | springAnim.start(); 39 | } 40 | if (typeof animation.translate?.y === "number") { 41 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation( 42 | view.android, androidx.dynamicanimation.animation.DynamicAnimation.TRANSLATION_Y, 43 | Utils.layout.toDevicePixels( 44 | animation.translate?.y 45 | ) 46 | ); 47 | springAnim.getSpring().setStiffness(animation.params.tension) 48 | springAnim.getSpring().setDampingRatio(animation.params.friction) 49 | springAnim.start(); 50 | } 51 | if (typeof animation.scale?.x === "number") { 52 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation(view.android, androidx.dynamicanimation.animation.DynamicAnimation.SCALE_X) 53 | const spring = new androidx.dynamicanimation.animation.SpringForce() 54 | .setFinalPosition(animation.scale?.x) 55 | .setStiffness(animation.params.tension) 56 | .setDampingRatio(animation.params.friction) 57 | springAnim.setSpring(spring) 58 | springAnim.getSpring().setStiffness(animation.params.tension) 59 | springAnim.getSpring().setDampingRatio(animation.params.friction) 60 | springAnim.start(); 61 | } 62 | if (typeof animation.scale?.y === "number") { 63 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation(view.android, androidx.dynamicanimation.animation.DynamicAnimation.SCALE_Y) 64 | const spring = new androidx.dynamicanimation.animation.SpringForce() 65 | .setFinalPosition(animation.scale?.y) 66 | .setStiffness(animation.params.tension) 67 | .setDampingRatio(animation.params.friction) 68 | springAnim.setSpring(spring) 69 | springAnim.getSpring().setStiffness(animation.params.tension) 70 | springAnim.getSpring().setDampingRatio(animation.params.friction) 71 | springAnim.start(); 72 | } 73 | 74 | if (typeof animation.size?.width === "number") { 75 | const scaleWidth = calculateScaleFactor(view.getActualSize().width, animation.size?.width) 76 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation(view.android, androidx.dynamicanimation.animation.DynamicAnimation.SCALE_X) 77 | const spring = new androidx.dynamicanimation.animation.SpringForce() 78 | .setFinalPosition(scaleWidth) 79 | .setStiffness(animation.params.tension) 80 | .setDampingRatio(animation.params.friction) 81 | springAnim.setSpring(spring) 82 | springAnim.getSpring().setStiffness(animation.params.tension) 83 | springAnim.getSpring().setDampingRatio(animation.params.friction) 84 | springAnim.start(); 85 | } 86 | if (typeof animation.size?.height === "number") { 87 | const scaleHeight = calculateScaleFactor(view.getActualSize().height, animation.size?.height) 88 | 89 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation(view.android, androidx.dynamicanimation.animation.DynamicAnimation.SCALE_Y) 90 | const spring = new androidx.dynamicanimation.animation.SpringForce() 91 | .setFinalPosition(scaleHeight) 92 | .setStiffness(animation.params.tension) 93 | .setDampingRatio(animation.params.friction) 94 | springAnim.setSpring(spring) 95 | springAnim.getSpring().setStiffness(animation.params.tension) 96 | springAnim.getSpring().setDampingRatio(animation.params.friction) 97 | springAnim.start(); 98 | } 99 | if (typeof animation.rotation === "number") { 100 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation( 101 | view.android, androidx.dynamicanimation.animation.DynamicAnimation.ROTATION, 102 | animation.rotation 103 | ); 104 | springAnim.getSpring().setStiffness(animation.params.tension) 105 | springAnim.getSpring().setDampingRatio(animation.params.friction) 106 | springAnim.start(); 107 | } 108 | if (typeof animation.alpha === "number") { 109 | const springAnim = new androidx.dynamicanimation.animation.SpringAnimation( 110 | view.android, androidx.dynamicanimation.animation.DynamicAnimation.ALPHA, 111 | animation.alpha 112 | ); 113 | springAnim.getSpring().setStiffness(animation.params.tension) 114 | springAnim.getSpring().setDampingRatio(animation.params.friction) 115 | springAnim.start(); 116 | } 117 | 118 | 119 | } 120 | 121 | function animateIOS(view: View, animation: AnimateOptionsInternal) { 122 | Utils.ios.animateWithSpring({ 123 | ...animation.params, 124 | completion: () => { 125 | if (animation.onCompletion) 126 | animation.onCompletion(view) 127 | 128 | }, 129 | animations: () => { 130 | const uiView = view.ios; 131 | const transforms: CGAffineTransform[] = [] 132 | if (animation.onBeforeStartAnimation) 133 | animation.onBeforeStartAnimation(view) 134 | 135 | if (typeof animation.scale?.x === "number" && typeof animation.scale?.y === "number") { 136 | transforms.push(CGAffineTransformMakeScale( 137 | animation.scale?.x, 138 | animation.scale?.y 139 | )) 140 | } 141 | 142 | if (typeof animation.size?.width === "number" && typeof animation.size?.height === "number") { 143 | const currentSize = uiView.frame.size 144 | const scaleWidth = calculateScaleFactor(currentSize.width, animation.size?.width); 145 | const scaleHeight = calculateScaleFactor(currentSize.height, animation.size?.height); 146 | 147 | transforms.push(CGAffineTransformMakeScale( 148 | scaleWidth, 149 | scaleHeight 150 | )) 151 | } 152 | if (typeof animation.translate?.x === "number" && typeof animation.translate?.y === "number") { 153 | transforms.push(CGAffineTransformMakeTranslation(animation.translate.x, animation.translate?.y 154 | )) 155 | } 156 | if (typeof animation.rotation === "number") { 157 | transforms.push(CGAffineTransformMakeRotation(animation.rotation * 3.1416 / 180)) 158 | 159 | } 160 | if (animation.alpha || animation.alpha === 0) { 161 | uiView.layer.opacity = animation.alpha; 162 | } 163 | if (transforms.length > 1) { 164 | let baseTransform = transforms[0]; 165 | transforms.forEach((transform, index) => { 166 | if (index != 0) { 167 | baseTransform = CGAffineTransformConcat(baseTransform, transform) 168 | } 169 | }) 170 | uiView.transform = CGAffineTransformConcat(uiView.transform, baseTransform); 171 | } 172 | else { 173 | uiView.transform = transforms[0]; //CGAffineTransformConcat(uiView.transform, transforms[0]) 174 | } 175 | } 176 | }); 177 | } 178 | 179 | function calculateScaleFactor(currentSize: number, desiredSize: number) { 180 | const scaleSize = desiredSize / currentSize 181 | 182 | return scaleSize; 183 | } 184 | -------------------------------------------------------------------------------- /src/utils/collectionViewUtils.ts: -------------------------------------------------------------------------------- 1 | 2 | export const collectionViewUtils = { 3 | drawerTranslationFunction(side: string, width: number, value: number, delta: number, progress: number) { 4 | const result = { 5 | mainContent: { 6 | translateX: side === 'right' ? -delta : delta, 7 | 8 | }, 9 | backDrop: { 10 | translateX: side === 'right' ? -delta : delta, 11 | opacity: progress * 0.00001, 12 | }, 13 | rightDrawer: { 14 | opacity: progress, 15 | } 16 | } as any; 17 | return result; 18 | } 19 | } -------------------------------------------------------------------------------- /src/utils/colorUtils.ts: -------------------------------------------------------------------------------- 1 | export function getTextColorBasedOnBG(hexcolor: string) { 2 | var r = parseInt(hexcolor.substring(1, 3), 16); 3 | var g = parseInt(hexcolor.substring(3, 5), 16); 4 | var b = parseInt(hexcolor.substring(5, 7), 16); 5 | var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; 6 | return (yiq >= 128) ? 'black' : 'white'; 7 | } -------------------------------------------------------------------------------- /src/utils/dateUtils.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs' 2 | import { DAY_DATE_FORMAT } from './mockData'; 3 | 4 | export function getShowDays() { 5 | const days = [] 6 | 7 | for (let index = 0; index < 5; index++) { 8 | days.push({ 9 | date: dayjs().subtract(index, 'day').format(DAY_DATE_FORMAT), 10 | dayWeekName: dayjs().subtract(index, 'day').format('dd') 11 | }) 12 | } 13 | return days; 14 | } 15 | 16 | export const getTodayDayFormat = () => dayjs().format(DAY_DATE_FORMAT); -------------------------------------------------------------------------------- /src/utils/habitUtils.ts: -------------------------------------------------------------------------------- 1 | import { Habit, HabitDay } from "~/types"; 2 | 3 | export const habitUtils = { 4 | buildNormalizedWeek(data: Habit[]) { 5 | data.forEach((item: Habit) => { 6 | const array = item.week; 7 | 8 | const dayWeekValue = array.map(dayWeek => dayWeek.value); 9 | const maxOriginalValue = 5; 10 | const minOriginalValue = 0; 11 | 12 | const originalRange = maxOriginalValue - minOriginalValue; 13 | const desiredRange = 20 - 5; 14 | 15 | item.normalizedWeek = dayWeekValue.map((value: number, index: number) => { 16 | // Normalize the value within the new range 17 | const normalizedValue = 5 + ((value - minOriginalValue) / originalRange) * desiredRange; 18 | return { date: array[index].date as string, value: normalizedValue } as HabitDay; 19 | }); 20 | }) 21 | return data; 22 | } 23 | } -------------------------------------------------------------------------------- /src/utils/mockData.ts: -------------------------------------------------------------------------------- 1 | import { Habit, Periodicity } from "../types"; 2 | import { UUID } from "../utils"; 3 | import { buildRandomDayWeek } from "../utils"; 4 | 5 | export const mockData: Habit[] = [ 6 | { id: UUID(), title: 'Meditation', periodicity: Periodicity.Day, color: '#7f73eb', icon: "🧘", week: buildRandomDayWeek() }, 7 | { id: UUID(), title: 'Coding', periodicity: Periodicity.Day, color: '#6db7fd', icon: "👨‍💻", week: buildRandomDayWeek() }, 8 | { id: UUID(), title: 'Eat healthy', periodicity: Periodicity.Day, color: '#70d0a5', icon: "🥗", week: buildRandomDayWeek() }, 9 | { id: UUID(), title: 'Workout', periodicity: Periodicity.Day, color: '#ee7b83', icon: "🏋️", week: buildRandomDayWeek() }, 10 | { id: UUID(), title: 'Reading', periodicity: Periodicity.Day, color: '#fb9e5b', icon: "📚", week: buildRandomDayWeek() }, 11 | //{ id: UUID(), title: 'Music', periodicity: Periodicity.Day, color: '#f0f19b', icon: "🎶", week: buildRandomDayWeek() } 12 | ]; 13 | 14 | export const maxCountDayRange = 5; 15 | 16 | export const addHabitHeightSteps = [0, 260, 260, 260, 260, 260]; 17 | 18 | export const DAY_DATE_FORMAT = 'YYYY-MM-DD'; 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/utils/rootLayoutUtils.ts: -------------------------------------------------------------------------------- 1 | import { CoreTypes } from "@nativescript/core"; 2 | import { CubicBezierAnimationCurve } from "@nativescript/core/ui/animation"; 3 | 4 | export const SHEET_CURVE = CoreTypes.AnimationCurve.cubicBezier( 5 | 0.17, 6 | 0.89, 7 | 0.24, 8 | 1.11 9 | ); 10 | 11 | export const SHADE_COVER = { 12 | color: '#000', // Set the color of the shade cover 13 | opacity: 0.5, // Set the opacity of the shade cover 14 | tapToClose: true, // Allow tapping on the shade cover to close the bottom sheet 15 | }; 16 | 17 | const COORDS = { 18 | noAnimation: { trans: 'translateY', enter: 0, exit: 400 }, 19 | top: { trans: 'translateY', enter: -100, exit: -400 }, 20 | bottom: { trans: 'translateY', enter: 100, exit: 100 }, 21 | left: { trans: 'translateX', enter: -100, exit: -400 }, 22 | right: { trans: 'translateX', enter: 100, exit: 400 }, 23 | }; 24 | 25 | 26 | export type DIRECTION = keyof typeof COORDS; 27 | 28 | export const ANIMATION = ( 29 | direction: DIRECTION, 30 | duration: number = 300, 31 | curve: string | CubicBezierAnimationCurve = SHEET_CURVE 32 | ) => ({ 33 | enterFrom: { 34 | [COORDS[direction].trans]: COORDS[direction].enter, 35 | duration, 36 | curve, 37 | }, 38 | exitTo: { 39 | [COORDS[direction].trans]: COORDS[direction].exit, 40 | duration, 41 | curve, 42 | opacity: 0 43 | }, 44 | }); -------------------------------------------------------------------------------- /src/utils/touchManagerUtils.ts: -------------------------------------------------------------------------------- 1 | import { CoreTypes, TouchManager, View } from "@nativescript/core"; 2 | 3 | const originalTransform = Symbol('originalTransform'); 4 | TouchManager.enableGlobalTapAnimations = true; 5 | TouchManager.animations = { 6 | down: (view: View) => { 7 | if (global.isIOS) { 8 | UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( 9 | 0.3, 10 | 0, 11 | 0.5, 12 | 3, 13 | UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.AllowUserInteraction, 14 | () => { 15 | if (view?.ios) { 16 | // @ts-ignore 17 | view[originalTransform] = view[originalTransform] ?? view.ios.transform; 18 | 19 | view.ios.transform = CGAffineTransformConcat( 20 | // @ts-ignore 21 | view[originalTransform], 22 | CGAffineTransformMakeScale(0.97, 0.97) 23 | ); 24 | } 25 | }, 26 | null! 27 | ); 28 | } else { 29 | view 30 | ?.animate({ 31 | scale: { x: 0.97, y: 0.97 }, 32 | duration: 120, 33 | curve: CoreTypes.AnimationCurve.easeInOut, 34 | }) 35 | .then(() => { }) 36 | .catch(() => { }); 37 | } 38 | }, 39 | up: (view: View) => { 40 | if (global.isIOS) { 41 | UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( 42 | 0.3, 43 | 0, 44 | 0.5, 45 | 3, 46 | UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.AllowUserInteraction, 47 | () => { 48 | if (view?.ios) { 49 | // @ts-ignore 50 | view.ios.transform = view[originalTransform] ?? CGAffineTransformMakeScale(1, 1); 51 | } 52 | }, 53 | null! 54 | ); 55 | } else { 56 | view 57 | ?.animate({ 58 | scale: { x: 1, y: 1 }, 59 | duration: 120, 60 | curve: CoreTypes.AnimationCurve.easeInOut, 61 | }) 62 | .then(() => { }) 63 | .catch(() => { }); 64 | } 65 | }, 66 | }; 67 | 68 | export const touchAnimationIcon = { 69 | down: (view: View) => { 70 | if (global.isIOS) { 71 | UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( 72 | 0.6, 73 | 0, 74 | 0.8, 75 | 200, 76 | UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.AllowUserInteraction, 77 | () => { 78 | if (view?.ios) { 79 | // @ts-ignore 80 | view[originalTransform] = view[originalTransform] ?? view.ios.transform; 81 | 82 | view.ios.transform = CGAffineTransformConcat( 83 | // @ts-ignore 84 | view[originalTransform], 85 | CGAffineTransformMakeScale(0.97, 0.97) 86 | ); 87 | } 88 | }, 89 | null! 90 | ); 91 | } else { 92 | view 93 | ?.animate({ 94 | scale: { x: 0.85, y: 0.85 }, 95 | duration: 120, 96 | curve: CoreTypes.AnimationCurve.easeInOut, 97 | }) 98 | .then(() => { }) 99 | .catch(() => { }); 100 | } 101 | }, 102 | up: (view: View) => { 103 | if (global.isIOS) { 104 | UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( 105 | 0.3, 106 | 0, 107 | 0.5, 108 | 3, 109 | UIViewAnimationOptions.CurveEaseInOut | UIViewAnimationOptions.AllowUserInteraction, 110 | () => { 111 | if (view?.ios) { 112 | // @ts-ignore 113 | view.ios.transform = view[originalTransform] ?? CGAffineTransformMakeScale(1, 1); 114 | } 115 | }, 116 | null! 117 | ); 118 | } else { 119 | view 120 | ?.animate({ 121 | scale: { x: 1, y: 1 }, 122 | duration: 120, 123 | curve: CoreTypes.AnimationCurve.easeInOut, 124 | }) 125 | .then(() => { }) 126 | .catch(() => { }); 127 | } 128 | }, 129 | }; -------------------------------------------------------------------------------- /src/views/Habit.vue: -------------------------------------------------------------------------------- 1 | 97 | 98 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 106 | 107 | 183 | -------------------------------------------------------------------------------- /src/views/Settings.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | const plugin = require('tailwindcss/plugin'); 3 | 4 | module.exports = { 5 | content: ['./src/**/*.{css,xml,html,vue,svelte,ts,tsx}'], 6 | // use the .ns-dark class to control dark mode (applied by NativeScript) - since 'media' (default) is not supported. 7 | darkMode: ['class', '.ns-dark'], 8 | theme: { 9 | extend: {}, 10 | }, 11 | plugins: [ 12 | plugin(function ({ addVariant }) { 13 | addVariant('android', '.ns-android &'); 14 | addVariant('ios', '.ns-ios &'); 15 | }), 16 | ], 17 | corePlugins: { 18 | preflight: false, // disables browser-specific resets 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "target": "esnext", 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "lib": ["esnext", "WebWorker"], 8 | "sourceMap": true, 9 | "noEmitHelpers": true, 10 | "importHelpers": true, 11 | "baseUrl": ".", 12 | "paths": { 13 | "~/*": ["src/*"], 14 | "@/*": ["src/*"] 15 | }, 16 | "allowSyntheticDefaultImports": true, 17 | "esModuleInterop": true, 18 | "experimentalDecorators": true, 19 | "emitDecoratorMetadata": true, 20 | "skipLibCheck": true 21 | }, 22 | "vueCompilerOptions": { 23 | "target": 3, 24 | "lib": "nativescript-vue" 25 | }, 26 | "include": ["src", "types"], 27 | "exclude": ["node_modules", "platforms"] 28 | } 29 | -------------------------------------------------------------------------------- /types/colorpickerview.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module com { 4 | export module skydoves { 5 | export module colorpickerview { 6 | export class ActionMode { 7 | public static class: java.lang.Class; 8 | public static ALWAYS: com.skydoves.colorpickerview.ActionMode; 9 | public static LAST: com.skydoves.colorpickerview.ActionMode; 10 | public static values(): androidNative.Array; 11 | public static valueOf(name: string): com.skydoves.colorpickerview.ActionMode; 12 | } 13 | } 14 | } 15 | } 16 | 17 | declare module com { 18 | export module skydoves { 19 | export module colorpickerview { 20 | export class AlphaTileView { 21 | public static class: java.lang.Class; 22 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number, defStyleRes: number); 23 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet); 24 | public onSizeChanged(this_: number, width: number, height: number, oldWidth: number): void; 25 | public setPaintColor(color: number): void; 26 | public constructor(context: globalAndroid.content.Context); 27 | public setBackgroundColor(color: number): void; 28 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number); 29 | public onDraw(canvas: globalAndroid.graphics.Canvas): void; 30 | } 31 | } 32 | } 33 | } 34 | 35 | declare module com { 36 | export module skydoves { 37 | export module colorpickerview { 38 | export class ColorEnvelope { 39 | public static class: java.lang.Class; 40 | public getHexCode(): string; 41 | public getColor(): number; 42 | public getArgb(): androidNative.Array; 43 | public constructor(color: number); 44 | } 45 | } 46 | } 47 | } 48 | 49 | declare module com { 50 | export module skydoves { 51 | export module colorpickerview { 52 | export class ColorHsvPalette { 53 | public static class: java.lang.Class; 54 | public draw(canvas: globalAndroid.graphics.Canvas): void; 55 | public setColorFilter(colorFilter: globalAndroid.graphics.ColorFilter): void; 56 | public constructor(resources: globalAndroid.content.res.Resources, bitmap: globalAndroid.graphics.Bitmap); 57 | public setAlpha(alpha: number): void; 58 | public getOpacity(): number; 59 | } 60 | } 61 | } 62 | } 63 | 64 | declare module com { 65 | export module skydoves { 66 | export module colorpickerview { 67 | export class ColorPickerDialog { 68 | public static class: java.lang.Class; 69 | public constructor(context: globalAndroid.content.Context); 70 | } 71 | export module ColorPickerDialog { 72 | export class Builder { 73 | public static class: java.lang.Class; 74 | public setSingleChoiceItems(adapter: globalAndroid.widget.ListAdapter, checkedItem: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 75 | public setTitle(title: string): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 76 | public setTitle(titleId: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 77 | public getColorPickerView(): com.skydoves.colorpickerview.ColorPickerView; 78 | public setMultiChoiceItems(cursor: globalAndroid.database.Cursor, isCheckedColumn: string, labelColumn: string, listener: globalAndroid.content.DialogInterface.OnMultiChoiceClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 79 | public setCancelable(cancelable: boolean): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 80 | public setOnCancelListener(onCancelListener: globalAndroid.content.DialogInterface.OnCancelListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 81 | public setMessage(messageId: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 82 | public setColorPickerView(colorPickerView: com.skydoves.colorpickerview.ColorPickerView): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 83 | public setSingleChoiceItems(cursor: globalAndroid.database.Cursor, checkedItem: number, labelColumn: string, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 84 | public setSingleChoiceItems(items: androidNative.Array, checkedItem: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 85 | public setOnKeyListener(onKeyListener: globalAndroid.content.DialogInterface.OnKeyListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 86 | public setItems(items: androidNative.Array, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 87 | public setPositiveButton(textId: number, colorListener: com.skydoves.colorpickerview.listeners.ColorPickerViewListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 88 | public setItems(itemsId: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 89 | public setIcon(iconId: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 90 | public setMultiChoiceItems(itemsId: number, checkedItems: androidNative.Array, listener: globalAndroid.content.DialogInterface.OnMultiChoiceClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 91 | public setSingleChoiceItems(itemsId: number, checkedItem: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 92 | public constructor(context: globalAndroid.content.Context, themeResId: number); 93 | public attachBrightnessSlideBar(value: boolean): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 94 | public attachAlphaSlideBar(value: boolean): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 95 | public setCustomTitle(customTitleView: globalAndroid.view.View): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 96 | public setView(layoutResId: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 97 | public setNeutralButton(text: string, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 98 | public setBottomSpace(bottomSpace: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 99 | public setPositiveButton(text: string, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 100 | public setNeutralButton(textId: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 101 | public setOnItemSelectedListener(listener: globalAndroid.widget.AdapterView.OnItemSelectedListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 102 | public create(): androidx.appcompat.app.AlertDialog; 103 | public setNegativeButton(textId: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 104 | public setAdapter(adapter: globalAndroid.widget.ListAdapter, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 105 | public setNegativeButton(text: string, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 106 | public setPositiveButton(textId: number, listener: globalAndroid.content.DialogInterface.OnClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 107 | public setOnDismissListener(onDismissListener: globalAndroid.content.DialogInterface.OnDismissListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 108 | public setMultiChoiceItems(items: androidNative.Array, checkedItems: androidNative.Array, listener: globalAndroid.content.DialogInterface.OnMultiChoiceClickListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 109 | public setPreferenceName(preferenceName: string): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 110 | public constructor(context: globalAndroid.content.Context); 111 | public setCursor(cursor: globalAndroid.database.Cursor, listener: globalAndroid.content.DialogInterface.OnClickListener, labelColumn: string): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 112 | public setIcon(icon: globalAndroid.graphics.drawable.Drawable): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 113 | public setIconAttribute(attrId: number): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 114 | public setView(view: globalAndroid.view.View): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 115 | public setPositiveButton(text: string, colorListener: com.skydoves.colorpickerview.listeners.ColorPickerViewListener): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 116 | public setMessage(message: string): com.skydoves.colorpickerview.ColorPickerDialog.Builder; 117 | public show(): void; 118 | } 119 | } 120 | } 121 | } 122 | } 123 | 124 | declare module com { 125 | export module skydoves { 126 | export module colorpickerview { 127 | export class ColorPickerView { 128 | public static class: java.lang.Class; 129 | public colorListener: com.skydoves.colorpickerview.listeners.ColorPickerViewListener; 130 | public getColor(): number; 131 | public getFlagView(): com.skydoves.colorpickerview.flag.FlagView; 132 | public setInitialColor(color: number): void; 133 | public attachAlphaSlider(alphaSlideBar: com.skydoves.colorpickerview.sliders.AlphaSlideBar): void; 134 | public constructor(context: globalAndroid.content.Context); 135 | public setInitialColorRes(colorRes: number): void; 136 | public getPreferenceName(): string; 137 | public getSelector(): globalAndroid.widget.ImageView; 138 | public getAlpha(): number; 139 | public setPureColor(color: number): void; 140 | public setCoordinate(x: number, y: number): void; 141 | public selectByHsvColorRes(resource: number): void; 142 | public setDebounceDuration(debounceDuration: number): void; 143 | public getDebounceDuration(): number; 144 | public setSelectorDrawable(drawable: globalAndroid.graphics.drawable.Drawable): void; 145 | public getColorFromBitmap(radius: number, hsv: number): number; 146 | public setHsvPaletteDrawable(): void; 147 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet); 148 | public isHuePalette(): boolean; 149 | public getSelectorY(): number; 150 | public fireColorListener(this_: number, color: boolean): void; 151 | public getPureColor(): number; 152 | public selectByHsvColor(centerX: number): void; 153 | public setLifecycleOwner(lifecycleOwner: androidx.lifecycle.LifecycleOwner): void; 154 | public onCreateByBuilder(builder: com.skydoves.colorpickerview.ColorPickerView.Builder): void; 155 | public getColorEnvelope(): com.skydoves.colorpickerview.ColorEnvelope; 156 | public selectCenter(): void; 157 | public setActionMode(actionMode: com.skydoves.colorpickerview.ActionMode): void; 158 | public getAlphaSlideBar(): com.skydoves.colorpickerview.sliders.AlphaSlideBar; 159 | public setColorListener(colorListener: com.skydoves.colorpickerview.listeners.ColorPickerViewListener): void; 160 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number, defStyleRes: number); 161 | public setEnabled(this_: boolean): void; 162 | public onSizeChanged(this_: number, width: number, height: number, oldWidth: number): void; 163 | public setPreferenceName(preferenceName: string): void; 164 | public getSelectorX(): number; 165 | public removeLifecycleOwner(lifecycleOwner: androidx.lifecycle.LifecycleOwner): void; 166 | public moveSelectorPoint(x: number, y: number, color: number): void; 167 | public getActionMode(): com.skydoves.colorpickerview.ActionMode; 168 | public getSelectedPoint(): globalAndroid.graphics.Point; 169 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number); 170 | public setSelectorPoint(x: number, y: number): void; 171 | public setFlagView(flagView: com.skydoves.colorpickerview.flag.FlagView): void; 172 | public onTouchEvent(event: globalAndroid.view.MotionEvent): boolean; 173 | public getBrightnessSlider(): com.skydoves.colorpickerview.sliders.BrightnessSlideBar; 174 | public onDestroy(): void; 175 | public setPaletteDrawable(drawable: globalAndroid.graphics.drawable.Drawable): void; 176 | public attachBrightnessSlider(brightnessSlider: com.skydoves.colorpickerview.sliders.BrightnessSlideBar): void; 177 | } 178 | export module ColorPickerView { 179 | export class Builder { 180 | public static class: java.lang.Class; 181 | public setBrightnessSlideBar(brightnessSlideBar: com.skydoves.colorpickerview.sliders.BrightnessSlideBar): com.skydoves.colorpickerview.ColorPickerView.Builder; 182 | public setAlphaSlideBar(alphaSlideBar: com.skydoves.colorpickerview.sliders.AlphaSlideBar): com.skydoves.colorpickerview.ColorPickerView.Builder; 183 | public setInitialColor(initialColor: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 184 | public setSelectorDrawable(selector: globalAndroid.graphics.drawable.Drawable): com.skydoves.colorpickerview.ColorPickerView.Builder; 185 | public setFlagAlpha(alpha: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 186 | public setFlagIsFlipAble(isFlipAble: boolean): com.skydoves.colorpickerview.ColorPickerView.Builder; 187 | public setWidth(width: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 188 | public setLifecycleOwner(lifecycleOwner: androidx.lifecycle.LifecycleOwner): com.skydoves.colorpickerview.ColorPickerView.Builder; 189 | public setColorListener(colorPickerViewListener: com.skydoves.colorpickerview.listeners.ColorPickerViewListener): com.skydoves.colorpickerview.ColorPickerView.Builder; 190 | public setFlagView(flagView: com.skydoves.colorpickerview.flag.FlagView): com.skydoves.colorpickerview.ColorPickerView.Builder; 191 | public setHeight(height: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 192 | public setPaletteDrawable(palette: globalAndroid.graphics.drawable.Drawable): com.skydoves.colorpickerview.ColorPickerView.Builder; 193 | public setPreferenceName(preferenceName: string): com.skydoves.colorpickerview.ColorPickerView.Builder; 194 | public constructor(context: globalAndroid.content.Context); 195 | public setActionMode(actionMode: com.skydoves.colorpickerview.ActionMode): com.skydoves.colorpickerview.ColorPickerView.Builder; 196 | public build(): com.skydoves.colorpickerview.ColorPickerView; 197 | public setSelectorSize(size: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 198 | public setInitialColorRes(initialColorRes: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 199 | public setSelectorAlpha(alpha: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 200 | public setDebounceDuration(debounceDuration: number): com.skydoves.colorpickerview.ColorPickerView.Builder; 201 | } 202 | } 203 | } 204 | } 205 | } 206 | 207 | declare module com { 208 | export module skydoves { 209 | export module colorpickerview { 210 | export class ColorUtils { 211 | public static class: java.lang.Class; 212 | public static getHexCode(color: number): string; 213 | public static getColorARGB(color: number): androidNative.Array; 214 | } 215 | } 216 | } 217 | } 218 | 219 | declare module com { 220 | export module skydoves { 221 | export module colorpickerview { 222 | export class Dp { 223 | public static class: java.lang.Class; 224 | /** 225 | * Constructs a new instance of the com.skydoves.colorpickerview.Dp interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. 226 | */ 227 | public constructor(implementation: { 228 | }); 229 | public constructor(); 230 | } 231 | } 232 | } 233 | } 234 | 235 | declare module com { 236 | export module skydoves { 237 | export module colorpickerview { 238 | export class FadeUtils { 239 | public static class: java.lang.Class; 240 | public static fadeIn(view: globalAndroid.view.View): void; 241 | public static fadeOut(view: globalAndroid.view.View): void; 242 | public constructor(); 243 | } 244 | } 245 | } 246 | } 247 | 248 | declare module com { 249 | export module skydoves { 250 | export module colorpickerview { 251 | export class PointMapper { 252 | public static class: java.lang.Class; 253 | public static getColorPoint(colorPickerView: com.skydoves.colorpickerview.ColorPickerView, point: globalAndroid.graphics.Point): globalAndroid.graphics.Point; 254 | } 255 | } 256 | } 257 | } 258 | 259 | declare module com { 260 | export module skydoves { 261 | export module colorpickerview { 262 | export class SizeUtils { 263 | public static class: java.lang.Class; 264 | public static dp2Px(context: globalAndroid.content.Context, dp: number): number; 265 | } 266 | } 267 | } 268 | } 269 | 270 | declare module com { 271 | export module skydoves { 272 | export module colorpickerview { 273 | export module databinding { 274 | export class ColorpickerviewDialogColorpickerBinding { 275 | public static class: java.lang.Class; 276 | public alphaSlideBar: com.skydoves.colorpickerview.sliders.AlphaSlideBar; 277 | public alphaSlideBarFrame: globalAndroid.widget.FrameLayout; 278 | public brightnessSlideBar: com.skydoves.colorpickerview.sliders.BrightnessSlideBar; 279 | public brightnessSlideBarFrame: globalAndroid.widget.FrameLayout; 280 | public colorPickerView: com.skydoves.colorpickerview.ColorPickerView; 281 | public colorPickerViewFrame: globalAndroid.widget.FrameLayout; 282 | public spaceBottom: globalAndroid.widget.Space; 283 | public getRoot(): globalAndroid.widget.ScrollView; 284 | public static bind(alphaSlideBar: globalAndroid.view.View): com.skydoves.colorpickerview.databinding.ColorpickerviewDialogColorpickerBinding; 285 | public static inflate(inflater: globalAndroid.view.LayoutInflater): com.skydoves.colorpickerview.databinding.ColorpickerviewDialogColorpickerBinding; 286 | public static inflate(inflater: globalAndroid.view.LayoutInflater, parent: globalAndroid.view.ViewGroup, attachToParent: boolean): com.skydoves.colorpickerview.databinding.ColorpickerviewDialogColorpickerBinding; 287 | } 288 | } 289 | } 290 | } 291 | } 292 | 293 | declare module com { 294 | export module skydoves { 295 | export module colorpickerview { 296 | export module databinding { 297 | export class ColorpickerviewFlagBubbleBinding { 298 | public static class: java.lang.Class; 299 | public bubble: androidx.appcompat.widget.AppCompatImageView; 300 | public layout: globalAndroid.widget.FrameLayout; 301 | public static bind(bubble: globalAndroid.view.View): com.skydoves.colorpickerview.databinding.ColorpickerviewFlagBubbleBinding; 302 | public getRoot(): globalAndroid.widget.FrameLayout; 303 | public static inflate(inflater: globalAndroid.view.LayoutInflater): com.skydoves.colorpickerview.databinding.ColorpickerviewFlagBubbleBinding; 304 | public static inflate(inflater: globalAndroid.view.LayoutInflater, parent: globalAndroid.view.ViewGroup, attachToParent: boolean): com.skydoves.colorpickerview.databinding.ColorpickerviewFlagBubbleBinding; 305 | } 306 | } 307 | } 308 | } 309 | } 310 | 311 | declare module com { 312 | export module skydoves { 313 | export module colorpickerview { 314 | export module flag { 315 | export class BubbleFlag extends com.skydoves.colorpickerview.flag.FlagView { 316 | public static class: java.lang.Class; 317 | public onFlipped(isFlipped: java.lang.Boolean): void; 318 | public constructor(context: globalAndroid.content.Context); 319 | public onRefresh(colorEnvelope: com.skydoves.colorpickerview.ColorEnvelope): void; 320 | public constructor(context: globalAndroid.content.Context, layout: number); 321 | } 322 | } 323 | } 324 | } 325 | } 326 | 327 | declare module com { 328 | export module skydoves { 329 | export module colorpickerview { 330 | export module flag { 331 | export class FlagMode { 332 | public static class: java.lang.Class; 333 | public static ALWAYS: com.skydoves.colorpickerview.flag.FlagMode; 334 | public static LAST: com.skydoves.colorpickerview.flag.FlagMode; 335 | public static FADE: com.skydoves.colorpickerview.flag.FlagMode; 336 | public static valueOf(name: string): com.skydoves.colorpickerview.flag.FlagMode; 337 | public static values(): androidNative.Array; 338 | } 339 | } 340 | } 341 | } 342 | } 343 | 344 | declare module com { 345 | export module skydoves { 346 | export module colorpickerview { 347 | export module flag { 348 | export abstract class FlagView { 349 | public static class: java.lang.Class; 350 | public onRefresh(param0: com.skydoves.colorpickerview.ColorEnvelope): void; 351 | public onFlipped(param0: java.lang.Boolean): void; 352 | public receiveOnTouchEvent(event: globalAndroid.view.MotionEvent): void; 353 | public visible(): void; 354 | public setFlipAble(flipAble: boolean): void; 355 | public setFlagMode(flagMode: com.skydoves.colorpickerview.flag.FlagMode): void; 356 | public getFlagMode(): com.skydoves.colorpickerview.flag.FlagMode; 357 | public isFlipAble(): boolean; 358 | public gone(): void; 359 | public constructor(context: globalAndroid.content.Context, layout: number); 360 | } 361 | } 362 | } 363 | } 364 | } 365 | 366 | declare module com { 367 | export module skydoves { 368 | export module colorpickerview { 369 | export module any { 370 | export class ColorPickerDsl { 371 | public static class: java.lang.Class; 372 | /** 373 | * Constructs a new instance of the com.skydoves.colorpickerview.any interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. 374 | */ 375 | public constructor(implementation: { 376 | }); 377 | public constructor(); 378 | } 379 | } 380 | } 381 | } 382 | } 383 | 384 | declare module com { 385 | export module skydoves { 386 | export module colorpickerview { 387 | export module listeners { 388 | export class ColorEnvelopeListener extends com.skydoves.colorpickerview.listeners.ColorPickerViewListener { 389 | public static class: java.lang.Class; 390 | /** 391 | * Constructs a new instance of the com.skydoves.colorpickerview.listeners.ColorEnvelopeListener interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. 392 | */ 393 | public constructor(implementation: { 394 | onColorSelected(param0: com.skydoves.colorpickerview.ColorEnvelope, param1: boolean): void; 395 | }); 396 | public constructor(); 397 | public onColorSelected(param0: com.skydoves.colorpickerview.ColorEnvelope, param1: boolean): void; 398 | } 399 | } 400 | } 401 | } 402 | } 403 | 404 | declare module com { 405 | export module skydoves { 406 | export module colorpickerview { 407 | export module listeners { 408 | export class ColorListener extends com.skydoves.colorpickerview.listeners.ColorPickerViewListener { 409 | public static class: java.lang.Class; 410 | /** 411 | * Constructs a new instance of the com.skydoves.colorpickerview.listeners.ColorListener interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. 412 | */ 413 | public constructor(implementation: { 414 | onColorSelected(param0: number, param1: boolean): void; 415 | }); 416 | public constructor(); 417 | public onColorSelected(param0: number, param1: boolean): void; 418 | } 419 | } 420 | } 421 | } 422 | } 423 | 424 | declare module com { 425 | export module skydoves { 426 | export module colorpickerview { 427 | export module listeners { 428 | export class ColorPickerViewListener { 429 | public static class: java.lang.Class; 430 | /** 431 | * Constructs a new instance of the com.skydoves.colorpickerview.listeners.ColorPickerViewListener interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. 432 | */ 433 | public constructor(implementation: { 434 | }); 435 | public constructor(); 436 | } 437 | } 438 | } 439 | } 440 | } 441 | 442 | declare module com { 443 | export module skydoves { 444 | export module colorpickerview { 445 | export module preference { 446 | export class ColorPickerPreferenceManager { 447 | public static class: java.lang.Class; 448 | public static COLOR: string = "_COLOR"; 449 | public static SelectorX: string = "_SELECTOR_X"; 450 | public static SelectorY: string = "_SELECTOR_Y"; 451 | public static AlphaSlider: string = "_SLIDER_ALPHA"; 452 | public static BrightnessSlider: string = "_SLIDER_BRIGHTNESS"; 453 | public getSelectorXName(name: string): string; 454 | public setColor(name: string, color: number): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 455 | public clearSavedBrightnessSlider(name: string): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 456 | public getAlphaSliderName(name: string): string; 457 | public setBrightnessSliderPosition(name: string, position: number): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 458 | public getBrightnessSliderPosition(name: string, defaultPosition: number): number; 459 | public restoreColorPickerData(defaultPoint: com.skydoves.colorpickerview.ColorPickerView): void; 460 | public static getInstance(context: globalAndroid.content.Context): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 461 | public clearSavedSelectorPosition(name: string): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 462 | public getAlphaSliderPosition(name: string, defaultPosition: number): number; 463 | public clearSavedAlphaSliderPosition(name: string): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 464 | public setSelectorPosition(name: string, position: globalAndroid.graphics.Point): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 465 | public getSelectorYName(name: string): string; 466 | public clearSavedAllData(): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 467 | public clearSavedColor(name: string): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 468 | public setAlphaSliderPosition(name: string, position: number): com.skydoves.colorpickerview.preference.ColorPickerPreferenceManager; 469 | public getColor(name: string, defaultColor: number): number; 470 | public getColorName(name: string): string; 471 | public saveColorPickerData(this_: com.skydoves.colorpickerview.ColorPickerView): void; 472 | public getBrightnessSliderName(name: string): string; 473 | public getSelectorPosition(name: string, defaultPoint: globalAndroid.graphics.Point): globalAndroid.graphics.Point; 474 | } 475 | } 476 | } 477 | } 478 | } 479 | 480 | declare module com { 481 | export module skydoves { 482 | export module colorpickerview { 483 | export module sliders { 484 | export abstract class AbstractSlider { 485 | public static class: java.lang.Class; 486 | public colorPickerView: com.skydoves.colorpickerview.ColorPickerView; 487 | public colorPaint: globalAndroid.graphics.Paint; 488 | public borderPaint: globalAndroid.graphics.Paint; 489 | public selectorPosition: number; 490 | public selectedX: number; 491 | public selectorDrawable: globalAndroid.graphics.drawable.Drawable; 492 | public borderSize: number; 493 | public borderColor: number; 494 | public color: number; 495 | public selector: globalAndroid.widget.ImageView; 496 | public preferenceName: string; 497 | public getAttrs(param0: globalAndroid.util.AttributeSet): void; 498 | public updatePaint(param0: globalAndroid.graphics.Paint): void; 499 | public updateSelectorX(x: number): void; 500 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet); 501 | public setSelectorPosition(selectorPosition: number): void; 502 | public getSelectorPosition(): number; 503 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number, defStyleRes: number); 504 | public getPreferenceName(): string; 505 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number); 506 | public setBorderSize(borderSize: number): void; 507 | public notifyColor(): void; 508 | public setBorderColor(color: number): void; 509 | public getSelectedX(): number; 510 | public assembleColor(): number; 511 | public onInflateFinished(): void; 512 | public getColor(): number; 513 | public setBorderSizeRes(resource: number): void; 514 | public setPreferenceName(preferenceName: string): void; 515 | public onTouchEvent(event: globalAndroid.view.MotionEvent): boolean; 516 | public attachColorPickerView(colorPickerView: com.skydoves.colorpickerview.ColorPickerView): void; 517 | public setEnabled(enabled: boolean): void; 518 | public setSelectorDrawable(drawable: globalAndroid.graphics.drawable.Drawable): void; 519 | public setBorderColorRes(resource: number): void; 520 | public getBorderHalfSize(): number; 521 | public getSelectorSize(): number; 522 | public onDraw(canvas: globalAndroid.graphics.Canvas): void; 523 | public constructor(context: globalAndroid.content.Context); 524 | public setSelectorDrawableRes(resource: number): void; 525 | public setSelectorByHalfSelectorPosition(selectorPosition: number): void; 526 | } 527 | } 528 | } 529 | } 530 | } 531 | 532 | declare module com { 533 | export module skydoves { 534 | export module colorpickerview { 535 | export module sliders { 536 | export class AlphaSlideBar extends com.skydoves.colorpickerview.sliders.AbstractSlider { 537 | public static class: java.lang.Class; 538 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number, defStyleRes: number); 539 | public getAttrs(this_: globalAndroid.util.AttributeSet): void; 540 | public assembleColor(): number; 541 | public onSizeChanged(this_: number, width: number, height: number, oldWidth: number): void; 542 | public onInflateFinished(): void; 543 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number); 544 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet); 545 | public onDraw(canvas: globalAndroid.graphics.Canvas): void; 546 | public constructor(context: globalAndroid.content.Context); 547 | public updatePaint(colorPaint: globalAndroid.graphics.Paint): void; 548 | } 549 | } 550 | } 551 | } 552 | } 553 | 554 | declare module com { 555 | export module skydoves { 556 | export module colorpickerview { 557 | export module sliders { 558 | export class AlphaTileDrawable { 559 | public static class: java.lang.Class; 560 | public constructor(builder: com.skydoves.colorpickerview.sliders.AlphaTileDrawable.Builder); 561 | public constructor(); 562 | public draw(canvas: globalAndroid.graphics.Canvas): void; 563 | public setAlpha(alpha: number): void; 564 | public setColorFilter(colorFilter: globalAndroid.graphics.ColorFilter): void; 565 | public getOpacity(): number; 566 | } 567 | export module AlphaTileDrawable { 568 | export class Builder { 569 | public static class: java.lang.Class; 570 | public constructor(); 571 | public build(): com.skydoves.colorpickerview.sliders.AlphaTileDrawable; 572 | public getTileOddColor(): number; 573 | public getTileEvenColor(): number; 574 | public getTileSize(): number; 575 | public setTileSize(tileSize: number): com.skydoves.colorpickerview.sliders.AlphaTileDrawable.Builder; 576 | public setTileEvenColor(color: number): com.skydoves.colorpickerview.sliders.AlphaTileDrawable.Builder; 577 | public setTileOddColor(color: number): com.skydoves.colorpickerview.sliders.AlphaTileDrawable.Builder; 578 | } 579 | } 580 | } 581 | } 582 | } 583 | } 584 | 585 | declare module com { 586 | export module skydoves { 587 | export module colorpickerview { 588 | export module sliders { 589 | export class BrightnessSlideBar extends com.skydoves.colorpickerview.sliders.AbstractSlider { 590 | public static class: java.lang.Class; 591 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number, defStyleRes: number); 592 | public getAttrs(this_: globalAndroid.util.AttributeSet): void; 593 | public assembleColor(): number; 594 | public onInflateFinished(): void; 595 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet, defStyleAttr: number); 596 | public constructor(context: globalAndroid.content.Context, attrs: globalAndroid.util.AttributeSet); 597 | public constructor(context: globalAndroid.content.Context); 598 | public updatePaint(colorPaint: globalAndroid.graphics.Paint): void; 599 | } 600 | } 601 | } 602 | } 603 | } 604 | 605 | //Generics information: 606 | 607 | -------------------------------------------------------------------------------- /types/references.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /types/shims.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import type { DefineComponent } from 'nativescript-vue'; 3 | const component: DefineComponent<{}, {}, any>; 4 | export default component; 5 | } 6 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require("@nativescript/webpack"); 2 | 3 | module.exports = (env) => { 4 | webpack.init(env); 5 | 6 | webpack.chainWebpack((config) => { 7 | }); 8 | 9 | return webpack.resolveConfig(); 10 | }; 11 | --------------------------------------------------------------------------------