@speakableio/core 0.1.106 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics.js +329 -25
- package/dist/analytics.js.map +1 -1
- package/dist/index.native.d.mts +2836 -0
- package/dist/index.native.d.ts +2272 -27
- package/dist/index.native.js +2995 -166
- package/dist/index.native.js.map +1 -1
- package/dist/index.native.mjs +3322 -0
- package/dist/index.native.mjs.map +1 -0
- package/dist/index.web.d.mts +2836 -0
- package/dist/index.web.js +3244 -12
- package/dist/index.web.js.map +1 -1
- package/package.json +10 -61
- package/dist/assignment.constants-BIKM6fYi.d.ts +0 -32
- package/dist/assignment.model-DLMWAp0Y.d.ts +0 -301
- package/dist/card.constants-DhKFipX3.d.ts +0 -54
- package/dist/chunk-233VJDUF.js +0 -149
- package/dist/chunk-233VJDUF.js.map +0 -1
- package/dist/chunk-2CRI5MJP.js +0 -225
- package/dist/chunk-2CRI5MJP.js.map +0 -1
- package/dist/chunk-AWVUNWML.js +0 -141
- package/dist/chunk-AWVUNWML.js.map +0 -1
- package/dist/chunk-CJ5JXKII.js +0 -129
- package/dist/chunk-CJ5JXKII.js.map +0 -1
- package/dist/chunk-EEBMPASA.js +0 -21
- package/dist/chunk-EEBMPASA.js.map +0 -1
- package/dist/chunk-H5XNOXRC.js +0 -11
- package/dist/chunk-H5XNOXRC.js.map +0 -1
- package/dist/chunk-LZG3MTSH.js +0 -53
- package/dist/chunk-LZG3MTSH.js.map +0 -1
- package/dist/chunk-OLSTHM2U.js +0 -154
- package/dist/chunk-OLSTHM2U.js.map +0 -1
- package/dist/chunk-TQGDTKTE.js +0 -13
- package/dist/chunk-TQGDTKTE.js.map +0 -1
- package/dist/chunk-YKUMIPSO.js +0 -212
- package/dist/chunk-YKUMIPSO.js.map +0 -1
- package/dist/chunk-YMJRCINF.js +0 -68
- package/dist/chunk-YMJRCINF.js.map +0 -1
- package/dist/chunk-YO34TZYN.js +0 -28
- package/dist/chunk-YO34TZYN.js.map +0 -1
- package/dist/const.d.ts +0 -331
- package/dist/const.js +0 -193
- package/dist/const.js.map +0 -1
- package/dist/hooks.d.ts +0 -294
- package/dist/hooks.js +0 -1015
- package/dist/hooks.js.map +0 -1
- package/dist/index.web.d.ts +0 -405
- package/dist/models.d.ts +0 -56
- package/dist/models.js +0 -17
- package/dist/models.js.map +0 -1
- package/dist/notification.constants-Da4-_0kX.d.ts +0 -21
- package/dist/repos.d.ts +0 -209
- package/dist/repos.js +0 -26
- package/dist/repos.js.map +0 -1
- package/dist/utils.d.ts +0 -39
- package/dist/utils.js +0 -180
- package/dist/utils.js.map +0 -1
- /package/dist/{analytics.d.ts → analytics.d.mts} +0 -0
package/dist/hooks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/SpeakableProvider.tsx","../src/domains/assignment/hooks/assignment.hooks.ts","../src/domains/assignment/hooks/score-hooks.ts","../src/utils/debounce.utils.ts","../src/lib/tanstack/handle-optimistic-update-query.ts","../src/hooks/usePermissions.ts","../src/hooks/useGoogleClassroom.ts","../src/domains/notification/services/create-notification.service.ts","../src/domains/notification/services/send-notification.service.ts","../src/domains/notification/hooks/notification.hooks.ts","../src/domains/assignment/services/create-score.service.ts","../src/domains/assignment/services/get-score.service.ts","../src/domains/assignment/services/update-score.service.ts","../src/domains/assignment/services/clear-score.service.ts","../src/domains/assignment/services/submit-assignment-score.service.ts","../src/domains/cards/card.hooks.ts","../src/domains/sets/set.hooks.ts"],"sourcesContent":["import React, { createContext, useContext, useEffect, useState } from 'react'\nimport { type QueryClient } from '@tanstack/react-query'\nimport { type FsClient } from '@core/lib/create-firebase-client'\nimport { type User } from '@core/types/user.types'\nimport { type Permissions } from '@core/types/permissions.types'\n\ninterface FsContext {\n speakableApi: Awaited<FsClient>\n queryClient: QueryClient\n user: User\n permissions: Permissions\n}\n\nexport const FsCtx = createContext<FsContext | null>(null)\n\nexport function SpeakableProvider({\n user,\n children,\n queryClient,\n permissions,\n fsClient,\n}: {\n children: React.ReactNode\n fsClient: FsClient\n permissions: Permissions\n queryClient: QueryClient\n user: User\n}) {\n const [speakableApi, setSpeakableApi] = useState<null | Awaited<FsClient>>(null)\n\n useEffect(() => {\n setSpeakableApi(fsClient)\n }, [fsClient])\n\n if (!speakableApi) return null\n\n return (\n <FsCtx.Provider\n value={{\n speakableApi,\n queryClient,\n user,\n permissions,\n }}\n >\n {children}\n </FsCtx.Provider>\n )\n}\n\nexport function useSpeakableApi() {\n const ctx = useContext(FsCtx)\n\n if (!ctx) throw new Error('useSpeakableApi must be used within a SpeakableProvider')\n\n return ctx\n}\n","import { useSpeakableApi } from '@core/providers/SpeakableProvider'\nimport { useQuery } from '@tanstack/react-query'\n\nimport { type AssignmentAnalyticsType } from '../assignment.constants'\n\nexport const assignmentQueryKeys = {\n all: ['assignments'] as const,\n byId: (id: string) => [...assignmentQueryKeys.all, id] as const,\n list: () => [...assignmentQueryKeys.all, 'list'] as const,\n}\n\nexport function useAssignment({\n assignmentId,\n enabled = true,\n analyticType,\n userId,\n}: {\n assignmentId: string\n enabled?: boolean\n analyticType?: AssignmentAnalyticsType\n userId: string\n}) {\n const { speakableApi } = useSpeakableApi()\n\n return useQuery({\n queryKey: assignmentQueryKeys.byId(assignmentId),\n queryFn: () =>\n speakableApi.assignmentRepo.getAssignment({\n assignmentId: assignmentId,\n analyticType,\n currentUserId: userId,\n }),\n enabled,\n })\n}\n","import { useMutation, useQuery } from '@tanstack/react-query'\nimport { useSpeakableApi } from '@core/providers/SpeakableProvider'\nimport { debounce } from '@core/utils/debounce.utils'\nimport { handleOptimisticUpdate } from '@core/lib/tanstack/handle-optimistic-update-query'\nimport usePermissions from '@core/hooks/usePermissions'\nimport { useGoogleClassroom } from '@core/hooks/useGoogleClassroom'\nimport { logSubmitAssignment } from '@core/lib/firebase/firebase-analytics'\nimport { type PageActivity } from '@core/domains/cards/card.model'\nimport { useCreateNotification } from '@core/domains/notification/hooks/notification.hooks'\nimport { SpeakableNotificationTypes } from '@core/domains/notification/notification.constants'\n\nimport { getScore } from '../services/get-score.service'\nimport { type Score, type PageScore } from '../assignment.model'\nimport calculateScoreAndProgress from '../utils/calculateScoreAndProgress'\nimport { updateCardScore, updateScore } from '../services/update-score.service'\nimport { clearScore } from '../services/clear-score.service'\nimport {\n submitAssignmentScore,\n submitPracticeScore,\n} from '../services/submit-assignment-score.service'\n\nexport const scoreQueryKeys = {\n all: ['scores'] as const,\n byId: (id: string) => [...scoreQueryKeys.all, id] as const,\n list: () => [...scoreQueryKeys.all, 'list'] as const,\n}\n\nexport function useScore({\n isAssignment,\n activityId,\n userId = '',\n courseId,\n enabled = true,\n googleClassroomUserId,\n}: {\n userId: string\n isAssignment: boolean\n activityId: string\n courseId?: string\n enabled?: boolean\n googleClassroomUserId?: string\n}) {\n return useQuery({\n queryFn: () =>\n getScore({\n userId,\n courseId,\n activityId,\n googleClassroomUserId,\n isAssignment,\n }),\n queryKey: scoreQueryKeys.byId(activityId),\n enabled,\n })\n}\n\nconst debounceUpdateScore = debounce(updateScore, 1000)\n\nexport function useUpdateScore() {\n const { queryClient } = useSpeakableApi()\n\n const mutation = useMutation({\n mutationFn: debounceUpdateScore,\n onMutate: variables => {\n return handleOptimisticUpdate({\n queryClient,\n queryKey: scoreQueryKeys.byId(variables.activityId),\n newData: variables.data,\n })\n },\n onError: (_, variables, context) => {\n if (context?.previousData)\n queryClient.setQueryData(scoreQueryKeys.byId(variables.activityId), context.previousData)\n },\n onSettled: (_, err, variables) => {\n queryClient.invalidateQueries({\n queryKey: scoreQueryKeys.byId(variables.activityId),\n })\n },\n })\n\n return {\n mutationUpdateScore: mutation,\n }\n}\n\nexport function useUpdateCardScore({\n isAssignment,\n activityId,\n userId,\n cardIds,\n weights,\n}: {\n isAssignment: boolean\n userId: string\n activityId: string\n cardIds: string[]\n weights: Record<string, number>\n}) {\n const { queryClient } = useSpeakableApi()\n\n const queryKey = scoreQueryKeys.byId(activityId)\n\n const mutation = useMutation({\n mutationFn: async ({ cardId, cardScore }: { cardId: string; cardScore: PageScore }) => {\n const previousScores = queryClient.getQueryData<Score>(queryKey)\n\n const { progress, score, newScoreUpdated, updatedCardScore } = getScoreUpdated({\n previousScores: previousScores ?? {},\n cardId,\n cardScore,\n cardIds,\n weights,\n })\n\n await updateCardScore({\n userId,\n cardId,\n isAssignment,\n activityId,\n updates: {\n cardScore: updatedCardScore,\n progress,\n score,\n },\n })\n\n return { cardId, scoresUpdated: newScoreUpdated }\n },\n onMutate: ({ cardId, cardScore }) => {\n queryClient.setQueryData(queryKey, (previousScore: Partial<Score> | undefined) => {\n const updates = handleOptimisticScore({\n score: previousScore,\n cardId,\n cardScore,\n cardIds,\n weights,\n })\n\n return {\n ...previousScore,\n ...updates,\n }\n })\n },\n // eslint-disable-next-line no-unused-vars\n onError: error => {\n console.log(error.message)\n\n const previousData = queryClient.getQueryData(queryKey)\n\n if (previousData) {\n queryClient.setQueryData(queryKey, previousData)\n }\n },\n })\n\n return {\n mutationUpdateCardScore: mutation,\n }\n}\n\nconst getScoreUpdated = ({\n cardId,\n cardScore,\n previousScores,\n cardIds,\n weights,\n}: {\n previousScores: Partial<Score>\n cardId: string\n cardScore: PageScore\n cardIds: string[]\n weights: Record<string, number>\n}) => {\n const previousCard = previousScores.cards?.[cardId]\n\n const newCardScore = {\n ...(previousCard ?? {}),\n ...cardScore,\n } as PageActivity\n\n const newScores = {\n ...previousScores,\n cards: {\n ...(previousScores.cards ?? {}),\n [cardId]: newCardScore,\n },\n } as Score\n\n const { score, progress } = calculateScoreAndProgress(newScores, cardIds, weights)\n\n return {\n newScoreUpdated: newScores,\n updatedCardScore: cardScore,\n score,\n progress,\n }\n}\n\nconst handleOptimisticScore = ({\n score,\n cardId,\n cardScore,\n cardIds,\n weights,\n}: {\n score: Partial<Score> | undefined\n cardId: string\n cardScore: PageScore\n cardIds: string[]\n weights: Record<string, number>\n}) => {\n let cards = { ...(score?.cards ?? {}) }\n\n cards = {\n ...cards,\n [cardId]: {\n ...cards[cardId],\n ...cardScore,\n },\n }\n const { score: scoreValue, progress } = calculateScoreAndProgress(\n // @ts-ignore\n {\n ...(score ?? {}),\n cards,\n },\n cardIds,\n weights,\n )\n\n return { cards, score: scoreValue, progress }\n}\n\nexport function useClearScore() {\n const { queryClient } = useSpeakableApi()\n\n const mutation = useMutation({\n mutationFn: clearScore,\n onSettled: result => {\n queryClient.invalidateQueries({\n queryKey: scoreQueryKeys.byId(result?.activityId ?? ''),\n })\n },\n })\n\n return {\n mutationClearScore: mutation,\n }\n}\n\nexport function useSubmitAssignmentScore({\n onAssignmentSubmitted,\n studentName,\n}: {\n onAssignmentSubmitted: (assignmentId: string) => void\n studentName: string\n}) {\n const { queryClient } = useSpeakableApi()\n\n const { hasGoogleClassroomGradePassback } = usePermissions()\n const { submitAssignmentToGoogleClassroom } = useGoogleClassroom()\n const { createNotification } = useCreateNotification()\n\n const mutation = useMutation({\n mutationFn: async ({\n assignment,\n userId,\n cardIds,\n weights,\n scores,\n status,\n }: {\n assignment: {\n id: string\n name: string\n owners: string[]\n courseId: string\n courseWorkId: string\n isAssessment: boolean\n maxPoints: number\n }\n userId: string\n cardIds: string[]\n weights: Record<string, number>\n scores: Score\n status: 'FINALIZED' | 'IN_PROGRESS' | 'PENDING_REVIEW'\n // activeCardId: string\n }) => {\n try {\n const scoreUpdated = await submitAssignmentScore({\n assignment,\n userId,\n cardIds,\n weights,\n status,\n studentName: studentName,\n })\n\n if (\n assignment.courseWorkId != null &&\n !assignment.isAssessment &&\n hasGoogleClassroomGradePassback\n ) {\n await submitAssignmentToGoogleClassroom({\n assignment,\n scores,\n })\n }\n\n if (assignment.isAssessment) {\n // New assessment submitted email\n // const data = assessmentSubmittedEmail({\n // studentName: user?.displayName,\n // studentId: userId,\n // teacherName: '!',\n // assignmentId: assignment.id,\n // assignmentTitle: assignment.name,\n // })\n\n // sendEmail(user?.email, data)\n // @ts-ignore\n createNotification(SpeakableNotificationTypes.ASSESSMENT_SUBMITTED, assignment)\n }\n\n if (assignment?.id) {\n logSubmitAssignment({\n courseId: assignment?.courseId,\n })\n }\n\n onAssignmentSubmitted(assignment.id)\n\n queryClient.setQueryData(scoreQueryKeys.byId(assignment.id), {\n ...scores,\n ...scoreUpdated.fieldsUpdated,\n })\n\n return {\n success: true,\n message: 'Score submitted successfully',\n }\n } catch (error) {\n return {\n success: false,\n error: error,\n }\n }\n },\n })\n\n return {\n submitAssignmentScore: mutation.mutateAsync,\n isLoading: mutation.isPending,\n }\n}\n\nexport function useSubmitPracticeScore() {\n const { queryClient } = useSpeakableApi()\n\n const mutation = useMutation({\n mutationFn: async ({\n setId,\n userId,\n scores,\n }: {\n setId: string\n userId: string\n scores: Score\n }) => {\n try {\n await submitPracticeScore({\n setId,\n userId,\n scores,\n })\n\n queryClient.invalidateQueries({\n queryKey: scoreQueryKeys.byId(setId),\n })\n\n return {\n success: true,\n message: 'Score submitted successfully',\n }\n } catch (error) {\n return {\n success: false,\n error: error,\n }\n }\n },\n })\n\n return {\n submitPracticeScore: mutation.mutateAsync,\n isLoading: mutation.isPending,\n }\n}\n","/* eslint-disable @typescript-eslint/prefer-promise-reject-errors */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n\nexport function debounce<T extends (...args: any[]) => Promise<any>>(func: T, waitFor: number) {\n let timeoutId: NodeJS.Timeout | null\n\n return (...args: Parameters<T>): Promise<ReturnType<T>> =>\n new Promise((resolve, reject) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n timeoutId = setTimeout(async () => {\n try {\n const result = await func(...args)\n\n resolve(result)\n } catch (error) {\n reject(error)\n }\n }, waitFor)\n })\n}\n","import { type QueryClient, type QueryKey } from '@tanstack/react-query'\n\nexport const handleOptimisticUpdate = async <T>({\n queryClient,\n queryKey,\n newData,\n}: {\n queryClient: QueryClient\n queryKey: QueryKey\n newData: T\n}) => {\n await queryClient.cancelQueries({\n queryKey,\n })\n\n const previousData = queryClient.getQueryData<T>(queryKey)\n\n if (previousData === undefined) {\n queryClient.setQueryData(queryKey, newData)\n } else {\n queryClient.setQueryData(queryKey, { ...previousData, ...newData })\n }\n\n return { previousData }\n}\n","import { ANALYTICS_PLANS, ASSIGNMENT_SETTINGS_PLANS } from '@core/constants/speakable-plans'\nimport { useSpeakableApi } from '@core/providers/SpeakableProvider'\n\nconst usePermissions = () => {\n const { permissions } = useSpeakableApi()\n\n const has = (permission: string) => permissions.permissions?.includes(permission)\n\n return {\n plan: permissions.plan,\n permissionsLoaded: permissions.loaded,\n isStripePlan: permissions.isStripePlan,\n refreshDate: permissions.refreshDate,\n isInstitutionPlan: permissions.isInstitutionPlan,\n subscriptionId: permissions.subscriptionId,\n contact: permissions.contact,\n hasGradebook: has(ANALYTICS_PLANS.ANALYTICS_GRADEBOOK),\n hasGoogleClassroomGradePassback: has(ASSIGNMENT_SETTINGS_PLANS.GOOGLE_CLASSROOM_GRADE_PASSBACK),\n hasAssessments: has(ASSIGNMENT_SETTINGS_PLANS.ASSESSMENTS),\n hasSectionAnalytics: has(ANALYTICS_PLANS.ANALYTICS_CLASSROOM_ANALYTICS),\n hasStudentReports: has(ANALYTICS_PLANS.ANALYTICS_STUDENT_PROGRESS_REPORTS),\n permissions: permissions || [],\n hasStudentPortfolios: permissions.hasStudentPortfolios,\n isFreeOrgTrial: permissions.type === 'free_org_trial',\n freeOrgTrialExpired: permissions.freeOrgTrialExpired,\n }\n}\n\nexport default usePermissions\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { type Score } from '@core/domains/assignment'\nimport { api } from '@core/lib/firebase/api'\n\nexport const useGoogleClassroom = () => {\n const submitAssignmentToGoogleClassroom = async ({\n assignment,\n scores,\n googleUserId = null, // optional to override the user's googleUserId\n }: {\n assignment: {\n id: string\n name: string\n owners: string[]\n courseId: string\n courseWorkId: string\n isAssessment: boolean\n maxPoints: number\n }\n scores: Score\n googleUserId?: string | null\n }) => {\n try {\n const { googleClassroomUserId = null } = scores\n const googleId = googleUserId || googleClassroomUserId\n\n if (!googleId)\n return {\n error: true,\n message: 'No Google Classroom ID found',\n }\n const { courseWorkId, maxPoints, owners, courseId } = assignment\n const draftGrade = scores?.score ? (scores?.score / 100) * maxPoints : 0\n const result = await api.httpsCallable?.('submitAssignmentToGoogleClassroomV2')?.({\n teacherId: owners[0],\n courseId,\n courseWorkId,\n userId: googleId,\n draftGrade,\n })\n\n return result\n } catch (error) {\n return { error: true, message: error.message }\n }\n }\n\n return {\n submitAssignmentToGoogleClassroom,\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { type User } from '@core/types/user.types'\nimport { type AssignmentWithId } from '@core/domains/assignment'\nimport dayjs from 'dayjs'\nimport { WEB_BASE_URL } from '@core/constants/web.constants'\nimport { api } from '@core/lib/firebase/api'\n\nimport { SPEAKABLE_NOTIFICATIONS, type SpeakableNotificationType } from '../notification.constants'\n\nimport { sendNotification } from './send-notification.service'\n\nexport const createNotification = async ({\n data,\n type,\n userId,\n profile,\n}: {\n type: SpeakableNotificationType\n data: any\n userId: string\n profile: User['profile']\n}) => {\n let result\n\n switch (type) {\n case SPEAKABLE_NOTIFICATIONS.NEW_ASSIGNMENT:\n result = await handleAssignNotifPromise({ data, profile })\n break\n case SPEAKABLE_NOTIFICATIONS.ASSESSMENT_SUBMITTED:\n result = await createAssessmentSubmissionNotification({\n data,\n profile,\n userId,\n })\n break\n case SPEAKABLE_NOTIFICATIONS.ASSESSMENT_SCORED:\n result = await createAssessmentScoredNotification({\n data,\n profile,\n })\n break\n default:\n result = null\n break\n }\n\n return result\n}\n\nconst handleAssignNotifPromise = async ({\n data: assignments,\n profile,\n}: {\n data: any[]\n profile: User['profile']\n}) => {\n if (!assignments.length) return\n\n try {\n const notifsPromises = assignments.map(async assignment => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const {\n section,\n section: { members },\n ...rest\n } = assignment\n\n if (!section || !members) throw new Error('Invalid assignment data')\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const data = { section, sendTo: members, assignment: { ...rest } }\n\n return createNewAssignmentNotification({ data, profile })\n })\n\n await Promise.all(notifsPromises)\n\n return {\n success: true,\n message: 'Assignment notifications sent successfully',\n }\n } catch (error) {\n console.error('Error in handleAssignNotifPromise:', error)\n throw error\n }\n}\n\nconst createNewAssignmentNotification = async ({\n data,\n profile,\n}: {\n data: {\n sendTo: string[]\n assignment: AssignmentWithId\n }\n profile: User['profile']\n}) => {\n const { assignment, sendTo } = data\n\n const teacherName = profile.displayName || 'Your teacher'\n const dueDate = assignment.dueDateTimestamp\n ? dayjs(assignment.dueDateTimestamp.toDate()).format('MMM Do')\n : null\n\n const results = await sendNotification(sendTo, {\n courseId: assignment.courseId,\n type: SPEAKABLE_NOTIFICATIONS.NEW_ASSIGNMENT,\n senderName: teacherName,\n link: `${WEB_BASE_URL}/assignment/${assignment.id}`,\n messagePreview: `A new assignment \"${assignment.name}\" is now available. ${dueDate ? `Due ${dueDate}` : ''}`,\n title: 'New Assignment Available!',\n imageUrl: profile.image?.url,\n })\n\n return results\n}\n\nconst createAssessmentSubmissionNotification = async ({\n data: assignment,\n profile,\n userId,\n}: {\n data: AssignmentWithId\n profile: User['profile']\n userId: string\n}) => {\n const studentName = profile.displayName || 'Your student'\n\n const results = await sendNotification(assignment.owners, {\n courseId: assignment.courseId,\n type: SPEAKABLE_NOTIFICATIONS.ASSESSMENT_SUBMITTED,\n link: `${WEB_BASE_URL}/a/${assignment.id}?studentId=${userId}`,\n title: `Assessment Submitted!`,\n senderName: studentName,\n messagePreview: `${studentName} has submitted the assessment \"${assignment.name}\"`,\n imageUrl: profile.image?.url,\n })\n\n return results\n}\n\nconst createAssessmentScoredNotification = async ({\n data,\n profile,\n}: {\n data: {\n assignment: AssignmentWithId\n sendTo: string[]\n }\n profile: User['profile']\n}) => {\n const { assignment, sendTo } = data\n\n const teacherName = profile.displayName || 'Your teacher'\n\n const title = `${assignment.isAssessment ? 'Assessment' : 'Assignment'} Reviewed!`\n const messagePreview = `Your ${assignment.isAssessment ? 'assessment' : 'assignment'} has been reviewed by your teacher. Click to view the feedback.`\n const results = await sendNotification(sendTo, {\n courseId: assignment.courseId,\n type: SPEAKABLE_NOTIFICATIONS.ASSESSMENT_SCORED,\n link: `${WEB_BASE_URL}/assignment/${assignment.id}`,\n title: title,\n messagePreview: messagePreview,\n imageUrl: profile.image?.url,\n senderName: teacherName,\n })\n\n await api.httpsCallable?.('sendAssessmentScoredEmail')?.({\n assessmentTitle: assignment.name,\n link: `${WEB_BASE_URL}/assignment/${assignment.id}`,\n senderImage: profile.image?.url || '',\n studentId: sendTo[0],\n teacherName: profile.displayName,\n })\n\n return results\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n\nimport { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nconst _sendNotification = async (sendTo: string[], notification: any) => {\n const results = await api.httpsCallable?.('createNotificationV2')?.({\n sendTo,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n notification: notification,\n })\n\n return results\n}\n\nexport const sendNotification = withErrorHandler(_sendNotification, 'sendNotification')\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { useSpeakableApi } from '@core/providers/SpeakableProvider'\n\nimport { createNotification } from '../services/create-notification.service'\nimport { type SpeakableNotificationType } from '../notification.constants'\n\nconst notificationQueryKeys = {\n all: ['notifications'] as const,\n byId: (id: string) => [...notificationQueryKeys.all, id] as const,\n}\n\nexport const useCreateNotification = () => {\n const { user, queryClient } = useSpeakableApi()\n\n const handleCreateNotifications = async (type: SpeakableNotificationType, data: any) => {\n const result = await createNotification({\n type,\n userId: user.auth.uid,\n profile: user?.profile ?? {},\n data,\n })\n\n queryClient.invalidateQueries({\n queryKey: notificationQueryKeys.byId(user?.auth.uid ?? ''),\n })\n\n return result\n }\n\n return {\n createNotification: handleCreateNotifications,\n }\n}\n","import { withErrorHandler } from '@core/utils/error-handler'\nimport { api } from '@core/lib/firebase/api'\n\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport { type Score } from '../assignment.model'\nimport { refsScoresPractice } from '../score-practice.constants'\n\nasync function _createScore(params: {\n isAssignment: boolean\n activityId: string\n userId: string\n scoreData: Score\n}) {\n if (params.isAssignment) {\n const ref = refsAssignmentFiresotre.assignmentScores({\n id: params.activityId,\n userId: params.userId,\n })\n\n await api.httpsCallable?.('updateAssignmentGradebookStatus')?.({\n assignmentId: params.activityId,\n userId: params.userId,\n status: 'IN_PROGRESS',\n score: null,\n })\n\n await api.setDoc(ref, params.scoreData, { merge: true })\n\n return {\n id: params.userId,\n }\n } else {\n const ref = refsScoresPractice.practiceScores({\n userId: params.userId,\n setId: params.activityId,\n })\n\n await api.setDoc(ref, params.scoreData)\n\n return {\n id: params.userId,\n }\n }\n}\n\nexport const createScore = withErrorHandler(_createScore, 'createScore')\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\nimport { logStartAssignment } from '@core/lib/firebase/firebase-analytics'\n\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport { type Score, type ScoreWithId } from '../assignment.model'\nimport { defaultScore } from '../utils/create-default-score'\nimport { refsScoresPractice } from '../score-practice.constants'\n\nimport { createScore } from './create-score.service'\n\nexport async function getAssignmentScore({\n userId,\n assignment,\n googleClassroomUserId,\n}: {\n userId: string\n assignment: {\n id: string\n courseId?: string\n }\n googleClassroomUserId?: string\n}) {\n const path = refsAssignmentFiresotre.assignmentScores({\n id: assignment.id,\n userId,\n })\n\n const response = await api.getDoc<ScoreWithId>(path)\n\n if (response.data == null) {\n const newScore: Score = {\n ...defaultScore({\n owners: [userId],\n userId,\n courseId: assignment.courseId,\n googleClassroomUserId,\n }),\n assignmentId: assignment.id,\n }\n\n logStartAssignment({\n courseId: assignment.courseId,\n })\n\n const result = await createScore({\n activityId: assignment.id,\n userId,\n isAssignment: true,\n scoreData: newScore,\n })\n\n return {\n ...newScore,\n id: result.id,\n }\n }\n\n return response.data\n}\n\nexport async function getPracticeScore({ userId, setId }: { userId: string; setId: string }) {\n const path = refsScoresPractice.practiceScores({ userId, setId })\n\n const response = await api.getDoc<ScoreWithId>(path)\n\n if (response.data == null) {\n const newScore: Score = {\n ...defaultScore({\n owners: [userId],\n userId,\n }),\n setId,\n }\n\n const result = await createScore({\n activityId: setId,\n userId,\n isAssignment: false,\n scoreData: newScore,\n })\n\n return {\n ...newScore,\n id: result.id,\n }\n }\n\n return response.data\n}\n\nasync function _getScore(params: {\n userId: string\n activityId: string\n courseId?: string\n googleClassroomUserId?: string\n isAssignment: boolean\n}) {\n if (params.isAssignment) {\n return await getAssignmentScore({\n userId: params.userId,\n assignment: {\n id: params.activityId,\n courseId: params.courseId,\n },\n googleClassroomUserId: params.googleClassroomUserId,\n })\n } else {\n return await getPracticeScore({\n userId: params.userId,\n setId: params.activityId,\n })\n }\n}\n\nexport const getScore = withErrorHandler(_getScore, 'getScore')\n","// export async function updateScore(props: UpdateScore) {\n// const { userId, data, type } = props\n\nimport { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport { type Score, type PageScore } from '../assignment.model'\nimport { refsScoresPractice } from '../score-practice.constants'\n\nasync function _updateScore(params: {\n userId: string\n data: Partial<Score>\n isAssignment: boolean\n activityId: string\n}) {\n const path = params.isAssignment\n ? refsAssignmentFiresotre.assignmentScores({\n id: params.activityId,\n userId: params.userId,\n })\n : refsScoresPractice.practiceScores({\n setId: params.activityId,\n userId: params.userId,\n })\n\n await api.updateDoc(path, {\n ...params.data,\n })\n}\n\nexport const updateScore = withErrorHandler(_updateScore, 'updateScore')\n\nasync function _updateCardScore(params: {\n userId: string\n cardId: string\n isAssignment: boolean\n activityId: string\n updates: {\n cardScore: PageScore\n progress: number\n score: number\n }\n}) {\n const path = params.isAssignment\n ? refsAssignmentFiresotre.assignmentScores({\n id: params.activityId,\n userId: params.userId,\n })\n : refsScoresPractice.practiceScores({\n setId: params.activityId,\n userId: params.userId,\n })\n\n const updates = Object.keys(params.updates.cardScore).reduce<Record<string, unknown>>(\n (acc, key) => {\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n acc[`cards.${params.cardId}.${key}`] = params.updates.cardScore[key]\n\n return acc\n },\n {},\n )\n\n if (params.updates.progress) {\n updates.progress = params.updates.progress\n }\n if (params.updates.score) {\n updates.score = params.updates.score\n }\n\n await api.updateDoc(path, {\n ...updates,\n })\n}\n\nexport const updateCardScore = withErrorHandler(_updateCardScore, 'updateCardScore')\n","import dayjs from 'dayjs'\nimport { api } from '@core/lib/firebase/api'\n\nimport { type PageScore, type Score } from '../assignment.model'\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport { refsScoresPractice } from '../score-practice.constants'\n\nexport async function clearScore(params: {\n isAssignment: boolean\n cardId: string\n cardScores: PageScore\n userId: string\n activityId: string\n}) {\n const update: Partial<Score> = {\n [`cards.${params.cardId}`]: {\n attempts: (params.cardScores.attempts ?? 1) + 1,\n correct: params.cardScores.correct ?? 0,\n // save old score history\n history: [\n {\n ...params.cardScores,\n attempts: params.cardScores.attempts ?? 1,\n correct: params.cardScores.correct ?? 0,\n retryTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),\n history: null,\n },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n ...(params.cardScores.history ?? []),\n ],\n },\n }\n\n const path = params.isAssignment\n ? refsAssignmentFiresotre.assignmentScores({\n id: params.activityId,\n userId: params.userId,\n })\n : refsScoresPractice.practiceScores({\n setId: params.activityId,\n userId: params.userId,\n })\n\n await api.updateDoc(path, update)\n\n return {\n update,\n activityId: params.activityId,\n }\n}\n","import { api } from '@core/lib/firebase/api'\nimport dayjs from 'dayjs'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { type Score } from '../assignment.model'\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport calculateScoreAndProgress from '../utils/calculateScoreAndProgress'\nimport { refsScoresPractice } from '../score-practice.constants'\n\nasync function _submitAssignmentScore({\n cardIds,\n assignment,\n weights,\n userId,\n status,\n studentName,\n}: {\n cardIds: string[]\n assignment: {\n id: string\n name: string\n owners: string[]\n courseId: string\n courseWorkId: string\n isAssessment: boolean\n }\n weights: Record<string, number>\n userId: string\n status: Score['status']\n studentName: string\n}) {\n const { serverTimestamp } = api.accessHelpers()\n\n const path = refsAssignmentFiresotre.assignmentScores({ id: assignment.id, userId })\n\n const fieldsUpdated = {\n submitted: true,\n progress: 100,\n submissionDate: serverTimestamp(),\n status,\n } as Score\n\n if (assignment.isAssessment) {\n const result = await handleAssessment(\n assignment,\n userId,\n cardIds,\n weights,\n fieldsUpdated,\n studentName,\n )\n\n return result\n } else if (assignment.courseId) {\n await handleCourseAssignment(assignment, userId)\n }\n\n await api.updateDoc(path, { ...fieldsUpdated })\n\n return { success: true, fieldsUpdated }\n}\n\nexport const submitAssignmentScore = withErrorHandler(\n _submitAssignmentScore,\n 'submitAssignmentScore',\n)\n\nasync function handleAssessment(\n assignment: { id: string; name: string; owners: string[] },\n userId: string,\n cardIds: string[],\n weights: Record<string, number>,\n fieldsUpdated: Score,\n studentName: string,\n) {\n const path = refsAssignmentFiresotre.assignmentScores({ id: assignment.id, userId })\n\n const response = await api.getDoc<Score>(path)\n\n if (!response.data) {\n throw new Error('Score not found')\n }\n\n const { score: scoreCalculated } = calculateScoreAndProgress(response.data, cardIds, weights)\n\n await api.updateDoc(path, { score: scoreCalculated, status: 'PENDING_REVIEW' })\n\n await api.httpsCallable?.('submitAssessment')?.({\n assignmentId: assignment.id,\n assignmentTitle: assignment.name,\n userId,\n teacherId: assignment.owners[0],\n studentName,\n })\n\n fieldsUpdated.status = 'PENDING_REVIEW'\n\n return { success: true, fieldsUpdated }\n}\n\nasync function handleCourseAssignment(assignment: { id: string }, userId: string) {\n await api.httpsCallable?.('submitAssignmentV2')?.({\n assignmentId: assignment.id,\n userId,\n })\n}\n\nexport async function submitPracticeScore({\n setId,\n userId,\n scores,\n}: {\n userId: string\n setId: string\n scores: Score\n}) {\n const { serverTimestamp } = api.accessHelpers()\n\n // Create new scores object on the practice set subcollection /attempts\n const date = dayjs().format('YYYY-MM-DD-HH-mm')\n\n const ref = refsScoresPractice.practiceScoreHistoryRefDoc({ setId, userId, date })\n\n const fieldsUpdated = {\n ...scores,\n submitted: true,\n progress: 100,\n submissionDate: serverTimestamp(),\n status: 'SUBMITTED',\n } as Score\n\n await api.setDoc(ref, { ...fieldsUpdated })\n\n // clear the existing scores doc\n const refScores = refsScoresPractice.practiceScores({ userId, setId })\n\n await api.deleteDoc(refScores)\n\n return { success: true, fieldsUpdated }\n}\n","import { type QueryClient, useMutation, useQueries, useQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useSpeakableApi } from '@core/providers/SpeakableProvider'\n\nimport { getCard } from './services/get-card.service'\nimport { type PageActivityWithId } from './card.model'\nimport { createCard, createCards } from './services/create-card.service'\n\nexport const cardsQueryKeys = {\n all: ['cards'],\n one: (params: { cardId: string }) => [...cardsQueryKeys.all, params.cardId],\n}\n\nexport function useCards({\n cardIds,\n enabled = true,\n asObject,\n}: {\n cardIds: string[]\n enabled: boolean\n asObject?: boolean\n}) {\n const queries = useQueries({\n queries: cardIds.map(cardId => ({\n enabled: enabled && cardIds.length > 0,\n queryKey: cardsQueryKeys.one({\n cardId,\n }),\n queryFn: () => getCard({ cardId }),\n })),\n })\n\n const cards = queries.map(query => query.data).filter(Boolean) as PageActivityWithId[]\n\n const cardsObject = useMemo(() => {\n if (!asObject) return null\n\n return cards.reduce<Record<string, PageActivityWithId>>((acc, card) => {\n acc[card.id] = card\n\n return acc\n }, {})\n }, [asObject, cards])\n\n return {\n cards,\n cardsObject,\n cardsQueries: queries,\n }\n}\n\nexport function useCreateCard() {\n const { queryClient } = useSpeakableApi()\n\n const mutationCreateCard = useMutation({\n mutationFn: createCard,\n onSuccess: cardCreated => {\n queryClient.invalidateQueries({ queryKey: cardsQueryKeys.one({ cardId: cardCreated.id }) })\n },\n })\n\n return {\n mutationCreateCard,\n }\n}\n\nexport function useCreateCards() {\n const mutationCreateCards = useMutation({\n mutationFn: createCards,\n })\n\n return {\n mutationCreateCards,\n }\n}\n\nexport function getCardFromCache({\n cardId,\n queryClient,\n}: {\n cardId: string\n queryClient: QueryClient\n}) {\n return queryClient.getQueryData<PageActivityWithId>(cardsQueryKeys.one({ cardId }))\n}\n\nexport function updateCardInCache({\n cardId,\n card,\n queryClient,\n}: {\n cardId: string\n card: PageActivityWithId | null\n queryClient: QueryClient\n}): void {\n queryClient.setQueryData(cardsQueryKeys.one({ cardId }), card)\n}\n\nexport function useGetCard({ cardId, enabled = true }: { cardId: string; enabled?: boolean }) {\n const query = useQuery({\n queryKey: cardsQueryKeys.one({ cardId }),\n queryFn: () => getCard({ cardId }),\n enabled: enabled && !!cardId,\n })\n\n return query\n}\n","import { type QueryClient, useQuery } from '@tanstack/react-query'\n\nimport { getSet } from './services/get-set.service'\nimport { type SetWithId } from './set.model'\n\nexport const setsQueryKeys = {\n all: ['sets'],\n one: (params: { setId: string }) => [...setsQueryKeys.all, params.setId],\n}\n\nexport const useSet = ({ setId, enabled }: { setId: string; enabled?: boolean }) => {\n return useQuery({\n queryKey: setsQueryKeys.one({ setId }),\n queryFn: () => getSet({ setId }),\n enabled: setId !== undefined && setId !== '' && enabled,\n })\n}\n\nexport function getSetFromCache({\n setId,\n queryClient,\n}: {\n setId: string | undefined\n queryClient: QueryClient\n}) {\n if (!setId) return null\n\n return queryClient.getQueryData<SetWithId>(setsQueryKeys.one({ setId }))\n}\n\nexport function updateSetInCache({\n set,\n queryClient,\n}: {\n set: SetWithId\n queryClient: QueryClient\n}) {\n const { id, ...setData } = set\n\n queryClient.setQueryData(setsQueryKeys.one({ setId: id }), setData)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,eAAe,YAAY,WAAW,gBAAgB;AAqClE;AAxBG,IAAM,QAAQ,cAAgC,IAAI;AAqClD,SAAS,kBAAkB;AAChC,QAAM,MAAM,WAAW,KAAK;AAE5B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,yDAAyD;AAEnF,SAAO;AACT;;;ACvDA,SAAS,gBAAgB;AAIlB,IAAM,sBAAsB;AAAA,EACjC,KAAK,CAAC,aAAa;AAAA,EACnB,MAAM,CAAC,OAAe,CAAC,GAAG,oBAAoB,KAAK,EAAE;AAAA,EACrD,MAAM,MAAM,CAAC,GAAG,oBAAoB,KAAK,MAAM;AACjD;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,aAAa,IAAI,gBAAgB;AAEzC,SAAO,SAAS;AAAA,IACd,UAAU,oBAAoB,KAAK,YAAY;AAAA,IAC/C,SAAS,MACP,aAAa,eAAe,cAAc;AAAA,MACxC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,IACjB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AClCA,SAAS,aAAa,YAAAA,iBAAgB;;;ACI/B,SAAS,SAAqD,MAAS,SAAiB;AAC7F,MAAI;AAEJ,SAAO,IAAI,SACT,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,QAAI,WAAW;AACb,mBAAa,SAAS;AAAA,IACxB;AACA,gBAAY,WAAW,YAAY;AACjC,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,GAAG,IAAI;AAEjC,gBAAQ,MAAM;AAAA,MAChB,SAAS,OAAO;AACd,eAAO,KAAK;AAAA,MACd;AAAA,IACF,GAAG,OAAO;AAAA,EACZ,CAAC;AACL;;;ACpBO,IAAM,yBAAyB,OAAU;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,YAAY,cAAc;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,QAAM,eAAe,YAAY,aAAgB,QAAQ;AAEzD,MAAI,iBAAiB,QAAW;AAC9B,gBAAY,aAAa,UAAU,OAAO;AAAA,EAC5C,OAAO;AACL,gBAAY,aAAa,UAAU,EAAE,GAAG,cAAc,GAAG,QAAQ,CAAC;AAAA,EACpE;AAEA,SAAO,EAAE,aAAa;AACxB;;;ACrBA,IAAM,iBAAiB,MAAM;AAC3B,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,MAAM,CAAC,eAAoB;AANnC;AAMsC,6BAAY,gBAAZ,mBAAyB,SAAS;AAAA;AAEtE,SAAO;AAAA,IACL,MAAM,YAAY;AAAA,IAClB,mBAAmB,YAAY;AAAA,IAC/B,cAAc,YAAY;AAAA,IAC1B,aAAa,YAAY;AAAA,IACzB,mBAAmB,YAAY;AAAA,IAC/B,gBAAgB,YAAY;AAAA,IAC5B,SAAS,YAAY;AAAA,IACrB,cAAc,IAAI,gBAAgB,mBAAmB;AAAA,IACrD,iCAAiC,IAAI,0BAA0B,+BAA+B;AAAA,IAC9F,gBAAgB,IAAI,0BAA0B,WAAW;AAAA,IACzD,qBAAqB,IAAI,gBAAgB,6BAA6B;AAAA,IACtE,mBAAmB,IAAI,gBAAgB,kCAAkC;AAAA,IACzE,aAAa,eAAe,CAAC;AAAA,IAC7B,sBAAsB,YAAY;AAAA,IAClC,gBAAgB,YAAY,SAAS;AAAA,IACrC,qBAAqB,YAAY;AAAA,EACnC;AACF;AAEA,IAAO,yBAAQ;;;ACvBR,IAAM,qBAAqB,MAAM;AACtC,QAAM,oCAAoC,OAAO;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,eAAe;AAAA;AAAA,EACjB,MAYM;AAtBR;AAuBI,QAAI;AACF,YAAM,EAAE,wBAAwB,KAAK,IAAI;AACzC,YAAM,WAAW,gBAAgB;AAEjC,UAAI,CAAC;AACH,eAAO;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AACF,YAAM,EAAE,cAAc,WAAW,QAAQ,SAAS,IAAI;AACtD,YAAM,cAAa,iCAAQ,UAAS,iCAAQ,SAAQ,MAAO,YAAY;AACvE,YAAM,SAAS,QAAM,sBAAI,kBAAJ,4BAAoB,2CAApB,mBAA6D;AAAA,QAChF,WAAW,OAAO,CAAC;AAAA,QACnB;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,EAAE,OAAO,MAAM,SAAS,MAAM,QAAQ;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;AC/CA,OAAO,WAAW;;;ACElB,IAAM,oBAAoB,OAAO,QAAkB,iBAAsB;AANzE;AAOE,QAAM,UAAU,QAAM,sBAAI,kBAAJ,4BAAoB,4BAApB,mBAA8C;AAAA,IAClE;AAAA;AAAA,IAEA;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,iBAAiB,mBAAmB,kBAAkB;;;ADJ/E,IAAM,qBAAqB,OAAO;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,MAAI;AAEJ,UAAQ,MAAM;AAAA,IACZ,KAAK,wBAAwB;AAC3B,eAAS,MAAM,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AACzD;AAAA,IACF,KAAK,wBAAwB;AAC3B,eAAS,MAAM,uCAAuC;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD;AAAA,IACF,KAAK,wBAAwB;AAC3B,eAAS,MAAM,mCAAmC;AAAA,QAChD;AAAA,QACA;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACE,eAAS;AACT;AAAA,EACJ;AAEA,SAAO;AACT;AAEA,IAAM,2BAA2B,OAAO;AAAA,EACtC,MAAM;AAAA,EACN;AACF,MAGM;AACJ,MAAI,CAAC,YAAY,OAAQ;AAEzB,MAAI;AACF,UAAM,iBAAiB,YAAY,IAAI,OAAM,eAAc;AAEzD,YAAM;AAAA,QACJ;AAAA,QACA,SAAS,EAAE,QAAQ;AAAA,QACnB,GAAG;AAAA,MACL,IAAI;AAEJ,UAAI,CAAC,WAAW,CAAC,QAAS,OAAM,IAAI,MAAM,yBAAyB;AAGnE,YAAM,OAAO,EAAE,SAAS,QAAQ,SAAS,YAAY,EAAE,GAAG,KAAK,EAAE;AAEjE,aAAO,gCAAgC,EAAE,MAAM,QAAQ,CAAC;AAAA,IAC1D,CAAC;AAED,UAAM,QAAQ,IAAI,cAAc;AAEhC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,sCAAsC,KAAK;AACzD,UAAM;AAAA,EACR;AACF;AAEA,IAAM,kCAAkC,OAAO;AAAA,EAC7C;AAAA,EACA;AACF,MAMM;AAjGN;AAkGE,QAAM,EAAE,YAAY,OAAO,IAAI;AAE/B,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,UAAU,WAAW,mBACvB,MAAM,WAAW,iBAAiB,OAAO,CAAC,EAAE,OAAO,QAAQ,IAC3D;AAEJ,QAAM,UAAU,MAAM,iBAAiB,QAAQ;AAAA,IAC7C,UAAU,WAAW;AAAA,IACrB,MAAM,wBAAwB;AAAA,IAC9B,YAAY;AAAA,IACZ,MAAM,GAAG,YAAY,eAAe,WAAW,EAAE;AAAA,IACjD,gBAAgB,qBAAqB,WAAW,IAAI,uBAAuB,UAAU,OAAO,OAAO,KAAK,EAAE;AAAA,IAC1G,OAAO;AAAA,IACP,WAAU,aAAQ,UAAR,mBAAe;AAAA,EAC3B,CAAC;AAED,SAAO;AACT;AAEA,IAAM,yCAAyC,OAAO;AAAA,EACpD,MAAM;AAAA,EACN;AAAA,EACA;AACF,MAIM;AA9HN;AA+HE,QAAM,cAAc,QAAQ,eAAe;AAE3C,QAAM,UAAU,MAAM,iBAAiB,WAAW,QAAQ;AAAA,IACxD,UAAU,WAAW;AAAA,IACrB,MAAM,wBAAwB;AAAA,IAC9B,MAAM,GAAG,YAAY,MAAM,WAAW,EAAE,cAAc,MAAM;AAAA,IAC5D,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,gBAAgB,GAAG,WAAW,kCAAkC,WAAW,IAAI;AAAA,IAC/E,WAAU,aAAQ,UAAR,mBAAe;AAAA,EAC3B,CAAC;AAED,SAAO;AACT;AAEA,IAAM,qCAAqC,OAAO;AAAA,EAChD;AAAA,EACA;AACF,MAMM;AAvJN;AAwJE,QAAM,EAAE,YAAY,OAAO,IAAI;AAE/B,QAAM,cAAc,QAAQ,eAAe;AAE3C,QAAM,QAAQ,GAAG,WAAW,eAAe,eAAe,YAAY;AACtE,QAAM,iBAAiB,QAAQ,WAAW,eAAe,eAAe,YAAY;AACpF,QAAM,UAAU,MAAM,iBAAiB,QAAQ;AAAA,IAC7C,UAAU,WAAW;AAAA,IACrB,MAAM,wBAAwB;AAAA,IAC9B,MAAM,GAAG,YAAY,eAAe,WAAW,EAAE;AAAA,IACjD;AAAA,IACA;AAAA,IACA,WAAU,aAAQ,UAAR,mBAAe;AAAA,IACzB,YAAY;AAAA,EACd,CAAC;AAED,UAAM,sBAAI,kBAAJ,4BAAoB,iCAApB,mBAAmD;AAAA,IACvD,iBAAiB,WAAW;AAAA,IAC5B,MAAM,GAAG,YAAY,eAAe,WAAW,EAAE;AAAA,IACjD,eAAa,aAAQ,UAAR,mBAAe,QAAO;AAAA,IACnC,WAAW,OAAO,CAAC;AAAA,IACnB,aAAa,QAAQ;AAAA,EACvB;AAEA,SAAO;AACT;;;AEzKA,IAAM,wBAAwB;AAAA,EAC5B,KAAK,CAAC,eAAe;AAAA,EACrB,MAAM,CAAC,OAAe,CAAC,GAAG,sBAAsB,KAAK,EAAE;AACzD;AAEO,IAAM,wBAAwB,MAAM;AACzC,QAAM,EAAE,MAAM,YAAY,IAAI,gBAAgB;AAE9C,QAAM,4BAA4B,OAAO,MAAiC,SAAc;AAhB1F;AAiBI,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC;AAAA,MACA,QAAQ,KAAK,KAAK;AAAA,MAClB,UAAS,kCAAM,YAAN,YAAiB,CAAC;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,gBAAY,kBAAkB;AAAA,MAC5B,UAAU,sBAAsB,MAAK,kCAAM,KAAK,QAAX,YAAkB,EAAE;AAAA,IAC3D,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,oBAAoB;AAAA,EACtB;AACF;;;AC3BA,eAAe,aAAa,QAKzB;AAZH;AAaE,MAAI,OAAO,cAAc;AACvB,UAAM,MAAM,wBAAwB,iBAAiB;AAAA,MACnD,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,IACjB,CAAC;AAED,YAAM,sBAAI,kBAAJ,4BAAoB,uCAApB,mBAAyD;AAAA,MAC7D,cAAc,OAAO;AAAA,MACrB,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAEA,UAAM,IAAI,OAAO,KAAK,OAAO,WAAW,EAAE,OAAO,KAAK,CAAC;AAEvD,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,IACb;AAAA,EACF,OAAO;AACL,UAAM,MAAM,mBAAmB,eAAe;AAAA,MAC5C,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IAChB,CAAC;AAED,UAAM,IAAI,OAAO,KAAK,OAAO,SAAS;AAEtC,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,IACb;AAAA,EACF;AACF;AAEO,IAAM,cAAc,iBAAiB,cAAc,aAAa;;;AClCvE,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,QAAM,OAAO,wBAAwB,iBAAiB;AAAA,IACpD,IAAI,WAAW;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,WAAW,MAAM,IAAI,OAAoB,IAAI;AAEnD,MAAI,SAAS,QAAQ,MAAM;AACzB,UAAM,WAAkB;AAAA,MACtB,GAAG,aAAa;AAAA,QACd,QAAQ,CAAC,MAAM;AAAA,QACf;AAAA,QACA,UAAU,WAAW;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,MACD,cAAc,WAAW;AAAA,IAC3B;AAEA,uBAAmB;AAAA,MACjB,UAAU,WAAW;AAAA,IACvB,CAAC;AAED,UAAM,SAAS,MAAM,YAAY;AAAA,MAC/B,YAAY,WAAW;AAAA,MACvB;AAAA,MACA,cAAc;AAAA,MACd,WAAW;AAAA,IACb,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,IAAI,OAAO;AAAA,IACb;AAAA,EACF;AAEA,SAAO,SAAS;AAClB;AAEA,eAAsB,iBAAiB,EAAE,QAAQ,MAAM,GAAsC;AAC3F,QAAM,OAAO,mBAAmB,eAAe,EAAE,QAAQ,MAAM,CAAC;AAEhE,QAAM,WAAW,MAAM,IAAI,OAAoB,IAAI;AAEnD,MAAI,SAAS,QAAQ,MAAM;AACzB,UAAM,WAAkB;AAAA,MACtB,GAAG,aAAa;AAAA,QACd,QAAQ,CAAC,MAAM;AAAA,QACf;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,YAAY;AAAA,MAC/B,YAAY;AAAA,MACZ;AAAA,MACA,cAAc;AAAA,MACd,WAAW;AAAA,IACb,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,IAAI,OAAO;AAAA,IACb;AAAA,EACF;AAEA,SAAO,SAAS;AAClB;AAEA,eAAe,UAAU,QAMtB;AACD,MAAI,OAAO,cAAc;AACvB,WAAO,MAAM,mBAAmB;AAAA,MAC9B,QAAQ,OAAO;AAAA,MACf,YAAY;AAAA,QACV,IAAI,OAAO;AAAA,QACX,UAAU,OAAO;AAAA,MACnB;AAAA,MACA,uBAAuB,OAAO;AAAA,IAChC,CAAC;AAAA,EACH,OAAO;AACL,WAAO,MAAM,iBAAiB;AAAA,MAC5B,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEO,IAAM,WAAW,iBAAiB,WAAW,UAAU;;;ACzG9D,eAAe,aAAa,QAKzB;AACD,QAAM,OAAO,OAAO,eAChB,wBAAwB,iBAAiB;AAAA,IACvC,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,EACjB,CAAC,IACD,mBAAmB,eAAe;AAAA,IAChC,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EACjB,CAAC;AAEL,QAAM,IAAI,UAAU,MAAM;AAAA,IACxB,GAAG,OAAO;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,cAAc,iBAAiB,cAAc,aAAa;AAEvE,eAAe,iBAAiB,QAU7B;AACD,QAAM,OAAO,OAAO,eAChB,wBAAwB,iBAAiB;AAAA,IACvC,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,EACjB,CAAC,IACD,mBAAmB,eAAe;AAAA,IAChC,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EACjB,CAAC;AAEL,QAAM,UAAU,OAAO,KAAK,OAAO,QAAQ,SAAS,EAAE;AAAA,IACpD,CAAC,KAAK,QAAQ;AAGZ,UAAI,SAAS,OAAO,MAAM,IAAI,GAAG,EAAE,IAAI,OAAO,QAAQ,UAAU,GAAG;AAEnE,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,YAAQ,WAAW,OAAO,QAAQ;AAAA,EACpC;AACA,MAAI,OAAO,QAAQ,OAAO;AACxB,YAAQ,QAAQ,OAAO,QAAQ;AAAA,EACjC;AAEA,QAAM,IAAI,UAAU,MAAM;AAAA,IACxB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,IAAM,kBAAkB,iBAAiB,kBAAkB,iBAAiB;;;AC7EnF,OAAOC,YAAW;AAOlB,eAAsB,WAAW,QAM9B;AAbH;AAcE,QAAM,SAAyB;AAAA,IAC7B,CAAC,SAAS,OAAO,MAAM,EAAE,GAAG;AAAA,MAC1B,YAAW,YAAO,WAAW,aAAlB,YAA8B,KAAK;AAAA,MAC9C,UAAS,YAAO,WAAW,YAAlB,YAA6B;AAAA;AAAA,MAEtC,SAAS;AAAA,QACP;AAAA,UACE,GAAG,OAAO;AAAA,UACV,WAAU,YAAO,WAAW,aAAlB,YAA8B;AAAA,UACxC,UAAS,YAAO,WAAW,YAAlB,YAA6B;AAAA,UACtC,WAAWC,OAAM,EAAE,OAAO,qBAAqB;AAAA,UAC/C,SAAS;AAAA,QACX;AAAA;AAAA,QAEA,IAAI,YAAO,WAAW,YAAlB,YAA6B,CAAC;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,eAChB,wBAAwB,iBAAiB;AAAA,IACvC,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,EACjB,CAAC,IACD,mBAAmB,eAAe;AAAA,IAChC,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EACjB,CAAC;AAEL,QAAM,IAAI,UAAU,MAAM,MAAM;AAEhC,SAAO;AAAA,IACL;AAAA,IACA,YAAY,OAAO;AAAA,EACrB;AACF;;;AChDA,OAAOC,YAAW;AAQlB,eAAe,uBAAuB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAcG;AACD,QAAM,EAAE,gBAAgB,IAAI,IAAI,cAAc;AAE9C,QAAM,OAAO,wBAAwB,iBAAiB,EAAE,IAAI,WAAW,IAAI,OAAO,CAAC;AAEnF,QAAM,gBAAgB;AAAA,IACpB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,gBAAgB,gBAAgB;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,WAAW,cAAc;AAC3B,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,WAAW,WAAW,UAAU;AAC9B,UAAM,uBAAuB,YAAY,MAAM;AAAA,EACjD;AAEA,QAAM,IAAI,UAAU,MAAM,EAAE,GAAG,cAAc,CAAC;AAE9C,SAAO,EAAE,SAAS,MAAM,cAAc;AACxC;AAEO,IAAM,wBAAwB;AAAA,EACnC;AAAA,EACA;AACF;AAEA,eAAe,iBACb,YACA,QACA,SACA,SACA,eACA,aACA;AA1EF;AA2EE,QAAM,OAAO,wBAAwB,iBAAiB,EAAE,IAAI,WAAW,IAAI,OAAO,CAAC;AAEnF,QAAM,WAAW,MAAM,IAAI,OAAc,IAAI;AAE7C,MAAI,CAAC,SAAS,MAAM;AAClB,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAEA,QAAM,EAAE,OAAO,gBAAgB,IAAI,kCAA0B,SAAS,MAAM,SAAS,OAAO;AAE5F,QAAM,IAAI,UAAU,MAAM,EAAE,OAAO,iBAAiB,QAAQ,iBAAiB,CAAC;AAE9E,UAAM,sBAAI,kBAAJ,4BAAoB,wBAApB,mBAA0C;AAAA,IAC9C,cAAc,WAAW;AAAA,IACzB,iBAAiB,WAAW;AAAA,IAC5B;AAAA,IACA,WAAW,WAAW,OAAO,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,gBAAc,SAAS;AAEvB,SAAO,EAAE,SAAS,MAAM,cAAc;AACxC;AAEA,eAAe,uBAAuB,YAA4B,QAAgB;AApGlF;AAqGE,UAAM,sBAAI,kBAAJ,4BAAoB,0BAApB,mBAA4C;AAAA,IAChD,cAAc,WAAW;AAAA,IACzB;AAAA,EACF;AACF;AAEA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,gBAAgB,IAAI,IAAI,cAAc;AAG9C,QAAM,OAAOC,OAAM,EAAE,OAAO,kBAAkB;AAE9C,QAAM,MAAM,mBAAmB,2BAA2B,EAAE,OAAO,QAAQ,KAAK,CAAC;AAEjF,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,WAAW;AAAA,IACX,UAAU;AAAA,IACV,gBAAgB,gBAAgB;AAAA,IAChC,QAAQ;AAAA,EACV;AAEA,QAAM,IAAI,OAAO,KAAK,EAAE,GAAG,cAAc,CAAC;AAG1C,QAAM,YAAY,mBAAmB,eAAe,EAAE,QAAQ,MAAM,CAAC;AAErE,QAAM,IAAI,UAAU,SAAS;AAE7B,SAAO,EAAE,SAAS,MAAM,cAAc;AACxC;;;AZtHO,IAAM,iBAAiB;AAAA,EAC5B,KAAK,CAAC,QAAQ;AAAA,EACd,MAAM,CAAC,OAAe,CAAC,GAAG,eAAe,KAAK,EAAE;AAAA,EAChD,MAAM,MAAM,CAAC,GAAG,eAAe,KAAK,MAAM;AAC5C;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAOG;AACD,SAAOC,UAAS;AAAA,IACd,SAAS,MACP,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,UAAU,eAAe,KAAK,UAAU;AAAA,IACxC;AAAA,EACF,CAAC;AACH;AAEA,IAAM,sBAAsB,SAAS,aAAa,GAAI;AAE/C,SAAS,iBAAiB;AAC/B,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY;AAAA,IACZ,UAAU,eAAa;AACrB,aAAO,uBAAuB;AAAA,QAC5B;AAAA,QACA,UAAU,eAAe,KAAK,UAAU,UAAU;AAAA,QAClD,SAAS,UAAU;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IACA,SAAS,CAAC,GAAG,WAAW,YAAY;AAClC,UAAI,mCAAS;AACX,oBAAY,aAAa,eAAe,KAAK,UAAU,UAAU,GAAG,QAAQ,YAAY;AAAA,IAC5F;AAAA,IACA,WAAW,CAAC,GAAG,KAAK,cAAc;AAChC,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,eAAe,KAAK,UAAU,UAAU;AAAA,MACpD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,qBAAqB;AAAA,EACvB;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,WAAW,eAAe,KAAK,UAAU;AAE/C,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY,OAAO,EAAE,QAAQ,UAAU,MAAgD;AACrF,YAAM,iBAAiB,YAAY,aAAoB,QAAQ;AAE/D,YAAM,EAAE,UAAU,OAAO,iBAAiB,iBAAiB,IAAI,gBAAgB;AAAA,QAC7E,gBAAgB,0CAAkB,CAAC;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,UACP,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,EAAE,QAAQ,eAAe,gBAAgB;AAAA,IAClD;AAAA,IACA,UAAU,CAAC,EAAE,QAAQ,UAAU,MAAM;AACnC,kBAAY,aAAa,UAAU,CAAC,kBAA8C;AAChF,cAAM,UAAU,sBAAsB;AAAA,UACpC,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA,SAAS,WAAS;AAChB,cAAQ,IAAI,MAAM,OAAO;AAEzB,YAAM,eAAe,YAAY,aAAa,QAAQ;AAEtD,UAAI,cAAc;AAChB,oBAAY,aAAa,UAAU,YAAY;AAAA,MACjD;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,yBAAyB;AAAA,EAC3B;AACF;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AA9KN;AA+KE,QAAM,gBAAe,oBAAe,UAAf,mBAAuB;AAE5C,QAAM,eAAe;AAAA,IACnB,GAAI,sCAAgB,CAAC;AAAA,IACrB,GAAG;AAAA,EACL;AAEA,QAAM,YAAY;AAAA,IAChB,GAAG;AAAA,IACH,OAAO;AAAA,MACL,IAAI,oBAAe,UAAf,YAAwB,CAAC;AAAA,MAC7B,CAAC,MAAM,GAAG;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,EAAE,OAAO,SAAS,IAAI,kCAA0B,WAAW,SAAS,OAAO;AAEjF,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AApNN;AAqNE,MAAI,QAAQ,EAAE,IAAI,oCAAO,UAAP,YAAgB,CAAC,EAAG;AAEtC,UAAQ;AAAA,IACN,GAAG;AAAA,IACH,CAAC,MAAM,GAAG;AAAA,MACR,GAAG,MAAM,MAAM;AAAA,MACf,GAAG;AAAA,IACL;AAAA,EACF;AACA,QAAM,EAAE,OAAO,YAAY,SAAS,IAAI;AAAA;AAAA,IAEtC;AAAA,MACE,GAAI,wBAAS,CAAC;AAAA,MACd;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,OAAO,YAAY,SAAS;AAC9C;AAEO,SAAS,gBAAgB;AAC9B,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY;AAAA,IACZ,WAAW,YAAU;AAhPzB;AAiPM,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,eAAe,MAAK,sCAAQ,eAAR,YAAsB,EAAE;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,oBAAoB;AAAA,EACtB;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,EAAE,gCAAgC,IAAI,uBAAe;AAC3D,QAAM,EAAE,kCAAkC,IAAI,mBAAmB;AACjE,QAAM,EAAE,oBAAAC,oBAAmB,IAAI,sBAAsB;AAErD,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAgBM;AACJ,UAAI;AACF,cAAM,eAAe,MAAM,sBAAsB;AAAA,UAC/C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,YACE,WAAW,gBAAgB,QAC3B,CAAC,WAAW,gBACZ,iCACA;AACA,gBAAM,kCAAkC;AAAA,YACtC;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,WAAW,cAAc;AAY3B,UAAAA,oBAAmB,2BAA2B,sBAAsB,UAAU;AAAA,QAChF;AAEA,YAAI,yCAAY,IAAI;AAClB,8BAAoB;AAAA,YAClB,UAAU,yCAAY;AAAA,UACxB,CAAC;AAAA,QACH;AAEA,8BAAsB,WAAW,EAAE;AAEnC,oBAAY,aAAa,eAAe,KAAK,WAAW,EAAE,GAAG;AAAA,UAC3D,GAAG;AAAA,UACH,GAAG,aAAa;AAAA,QAClB,CAAC;AAED,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF,SAAS,OAAO;AACd,eAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,uBAAuB,SAAS;AAAA,IAChC,WAAW,SAAS;AAAA,EACtB;AACF;AAEO,SAAS,yBAAyB;AACvC,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,UAAI;AACF,cAAM,oBAAoB;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,eAAe,KAAK,KAAK;AAAA,QACrC,CAAC;AAED,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF,SAAS,OAAO;AACd,eAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,qBAAqB,SAAS;AAAA,IAC9B,WAAW,SAAS;AAAA,EACtB;AACF;;;Aa/YA,SAA2B,eAAAC,cAAa,YAAY,YAAAC,iBAAgB;AACpE,SAAS,eAAe;AAOjB,IAAM,iBAAiB;AAAA,EAC5B,KAAK,CAAC,OAAO;AAAA,EACb,KAAK,CAAC,WAA+B,CAAC,GAAG,eAAe,KAAK,OAAO,MAAM;AAC5E;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAIG;AACD,QAAM,UAAU,WAAW;AAAA,IACzB,SAAS,QAAQ,IAAI,aAAW;AAAA,MAC9B,SAAS,WAAW,QAAQ,SAAS;AAAA,MACrC,UAAU,eAAe,IAAI;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,MACD,SAAS,MAAM,QAAQ,EAAE,OAAO,CAAC;AAAA,IACnC,EAAE;AAAA,EACJ,CAAC;AAED,QAAM,QAAQ,QAAQ,IAAI,WAAS,MAAM,IAAI,EAAE,OAAO,OAAO;AAE7D,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,CAAC,SAAU,QAAO;AAEtB,WAAO,MAAM,OAA2C,CAAC,KAAK,SAAS;AACrE,UAAI,KAAK,EAAE,IAAI;AAEf,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP,GAAG,CAAC,UAAU,KAAK,CAAC;AAEpB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,gBAAgB;AAC9B,QAAM,EAAE,YAAY,IAAI,gBAAgB;AAExC,QAAM,qBAAqBC,aAAY;AAAA,IACrC,YAAY;AAAA,IACZ,WAAW,iBAAe;AACxB,kBAAY,kBAAkB,EAAE,UAAU,eAAe,IAAI,EAAE,QAAQ,YAAY,GAAG,CAAC,EAAE,CAAC;AAAA,IAC5F;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB;AAC/B,QAAM,sBAAsBA,aAAY;AAAA,IACtC,YAAY;AAAA,EACd,CAAC;AAED,SAAO;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;AACD,SAAO,YAAY,aAAiC,eAAe,IAAI,EAAE,OAAO,CAAC,CAAC;AACpF;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAIS;AACP,cAAY,aAAa,eAAe,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;AAC/D;AAEO,SAAS,WAAW,EAAE,QAAQ,UAAU,KAAK,GAA0C;AAC5F,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,eAAe,IAAI,EAAE,OAAO,CAAC;AAAA,IACvC,SAAS,MAAM,QAAQ,EAAE,OAAO,CAAC;AAAA,IACjC,SAAS,WAAW,CAAC,CAAC;AAAA,EACxB,CAAC;AAED,SAAO;AACT;;;AC1GA,SAA2B,YAAAC,iBAAgB;AAKpC,IAAM,gBAAgB;AAAA,EAC3B,KAAK,CAAC,MAAM;AAAA,EACZ,KAAK,CAAC,WAA8B,CAAC,GAAG,cAAc,KAAK,OAAO,KAAK;AACzE;AAEO,IAAM,SAAS,CAAC,EAAE,OAAO,QAAQ,MAA4C;AAClF,SAAOC,UAAS;AAAA,IACd,UAAU,cAAc,IAAI,EAAE,MAAM,CAAC;AAAA,IACrC,SAAS,MAAM,OAAO,EAAE,MAAM,CAAC;AAAA,IAC/B,SAAS,UAAU,UAAa,UAAU,MAAM;AAAA,EAClD,CAAC;AACH;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGG;AACD,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,YAAY,aAAwB,cAAc,IAAI,EAAE,MAAM,CAAC,CAAC;AACzE;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,IAAI,GAAG,QAAQ,IAAI;AAE3B,cAAY,aAAa,cAAc,IAAI,EAAE,OAAO,GAAG,CAAC,GAAG,OAAO;AACpE;","names":["useQuery","dayjs","dayjs","dayjs","dayjs","useQuery","createNotification","useMutation","useQuery","useMutation","useQuery","useQuery","useQuery"]}
|
package/dist/index.web.d.ts
DELETED
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
import { V as VerificationCardStatus } from './card.constants-DhKFipX3.js';
|
|
2
|
-
import { F as FirebaseInstance, a as FirestoreHelpers, C as CallableFunction, A as AssignmentWithId, b as CustomTimestamp, c as ActivityPageType, P as PageActivity, d as PageActivityWithId } from './assignment.model-DLMWAp0Y.js';
|
|
3
|
-
import { A as AssignmentAnalyticsType } from './assignment.constants-BIKM6fYi.js';
|
|
4
|
-
import '@react-native-firebase/firestore';
|
|
5
|
-
import 'firebase/firestore';
|
|
6
|
-
|
|
7
|
-
type FsClientParams = Omit<Parameters<typeof createFsClientBase>[0], 'helpers'>;
|
|
8
|
-
declare function createFsClientBase({ db, helpers, httpsCallable, logEvent, }: {
|
|
9
|
-
db: FirebaseInstance;
|
|
10
|
-
helpers: FirestoreHelpers;
|
|
11
|
-
httpsCallable: (name: string) => CallableFunction;
|
|
12
|
-
logEvent: (name: string, data: any) => void;
|
|
13
|
-
}): {
|
|
14
|
-
assignmentRepo: {
|
|
15
|
-
getAssignment: (params: {
|
|
16
|
-
assignmentId: string;
|
|
17
|
-
currentUserId: string;
|
|
18
|
-
analyticType?: AssignmentAnalyticsType;
|
|
19
|
-
studentId?: string;
|
|
20
|
-
}) => Promise<AssignmentWithId | {
|
|
21
|
-
scores: any;
|
|
22
|
-
id: string;
|
|
23
|
-
isAvailable: boolean;
|
|
24
|
-
name: string;
|
|
25
|
-
description: string;
|
|
26
|
-
scheduledTime?: string | null;
|
|
27
|
-
dueTime?: {
|
|
28
|
-
hours: number;
|
|
29
|
-
minutes: number;
|
|
30
|
-
nanos: number;
|
|
31
|
-
};
|
|
32
|
-
speakableio: boolean;
|
|
33
|
-
owners: string[];
|
|
34
|
-
image: {
|
|
35
|
-
path: string | null;
|
|
36
|
-
url: string;
|
|
37
|
-
};
|
|
38
|
-
dueDate: {
|
|
39
|
-
day: number;
|
|
40
|
-
month: number;
|
|
41
|
-
year: number;
|
|
42
|
-
};
|
|
43
|
-
teacherName: string;
|
|
44
|
-
courseWorkId: string | null;
|
|
45
|
-
dueDateTimestamp: CustomTimestamp;
|
|
46
|
-
scheduledTimeTimestamp: number;
|
|
47
|
-
active: boolean;
|
|
48
|
-
voice: string | null;
|
|
49
|
-
setId: string;
|
|
50
|
-
dateMade: {
|
|
51
|
-
seconds: number;
|
|
52
|
-
nanoseconds: number;
|
|
53
|
-
};
|
|
54
|
-
maxPoints: number;
|
|
55
|
-
courseId: string;
|
|
56
|
-
isAssessment: boolean;
|
|
57
|
-
ltiDeeplink?: string;
|
|
58
|
-
content?: string[];
|
|
59
|
-
weights?: Record<string, number>;
|
|
60
|
-
language?: string;
|
|
61
|
-
types?: { [key in ActivityPageType]?: number; };
|
|
62
|
-
aiEnabled?: boolean;
|
|
63
|
-
chat_experience?: boolean;
|
|
64
|
-
} | null>;
|
|
65
|
-
attachScoresAssignment: (args_0: {
|
|
66
|
-
assignments: AssignmentWithId[];
|
|
67
|
-
analyticType: AssignmentAnalyticsType;
|
|
68
|
-
studentId?: string;
|
|
69
|
-
currentUserId: string;
|
|
70
|
-
}) => Promise<{
|
|
71
|
-
scores: any;
|
|
72
|
-
id: string;
|
|
73
|
-
isAvailable: boolean;
|
|
74
|
-
name: string;
|
|
75
|
-
description: string;
|
|
76
|
-
scheduledTime?: string | null;
|
|
77
|
-
dueTime?: {
|
|
78
|
-
hours: number;
|
|
79
|
-
minutes: number;
|
|
80
|
-
nanos: number;
|
|
81
|
-
};
|
|
82
|
-
speakableio: boolean;
|
|
83
|
-
owners: string[];
|
|
84
|
-
image: {
|
|
85
|
-
path: string | null;
|
|
86
|
-
url: string;
|
|
87
|
-
};
|
|
88
|
-
dueDate: {
|
|
89
|
-
day: number;
|
|
90
|
-
month: number;
|
|
91
|
-
year: number;
|
|
92
|
-
};
|
|
93
|
-
teacherName: string;
|
|
94
|
-
courseWorkId: string | null;
|
|
95
|
-
dueDateTimestamp: CustomTimestamp;
|
|
96
|
-
scheduledTimeTimestamp: number;
|
|
97
|
-
active: boolean;
|
|
98
|
-
voice: string | null;
|
|
99
|
-
setId: string;
|
|
100
|
-
dateMade: {
|
|
101
|
-
seconds: number;
|
|
102
|
-
nanoseconds: number;
|
|
103
|
-
};
|
|
104
|
-
maxPoints: number;
|
|
105
|
-
courseId: string;
|
|
106
|
-
isAssessment: boolean;
|
|
107
|
-
ltiDeeplink?: string;
|
|
108
|
-
content?: string[];
|
|
109
|
-
weights?: Record<string, number>;
|
|
110
|
-
language?: string;
|
|
111
|
-
types?: { [key in ActivityPageType]?: number; };
|
|
112
|
-
aiEnabled?: boolean;
|
|
113
|
-
chat_experience?: boolean;
|
|
114
|
-
}[]>;
|
|
115
|
-
getAssignmentScores: (args_0: {
|
|
116
|
-
assignmentId: string;
|
|
117
|
-
currentUserId: string;
|
|
118
|
-
analyticType?: AssignmentAnalyticsType;
|
|
119
|
-
studentId?: string;
|
|
120
|
-
}) => Promise<{
|
|
121
|
-
scores: unknown;
|
|
122
|
-
id: string;
|
|
123
|
-
} | undefined>;
|
|
124
|
-
getAllAssignments: () => Promise<(AssignmentWithId & {
|
|
125
|
-
id: string;
|
|
126
|
-
})[]>;
|
|
127
|
-
};
|
|
128
|
-
cardRepo: {
|
|
129
|
-
createCard: (args_0: {
|
|
130
|
-
data: Partial<PageActivity>;
|
|
131
|
-
}) => Promise<{
|
|
132
|
-
id: string;
|
|
133
|
-
} & Partial<PageActivity>>;
|
|
134
|
-
createCards: (args_0: {
|
|
135
|
-
cards: PageActivity[];
|
|
136
|
-
}) => Promise<{
|
|
137
|
-
id: string;
|
|
138
|
-
owners: string[];
|
|
139
|
-
checked?: boolean;
|
|
140
|
-
completed?: boolean;
|
|
141
|
-
media_area_id?: string | null;
|
|
142
|
-
media_area_layout?: "left" | "right" | null;
|
|
143
|
-
score?: number;
|
|
144
|
-
verificationStatus?: VerificationCardStatus;
|
|
145
|
-
native_text?: string;
|
|
146
|
-
repeat?: number;
|
|
147
|
-
language?: string | null;
|
|
148
|
-
image?: {
|
|
149
|
-
path?: string | null;
|
|
150
|
-
url?: string;
|
|
151
|
-
};
|
|
152
|
-
audio?: {
|
|
153
|
-
path?: string | null;
|
|
154
|
-
url?: string;
|
|
155
|
-
} | null;
|
|
156
|
-
notes?: string;
|
|
157
|
-
difficulty?: string;
|
|
158
|
-
default_language?: string;
|
|
159
|
-
target_text?: string;
|
|
160
|
-
type: ActivityPageType;
|
|
161
|
-
grading_criteria?: string;
|
|
162
|
-
scoring_type?: string;
|
|
163
|
-
grading_method?: "simple" | "rubric" | "manual" | "standards_based";
|
|
164
|
-
feedback_types?: string[];
|
|
165
|
-
rubricId?: string;
|
|
166
|
-
prompt?: string;
|
|
167
|
-
title?: string;
|
|
168
|
-
passing_score?: number;
|
|
169
|
-
maxCharacters?: number;
|
|
170
|
-
answer?: string[];
|
|
171
|
-
choices?: {
|
|
172
|
-
value: string;
|
|
173
|
-
option: string;
|
|
174
|
-
}[];
|
|
175
|
-
MCQType?: string;
|
|
176
|
-
multipleAttemptsAllowed?: boolean;
|
|
177
|
-
allowRetries?: boolean;
|
|
178
|
-
question?: string;
|
|
179
|
-
respondTime?: number;
|
|
180
|
-
hidePrompt?: boolean;
|
|
181
|
-
videoUrl?: string;
|
|
182
|
-
link?: string;
|
|
183
|
-
text?: string;
|
|
184
|
-
isListenAloud?: boolean;
|
|
185
|
-
embedCode?: string;
|
|
186
|
-
attempt?: number;
|
|
187
|
-
correct?: number;
|
|
188
|
-
autoGrade?: boolean;
|
|
189
|
-
points?: number;
|
|
190
|
-
shuffle?: boolean;
|
|
191
|
-
translation?: string;
|
|
192
|
-
includeAIContext?: boolean;
|
|
193
|
-
media_area_context_ref?: string | null;
|
|
194
|
-
standardId?: string;
|
|
195
|
-
target_proficiency_level?: string;
|
|
196
|
-
allowTTS?: boolean;
|
|
197
|
-
feedback_language?: string | null;
|
|
198
|
-
correct_answer?: string | null;
|
|
199
|
-
limit_attempts?: boolean;
|
|
200
|
-
max_attempts?: number;
|
|
201
|
-
rich_text?: string;
|
|
202
|
-
}[]>;
|
|
203
|
-
getCard: (params: {
|
|
204
|
-
cardId: string;
|
|
205
|
-
}) => Promise<PageActivityWithId | null>;
|
|
206
|
-
};
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
declare const createFsClientWeb: ({ db, httpsCallable, logEvent }: FsClientParams) => {
|
|
210
|
-
assignmentRepo: {
|
|
211
|
-
getAssignment: (params: {
|
|
212
|
-
assignmentId: string;
|
|
213
|
-
currentUserId: string;
|
|
214
|
-
analyticType?: AssignmentAnalyticsType;
|
|
215
|
-
studentId?: string;
|
|
216
|
-
}) => Promise<AssignmentWithId | {
|
|
217
|
-
scores: any;
|
|
218
|
-
id: string;
|
|
219
|
-
isAvailable: boolean;
|
|
220
|
-
name: string;
|
|
221
|
-
description: string;
|
|
222
|
-
scheduledTime?: string | null;
|
|
223
|
-
dueTime?: {
|
|
224
|
-
hours: number;
|
|
225
|
-
minutes: number;
|
|
226
|
-
nanos: number;
|
|
227
|
-
};
|
|
228
|
-
speakableio: boolean;
|
|
229
|
-
owners: string[];
|
|
230
|
-
image: {
|
|
231
|
-
path: string | null;
|
|
232
|
-
url: string;
|
|
233
|
-
};
|
|
234
|
-
dueDate: {
|
|
235
|
-
day: number;
|
|
236
|
-
month: number;
|
|
237
|
-
year: number;
|
|
238
|
-
};
|
|
239
|
-
teacherName: string;
|
|
240
|
-
courseWorkId: string | null;
|
|
241
|
-
dueDateTimestamp: CustomTimestamp;
|
|
242
|
-
scheduledTimeTimestamp: number;
|
|
243
|
-
active: boolean;
|
|
244
|
-
voice: string | null;
|
|
245
|
-
setId: string;
|
|
246
|
-
dateMade: {
|
|
247
|
-
seconds: number;
|
|
248
|
-
nanoseconds: number;
|
|
249
|
-
};
|
|
250
|
-
maxPoints: number;
|
|
251
|
-
courseId: string;
|
|
252
|
-
isAssessment: boolean;
|
|
253
|
-
ltiDeeplink?: string;
|
|
254
|
-
content?: string[];
|
|
255
|
-
weights?: Record<string, number>;
|
|
256
|
-
language?: string;
|
|
257
|
-
types?: { [key in ActivityPageType]?: number; };
|
|
258
|
-
aiEnabled?: boolean;
|
|
259
|
-
chat_experience?: boolean;
|
|
260
|
-
} | null>;
|
|
261
|
-
attachScoresAssignment: (args_0: {
|
|
262
|
-
assignments: AssignmentWithId[];
|
|
263
|
-
analyticType: AssignmentAnalyticsType;
|
|
264
|
-
studentId?: string;
|
|
265
|
-
currentUserId: string;
|
|
266
|
-
}) => Promise<{
|
|
267
|
-
scores: any;
|
|
268
|
-
id: string;
|
|
269
|
-
isAvailable: boolean;
|
|
270
|
-
name: string;
|
|
271
|
-
description: string;
|
|
272
|
-
scheduledTime?: string | null;
|
|
273
|
-
dueTime?: {
|
|
274
|
-
hours: number;
|
|
275
|
-
minutes: number;
|
|
276
|
-
nanos: number;
|
|
277
|
-
};
|
|
278
|
-
speakableio: boolean;
|
|
279
|
-
owners: string[];
|
|
280
|
-
image: {
|
|
281
|
-
path: string | null;
|
|
282
|
-
url: string;
|
|
283
|
-
};
|
|
284
|
-
dueDate: {
|
|
285
|
-
day: number;
|
|
286
|
-
month: number;
|
|
287
|
-
year: number;
|
|
288
|
-
};
|
|
289
|
-
teacherName: string;
|
|
290
|
-
courseWorkId: string | null;
|
|
291
|
-
dueDateTimestamp: CustomTimestamp;
|
|
292
|
-
scheduledTimeTimestamp: number;
|
|
293
|
-
active: boolean;
|
|
294
|
-
voice: string | null;
|
|
295
|
-
setId: string;
|
|
296
|
-
dateMade: {
|
|
297
|
-
seconds: number;
|
|
298
|
-
nanoseconds: number;
|
|
299
|
-
};
|
|
300
|
-
maxPoints: number;
|
|
301
|
-
courseId: string;
|
|
302
|
-
isAssessment: boolean;
|
|
303
|
-
ltiDeeplink?: string;
|
|
304
|
-
content?: string[];
|
|
305
|
-
weights?: Record<string, number>;
|
|
306
|
-
language?: string;
|
|
307
|
-
types?: { [key in ActivityPageType]?: number; };
|
|
308
|
-
aiEnabled?: boolean;
|
|
309
|
-
chat_experience?: boolean;
|
|
310
|
-
}[]>;
|
|
311
|
-
getAssignmentScores: (args_0: {
|
|
312
|
-
assignmentId: string;
|
|
313
|
-
currentUserId: string;
|
|
314
|
-
analyticType?: AssignmentAnalyticsType;
|
|
315
|
-
studentId?: string;
|
|
316
|
-
}) => Promise<{
|
|
317
|
-
scores: unknown;
|
|
318
|
-
id: string;
|
|
319
|
-
} | undefined>;
|
|
320
|
-
getAllAssignments: () => Promise<(AssignmentWithId & {
|
|
321
|
-
id: string;
|
|
322
|
-
})[]>;
|
|
323
|
-
};
|
|
324
|
-
cardRepo: {
|
|
325
|
-
createCard: (args_0: {
|
|
326
|
-
data: Partial<PageActivity>;
|
|
327
|
-
}) => Promise<{
|
|
328
|
-
id: string;
|
|
329
|
-
} & Partial<PageActivity>>;
|
|
330
|
-
createCards: (args_0: {
|
|
331
|
-
cards: PageActivity[];
|
|
332
|
-
}) => Promise<{
|
|
333
|
-
id: string;
|
|
334
|
-
owners: string[];
|
|
335
|
-
checked?: boolean;
|
|
336
|
-
completed?: boolean;
|
|
337
|
-
media_area_id?: string | null;
|
|
338
|
-
media_area_layout?: "left" | "right" | null;
|
|
339
|
-
score?: number;
|
|
340
|
-
verificationStatus?: VerificationCardStatus;
|
|
341
|
-
native_text?: string;
|
|
342
|
-
repeat?: number;
|
|
343
|
-
language?: string | null;
|
|
344
|
-
image?: {
|
|
345
|
-
path?: string | null;
|
|
346
|
-
url?: string;
|
|
347
|
-
};
|
|
348
|
-
audio?: {
|
|
349
|
-
path?: string | null;
|
|
350
|
-
url?: string;
|
|
351
|
-
} | null;
|
|
352
|
-
notes?: string;
|
|
353
|
-
difficulty?: string;
|
|
354
|
-
default_language?: string;
|
|
355
|
-
target_text?: string;
|
|
356
|
-
type: ActivityPageType;
|
|
357
|
-
grading_criteria?: string;
|
|
358
|
-
scoring_type?: string;
|
|
359
|
-
grading_method?: "simple" | "rubric" | "manual" | "standards_based";
|
|
360
|
-
feedback_types?: string[];
|
|
361
|
-
rubricId?: string;
|
|
362
|
-
prompt?: string;
|
|
363
|
-
title?: string;
|
|
364
|
-
passing_score?: number;
|
|
365
|
-
maxCharacters?: number;
|
|
366
|
-
answer?: string[];
|
|
367
|
-
choices?: {
|
|
368
|
-
value: string;
|
|
369
|
-
option: string;
|
|
370
|
-
}[];
|
|
371
|
-
MCQType?: string;
|
|
372
|
-
multipleAttemptsAllowed?: boolean;
|
|
373
|
-
allowRetries?: boolean;
|
|
374
|
-
question?: string;
|
|
375
|
-
respondTime?: number;
|
|
376
|
-
hidePrompt?: boolean;
|
|
377
|
-
videoUrl?: string;
|
|
378
|
-
link?: string;
|
|
379
|
-
text?: string;
|
|
380
|
-
isListenAloud?: boolean;
|
|
381
|
-
embedCode?: string;
|
|
382
|
-
attempt?: number;
|
|
383
|
-
correct?: number;
|
|
384
|
-
autoGrade?: boolean;
|
|
385
|
-
points?: number;
|
|
386
|
-
shuffle?: boolean;
|
|
387
|
-
translation?: string;
|
|
388
|
-
includeAIContext?: boolean;
|
|
389
|
-
media_area_context_ref?: string | null;
|
|
390
|
-
standardId?: string;
|
|
391
|
-
target_proficiency_level?: string;
|
|
392
|
-
allowTTS?: boolean;
|
|
393
|
-
feedback_language?: string | null;
|
|
394
|
-
correct_answer?: string | null;
|
|
395
|
-
limit_attempts?: boolean;
|
|
396
|
-
max_attempts?: number;
|
|
397
|
-
rich_text?: string;
|
|
398
|
-
}[]>;
|
|
399
|
-
getCard: (params: {
|
|
400
|
-
cardId: string;
|
|
401
|
-
}) => Promise<PageActivityWithId | null>;
|
|
402
|
-
};
|
|
403
|
-
};
|
|
404
|
-
|
|
405
|
-
export { createFsClientWeb as createFsClient };
|
package/dist/models.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { c as ActivityPageType } from './assignment.model-DLMWAp0Y.js';
|
|
2
|
-
export { g as Assignment, A as AssignmentWithId, M as MULTIPLE_CHOICE_PAGE_ACTIVITY_TYPES, P as PageActivity, d as PageActivityWithId, f as PageScore, h as REPEAT_PAGE_ACTIVITY_TYPES, j as RESPOND_AUDIO_PAGE_ACTIVITY_TYPES, R as RESPOND_PAGE_ACTIVITY_TYPES, i as RESPOND_WRITE_PAGE_ACTIVITY_TYPES, e as Score, S as ScoreWithId } from './assignment.model-DLMWAp0Y.js';
|
|
3
|
-
import { FieldValue } from 'firebase/firestore';
|
|
4
|
-
import '@react-native-firebase/firestore';
|
|
5
|
-
import './card.constants-DhKFipX3.js';
|
|
6
|
-
|
|
7
|
-
interface SetWithId extends Set {
|
|
8
|
-
id: string;
|
|
9
|
-
}
|
|
10
|
-
interface Set {
|
|
11
|
-
id: string;
|
|
12
|
-
language: string;
|
|
13
|
-
ownerName: string;
|
|
14
|
-
weights: Record<string, number>;
|
|
15
|
-
repeat?: number;
|
|
16
|
-
voice?: string;
|
|
17
|
-
averagePhraseLength?: number;
|
|
18
|
-
passing_score?: number;
|
|
19
|
-
organizations?: string[];
|
|
20
|
-
description: string;
|
|
21
|
-
image: {
|
|
22
|
-
url: string;
|
|
23
|
-
path: null | string;
|
|
24
|
-
};
|
|
25
|
-
additionalLanguages?: string[];
|
|
26
|
-
owners: string[];
|
|
27
|
-
name: string;
|
|
28
|
-
content: string[];
|
|
29
|
-
types: {
|
|
30
|
-
[key in ActivityPageType]?: number;
|
|
31
|
-
};
|
|
32
|
-
defaultLanguage: string;
|
|
33
|
-
createdAt: FieldValue;
|
|
34
|
-
public: boolean;
|
|
35
|
-
defaultRubricId?: string;
|
|
36
|
-
difficulty?: string;
|
|
37
|
-
end_screen?: {
|
|
38
|
-
variant: 0 | 1 | 2;
|
|
39
|
-
title: string;
|
|
40
|
-
description: string;
|
|
41
|
-
};
|
|
42
|
-
mcAllowRetries?: boolean;
|
|
43
|
-
welcome_screen?: {
|
|
44
|
-
variant: 'colored' | 'blank';
|
|
45
|
-
};
|
|
46
|
-
poorFunctionalityWarning?: boolean;
|
|
47
|
-
status?: 'draft' | 'published';
|
|
48
|
-
subjects?: any[];
|
|
49
|
-
respondAllowRetries?: boolean;
|
|
50
|
-
respondAllowTTS?: boolean;
|
|
51
|
-
feedbackLanguage?: string;
|
|
52
|
-
respondMaxCharacters?: number;
|
|
53
|
-
respondMaxTime?: number;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export { ActivityPageType, type Set, type SetWithId };
|
package/dist/models.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ActivityPageType,
|
|
3
|
-
MULTIPLE_CHOICE_PAGE_ACTIVITY_TYPES,
|
|
4
|
-
REPEAT_PAGE_ACTIVITY_TYPES,
|
|
5
|
-
RESPOND_AUDIO_PAGE_ACTIVITY_TYPES,
|
|
6
|
-
RESPOND_PAGE_ACTIVITY_TYPES,
|
|
7
|
-
RESPOND_WRITE_PAGE_ACTIVITY_TYPES
|
|
8
|
-
} from "./chunk-LZG3MTSH.js";
|
|
9
|
-
export {
|
|
10
|
-
ActivityPageType,
|
|
11
|
-
MULTIPLE_CHOICE_PAGE_ACTIVITY_TYPES,
|
|
12
|
-
REPEAT_PAGE_ACTIVITY_TYPES,
|
|
13
|
-
RESPOND_AUDIO_PAGE_ACTIVITY_TYPES,
|
|
14
|
-
RESPOND_PAGE_ACTIVITY_TYPES,
|
|
15
|
-
RESPOND_WRITE_PAGE_ACTIVITY_TYPES
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=models.js.map
|
package/dist/models.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
declare const SPEAKABLE_NOTIFICATIONS: {
|
|
2
|
-
readonly NEW_ASSIGNMENT: "new_assignment";
|
|
3
|
-
readonly ASSESSMENT_SUBMITTED: "assessment_submitted";
|
|
4
|
-
readonly ASSESSMENT_SCORED: "assessment_scored";
|
|
5
|
-
readonly NEW_COMMENT: "NEW_COMMENT";
|
|
6
|
-
};
|
|
7
|
-
type SpeakableNotificationType = (typeof SPEAKABLE_NOTIFICATIONS)[keyof typeof SPEAKABLE_NOTIFICATIONS];
|
|
8
|
-
declare const SpeakableNotificationTypes: {
|
|
9
|
-
NEW_ASSIGNMENT: string;
|
|
10
|
-
FEEDBACK_FROM_TEACHER: string;
|
|
11
|
-
MESSAGE_FROM_STUDENT: string;
|
|
12
|
-
PHRASE_MARKED_CORRECT: string;
|
|
13
|
-
STUDENT_PROGRESS: string;
|
|
14
|
-
PLAYLIST_FOLLOWERS: string;
|
|
15
|
-
PLAYLIST_PLAYS: string;
|
|
16
|
-
ASSESSMENT_SUBMITTED: string;
|
|
17
|
-
ASSESSMENT_SCORED: string;
|
|
18
|
-
NEW_COMMENT: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export { type SpeakableNotificationType as S, SPEAKABLE_NOTIFICATIONS as a, SpeakableNotificationTypes as b };
|