From 3fa3681c9bafc31ca2681d2eb2ce2ea0a8829dd0 Mon Sep 17 00:00:00 2001 From: Maxime Rumpler Date: Thu, 11 Apr 2024 12:31:45 +0200 Subject: [PATCH 1/6] feat: progress made on the edit page and its implementation --- app/application/habits/[habitId]/index.tsx | 8 + domain/entities/Goal.ts | 14 ++ domain/entities/Habit.ts | 5 + domain/repositories/HabitEdit.ts | 9 + domain/use-cases/HabitEdit.ts | 23 +++ .../supabase/repositories/HabitEdit.ts | 43 +++++ presentation/presenters/HabitsTracker.ts | 44 +++++ .../HabitEditForm/HabitEditForm.tsx | 163 ++++++++++++++++++ 8 files changed, 309 insertions(+) create mode 100644 domain/repositories/HabitEdit.ts create mode 100644 domain/use-cases/HabitEdit.ts create mode 100644 infrastructure/supabase/repositories/HabitEdit.ts create mode 100644 presentation/react/components/HabitEditForm/HabitEditForm.tsx diff --git a/app/application/habits/[habitId]/index.tsx b/app/application/habits/[habitId]/index.tsx index a7fcdec..5a03693 100644 --- a/app/application/habits/[habitId]/index.tsx +++ b/app/application/habits/[habitId]/index.tsx @@ -3,10 +3,17 @@ import { Text } from "react-native-paper" import { SafeAreaView } from "react-native-safe-area-context" import { useHabitsTracker } from "@/presentation/react/contexts/HabitsTracker" +import { HabitEditForm } from "@/presentation/react/components/HabitEditForm/HabitEditForm" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" const HabitPage: React.FC = () => { const { habitId } = useLocalSearchParams() const { habitsTracker } = useHabitsTracker() + const { user } = useAuthentication() + + if (user === null) { + return null + } const habitHistory = habitsTracker.getHabitHistoryById(habitId as string) if (habitHistory == null) { @@ -25,6 +32,7 @@ const HabitPage: React.FC = () => { Habit Page {habitId} {habitHistory.habit.name} + ) } diff --git a/domain/entities/Goal.ts b/domain/entities/Goal.ts index ded0b30..d55fcbf 100644 --- a/domain/entities/Goal.ts +++ b/domain/entities/Goal.ts @@ -33,8 +33,22 @@ export const GoalCreateSchema = z.object({ ]), }) +export const GoalEditSchema = z.object({ + frequency: goalFrequencyZod, + target: z.discriminatedUnion("type", [ + z.object({ type: z.literal("boolean") }), + z.object({ + type: z.literal("numeric"), + value: z.number().int().min(0), + unit: z.string().min(1), + }), + ]), +}) + export type GoalCreateData = z.infer +export type GoalEditData = z.infer + interface GoalBase { frequency: GoalFrequency } diff --git a/domain/entities/Habit.ts b/domain/entities/Habit.ts index f111484..e9de6c3 100644 --- a/domain/entities/Habit.ts +++ b/domain/entities/Habit.ts @@ -15,6 +15,11 @@ export const HabitCreateSchema = HabitSchema.extend({ }).omit({ id: true }) export type HabitCreateData = z.infer +export const HabitEditSchema = HabitSchema.extend({ + goal: GoalCreateSchema, +}) +export type HabitEditData = z.infer + type HabitBase = z.infer export interface HabitData extends HabitBase { diff --git a/domain/repositories/HabitEdit.ts b/domain/repositories/HabitEdit.ts new file mode 100644 index 0000000..3f5bddd --- /dev/null +++ b/domain/repositories/HabitEdit.ts @@ -0,0 +1,9 @@ +import type { Habit, HabitEditData } from "../entities/Habit" + +export interface HabitEditOptions { + habitEditData: HabitEditData +} + +export interface HabitEditRepository { + execute: (options: HabitEditOptions) => Promise +} diff --git a/domain/use-cases/HabitEdit.ts b/domain/use-cases/HabitEdit.ts new file mode 100644 index 0000000..555b4e3 --- /dev/null +++ b/domain/use-cases/HabitEdit.ts @@ -0,0 +1,23 @@ +import type { Habit } from "../entities/Habit" +import { HabitEditSchema } from "../entities/Habit" +import type { HabitEditRepository } from "../repositories/HabitEdit" + +export interface HabitEditUseCaseDependencyOptions { + habitEditRepository: HabitEditRepository +} + +export class HabitEditUseCase implements HabitEditUseCaseDependencyOptions { + public habitEditRepository: HabitEditRepository + + public constructor(options: HabitEditUseCaseDependencyOptions) { + this.habitEditRepository = options.habitEditRepository + } + + public async execute(data: unknown): Promise { + const habitEditData = await HabitEditSchema.parseAsync(data) + const habit = await this.habitEditRepository.execute({ + habitEditData, + }) + return habit + } +} diff --git a/infrastructure/supabase/repositories/HabitEdit.ts b/infrastructure/supabase/repositories/HabitEdit.ts new file mode 100644 index 0000000..9020098 --- /dev/null +++ b/infrastructure/supabase/repositories/HabitEdit.ts @@ -0,0 +1,43 @@ +import { Habit } from "@/domain/entities/Habit" +import type { HabitEditRepository } from "@/domain/repositories/HabitEdit" +import { SupabaseRepository } from "./_SupabaseRepository" +import { Goal } from "@/domain/entities/Goal" + +export class HabitEditSupabaseRepository + extends SupabaseRepository + implements HabitEditRepository +{ + public execute: HabitEditRepository["execute"] = async (options) => { + const { habitEditData } = options + const { data, error } = await this.supabaseClient + .from("habits") + .update({ + id: Number(habitEditData.id), + name: habitEditData.name, + color: habitEditData.color, + icon: habitEditData.icon, + goal_frequency: habitEditData.goal.frequency, + ...(habitEditData.goal.target.type === "numeric" + ? { + goal_target: habitEditData.goal.target.value, + goal_target_unit: habitEditData.goal.target.unit, + } + : {}), + }) + .select("*") + const updatedHabit = data?.[0] + if (error != null || updatedHabit == null) { + throw new Error(error?.message ?? "Failed to edit habit.") + } + const habit = new Habit({ + id: updatedHabit.id.toString(), + userId: updatedHabit.user_id.toString(), + name: updatedHabit.name, + icon: updatedHabit.icon, + goal: Goal.create(habitEditData.goal), + color: updatedHabit.color, + startDate: new Date(updatedHabit.start_date), + }) + return habit + } +} diff --git a/presentation/presenters/HabitsTracker.ts b/presentation/presenters/HabitsTracker.ts index b619559..7e0d923 100644 --- a/presentation/presenters/HabitsTracker.ts +++ b/presentation/presenters/HabitsTracker.ts @@ -25,6 +25,14 @@ export interface HabitsTrackerPresenterState { global: ErrorGlobal } } + + habitEdit: { + state: FetchState + errors: { + fields: Array + global: ErrorGlobal + } + } } export interface HabitsTrackerPresenterOptions { @@ -52,6 +60,13 @@ export class HabitsTrackerPresenter global: null, }, }, + habitEdit: { + state: "idle", + errors: { + fields: [], + global: null, + }, + }, }) this.retrieveHabitsTrackerUseCase = retrieveHabitsTrackerUseCase this.habitCreateUseCase = habitCreateUseCase @@ -86,6 +101,35 @@ export class HabitsTrackerPresenter } } + public async habitEdit(data: unknown): Promise { + try { + this.setState((state) => { + state.habitEdit.state = "loading" + state.habitEdit.errors = { + fields: [], + global: null, + } + }) + const habit = await this.habitCreateUseCase.execute(data) + this.setState((state) => { + state.habitEdit.state = "success" + state.habitsTracker.addHabit(habit) + }) + return "success" + } catch (error) { + this.setState((state) => { + state.habitEdit.state = "error" + if (error instanceof ZodError) { + state.habitEdit.errors.fields = + getErrorsFieldsFromZodError(error) + } else { + state.habitEdit.errors.global = "unknown" + } + }) + return "error" + } + } + public async retrieveHabitsTracker( options: RetrieveHabitsTrackerUseCaseOptions, ): Promise { diff --git a/presentation/react/components/HabitEditForm/HabitEditForm.tsx b/presentation/react/components/HabitEditForm/HabitEditForm.tsx new file mode 100644 index 0000000..b26d6e2 --- /dev/null +++ b/presentation/react/components/HabitEditForm/HabitEditForm.tsx @@ -0,0 +1,163 @@ +import { zodResolver } from "@hookform/resolvers/zod" +import { useState } from "react" +import { Controller, useForm } from "react-hook-form" +import { ScrollView, StyleSheet } from "react-native" +import { Button, HelperText, Snackbar, TextInput } from "react-native-paper" +import { SafeAreaView } from "react-native-safe-area-context" +import ColorPicker, { + HueSlider, + Panel1, + Preview, +} from "reanimated-color-picker" + +import type { Habit, HabitEditData } from "@/domain/entities/Habit" +import { HabitEditSchema } from "@/domain/entities/Habit" +import type { User } from "@/domain/entities/User" +import { useHabitsTracker } from "../../contexts/HabitsTracker" + +export interface HabitEditFormProps { + user: User + habit: Habit +} + +export const HabitEditForm: React.FC = ({ user }) => { + const { habitEdit, habitsTrackerPresenter } = useHabitsTracker() + + const { + control, + handleSubmit, + reset, + formState: { errors }, + } = useForm({ + mode: "onChange", + resolver: zodResolver(HabitEditSchema), + defaultValues: { + userId: user.id, + name: "", + color: "#006CFF", + icon: "lightbulb", + goal: { + frequency: "daily", + target: { + type: "boolean", + }, + }, + }, + }) + + const [isVisibleSnackbar, setIsVisibleSnackbar] = useState(false) + + const onDismissSnackbar = (): void => { + setIsVisibleSnackbar(false) + } + + const onSubmit = async (data: HabitEditData): Promise => { + await habitsTrackerPresenter.habitEdit(data) + setIsVisibleSnackbar(true) + reset() + } + + return ( + + + { + return ( + <> + + {errors.name != null ? ( + + {errors.name.type === "too_big" + ? "Name is too long" + : "Name is required"} + + ) : null} + + ) + }} + name="name" + /> + + { + return ( + { + onChange(value.hex) + }} + > + + + + + ) + }} + name="color" + /> + + { + return ( + + ) + }} + name="icon" + /> + + + + + + ✅ Habit created successfully! + + + ) +} + +const styles = StyleSheet.create({ + spacing: { + marginVertical: 16, + }, +}) From a411f91c8e72057ac20152c160a63d82d5cf53a9 Mon Sep 17 00:00:00 2001 From: Maxime RICHARD Date: Thu, 11 Apr 2024 12:32:09 +0200 Subject: [PATCH 2/6] feat: add habit progress update --- domain/entities/HabitHistory.ts | 2 +- domain/entities/HabitsTracker.ts | 19 +++ domain/repositories/HabitProgressCreate.ts | 12 ++ domain/repositories/HabitProgressUpdate.ts | 12 ++ domain/use-cases/HabitGoalProgressUpdate.ts | 28 ++++ .../components/HabitHistory/HabitHistory.tsx | 143 ++++++++++++++++++ .../components/HabitsMainPage/HabitCard.tsx | 12 +- 7 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 domain/repositories/HabitProgressCreate.ts create mode 100644 domain/repositories/HabitProgressUpdate.ts create mode 100644 domain/use-cases/HabitGoalProgressUpdate.ts create mode 100644 presentation/react/components/HabitHistory/HabitHistory.tsx diff --git a/domain/entities/HabitHistory.ts b/domain/entities/HabitHistory.ts index b7f7a08..5f34f3e 100644 --- a/domain/entities/HabitHistory.ts +++ b/domain/entities/HabitHistory.ts @@ -34,7 +34,7 @@ export class HabitHistory implements HabitHistoryJSON { }) } - private getProgressesByDate(date: Date): HabitProgress[] { + public getProgressesByDate(date: Date): HabitProgress[] { return this._progressHistory.filter((progress) => { if (this.habit.goal.frequency === "monthly") { return ( diff --git a/domain/entities/HabitsTracker.ts b/domain/entities/HabitsTracker.ts index 7a99215..834fb82 100644 --- a/domain/entities/HabitsTracker.ts +++ b/domain/entities/HabitsTracker.ts @@ -1,6 +1,7 @@ import type { GoalFrequency } from "./Goal" import type { Habit } from "./Habit" import { HabitHistory } from "./HabitHistory" +import { HabitProgress } from "./HabitProgress" export interface HabitsTrackerData { habitsHistory: { @@ -35,6 +36,24 @@ export class HabitsTracker implements HabitsTrackerData { ) } + public setHabitProgress(options: SetHabitProgressOptions): void { + const { date, goalProgress, habitHistory } = options + if (goalProgress.isBoolean()) { + const currentHabitProgress = habitHistory.getProgressesByDate(date)[0] + if (currentHabitProgress == null) { + habitHistory.progressHistory = [ + ...habitHistory.progressHistory, + new HabitProgress({ + date, + goalProgress, + habitId, + id, + }), + ] + } + } + } + public getAllHabitsHistory(): HabitHistory[] { return [ ...this.habitsHistory.daily, diff --git a/domain/repositories/HabitProgressCreate.ts b/domain/repositories/HabitProgressCreate.ts new file mode 100644 index 0000000..1f78d9a --- /dev/null +++ b/domain/repositories/HabitProgressCreate.ts @@ -0,0 +1,12 @@ +import type { + HabitProgress, + HabitProgressData, +} from "../entities/HabitProgress" + +export interface HabitProgressCreateOptions { + habitProgressData: Omit +} + +export interface HabitProgressCreateRepository { + execute: (options: HabitProgressCreateOptions) => Promise +} diff --git a/domain/repositories/HabitProgressUpdate.ts b/domain/repositories/HabitProgressUpdate.ts new file mode 100644 index 0000000..c3fa305 --- /dev/null +++ b/domain/repositories/HabitProgressUpdate.ts @@ -0,0 +1,12 @@ +import type { + HabitProgress, + HabitProgressData, +} from "../entities/HabitProgress" + +export interface HabitProgressUpdateOptions { + habitProgressData: HabitProgressData +} + +export interface HabitProgressUpdateRepository { + execute: (options: HabitProgressUpdateOptions) => Promise +} diff --git a/domain/use-cases/HabitGoalProgressUpdate.ts b/domain/use-cases/HabitGoalProgressUpdate.ts new file mode 100644 index 0000000..965ddb0 --- /dev/null +++ b/domain/use-cases/HabitGoalProgressUpdate.ts @@ -0,0 +1,28 @@ +import type { GoalProgress } from "../entities/Goal" +import type { HabitHistory } from "../entities/HabitHistory" +import type { HabitProgressCreateRepository } from "../repositories/HabitProgressCreate" +import type { HabitProgressUpdateRepository } from "../repositories/HabitProgressUpdate" + +export interface HabitGoalProgressUpdateOptions { + date: Date + goalProgress: GoalProgress + habitHistory: HabitHistory +} + +export class HabitGoalProgressUpdateUseCase + implements HabitGoalProgressUpdateOptions +{ + public date: Date + public goalProgress: GoalProgress + public habitHistory: HabitHistory + + public constructor(option: HabitGoalProgressUpdateOptions) { + this.date = option.date + this.goalProgress = option.goalProgress + this.habitHistory = option.habitHistory + } + + public async execute(data: unknown): Promise { + // + } +} diff --git a/presentation/react/components/HabitHistory/HabitHistory.tsx b/presentation/react/components/HabitHistory/HabitHistory.tsx new file mode 100644 index 0000000..4a1c572 --- /dev/null +++ b/presentation/react/components/HabitHistory/HabitHistory.tsx @@ -0,0 +1,143 @@ +import { useState } from "react" +import { Calendar } from "react-native-calendars" +import { Text } from "react-native-paper" +import { SafeAreaView } from "react-native-safe-area-context" + +export const HabitHistory: React.FC = () => { + const [selected, setSelected] = useState("") + + return ( + + { + setSelected(day.dateString) + }} + markedDates={{ + "2023-03-01": { selected: true, marked: true, selectedColor: "blue" }, + "2023-03-02": { marked: true }, + "2023-03-03": { selected: true, marked: true, selectedColor: "blue" }, + [selected]: { + selected: true, + disableTouchEvent: true, + selectedColor: "orange", + }, + }} + theme={{ + backgroundColor: "#000000", + calendarBackground: "#000000", + textSectionTitleColor: "#b6c1cd", + selectedDayBackgroundColor: "#00adf5", + selectedDayTextColor: "#ffffff", + todayTextColor: "#00adf5", + dayTextColor: "#2d4150", + textDisabledColor: "#d9efff", + }} + /> + {selected} + + ) +} + +/* + { + console.log('trigger items loading'); + }} + // Callback that fires when the calendar is opened or closed + onCalendarToggled={calendarOpened => { + console.log(calendarOpened); + }} + // Callback that gets called on day press + onDayPress={day => { + console.log('day pressed'); + }} + // Callback that gets called when day changes while scrolling agenda list + onDayChange={day => { + console.log('day changed'); + }} + // Initially selected day + selected={'2012-05-16'} + // Minimum date that can be selected, dates before minDate will be grayed out. Default = undefined + minDate={'2012-05-10'} + // Maximum date that can be selected, dates after maxDate will be grayed out. Default = undefined + maxDate={'2012-05-30'} + // Max amount of months allowed to scroll to the past. Default = 50 + pastScrollRange={50} + // Max amount of months allowed to scroll to the future. Default = 50 + futureScrollRange={50} + // Specify how each item should be rendered in agenda + renderItem={(item, firstItemInDay) => { + return ; + }} + // Specify how each date should be rendered. day can be undefined if the item is not first in that day + renderDay={(day, item) => { + return ; + }} + // Specify how empty date content with no items should be rendered + renderEmptyDate={() => { + return ; + }} + // Specify how agenda knob should look like + renderKnob={() => { + return ; + }} + // Override inner list with a custom implemented component + renderList={listProps => { + return ; + }} + // Specify what should be rendered instead of ActivityIndicator + renderEmptyData={() => { + return ; + }} + // Specify your item comparison function for increased performance + rowHasChanged={(r1, r2) => { + return r1.text !== r2.text; + }} + // Hide knob button. Default = false + hideKnob={true} + // When `true` and `hideKnob` prop is `false`, the knob will always be visible and the user will be able to drag the knob up and close the calendar. Default = false + showClosingKnob={false} + // By default, agenda dates are marked if they have at least one item, but you can override this if needed + markedDates={{ + '2012-05-16': {selected: true, marked: true}, + '2012-05-17': {marked: true}, + '2012-05-18': {disabled: true} + }} + // If disabledByDefault={true} dates flagged as not disabled will be enabled. Default = false + disabledByDefault={true} + // If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make sure to also set the refreshing prop correctly + onRefresh={() => console.log('refreshing...')} + // Set this true while waiting for new data from a refresh + refreshing={false} + // Add a custom RefreshControl component, used to provide pull-to-refresh functionality for the ScrollView + refreshControl={null} + // Agenda theme + theme={{ + ...calendarTheme, + agendaDayTextColor: 'yellow', + agendaDayNumColor: 'green', + agendaTodayColor: 'red', + agendaKnobColor: 'blue' + }} + // Agenda container style + style={{}} +/> +*/ diff --git a/presentation/react/components/HabitsMainPage/HabitCard.tsx b/presentation/react/components/HabitsMainPage/HabitCard.tsx index 3cf9979..a772666 100644 --- a/presentation/react/components/HabitsMainPage/HabitCard.tsx +++ b/presentation/react/components/HabitsMainPage/HabitCard.tsx @@ -1,7 +1,8 @@ import FontAwesome6 from "@expo/vector-icons/FontAwesome6" import { useRouter } from "expo-router" import { View } from "react-native" -import { List, Text } from "react-native-paper" +import { List, Text, Checkbox } from "react-native-paper" +import { useState } from "react" import type { GoalProgress } from "@/domain/entities/Goal" import type { Habit } from "@/domain/entities/Habit" @@ -22,6 +23,8 @@ export const HabitCard: React.FC = (props) => { opacity: 0.4, }) + const [checked, setChecked] = useState(goalProgress.isCompleted()) + return ( { @@ -80,7 +83,12 @@ export const HabitCard: React.FC = (props) => { return ( - {goalProgress.isCompleted() ? "true" : "false"} + { + setChecked(!checked) + }} + /> ) }} From 246cbe918a2a0b344e2602f67142a6d0ae2d5ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Thu, 11 Apr 2024 13:07:17 +0200 Subject: [PATCH 3/6] feat: edit habit working version --- app/application/habits/[habitId]/index.tsx | 25 +++---------------- app/application/habits/new.tsx | 2 +- domain/entities/Goal.ts | 14 ----------- domain/entities/Habit.ts | 4 +-- domain/entities/HabitsTracker.ts | 8 ++++++ infrastructure/instances.ts | 9 +++++++ .../supabase/repositories/HabitEdit.ts | 24 +++++++++++------- presentation/presenters/HabitsTracker.ts | 20 ++++++++++----- .../HabitEditForm/HabitEditForm.tsx | 25 ++++++------------- 9 files changed, 59 insertions(+), 72 deletions(-) diff --git a/app/application/habits/[habitId]/index.tsx b/app/application/habits/[habitId]/index.tsx index 5a03693..02c162c 100644 --- a/app/application/habits/[habitId]/index.tsx +++ b/app/application/habits/[habitId]/index.tsx @@ -1,39 +1,20 @@ import { Redirect, useLocalSearchParams } from "expo-router" -import { Text } from "react-native-paper" -import { SafeAreaView } from "react-native-safe-area-context" -import { useHabitsTracker } from "@/presentation/react/contexts/HabitsTracker" import { HabitEditForm } from "@/presentation/react/components/HabitEditForm/HabitEditForm" -import { useAuthentication } from "@/presentation/react/contexts/Authentication" +import { useHabitsTracker } from "@/presentation/react/contexts/HabitsTracker" const HabitPage: React.FC = () => { const { habitId } = useLocalSearchParams() const { habitsTracker } = useHabitsTracker() - const { user } = useAuthentication() - - if (user === null) { - return null - } const habitHistory = habitsTracker.getHabitHistoryById(habitId as string) + if (habitHistory == null) { return } return ( - - - Habit Page {habitId} {habitHistory.habit.name} - - - + ) } diff --git a/app/application/habits/new.tsx b/app/application/habits/new.tsx index f2c5361..f410ab0 100644 --- a/app/application/habits/new.tsx +++ b/app/application/habits/new.tsx @@ -4,7 +4,7 @@ import { useAuthentication } from "@/presentation/react/contexts/Authentication" const NewHabitPage: React.FC = () => { const { user } = useAuthentication() - if (user === null) { + if (user == null) { return null } diff --git a/domain/entities/Goal.ts b/domain/entities/Goal.ts index d55fcbf..ded0b30 100644 --- a/domain/entities/Goal.ts +++ b/domain/entities/Goal.ts @@ -33,22 +33,8 @@ export const GoalCreateSchema = z.object({ ]), }) -export const GoalEditSchema = z.object({ - frequency: goalFrequencyZod, - target: z.discriminatedUnion("type", [ - z.object({ type: z.literal("boolean") }), - z.object({ - type: z.literal("numeric"), - value: z.number().int().min(0), - unit: z.string().min(1), - }), - ]), -}) - export type GoalCreateData = z.infer -export type GoalEditData = z.infer - interface GoalBase { frequency: GoalFrequency } diff --git a/domain/entities/Habit.ts b/domain/entities/Habit.ts index e9de6c3..d80ba59 100644 --- a/domain/entities/Habit.ts +++ b/domain/entities/Habit.ts @@ -15,9 +15,7 @@ export const HabitCreateSchema = HabitSchema.extend({ }).omit({ id: true }) export type HabitCreateData = z.infer -export const HabitEditSchema = HabitSchema.extend({ - goal: GoalCreateSchema, -}) +export const HabitEditSchema = HabitSchema.extend({}) export type HabitEditData = z.infer type HabitBase = z.infer diff --git a/domain/entities/HabitsTracker.ts b/domain/entities/HabitsTracker.ts index 7a99215..19f2122 100644 --- a/domain/entities/HabitsTracker.ts +++ b/domain/entities/HabitsTracker.ts @@ -35,6 +35,14 @@ export class HabitsTracker implements HabitsTrackerData { ) } + public editHabit(habit: Habit): void { + const habitHistory = this.getHabitHistoryById(habit.id) + if (habitHistory == null) { + return + } + habitHistory.habit = habit + } + public getAllHabitsHistory(): HabitHistory[] { return [ ...this.habitsHistory.daily, diff --git a/infrastructure/instances.ts b/infrastructure/instances.ts index 89b1690..8e92055 100644 --- a/infrastructure/instances.ts +++ b/infrastructure/instances.ts @@ -8,6 +8,8 @@ import { supabaseClient } from "./supabase/supabase" import { AuthenticationPresenter } from "@/presentation/presenters/Authentication" import { HabitCreateSupabaseRepository } from "./supabase/repositories/HabitCreate" import { HabitCreateUseCase } from "@/domain/use-cases/HabitCreate" +import { HabitEditSupabaseRepository } from "./supabase/repositories/HabitEdit" +import { HabitEditUseCase } from "@/domain/use-cases/HabitEdit" /** * Repositories @@ -25,6 +27,9 @@ const getHabitsByUserIdRepository = new GetHabitsByUserIdSupabaseRepository({ const habitCreateRepository = new HabitCreateSupabaseRepository({ supabaseClient, }) +const habitEditRepository = new HabitEditSupabaseRepository({ + supabaseClient, +}) /** * Use Cases @@ -39,6 +44,9 @@ const retrieveHabitsTrackerUseCase = new RetrieveHabitsTrackerUseCase({ getHabitProgressHistoryRepository: getHabitProgressesRepository, getHabitsByUserIdRepository, }) +const habitEditUseCase = new HabitEditUseCase({ + habitEditRepository, +}) /** * Presenters @@ -49,4 +57,5 @@ export const authenticationPresenter = new AuthenticationPresenter({ export const habitsTrackerPresenter = new HabitsTrackerPresenter({ retrieveHabitsTrackerUseCase, habitCreateUseCase, + habitEditUseCase, }) diff --git a/infrastructure/supabase/repositories/HabitEdit.ts b/infrastructure/supabase/repositories/HabitEdit.ts index 9020098..f482cc3 100644 --- a/infrastructure/supabase/repositories/HabitEdit.ts +++ b/infrastructure/supabase/repositories/HabitEdit.ts @@ -12,18 +12,11 @@ export class HabitEditSupabaseRepository const { data, error } = await this.supabaseClient .from("habits") .update({ - id: Number(habitEditData.id), name: habitEditData.name, color: habitEditData.color, icon: habitEditData.icon, - goal_frequency: habitEditData.goal.frequency, - ...(habitEditData.goal.target.type === "numeric" - ? { - goal_target: habitEditData.goal.target.value, - goal_target_unit: habitEditData.goal.target.unit, - } - : {}), }) + .eq("id", habitEditData.id) .select("*") const updatedHabit = data?.[0] if (error != null || updatedHabit == null) { @@ -34,7 +27,20 @@ export class HabitEditSupabaseRepository userId: updatedHabit.user_id.toString(), name: updatedHabit.name, icon: updatedHabit.icon, - goal: Goal.create(habitEditData.goal), + goal: Goal.create({ + frequency: updatedHabit.goal_frequency, + target: + updatedHabit.goal_target != null && + updatedHabit.goal_target_unit != null + ? { + type: "numeric", + value: updatedHabit.goal_target, + unit: updatedHabit.goal_target_unit, + } + : { + type: "boolean", + }, + }), color: updatedHabit.color, startDate: new Date(updatedHabit.start_date), }) diff --git a/presentation/presenters/HabitsTracker.ts b/presentation/presenters/HabitsTracker.ts index 7e0d923..9688adb 100644 --- a/presentation/presenters/HabitsTracker.ts +++ b/presentation/presenters/HabitsTracker.ts @@ -7,9 +7,10 @@ import type { RetrieveHabitsTrackerUseCase, RetrieveHabitsTrackerUseCaseOptions, } from "@/domain/use-cases/RetrieveHabitsTracker" -import type { HabitCreateData } from "@/domain/entities/Habit" +import type { HabitCreateData, HabitEditData } from "@/domain/entities/Habit" import { getErrorsFieldsFromZodError } from "../../utils/zod" import type { HabitCreateUseCase } from "@/domain/use-cases/HabitCreate" +import type { HabitEditUseCase } from "@/domain/use-cases/HabitEdit" export interface HabitsTrackerPresenterState { habitsTracker: HabitsTracker @@ -29,7 +30,7 @@ export interface HabitsTrackerPresenterState { habitEdit: { state: FetchState errors: { - fields: Array + fields: Array global: ErrorGlobal } } @@ -38,6 +39,7 @@ export interface HabitsTrackerPresenterState { export interface HabitsTrackerPresenterOptions { retrieveHabitsTrackerUseCase: RetrieveHabitsTrackerUseCase habitCreateUseCase: HabitCreateUseCase + habitEditUseCase: HabitEditUseCase } export class HabitsTrackerPresenter @@ -46,9 +48,14 @@ export class HabitsTrackerPresenter { public retrieveHabitsTrackerUseCase: RetrieveHabitsTrackerUseCase public habitCreateUseCase: HabitCreateUseCase + public habitEditUseCase: HabitEditUseCase public constructor(options: HabitsTrackerPresenterOptions) { - const { retrieveHabitsTrackerUseCase, habitCreateUseCase } = options + const { + retrieveHabitsTrackerUseCase, + habitCreateUseCase, + habitEditUseCase, + } = options const habitsTracker = HabitsTracker.default() super({ habitsTracker, @@ -70,6 +77,7 @@ export class HabitsTrackerPresenter }) this.retrieveHabitsTrackerUseCase = retrieveHabitsTrackerUseCase this.habitCreateUseCase = habitCreateUseCase + this.habitEditUseCase = habitEditUseCase } public async habitCreate(data: unknown): Promise { @@ -110,10 +118,10 @@ export class HabitsTrackerPresenter global: null, } }) - const habit = await this.habitCreateUseCase.execute(data) + const habit = await this.habitEditUseCase.execute(data) this.setState((state) => { state.habitEdit.state = "success" - state.habitsTracker.addHabit(habit) + state.habitsTracker.editHabit(habit) }) return "success" } catch (error) { @@ -121,7 +129,7 @@ export class HabitsTrackerPresenter state.habitEdit.state = "error" if (error instanceof ZodError) { state.habitEdit.errors.fields = - getErrorsFieldsFromZodError(error) + getErrorsFieldsFromZodError(error) } else { state.habitEdit.errors.global = "unknown" } diff --git a/presentation/react/components/HabitEditForm/HabitEditForm.tsx b/presentation/react/components/HabitEditForm/HabitEditForm.tsx index b26d6e2..be69d7f 100644 --- a/presentation/react/components/HabitEditForm/HabitEditForm.tsx +++ b/presentation/react/components/HabitEditForm/HabitEditForm.tsx @@ -12,36 +12,28 @@ import ColorPicker, { import type { Habit, HabitEditData } from "@/domain/entities/Habit" import { HabitEditSchema } from "@/domain/entities/Habit" -import type { User } from "@/domain/entities/User" import { useHabitsTracker } from "../../contexts/HabitsTracker" export interface HabitEditFormProps { - user: User habit: Habit } -export const HabitEditForm: React.FC = ({ user }) => { +export const HabitEditForm: React.FC = ({ habit }) => { const { habitEdit, habitsTrackerPresenter } = useHabitsTracker() const { control, handleSubmit, - reset, formState: { errors }, } = useForm({ mode: "onChange", resolver: zodResolver(HabitEditSchema), defaultValues: { - userId: user.id, - name: "", - color: "#006CFF", - icon: "lightbulb", - goal: { - frequency: "daily", - target: { - type: "boolean", - }, - }, + id: habit.id, + userId: habit.userId, + name: habit.name, + color: habit.color, + icon: habit.icon, }, }) @@ -54,7 +46,6 @@ export const HabitEditForm: React.FC = ({ user }) => { const onSubmit = async (data: HabitEditData): Promise => { await habitsTrackerPresenter.habitEdit(data) setIsVisibleSnackbar(true) - reset() } return ( @@ -141,7 +132,7 @@ export const HabitEditForm: React.FC = ({ user }) => { disabled={habitEdit.state === "loading"} style={[styles.spacing, { width: "90%" }]} > - Create your habit! 🚀 + Save @@ -150,7 +141,7 @@ export const HabitEditForm: React.FC = ({ user }) => { onDismiss={onDismissSnackbar} duration={2_000} > - ✅ Habit created successfully! + ✅ Habit Saved successfully! ) From 867667f4c7d615b78f3d80e1798045a6c575a01f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Thu, 11 Apr 2024 23:03:45 +0200 Subject: [PATCH 4/6] feat: update habit progress boolean --- domain/entities/HabitsTracker.ts | 38 +- domain/repositories/HabitProgressUpdate.ts | 2 +- domain/use-cases/HabitGoalProgressUpdate.ts | 54 +- infrastructure/instances.ts | 18 + .../repositories/HabitProgressCreate.ts | 38 + .../repositories/HabitProgressUpdate.ts | 38 + package-lock.json | 24 + package.json | 1 + presentation/assets/confetti.json | 5382 +++++++++++++++++ presentation/presenters/HabitsTracker.ts | 37 + .../components/HabitHistory/HabitHistory.tsx | 143 - .../components/HabitsMainPage/HabitCard.tsx | 72 +- .../components/HabitsMainPage/HabitsList.tsx | 130 +- 13 files changed, 5729 insertions(+), 248 deletions(-) create mode 100644 infrastructure/supabase/repositories/HabitProgressCreate.ts create mode 100644 infrastructure/supabase/repositories/HabitProgressUpdate.ts create mode 100644 presentation/assets/confetti.json delete mode 100644 presentation/react/components/HabitHistory/HabitHistory.tsx diff --git a/domain/entities/HabitsTracker.ts b/domain/entities/HabitsTracker.ts index 5712310..e8b75ae 100644 --- a/domain/entities/HabitsTracker.ts +++ b/domain/entities/HabitsTracker.ts @@ -1,6 +1,7 @@ import type { GoalFrequency } from "./Goal" import type { Habit } from "./Habit" import { HabitHistory } from "./HabitHistory" +import type { HabitProgress } from "./HabitProgress" export interface HabitsTrackerData { habitsHistory: { @@ -35,24 +36,6 @@ export class HabitsTracker implements HabitsTrackerData { ) } - // public setHabitProgress(options: SetHabitProgressOptions): void { - // const { date, goalProgress, habitHistory } = options - // if (goalProgress.isBoolean()) { - // const currentHabitProgress = habitHistory.getProgressesByDate(date)[0] - // if (currentHabitProgress == null) { - // habitHistory.progressHistory = [ - // ...habitHistory.progressHistory, - // new HabitProgress({ - // date, - // goalProgress, - // habitId, - // id, - // }), - // ] - // } - // } - // } - public editHabit(habit: Habit): void { const habitHistory = this.getHabitHistoryById(habit.id) if (habitHistory == null) { @@ -61,6 +44,25 @@ export class HabitsTracker implements HabitsTrackerData { habitHistory.habit = habit } + public updateHabitProgress(habitProgress: HabitProgress): void { + const habitHistory = this.getHabitHistoryById(habitProgress.habitId) + if (habitHistory == null) { + return + } + const habitProgressSaved = habitHistory.progressHistory.find((progress) => { + return progress.id === habitProgress.id + }) + if (habitProgressSaved == null) { + habitHistory.progressHistory = [ + ...habitHistory.progressHistory, + habitProgress, + ] + return + } + habitProgressSaved.goalProgress = habitProgress.goalProgress + habitProgressSaved.date = habitProgress.date + } + public getAllHabitsHistory(): HabitHistory[] { return [ ...this.habitsHistory.daily, diff --git a/domain/repositories/HabitProgressUpdate.ts b/domain/repositories/HabitProgressUpdate.ts index c3fa305..ca642b1 100644 --- a/domain/repositories/HabitProgressUpdate.ts +++ b/domain/repositories/HabitProgressUpdate.ts @@ -4,7 +4,7 @@ import type { } from "../entities/HabitProgress" export interface HabitProgressUpdateOptions { - habitProgressData: HabitProgressData + habitProgressData: Omit } export interface HabitProgressUpdateRepository { diff --git a/domain/use-cases/HabitGoalProgressUpdate.ts b/domain/use-cases/HabitGoalProgressUpdate.ts index 965ddb0..add7350 100644 --- a/domain/use-cases/HabitGoalProgressUpdate.ts +++ b/domain/use-cases/HabitGoalProgressUpdate.ts @@ -1,28 +1,56 @@ import type { GoalProgress } from "../entities/Goal" import type { HabitHistory } from "../entities/HabitHistory" +import type { HabitProgress } from "../entities/HabitProgress" import type { HabitProgressCreateRepository } from "../repositories/HabitProgressCreate" import type { HabitProgressUpdateRepository } from "../repositories/HabitProgressUpdate" -export interface HabitGoalProgressUpdateOptions { +export interface HabitGoalProgressUpdateUseCaseOptions { date: Date goalProgress: GoalProgress habitHistory: HabitHistory } -export class HabitGoalProgressUpdateUseCase - implements HabitGoalProgressUpdateOptions -{ - public date: Date - public goalProgress: GoalProgress - public habitHistory: HabitHistory +export interface HabitGoalProgressUpdateUseCaseDependencyOptions { + habitProgressCreateRepository: HabitProgressCreateRepository + habitProgressUpdateRepository: HabitProgressUpdateRepository +} - public constructor(option: HabitGoalProgressUpdateOptions) { - this.date = option.date - this.goalProgress = option.goalProgress - this.habitHistory = option.habitHistory +export class HabitGoalProgressUpdateUseCase + implements HabitGoalProgressUpdateUseCaseDependencyOptions +{ + public habitProgressCreateRepository: HabitProgressCreateRepository + public habitProgressUpdateRepository: HabitProgressUpdateRepository + + public constructor(options: HabitGoalProgressUpdateUseCaseDependencyOptions) { + this.habitProgressCreateRepository = options.habitProgressCreateRepository + this.habitProgressUpdateRepository = options.habitProgressUpdateRepository } - public async execute(data: unknown): Promise { - // + public async execute( + options: HabitGoalProgressUpdateUseCaseOptions, + ): Promise { + const { date, goalProgress, habitHistory } = options + + if (goalProgress.isBoolean()) { + const currentHabitProgress = habitHistory.getProgressesByDate(date)[0] + if (currentHabitProgress == null) { + return await this.habitProgressCreateRepository.execute({ + habitProgressData: { + date, + goalProgress, + habitId: habitHistory.habit.id, + }, + }) + } + return await this.habitProgressUpdateRepository.execute({ + habitProgressData: { + date, + goalProgress, + id: currentHabitProgress.id, + }, + }) + } + + throw new Error("Not implemented") } } diff --git a/infrastructure/instances.ts b/infrastructure/instances.ts index 8e92055..c7f7c25 100644 --- a/infrastructure/instances.ts +++ b/infrastructure/instances.ts @@ -10,6 +10,9 @@ import { HabitCreateSupabaseRepository } from "./supabase/repositories/HabitCrea import { HabitCreateUseCase } from "@/domain/use-cases/HabitCreate" import { HabitEditSupabaseRepository } from "./supabase/repositories/HabitEdit" import { HabitEditUseCase } from "@/domain/use-cases/HabitEdit" +import { HabitProgressCreateSupabaseRepository } from "./supabase/repositories/HabitProgressCreate" +import { HabitProgressUpdateSupabaseRepository } from "./supabase/repositories/HabitProgressUpdate" +import { HabitGoalProgressUpdateUseCase } from "@/domain/use-cases/HabitGoalProgressUpdate" /** * Repositories @@ -30,6 +33,16 @@ const habitCreateRepository = new HabitCreateSupabaseRepository({ const habitEditRepository = new HabitEditSupabaseRepository({ supabaseClient, }) +const habitProgressCreateRepository = new HabitProgressCreateSupabaseRepository( + { + supabaseClient, + }, +) +const habitProgressUpdateRepository = new HabitProgressUpdateSupabaseRepository( + { + supabaseClient, + }, +) /** * Use Cases @@ -47,6 +60,10 @@ const retrieveHabitsTrackerUseCase = new RetrieveHabitsTrackerUseCase({ const habitEditUseCase = new HabitEditUseCase({ habitEditRepository, }) +const habitGoalProgressUpdateUseCase = new HabitGoalProgressUpdateUseCase({ + habitProgressCreateRepository, + habitProgressUpdateRepository, +}) /** * Presenters @@ -58,4 +75,5 @@ export const habitsTrackerPresenter = new HabitsTrackerPresenter({ retrieveHabitsTrackerUseCase, habitCreateUseCase, habitEditUseCase, + habitGoalProgressUpdateUseCase, }) diff --git a/infrastructure/supabase/repositories/HabitProgressCreate.ts b/infrastructure/supabase/repositories/HabitProgressCreate.ts new file mode 100644 index 0000000..90e4979 --- /dev/null +++ b/infrastructure/supabase/repositories/HabitProgressCreate.ts @@ -0,0 +1,38 @@ +import type { HabitProgressCreateRepository } from "@/domain/repositories/HabitProgressCreate" +import { SupabaseRepository } from "./_SupabaseRepository" +import { HabitProgress } from "@/domain/entities/HabitProgress" + +export class HabitProgressCreateSupabaseRepository + extends SupabaseRepository + implements HabitProgressCreateRepository +{ + public execute: HabitProgressCreateRepository["execute"] = async ( + options, + ) => { + const { habitProgressData } = options + const { goalProgress, date, habitId } = habitProgressData + let goalProgressValue = goalProgress.isCompleted() ? 1 : 0 + if (goalProgress.isNumeric()) { + goalProgressValue = goalProgress.progress + } + const { data, error } = await this.supabaseClient + .from("habits_progresses") + .insert({ + habit_id: Number(habitId), + date: date.toISOString(), + goal_progress: goalProgressValue, + }) + .select("*") + const insertedProgress = data?.[0] + if (error != null || insertedProgress == null) { + throw new Error(error?.message ?? "Failed to create habit progress.") + } + const habitProgress = new HabitProgress({ + id: insertedProgress.id.toString(), + habitId: insertedProgress.habit_id.toString(), + date: new Date(insertedProgress.date), + goalProgress, + }) + return habitProgress + } +} diff --git a/infrastructure/supabase/repositories/HabitProgressUpdate.ts b/infrastructure/supabase/repositories/HabitProgressUpdate.ts new file mode 100644 index 0000000..b7b437b --- /dev/null +++ b/infrastructure/supabase/repositories/HabitProgressUpdate.ts @@ -0,0 +1,38 @@ +import type { HabitProgressUpdateRepository } from "@/domain/repositories/HabitProgressUpdate" +import { SupabaseRepository } from "./_SupabaseRepository" +import { HabitProgress } from "@/domain/entities/HabitProgress" + +export class HabitProgressUpdateSupabaseRepository + extends SupabaseRepository + implements HabitProgressUpdateRepository +{ + public execute: HabitProgressUpdateRepository["execute"] = async ( + options, + ) => { + const { habitProgressData } = options + const { id, goalProgress, date } = habitProgressData + let goalProgressValue = goalProgress.isCompleted() ? 1 : 0 + if (goalProgress.isNumeric()) { + goalProgressValue = goalProgress.progress + } + const { data, error } = await this.supabaseClient + .from("habits_progresses") + .update({ + date: date.toISOString(), + goal_progress: goalProgressValue, + }) + .eq("id", id) + .select("*") + const insertedProgress = data?.[0] + if (error != null || insertedProgress == null) { + throw new Error(error?.message ?? "Failed to update habit progress.") + } + const habitProgress = new HabitProgress({ + id: insertedProgress.id.toString(), + habitId: insertedProgress.habit_id.toString(), + date: new Date(insertedProgress.date), + goalProgress, + }) + return habitProgress + } +} diff --git a/package-lock.json b/package-lock.json index 8f677ec..f5a6b63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "expo-system-ui": "2.9.3", "expo-web-browser": "12.8.2", "immer": "10.0.4", + "lottie-react-native": "6.7.2", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.2", @@ -17868,6 +17869,29 @@ "loose-envify": "cli.js" } }, + "node_modules/lottie-react-native": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.7.2.tgz", + "integrity": "sha512-MZVx6N1EeO/EaSx8T44mJ0aHc5Mqee+xIfWwszni0oz8U2wlHdaWGjES44dHxaxgAp/0dRaFt3PkpZ6egTzcBg==", + "peerDependencies": { + "@dotlottie/react-player": "^1.6.1", + "@lottiefiles/react-lottie-player": "^3.5.3", + "react": "*", + "react-native": ">=0.46", + "react-native-windows": ">=0.63.x" + }, + "peerDependenciesMeta": { + "@dotlottie/react-player": { + "optional": true + }, + "@lottiefiles/react-lottie-player": { + "optional": true + }, + "react-native-windows": { + "optional": true + } + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", diff --git a/package.json b/package.json index df8a668..41c6abf 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "expo-system-ui": "2.9.3", "expo-web-browser": "12.8.2", "immer": "10.0.4", + "lottie-react-native": "6.7.2", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.2", diff --git a/presentation/assets/confetti.json b/presentation/assets/confetti.json new file mode 100644 index 0000000..9030acc --- /dev/null +++ b/presentation/assets/confetti.json @@ -0,0 +1,5382 @@ +{ + "v": "5.5.6", + "fr": 60, + "ip": 0, + "op": 300, + "w": 609, + "h": 812, + "nm": "lottie (mobile)", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "_small-side", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [218, 320, 0], "ix": 2 }, + "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 800, + "h": 800, + "ip": 15, + "op": 234, + "st": 15, + "bm": 0 + } + ] + }, + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "streamer b", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 166, "ix": 10 }, + "p": { "a": 0, "k": [554, 664, 0], "ix": 2 }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 9, + "s": [4] + }, + { "t": 57, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 14, + "s": [0] + }, + { "t": 57, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 9, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 14, + "s": [35] + }, + { "t": 57, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 9, + "op": 58, + "st": 9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "streamer a", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 167, "ix": 10 }, + "p": { "a": 0, "k": [532, 582, 0], "ix": 2 }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 5, + "s": [4] + }, + { "t": 48, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 10, + "s": [0] + }, + { "t": 48, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 10, + "s": [35] + }, + { "t": 48, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 5, + "op": 49, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "circle a", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 29, + "s": [321.019] + }, + { "t": 158, "s": [1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [599.5, 838, 0], + "to": [-30, -106.667, 0], + "ti": [46.667, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 29, + "s": [419.5, 198, 0], + "to": [-46.667, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 158, "s": [319.5, 838, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 1, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 29, + "s": [100, 100, 100] + }, + { "t": 128, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 159, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "circle b", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { "t": 128, "s": [1440] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [599.5, 838, 0], + "to": [-26.667, -93.333, 0], + "ti": [66.667, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 21, + "s": [439.5, 278, 0], + "to": [-66.667, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 128, "s": [199.5, 838, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 3, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 21, + "s": [100, 100, 100] + }, + { "t": 98, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 129, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "star a", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 31, + "s": [343.949] + }, + { "t": 158, "s": [1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [596.087, 836.292, 0], + "to": [-36.098, -100, 0], + "ti": [52.765, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 31, + "s": [379.5, 236.292, 0], + "to": [-52.765, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 158, "s": [279.5, 836.292, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 1, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 31, + "s": [100, 100, 100] + }, + { "t": 128, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 159, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "star b", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 23, + "s": [288] + }, + { "t": 128, "s": [1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [596.087, 836.292, 0], + "to": [-39.431, -113.333, 0], + "ti": [66.098, 1.667, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 23, + "s": [359.5, 156.292, 0], + "to": [-66.098, -1.667, 0], + "ti": [0, 0, 0] + }, + { "t": 128, "s": [199.5, 826.292, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 3, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 23, + "s": [100, 100, 100] + }, + { "t": 98, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.5215686274509804, 0.27058823529411763, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 129, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "rec a", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [381.468] + }, + { "t": 218, "s": [2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [599.5, 842, 0], + "to": [-23.333, -100, 0], + "ti": [41.333, 1.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 33, + "s": [459.5, 242, 0], + "to": [-41.333, -1.333, 0], + "ti": [0, 0, 0] + }, + { "t": 218, "s": [351.5, 834, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 0, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 33, + "s": [100, 100, 100] + }, + { "t": 188, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 219, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "rec b", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 25, + "s": [262.857] + }, + { "t": 191, "s": [2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [599.5, 842, 0], + "to": [-23.333, -113.333, 0], + "ti": [74, 5, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 25, + "s": [459.5, 162, 0], + "to": [-74, -5, 0], + "ti": [0, 0, 0] + }, + { "t": 191, "s": [155.5, 812, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 2, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 25, + "s": [100, 100, 100] + }, + { "t": 161, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 192, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "square a", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [462.385] + }, + { "t": 218, "s": [2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [599.5, 838, 0], + "to": [-43.333, -123.333, 0], + "ti": [60, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 35, + "s": [339.5, 98, 0], + "to": [-60, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 218, "s": [239.5, 838, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 0, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 35, + "s": [100, 100, 100] + }, + { "t": 188, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 219, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "square b", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 27, + "s": [285.714] + }, + { "t": 191, "s": [2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [599.5, 838, 0], + "to": [-30, -120, 0], + "ti": [75, 3.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 27, + "s": [419.5, 118, 0], + "to": [-75, -3.333, 0], + "ti": [0, 0, 0] + }, + { "t": 191, "s": [149.5, 818, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, + "t": 2, + "s": [50, 100, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 27, + "s": [100, 100, 100] + }, + { "t": 161, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 192, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 4, + "nm": "streamer b 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 171, "ix": 10 }, + "p": { "a": 0, "k": [543, 427, 0], "ix": 2 }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 1, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 13, + "s": [4] + }, + { "t": 61, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 18, + "s": [0] + }, + { "t": 61, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 13, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 18, + "s": [35] + }, + { "t": 61, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 13, + "op": 62, + "st": 13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 12, + "ty": 4, + "nm": "streamer a 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 151, "ix": 10 }, + "p": { "a": 0, "k": [454, 444, 0], "ix": 2 }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 10, + "s": [4] + }, + { "t": 53, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 15, + "s": [0] + }, + { "t": 53, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 15, + "s": [35] + }, + { "t": 53, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 10, + "op": 54, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 13, + "ty": 4, + "nm": "circle a 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 29, + "s": [-371.368] + }, + { "t": 191, "s": [-2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [599.5, 838, 0], + "to": [-53.333, -113.333, 0], + "ti": [56.667, -3.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 29, + "s": [279.5, 158, 0], + "to": [-56.667, 3.333, 0], + "ti": [0, 0, 0] + }, + { "t": 191, "s": [259.5, 858, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 1, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 29, + "s": [100, 100, 100] + }, + { "t": 161, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 192, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 14, + "ty": 4, + "nm": "circle b 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 21, + "s": [-250.839] + }, + { "t": 158, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [599.5, 838, 0], + "to": [-53.333, -100, 0], + "ti": [63, -7, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 21, + "s": [279.5, 238, 0], + "to": [-63, 7, 0], + "ti": [0, 0, 0] + }, + { "t": 158, "s": [221.5, 880, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 3, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 21, + "s": [100, 100, 100] + }, + { "t": 128, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.5215686274509804, 0.27058823529411763, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 159, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 15, + "ty": 4, + "nm": "star a 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 31, + "s": [-397.895] + }, + { "t": 191, "s": [-2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [596.087, 836.292, 0], + "to": [-9.431, -113.333, 0], + "ti": [42.765, -3.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 31, + "s": [539.5, 156.292, 0], + "to": [-42.765, 3.333, 0], + "ti": [0, 0, 0] + }, + { "t": 191, "s": [339.5, 856.292, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 1, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 31, + "s": [100, 100, 100] + }, + { "t": 161, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 192, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 16, + "ty": 4, + "nm": "star b 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 23, + "s": [-278.71] + }, + { "t": 158, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [596.087, 836.292, 0], + "to": [-12.765, -96.667, 0], + "ti": [52.765, -3.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 23, + "s": [519.5, 256.292, 0], + "to": [-52.765, 3.333, 0], + "ti": [0, 0, 0] + }, + { "t": 158, "s": [279.5, 856.292, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 3, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 23, + "s": [100, 100, 100] + }, + { "t": 128, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 159, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 17, + "ty": 4, + "nm": "rec a 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [-556.875] + }, + { "t": 128, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [599.5, 842, 0], + "to": [-16.667, -120, 0], + "ti": [66.667, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 33, + "s": [499.5, 122, 0], + "to": [-66.667, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 128, "s": [199.5, 842, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 0, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 33, + "s": [100, 100, 100] + }, + { "t": 98, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 129, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 18, + "ty": 4, + "nm": "rec b 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 25, + "s": [-306.667] + }, + { "t": 218, "s": [-2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [599.5, 842, 0], + "to": [-22.62, -109.87, 0], + "ti": [2.877, -2.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 25, + "s": [339.5, 262, 0], + "to": [-51.333, 36.667, 0], + "ti": [0, 0, 0] + }, + { "t": 218, "s": [219.5, 862, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 2, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 25, + "s": [100, 100, 100] + }, + { "t": 188, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 219, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 19, + "ty": 4, + "nm": "square a 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [-590.625] + }, + { "t": 128, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [599.5, 838, 0], + "to": [-20, -90, 0], + "ti": [36.667, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 35, + "s": [479.5, 298, 0], + "to": [-36.667, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 128, "s": [379.5, 838, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 0, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 35, + "s": [100, 100, 100] + }, + { "t": 98, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 129, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 20, + "ty": 4, + "nm": "square b 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.333], "y": [0] }, + "t": 27, + "s": [-333.333] + }, + { "t": 218, "s": [-2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [599.5, 838, 0], + "to": [-10, -103.333, 0], + "ti": [50, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.333, "y": 0 }, + "t": 27, + "s": [539.5, 218, 0], + "to": [-50, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 218, "s": [299.5, 838, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, + "t": 2, + "s": [100, 50, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 27, + "s": [100, 100, 100] + }, + { "t": 188, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 219, + "st": 2, + "bm": 0 + } + ] + }, + { + "id": "comp_2", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "_small-side", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [260, 320, 0], "ix": 2 }, + "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 800, + "h": 800, + "ip": 0, + "op": 219, + "st": 0, + "bm": 0 + } + ] + }, + { + "id": "comp_3", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "left", + "refId": "comp_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [400, 400, 0], "ix": 2 }, + "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 800, + "h": 800, + "ip": 13, + "op": 313, + "st": 13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "right", + "refId": "comp_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [400, 400, 0], "ix": 2 }, + "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 800, + "h": 800, + "ip": 30, + "op": 330, + "st": 30, + "bm": 0 + } + ] + }, + { + "id": "comp_4", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "streamer a 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 14, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 13, + "s": [219.178, -190.096, 0], + "to": [-95.333, 426.667, 0], + "ti": [167.333, -560.667, 0] + }, + { "t": 173, "s": [179.178, 989.904, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 13, + "s": [4] + }, + { "t": 176, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 18, + "s": [0] + }, + { "t": 176, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 13, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 18, + "s": [40] + }, + { "t": 176, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 13, + "op": 174, + "st": 13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "streamer b 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": -1.458, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [269.863, -175.455, 0], + "to": [-110, 415.333, 0], + "ti": [216, -599.333, 0] + }, + { "t": 173, "s": [69.863, 984.545, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 5, + "s": [4] + }, + { "t": 173, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 10, + "s": [0] + }, + { "t": 173, "s": [100] } + ], + "ix": 1 + }, + "e": { + "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": 10, + "s": [40] + }, + { "t": 173, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 5, + "op": 174, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "circle a 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 8, + "s": [0] + }, + { "t": 155, "s": [1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [325.643, -26.292, 0], + "to": [-101.333, 75.667, 0], + "ti": [15.333, -507.667, 0] + }, + { "t": 155, "s": [125.643, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 8, + "s": [50, 100, 100] + }, + { "t": 155, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 156, + "st": -7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "circle b 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { "t": 215, "s": [2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [619.5, -26.292, 0], + "to": [-138, 77.667, 0], + "ti": [-2, -497.667, 0] + }, + { "t": 215, "s": [259.5, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 2, + "s": [50, 100, 100] + }, + { "t": 215, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 216, + "st": -13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "star a 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 6, + "s": [0] + }, + { "t": 245, "s": [2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [376.929, -28, 0], + "to": [-213.333, 157.667, 0], + "ti": [173.333, -127.667, 0] + }, + { "t": 245, "s": [116.929, 834, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 6, + "s": [50, 100, 100] + }, + { "t": 245, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 246, + "st": -9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "star b 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { "t": 125, "s": [1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [171.786, -28, 0], + "to": [0, 0, 0], + "ti": [-161.333, -275.667, 0] + }, + { "t": 125, "s": [251.786, 834, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 2, + "s": [50, 100, 100] + }, + { "t": 125, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.5215686274509804, 0.27058823529411763, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 126, + "st": -13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "rec a 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 4, + "s": [0] + }, + { "t": 185, "s": [2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [428.214, -22.292, 0], + "to": [-167.333, 119.667, 0], + "ti": [-130.667, -315.667, 0] + }, + { "t": 185, "s": [228.214, 839.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 4, + "s": [50, 100, 100] + }, + { "t": 185, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 186, + "st": -11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "rec b 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 6, + "s": [0] + }, + { "t": 245, "s": [2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [223.071, -22.292, 0], + "to": [0, 0, 0], + "ti": [-92.571, -383.708, 0] + }, + { "t": 245, "s": [223.071, 839.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 6, + "s": [50, 100, 100] + }, + { "t": 245, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 246, + "st": -9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "square a 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 4, + "s": [0] + }, + { "t": 217, "s": [2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [120.5, -26.292, 0], + "to": [13, 430.305, 0], + "ti": [52.221, -418.892, 0] + }, + { "t": 217, "s": [198.5, 833.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 4, + "s": [50, 100, 100] + }, + { "t": 217, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 218, + "st": -11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "square b 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 8, + "s": [0] + }, + { "t": 215, "s": [2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [274.357, -26.292, 0], + "to": [157.333, 415.667, 0], + "ti": [22.667, -253.667, 0] + }, + { "t": 215, "s": [114.357, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 8, + "s": [50, 100, 100] + }, + { "t": 215, "s": [100, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 216, + "st": -7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 4, + "nm": "streamer a 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 3, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [275.178, -173.096, 0], + "to": [-87.333, 413.333, 0], + "ti": [177.333, -643.333, 0] + }, + { "t": 185, "s": [219.178, 974.904, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [4] + }, + { "t": 177, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 5, + "s": [0] + }, + { "t": 177, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 5, + "s": [40] + }, + { "t": 177, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 186, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 12, + "ty": 4, + "nm": "streamer b 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 9, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 11, + "s": [199.863, 74.545, 0], + "to": [-13.363, 405.455, 0], + "ti": [179.333, -430.667, 0] + }, + { "t": 217, "s": [139.863, 834.545, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-157, -245, 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, 0], + [-1.685, -13.314], + [0, -14.907], + [0, -15.206], + [0, -14.907], + [0, -14.907], + [0, -15.206], + [1.754, -14.206], + [-3.934, -9.465] + ], + "o": [ + [-3.895, 8.562], + [1.872, 14.789], + [0, 15.206], + [0, 14.907], + [0, 14.907], + [0, 15.206], + [0, 14.314], + [-1.803, 14.605], + [0, 0] + ], + "v": [ + [-156.5, -406], + [-166.5, -367], + [-146.5, -327], + [-166.5, -286], + [-146.5, -246], + [-166.5, -206], + [-146.5, -165], + [-166.5, -127], + [-156.5, -84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 1, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 11, + "s": [4] + }, + { "t": 199, "s": [0.5] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 16, + "s": [0] + }, + { "t": 199, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 11, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 16, + "s": [40] + }, + { "t": 199, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 11, + "op": 218, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 13, + "ty": 4, + "nm": "circle a 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { "t": 125, "s": [-1800] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [365.643, -26.292, 0], + "to": [-101.333, 75.667, 0], + "ti": [15.333, -507.667, 0] + }, + { "t": 125, "s": [165.643, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 2, + "s": [100, 50, 100] + }, + { "t": 125, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 126, + "st": -13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 14, + "ty": 4, + "nm": "circle b 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 8, + "s": [0] + }, + { "t": 245, "s": [-2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [519.5, -26.292, 0], + "to": [-138, 77.667, 0], + "ti": [-2, -497.667, 0] + }, + { "t": 245, "s": [159.5, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 8, + "s": [100, 50, 100] + }, + { "t": 245, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.5215686274509804, 0.27058823529411763, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 246, + "st": -7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 15, + "ty": 4, + "nm": "star a 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 6, + "s": [0] + }, + { "t": 245, "s": [-2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [416.929, -28, 0], + "to": [-213.333, 157.667, 0], + "ti": [173.333, -127.667, 0] + }, + { "t": 245, "s": [156.929, 834, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 6, + "s": [100, 50, 100] + }, + { "t": 245, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 246, + "st": -9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 16, + "ty": 4, + "nm": "star b 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 8, + "s": [0] + }, + { "t": 155, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [211.786, -28, 0], + "to": [0, 0, 0], + "ti": [-161.333, -275.667, 0] + }, + { "t": 155, "s": [291.786, 834, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 8, + "s": [100, 50, 100] + }, + { "t": 155, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 1, + "d": 1, + "pt": { "a": 0, "k": 5, "ix": 3 }, + "p": { "a": 0, "k": [0, 0], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "ir": { "a": 0, "k": 5, "ix": 6 }, + "is": { "a": 0, "k": 0, "ix": 8 }, + "or": { "a": 0, "k": 12, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 156, + "st": -7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 17, + "ty": 4, + "nm": "rec a 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 4, + "s": [0] + }, + { "t": 185, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [468.214, -22.292, 0], + "to": [-167.333, 119.667, 0], + "ti": [-130.667, -315.667, 0] + }, + { "t": 185, "s": [268.214, 839.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 4, + "s": [100, 50, 100] + }, + { "t": 185, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.2627450980392157, 0.2, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 186, + "st": -11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 18, + "ty": 4, + "nm": "rec b 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 6, + "s": [0] + }, + { "t": 245, "s": [-2880] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [263.071, -22.292, 0], + "to": [0, 143.667, 0], + "ti": [-114.571, -267.708, 0] + }, + { "t": 245, "s": [263.071, 839.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 6, + "s": [100, 50, 100] + }, + { "t": 245, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 8], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 246, + "st": -9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 19, + "ty": 4, + "nm": "square a 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 2, + "s": [0] + }, + { "t": 217, "s": [-2520] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [160.5, -26.292, 0], + "to": [13, 430.305, 0], + "ti": [52.221, -418.892, 0] + }, + { "t": 217, "s": [238.5, 833.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 2, + "s": [100, 50, 100] + }, + { "t": 217, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.12156862745098039, 0.8431372549019608, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 218, + "st": -13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 20, + "ty": 4, + "nm": "square b 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 4, + "s": [0] + }, + { "t": 185, "s": [-2160] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [314.357, -26.292, 0], + "to": [157.333, 415.667, 0], + "ti": [22.667, -253.667, 0] + }, + { "t": 185, "s": [154.357, 835.708, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "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": 4, + "s": [100, 50, 100] + }, + { "t": 185, "s": [50, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [16, 16], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [1, 0.12156862745098039, 0.5647058823529412, 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": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 186, + "st": -11, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "cannon (small - left)", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [76, 451.99999999999994, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 360, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 480, + "h": 720, + "ip": 0, + "op": 300, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "cannon (small - right)", + "refId": "comp_2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [533, 451.99999999999994, 0], "ix": 2 }, + "a": { "a": 0, "k": [479.994, 360, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 480, + "h": 720, + "ip": 0, + "op": 300, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 0, + "nm": "cannon (small - top)", + "refId": "comp_3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [304, 408, 0], "ix": 2 }, + "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, + "s": { "a": 0, "k": [102, 102, 100], "ix": 6 } + }, + "ao": 0, + "w": 800, + "h": 800, + "ip": 0, + "op": 300, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/presentation/presenters/HabitsTracker.ts b/presentation/presenters/HabitsTracker.ts index 9688adb..264d533 100644 --- a/presentation/presenters/HabitsTracker.ts +++ b/presentation/presenters/HabitsTracker.ts @@ -11,6 +11,10 @@ import type { HabitCreateData, HabitEditData } from "@/domain/entities/Habit" import { getErrorsFieldsFromZodError } from "../../utils/zod" import type { HabitCreateUseCase } from "@/domain/use-cases/HabitCreate" import type { HabitEditUseCase } from "@/domain/use-cases/HabitEdit" +import type { + HabitGoalProgressUpdateUseCase, + HabitGoalProgressUpdateUseCaseOptions, +} from "@/domain/use-cases/HabitGoalProgressUpdate" export interface HabitsTrackerPresenterState { habitsTracker: HabitsTracker @@ -34,12 +38,17 @@ export interface HabitsTrackerPresenterState { global: ErrorGlobal } } + + habitGoalProgressUpdate: { + state: FetchState + } } export interface HabitsTrackerPresenterOptions { retrieveHabitsTrackerUseCase: RetrieveHabitsTrackerUseCase habitCreateUseCase: HabitCreateUseCase habitEditUseCase: HabitEditUseCase + habitGoalProgressUpdateUseCase: HabitGoalProgressUpdateUseCase } export class HabitsTrackerPresenter @@ -49,12 +58,14 @@ export class HabitsTrackerPresenter public retrieveHabitsTrackerUseCase: RetrieveHabitsTrackerUseCase public habitCreateUseCase: HabitCreateUseCase public habitEditUseCase: HabitEditUseCase + public habitGoalProgressUpdateUseCase: HabitGoalProgressUpdateUseCase public constructor(options: HabitsTrackerPresenterOptions) { const { retrieveHabitsTrackerUseCase, habitCreateUseCase, habitEditUseCase, + habitGoalProgressUpdateUseCase, } = options const habitsTracker = HabitsTracker.default() super({ @@ -74,10 +85,14 @@ export class HabitsTrackerPresenter global: null, }, }, + habitGoalProgressUpdate: { + state: "idle", + }, }) this.retrieveHabitsTrackerUseCase = retrieveHabitsTrackerUseCase this.habitCreateUseCase = habitCreateUseCase this.habitEditUseCase = habitEditUseCase + this.habitGoalProgressUpdateUseCase = habitGoalProgressUpdateUseCase } public async habitCreate(data: unknown): Promise { @@ -158,4 +173,26 @@ export class HabitsTrackerPresenter }) } } + + public async habitUpdateProgress( + options: HabitGoalProgressUpdateUseCaseOptions, + ): Promise { + try { + this.setState((state) => { + state.habitGoalProgressUpdate.state = "loading" + }) + const habitProgress = + await this.habitGoalProgressUpdateUseCase.execute(options) + this.setState((state) => { + state.habitsTracker.updateHabitProgress(habitProgress) + state.habitGoalProgressUpdate.state = "success" + }) + return "success" + } catch (error) { + this.setState((state) => { + state.habitGoalProgressUpdate.state = "error" + }) + return "error" + } + } } diff --git a/presentation/react/components/HabitHistory/HabitHistory.tsx b/presentation/react/components/HabitHistory/HabitHistory.tsx deleted file mode 100644 index 4a1c572..0000000 --- a/presentation/react/components/HabitHistory/HabitHistory.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { useState } from "react" -import { Calendar } from "react-native-calendars" -import { Text } from "react-native-paper" -import { SafeAreaView } from "react-native-safe-area-context" - -export const HabitHistory: React.FC = () => { - const [selected, setSelected] = useState("") - - return ( - - { - setSelected(day.dateString) - }} - markedDates={{ - "2023-03-01": { selected: true, marked: true, selectedColor: "blue" }, - "2023-03-02": { marked: true }, - "2023-03-03": { selected: true, marked: true, selectedColor: "blue" }, - [selected]: { - selected: true, - disableTouchEvent: true, - selectedColor: "orange", - }, - }} - theme={{ - backgroundColor: "#000000", - calendarBackground: "#000000", - textSectionTitleColor: "#b6c1cd", - selectedDayBackgroundColor: "#00adf5", - selectedDayTextColor: "#ffffff", - todayTextColor: "#00adf5", - dayTextColor: "#2d4150", - textDisabledColor: "#d9efff", - }} - /> - {selected} - - ) -} - -/* - { - console.log('trigger items loading'); - }} - // Callback that fires when the calendar is opened or closed - onCalendarToggled={calendarOpened => { - console.log(calendarOpened); - }} - // Callback that gets called on day press - onDayPress={day => { - console.log('day pressed'); - }} - // Callback that gets called when day changes while scrolling agenda list - onDayChange={day => { - console.log('day changed'); - }} - // Initially selected day - selected={'2012-05-16'} - // Minimum date that can be selected, dates before minDate will be grayed out. Default = undefined - minDate={'2012-05-10'} - // Maximum date that can be selected, dates after maxDate will be grayed out. Default = undefined - maxDate={'2012-05-30'} - // Max amount of months allowed to scroll to the past. Default = 50 - pastScrollRange={50} - // Max amount of months allowed to scroll to the future. Default = 50 - futureScrollRange={50} - // Specify how each item should be rendered in agenda - renderItem={(item, firstItemInDay) => { - return ; - }} - // Specify how each date should be rendered. day can be undefined if the item is not first in that day - renderDay={(day, item) => { - return ; - }} - // Specify how empty date content with no items should be rendered - renderEmptyDate={() => { - return ; - }} - // Specify how agenda knob should look like - renderKnob={() => { - return ; - }} - // Override inner list with a custom implemented component - renderList={listProps => { - return ; - }} - // Specify what should be rendered instead of ActivityIndicator - renderEmptyData={() => { - return ; - }} - // Specify your item comparison function for increased performance - rowHasChanged={(r1, r2) => { - return r1.text !== r2.text; - }} - // Hide knob button. Default = false - hideKnob={true} - // When `true` and `hideKnob` prop is `false`, the knob will always be visible and the user will be able to drag the knob up and close the calendar. Default = false - showClosingKnob={false} - // By default, agenda dates are marked if they have at least one item, but you can override this if needed - markedDates={{ - '2012-05-16': {selected: true, marked: true}, - '2012-05-17': {marked: true}, - '2012-05-18': {disabled: true} - }} - // If disabledByDefault={true} dates flagged as not disabled will be enabled. Default = false - disabledByDefault={true} - // If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make sure to also set the refreshing prop correctly - onRefresh={() => console.log('refreshing...')} - // Set this true while waiting for new data from a refresh - refreshing={false} - // Add a custom RefreshControl component, used to provide pull-to-refresh functionality for the ScrollView - refreshControl={null} - // Agenda theme - theme={{ - ...calendarTheme, - agendaDayTextColor: 'yellow', - agendaDayNumColor: 'green', - agendaTodayColor: 'red', - agendaKnobColor: 'blue' - }} - // Agenda container style - style={{}} -/> -*/ diff --git a/presentation/react/components/HabitsMainPage/HabitCard.tsx b/presentation/react/components/HabitsMainPage/HabitCard.tsx index a772666..8fa1a39 100644 --- a/presentation/react/components/HabitsMainPage/HabitCard.tsx +++ b/presentation/react/components/HabitsMainPage/HabitCard.tsx @@ -1,30 +1,37 @@ import FontAwesome6 from "@expo/vector-icons/FontAwesome6" import { useRouter } from "expo-router" -import { View } from "react-native" -import { List, Text, Checkbox } from "react-native-paper" import { useState } from "react" +import { View } from "react-native" +import { Checkbox, List, Text } from "react-native-paper" +import type LottieView from "lottie-react-native" -import type { GoalProgress } from "@/domain/entities/Goal" -import type { Habit } from "@/domain/entities/Habit" +import type { GoalBoolean } from "@/domain/entities/Goal" +import { GoalBooleanProgress } from "@/domain/entities/Goal" +import type { HabitHistory } from "@/domain/entities/HabitHistory" import { getColorRGBAFromHex } from "@/utils/colors" +import { useHabitsTracker } from "../../contexts/HabitsTracker" export interface HabitCardProps { - habit: Habit - goalProgress: GoalProgress + habitHistory: HabitHistory + selectedDate: Date + confettiRef: React.MutableRefObject } export const HabitCard: React.FC = (props) => { - const { habit, goalProgress } = props + const { habitHistory, selectedDate, confettiRef } = props + const { habit } = habitHistory const router = useRouter() + const { habitsTrackerPresenter } = useHabitsTracker() + + const goalProgress = habitHistory.getGoalProgressByDate(selectedDate) + const [checked, setChecked] = useState(goalProgress.isCompleted()) const habitColor = getColorRGBAFromHex({ hexColor: habit.color, opacity: 0.4, }) - const [checked, setChecked] = useState(goalProgress.isCompleted()) - return ( { @@ -57,15 +64,17 @@ export const HabitCard: React.FC = (props) => { ]} left={() => { return ( - + + + ) }} right={() => { @@ -82,14 +91,25 @@ export const HabitCard: React.FC = (props) => { } return ( - - { - setChecked(!checked) - }} - /> - + { + const isCheckedNew = !checked + setChecked(isCheckedNew) + if (isCheckedNew) { + confettiRef.current?.play() + } + await habitsTrackerPresenter.habitUpdateProgress({ + date: selectedDate, + habitHistory, + goalProgress: new GoalBooleanProgress({ + goal: habit.goal as GoalBoolean, + progress: isCheckedNew, + }), + }) + }} + /> ) }} /> diff --git a/presentation/react/components/HabitsMainPage/HabitsList.tsx b/presentation/react/components/HabitsMainPage/HabitsList.tsx index a632fdd..8a49b8a 100644 --- a/presentation/react/components/HabitsMainPage/HabitsList.tsx +++ b/presentation/react/components/HabitsMainPage/HabitsList.tsx @@ -1,9 +1,11 @@ -import { useState } from "react" -import { Dimensions, ScrollView } from "react-native" +import LottieView from "lottie-react-native" +import { useRef, useState } from "react" +import { Dimensions, ScrollView, View } from "react-native" import { Divider, List } from "react-native-paper" import type { GoalFrequency } from "@/domain/entities/Goal" import type { HabitsTracker } from "@/domain/entities/HabitsTracker" +import confettiJSON from "../../../assets/confetti.json" import { capitalize } from "@/utils/strings" import { HabitCard } from "./HabitCard" @@ -24,51 +26,85 @@ export const HabitsList: React.FC = (props) => { monthly: true, }) + const confettiRef = useRef(null) + return ( - - - - {frequenciesFiltered.map((frequency) => { - return ( - { - setAccordionExpanded((old) => { - return { - ...old, - [frequency]: !old[frequency], - } - }) - }} - key={frequency} - title={capitalize(frequency)} - titleStyle={[ - { - fontSize: 26, - }, - ]} - > - {habitsTracker.habitsHistory[frequency].map((item) => { - const goalProgress = item.getGoalProgressByDate(selectedDate) - return ( - - ) - })} - - ) - })} - - + <> + + + + + + + + + {frequenciesFiltered.map((frequency) => { + return ( + { + setAccordionExpanded((old) => { + return { + ...old, + [frequency]: !old[frequency], + } + }) + }} + key={frequency} + title={capitalize(frequency)} + titleStyle={[ + { + fontSize: 26, + }, + ]} + > + {habitsTracker.habitsHistory[frequency].map((item) => { + return ( + + ) + })} + + ) + })} + + + ) } From 4062ad268b301cfc2cd2a824035ce5086ac86e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Thu, 11 Apr 2024 23:24:35 +0200 Subject: [PATCH 5/6] build(deps): clean up dependencies --- README.md | 3 - docs/MLD.md | 8 -- package-lock.json | 313 ++++++++++++++++++++++------------------------ package.json | 16 +-- 4 files changed, 159 insertions(+), 181 deletions(-) diff --git a/README.md b/README.md index bcb97ec..ff85d05 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,6 @@ Un tracker d'habitudes pour performer au boulot et dans la vie de tous les jours - [React Native Paper](https://callstack.github.io/react-native-paper/): Bibliothèque de composants pour React Native. - [React Hook Form](https://react-hook-form.com/) + [Zod](https://zod.dev/): Gestion des formulaires et validation des données. - [Supabase](https://supabase.io/): Backend, serveur d'API pour le stockage des données. - ## Développement du projet en local diff --git a/docs/MLD.md b/docs/MLD.md index c617260..be8e8fa 100644 --- a/docs/MLD.md +++ b/docs/MLD.md @@ -4,14 +4,6 @@ Le **Modèle Logique des Données (MLD)** est une représentation de la structure de la base de données de l'application. -On représente ainsi les données sous la forme suivante: - -- Chaque table est représentée par un bloc. -- Le nom de la table est écrit en **gras**. -- Les champs sont listés en dessous du nom de la table. -- Les clés primaires sont soulignées et placées au début de la liste des champs. -- Les clés étrangères sont préfixées par un dièse (#), et placées après les clés primaires. Les clés étrangères sont suivies entre parenthèses du nom de la table suivi d'une flèche (->) et du nom du champ de la table référencée. - ## Modèle - **users** diff --git a/package-lock.json b/package-lock.json index f5a6b63..de7d861 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,8 @@ "@hookform/resolvers": "3.3.4", "@react-native-async-storage/async-storage": "1.21.0", "@react-navigation/native": "6.1.16", - "@supabase/supabase-js": "2.42.0", - "expo": "50.0.14", + "@supabase/supabase-js": "2.42.1", + "expo": "50.0.15", "expo-font": "11.10.3", "expo-linking": "6.2.2", "expo-router": "3.4.8", @@ -23,7 +23,7 @@ "expo-system-ui": "2.9.3", "expo-web-browser": "12.8.2", "immer": "10.0.4", - "lottie-react-native": "6.7.2", + "lottie-react-native": "6.5.1", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.2", @@ -49,11 +49,11 @@ "@total-typescript/ts-reset": "0.5.1", "@tsconfig/strictest": "2.0.5", "@types/jest": "29.5.12", - "@types/node": "20.12.4", - "@types/react": "18.2.74", + "@types/node": "20.12.7", + "@types/react": "18.2.76", "@types/react-test-renderer": "18.0.7", - "@typescript-eslint/eslint-plugin": "7.5.0", - "@typescript-eslint/parser": "7.5.0", + "@typescript-eslint/eslint-plugin": "7.6.0", + "@typescript-eslint/parser": "7.6.0", "eslint": "8.57.0", "eslint-config-conventions": "14.1.0", "eslint-config-prettier": "9.1.0", @@ -71,7 +71,7 @@ "lint-staged": "15.2.2", "react-test-renderer": "18.2.0", "supabase": "1.153.4", - "typescript": "5.4.4" + "typescript": "5.4.5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3220,14 +3220,14 @@ } }, "node_modules/@expo/env": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.2.tgz", - "integrity": "sha512-m9nGuaSpzdvMzevQ1H60FWgf4PG5s4J0dfKUzdAGnDu7sMUerY/yUeDaA4+OBo3vBwGVQ+UHcQS9vPSMBNaPcg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.3.tgz", + "integrity": "sha512-a+uJ/e6MAVxPVVN/HbXU5qxzdqrqDwNQYxCfxtAufgmd5VZj54e5f3TJA3LEEUW3pTSZR8xK0H0EtVN297AZnw==", "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "getenv": "^1.0.0" } }, @@ -7970,9 +7970,9 @@ } }, "node_modules/@supabase/postgrest-js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.0.tgz", - "integrity": "sha512-U4bwBOrhsXWqDjZiYNbVqMBtRGgIIYE0kE5ZNSwsIbeBWfr/UxOMrnkIQUBGIZRhpYW/tw1WnTdRl1AGNyaxcw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.1.tgz", + "integrity": "sha512-H/4PABAAgMrEIo7oewUZiZMy422Pgc19OLVjU8Vwopcvfr3GD7h8Re4VXtiaPPZqc/2z/k3PnyguFnoKIB7fkA==", "dependencies": { "@supabase/node-fetch": "^2.6.14" } @@ -7997,14 +7997,14 @@ } }, "node_modules/@supabase/supabase-js": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.42.0.tgz", - "integrity": "sha512-1PDqJiA4iG45w3AAu6xkccJ3wPqlGJUoz9CPhScRLLTStxhewYhz0mjryTpXz1kgtNHdUAsirALreezn8UZMjA==", + "version": "2.42.1", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.42.1.tgz", + "integrity": "sha512-y05XIC6wChApz8BWE2TLUo6SBGp9ttbjhQ9DcQXI897vI3RRPIjm3wZqUoZiexUco+kgt3Em53+m55nB8Um6Sg==", "dependencies": { "@supabase/auth-js": "2.63.0", "@supabase/functions-js": "2.2.2", "@supabase/node-fetch": "2.6.15", - "@supabase/postgrest-js": "1.15.0", + "@supabase/postgrest-js": "1.15.1", "@supabase/realtime-js": "2.9.3", "@supabase/storage-js": "2.5.5" } @@ -8175,9 +8175,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.4.tgz", - "integrity": "sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } @@ -8199,9 +8199,9 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.2.74", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", - "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "version": "18.2.76", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.76.tgz", + "integrity": "sha512-T6z/v7YxpswDM61Vq5KoSPTJqCkroJfsDIsvXCr4+qOY6gik5Ju4w0jf67cpC5z7ydOnp/E0V0W08pDRy8u9Xw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -8272,22 +8272,22 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", - "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/type-utils": "7.5.0", - "@typescript-eslint/utils": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8340,15 +8340,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4" }, "engines": { @@ -8368,13 +8368,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8385,15 +8385,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz", - "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/utils": "7.5.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8412,9 +8412,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8425,19 +8425,19 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8486,18 +8486,18 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", - "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8544,13 +8544,13 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8888,7 +8888,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -9039,7 +9038,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -9883,9 +9881,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "version": "1.0.30001608", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz", + "integrity": "sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==", "funding": [ { "type": "opencollective", @@ -10722,7 +10720,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -10739,7 +10736,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10756,7 +10752,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -10813,9 +10808,9 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -11020,7 +11015,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -11189,19 +11183,28 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dependencies": { + "dotenv": "^16.4.4" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/ee-first": { @@ -11210,9 +11213,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.727.tgz", - "integrity": "sha512-brpv4KTeC4g0Fx2FeIKytLd4UGn1zBQq5Lauy7zEWT9oqkaj5mgsxblEZIAOf1HHLlXxzr6adGViiBy5Z39/CA==" + "version": "1.4.733", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.733.tgz", + "integrity": "sha512-gUI9nhI2iBGF0OaYYLKOaOtliFMl+Bt1rY7VmEjwxOxqoYLub/D9xmduPEhbw2imE6gYkJKhIE5it+KE2ulVxQ==" }, "node_modules/emittery": { "version": "0.13.1", @@ -11278,9 +11281,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "bin": { "envinfo": "dist/cli.js" }, @@ -11325,7 +11328,6 @@ "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -11429,7 +11431,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -11441,7 +11442,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -11464,7 +11464,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -12338,9 +12337,9 @@ } }, "node_modules/expo": { - "version": "50.0.14", - "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.14.tgz", - "integrity": "sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==", + "version": "50.0.15", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.15.tgz", + "integrity": "sha512-tsyRmMHjA8lPlM7AsqH1smSH8hzmn1+x/vsP+xgbKYJTGtYccdY/wsm6P84VJWeK5peWSVqrWNos+YuPqXKLSQ==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "0.17.8", @@ -12354,7 +12353,7 @@ "expo-font": "~11.10.3", "expo-keep-awake": "~12.8.2", "expo-modules-autolinking": "1.10.3", - "expo-modules-core": "1.11.12", + "expo-modules-core": "1.11.13", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -12587,9 +12586,9 @@ } }, "node_modules/expo-modules-core": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.12.tgz", - "integrity": "sha512-/e8g4kis0pFLer7C0PLyx98AfmztIM6gU9jLkYnB1pU9JAfQf904XEi3bmszO7uoteBQwSL6FLp1m3TePKhDaA==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.13.tgz", + "integrity": "sha512-2H5qrGUvmLzmJNPDOnovH1Pfk5H/S/V0BifBmOQyDc9aUh9LaDwkqnChZGIXv8ZHDW8JRlUW0QqyWxTggkbw1A==", "dependencies": { "invariant": "^2.2.4" } @@ -13159,7 +13158,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -13177,7 +13175,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13261,7 +13258,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -13377,7 +13373,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -13455,7 +13450,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13866,7 +13860,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -13919,7 +13912,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -13955,7 +13947,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -13967,7 +13958,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -14025,7 +14015,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, "dependencies": { "is-typed-array": "^1.1.13" }, @@ -14040,7 +14029,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14193,7 +14181,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -14213,7 +14200,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14278,7 +14264,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -14306,7 +14291,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -14333,7 +14317,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14348,7 +14331,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -14423,7 +14405,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -14461,8 +14442,7 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -17870,9 +17850,9 @@ } }, "node_modules/lottie-react-native": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.7.2.tgz", - "integrity": "sha512-MZVx6N1EeO/EaSx8T44mJ0aHc5Mqee+xIfWwszni0oz8U2wlHdaWGjES44dHxaxgAp/0dRaFt3PkpZ6egTzcBg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.5.1.tgz", + "integrity": "sha512-pjih71P6qX6Ax5ucUBA+YJO7+fnveI581Bd8LmYeARm3spq3AnoGzEkrWaieM8odnK6WI4d5dwEJsxge/QjFPw==", "peerDependencies": { "@dotlottie/react-player": "^1.6.1", "@lottiefiles/react-lottie-player": "^3.5.3", @@ -18589,9 +18569,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -19114,7 +19094,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -19123,7 +19102,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -20983,7 +20961,6 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -21248,7 +21225,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -21277,7 +21253,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -21470,7 +21445,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -21989,7 +21963,6 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -22007,7 +21980,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -22021,7 +21993,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -22643,9 +22614,14 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, "engines": { "node": ">= 0.4" }, @@ -22748,7 +22724,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -22762,7 +22737,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -22781,7 +22755,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -22801,7 +22774,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -22817,10 +22789,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", - "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -22856,7 +22847,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -23260,7 +23250,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", diff --git a/package.json b/package.json index 41c6abf..b6c6891 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,8 @@ "@hookform/resolvers": "3.3.4", "@react-native-async-storage/async-storage": "1.21.0", "@react-navigation/native": "6.1.16", - "@supabase/supabase-js": "2.42.0", - "expo": "50.0.14", + "@supabase/supabase-js": "2.42.1", + "expo": "50.0.15", "expo-font": "11.10.3", "expo-linking": "6.2.2", "expo-router": "3.4.8", @@ -33,7 +33,7 @@ "expo-system-ui": "2.9.3", "expo-web-browser": "12.8.2", "immer": "10.0.4", - "lottie-react-native": "6.7.2", + "lottie-react-native": "6.5.1", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.51.2", @@ -59,11 +59,11 @@ "@total-typescript/ts-reset": "0.5.1", "@tsconfig/strictest": "2.0.5", "@types/jest": "29.5.12", - "@types/node": "20.12.4", - "@types/react": "18.2.74", + "@types/node": "20.12.7", + "@types/react": "18.2.76", "@types/react-test-renderer": "18.0.7", - "@typescript-eslint/eslint-plugin": "7.5.0", - "@typescript-eslint/parser": "7.5.0", + "@typescript-eslint/eslint-plugin": "7.6.0", + "@typescript-eslint/parser": "7.6.0", "eslint": "8.57.0", "eslint-config-conventions": "14.1.0", "eslint-config-prettier": "9.1.0", @@ -81,6 +81,6 @@ "lint-staged": "15.2.2", "react-test-renderer": "18.2.0", "supabase": "1.153.4", - "typescript": "5.4.4" + "typescript": "5.4.5" } } From 1ab504324a55ed62dda112c6ea5c28d94a801e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Thu, 11 Apr 2024 23:25:36 +0200 Subject: [PATCH 6/6] chore(release): v1.0.0-staging.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index de7d861..1cdfda5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "p61-project", - "version": "1.0.0-staging.1", + "version": "1.0.0-staging.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "p61-project", - "version": "1.0.0-staging.1", + "version": "1.0.0-staging.2", "hasInstallScript": true, "dependencies": { "@expo/vector-icons": "14.0.0", diff --git a/package.json b/package.json index b6c6891..81190b9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "p61-project", "private": true, "main": "expo-router/entry", - "version": "1.0.0-staging.1", + "version": "1.0.0-staging.2", "scripts": { "start": "expo start", "android": "expo start --android",