├── .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 |
81 |
82 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/src/components/AddHabitSteps.vue:
--------------------------------------------------------------------------------
1 |
61 |
62 |
63 |
64 |
65 |
67 |
68 |
70 |
71 |
73 |
74 |
75 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/src/components/Emoji.vue:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |
26 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/components/GlobalPage.vue:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | emits('navigatingTo')" actionBarHidden="true"
11 | :androidStatusBarBackground="palette.colors.bg">
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/components/Icon.vue:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/ItemWeek.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/components/Menu.vue:
--------------------------------------------------------------------------------
1 |
28 |
29 |
30 |
31 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/components/Overlay.vue:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/components/PeriodicityHabit.vue:
--------------------------------------------------------------------------------
1 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
76 |
77 |
78 |
79 |
81 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/src/components/Undo.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/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 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
119 |
120 |
121 |
122 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | openMenu(event.object)">
116 |
117 |
118 |
119 |
120 |
121 |
122 |
129 |
130 |
131 |
132 |
134 |
135 |
136 |
137 |
138 |
141 |
142 |
144 |
146 |
148 |
149 |
150 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
--------------------------------------------------------------------------------
/src/views/Settings.vue:
--------------------------------------------------------------------------------
1 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------