analytica-frontend-lib 1.2.51 → 1.2.53

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.
Files changed (97) hide show
  1. package/dist/ActivitiesHistory/index.css +19420 -0
  2. package/dist/ActivitiesHistory/index.css.map +1 -0
  3. package/dist/ActivitiesHistory/index.d.ts +2 -0
  4. package/dist/ActivitiesHistory/index.d.ts.map +1 -0
  5. package/dist/ActivitiesHistory/index.js +7381 -0
  6. package/dist/ActivitiesHistory/index.js.map +1 -0
  7. package/dist/ActivitiesHistory/index.mjs +7424 -0
  8. package/dist/ActivitiesHistory/index.mjs.map +1 -0
  9. package/dist/ActivityCardQuestionBanks/index.css +46 -0
  10. package/dist/ActivityCardQuestionBanks/index.css.map +1 -1
  11. package/dist/ActivityCardQuestionPreview/index.css +46 -0
  12. package/dist/ActivityCardQuestionPreview/index.css.map +1 -1
  13. package/dist/ActivityDetails/index.css +46 -0
  14. package/dist/ActivityDetails/index.css.map +1 -1
  15. package/dist/ActivityFilters/index.css +46 -0
  16. package/dist/ActivityFilters/index.css.map +1 -1
  17. package/dist/ActivityPreview/index.css +46 -0
  18. package/dist/ActivityPreview/index.css.map +1 -1
  19. package/dist/AlertManager/index.css +46 -0
  20. package/dist/AlertManager/index.css.map +1 -1
  21. package/dist/RecommendedLessonsHistory/index.css +46 -0
  22. package/dist/RecommendedLessonsHistory/index.css.map +1 -1
  23. package/dist/RecommendedLessonsHistory/index.js +10 -2
  24. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  25. package/dist/RecommendedLessonsHistory/index.mjs +10 -2
  26. package/dist/RecommendedLessonsHistory/index.mjs.map +1 -1
  27. package/dist/SendActivityModal/SendActivityModal.css +46 -0
  28. package/dist/SendActivityModal/SendActivityModal.css.map +1 -1
  29. package/dist/SendActivityModal/index.css +46 -0
  30. package/dist/SendActivityModal/index.css.map +1 -1
  31. package/dist/TableProvider/index.css +46 -0
  32. package/dist/TableProvider/index.css.map +1 -1
  33. package/dist/hooks/useActivitiesHistory/index.d.ts +210 -0
  34. package/dist/hooks/useActivitiesHistory/index.d.ts.map +1 -0
  35. package/dist/hooks/useActivitiesHistory/index.js +181 -0
  36. package/dist/hooks/useActivitiesHistory/index.js.map +1 -0
  37. package/dist/hooks/useActivitiesHistory/index.mjs +141 -0
  38. package/dist/hooks/useActivitiesHistory/index.mjs.map +1 -0
  39. package/dist/hooks/useActivitiesHistory.d.ts +210 -0
  40. package/dist/hooks/useActivitiesHistory.d.ts.map +1 -0
  41. package/dist/hooks/useActivityModels/index.d.ts +220 -0
  42. package/dist/hooks/useActivityModels/index.d.ts.map +1 -0
  43. package/dist/hooks/useActivityModels/index.js +186 -0
  44. package/dist/hooks/useActivityModels/index.js.map +1 -0
  45. package/dist/hooks/useActivityModels/index.mjs +146 -0
  46. package/dist/hooks/useActivityModels/index.mjs.map +1 -0
  47. package/dist/hooks/useActivityModels.d.ts +220 -0
  48. package/dist/hooks/useActivityModels.d.ts.map +1 -0
  49. package/dist/hooks/useChat.d.ts +112 -0
  50. package/dist/hooks/useChat.d.ts.map +1 -0
  51. package/dist/hooks/useChatRooms.d.ts +76 -0
  52. package/dist/hooks/useChatRooms.d.ts.map +1 -0
  53. package/dist/index.css +46 -0
  54. package/dist/index.css.map +1 -1
  55. package/dist/index.d.ts +16 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1778 -23
  58. package/dist/index.js.map +1 -1
  59. package/dist/index.mjs +1755 -23
  60. package/dist/index.mjs.map +1 -1
  61. package/dist/styles.css +46 -0
  62. package/dist/styles.css.map +1 -1
  63. package/dist/types/activitiesHistory/index.d.ts +196 -0
  64. package/dist/types/activitiesHistory/index.d.ts.map +1 -0
  65. package/dist/types/activitiesHistory/index.js +92 -0
  66. package/dist/types/activitiesHistory/index.js.map +1 -0
  67. package/dist/types/activitiesHistory/index.mjs +59 -0
  68. package/dist/types/activitiesHistory/index.mjs.map +1 -0
  69. package/dist/types/activitiesHistory.d.ts +196 -0
  70. package/dist/types/activitiesHistory.d.ts.map +1 -0
  71. package/dist/types/chat.d.ts +164 -0
  72. package/dist/types/chat.d.ts.map +1 -0
  73. package/dist/types/common.d.ts +44 -0
  74. package/dist/types/common.d.ts.map +1 -0
  75. package/dist/types/recommendedLessons/index.d.ts +10 -18
  76. package/dist/types/recommendedLessons/index.d.ts.map +1 -1
  77. package/dist/types/recommendedLessons/index.js +27 -22
  78. package/dist/types/recommendedLessons/index.js.map +1 -1
  79. package/dist/types/recommendedLessons/index.mjs +26 -23
  80. package/dist/types/recommendedLessons/index.mjs.map +1 -1
  81. package/dist/types/recommendedLessons.d.ts +10 -18
  82. package/dist/types/recommendedLessons.d.ts.map +1 -1
  83. package/dist/utils/hookErrorHandler.d.ts +24 -0
  84. package/dist/utils/hookErrorHandler.d.ts.map +1 -0
  85. package/package.json +8 -1
  86. package/dist/RecommendedLessonDetails/index.d.ts +0 -5
  87. package/dist/RecommendedLessonDetails/index.d.ts.map +0 -1
  88. package/dist/RecommendedLessonDetails/index.js +0 -4854
  89. package/dist/RecommendedLessonDetails/index.js.map +0 -1
  90. package/dist/RecommendedLessonDetails/index.mjs +0 -4872
  91. package/dist/RecommendedLessonDetails/index.mjs.map +0 -1
  92. package/dist/hooks/useRecommendedLessonDetails/index.d.ts +0 -780
  93. package/dist/hooks/useRecommendedLessonDetails/index.d.ts.map +0 -1
  94. package/dist/hooks/useRecommendedLessonDetails/index.js +0 -204
  95. package/dist/hooks/useRecommendedLessonDetails/index.js.map +0 -1
  96. package/dist/hooks/useRecommendedLessonDetails/index.mjs +0 -174
  97. package/dist/hooks/useRecommendedLessonDetails/index.mjs.map +0 -1
@@ -0,0 +1,146 @@
1
+ // src/hooks/useActivityModels.ts
2
+ import { useState, useCallback } from "react";
3
+ import { z as z2 } from "zod";
4
+ import dayjs from "dayjs";
5
+
6
+ // src/types/activitiesHistory.ts
7
+ var ActivityDraftType = /* @__PURE__ */ ((ActivityDraftType2) => {
8
+ ActivityDraftType2["MODELO"] = "MODELO";
9
+ ActivityDraftType2["RASCUNHO"] = "RASCUNHO";
10
+ return ActivityDraftType2;
11
+ })(ActivityDraftType || {});
12
+ var ACTIVITY_FILTER_STATUS_OPTIONS = [
13
+ { id: "A_VENCER" /* A_VENCER */, name: "A Vencer" },
14
+ { id: "VENCIDA" /* VENCIDA */, name: "Vencida" },
15
+ { id: "CONCLUIDA" /* CONCLUIDA */, name: "Conclu\xEDda" }
16
+ ];
17
+
18
+ // src/utils/hookErrorHandler.ts
19
+ import { z } from "zod";
20
+ var createFetchErrorHandler = (validationErrorMessage, genericErrorMessage) => (error) => {
21
+ if (error instanceof z.ZodError) {
22
+ console.error(validationErrorMessage, error);
23
+ return validationErrorMessage;
24
+ }
25
+ console.error(genericErrorMessage, error);
26
+ return genericErrorMessage;
27
+ };
28
+
29
+ // src/hooks/useActivityModels.ts
30
+ var activityDraftFiltersSchema = z2.object({
31
+ questionTypes: z2.array(z2.string()).optional(),
32
+ questionBanks: z2.array(z2.string()).optional(),
33
+ subjects: z2.array(z2.string()).optional(),
34
+ topics: z2.array(z2.string()).optional(),
35
+ subtopics: z2.array(z2.string()).optional(),
36
+ contents: z2.array(z2.string()).optional()
37
+ }).nullable();
38
+ var activityModelResponseSchema = z2.object({
39
+ id: z2.string().uuid(),
40
+ type: z2.nativeEnum(ActivityDraftType),
41
+ title: z2.string().nullable(),
42
+ creatorUserInstitutionId: z2.string().uuid().nullable(),
43
+ subjectId: z2.string().uuid().nullable(),
44
+ filters: activityDraftFiltersSchema,
45
+ createdAt: z2.string(),
46
+ updatedAt: z2.string()
47
+ });
48
+ var activityModelsApiResponseSchema = z2.object({
49
+ message: z2.string(),
50
+ data: z2.object({
51
+ activityDrafts: z2.array(activityModelResponseSchema),
52
+ total: z2.number()
53
+ })
54
+ });
55
+ var DEFAULT_MODELS_PAGINATION = {
56
+ total: 0,
57
+ page: 1,
58
+ limit: 10,
59
+ totalPages: 0
60
+ };
61
+ var transformModelToTableItem = (model, subjectsMap) => {
62
+ const subjectName = model.subjectId ? subjectsMap?.get(model.subjectId) || "" : "";
63
+ return {
64
+ id: model.id,
65
+ title: model.title || "Sem t\xEDtulo",
66
+ savedAt: dayjs(model.createdAt).format("DD/MM/YYYY"),
67
+ subject: subjectName,
68
+ subjectId: model.subjectId
69
+ };
70
+ };
71
+ var handleModelFetchError = createFetchErrorHandler(
72
+ "Erro ao validar dados de modelos de atividades",
73
+ "Erro ao carregar modelos de atividades"
74
+ );
75
+ var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => {
76
+ return () => {
77
+ const [state, setState] = useState({
78
+ models: [],
79
+ loading: false,
80
+ error: null,
81
+ pagination: DEFAULT_MODELS_PAGINATION
82
+ });
83
+ const fetchModels = useCallback(
84
+ async (filters, subjectsMap) => {
85
+ setState((prev) => ({ ...prev, loading: true, error: null }));
86
+ try {
87
+ const responseData = await fetchActivityModels(filters);
88
+ const validatedData = activityModelsApiResponseSchema.parse(responseData);
89
+ const tableItems = validatedData.data.activityDrafts.map(
90
+ (model) => transformModelToTableItem(model, subjectsMap)
91
+ );
92
+ const limit = filters?.limit || 10;
93
+ const page = filters?.page || 1;
94
+ const total = validatedData.data.total;
95
+ const totalPages = Math.ceil(total / limit);
96
+ setState({
97
+ models: tableItems,
98
+ loading: false,
99
+ error: null,
100
+ pagination: {
101
+ total,
102
+ page,
103
+ limit,
104
+ totalPages
105
+ }
106
+ });
107
+ } catch (error) {
108
+ const errorMessage = handleModelFetchError(error);
109
+ setState((prev) => ({
110
+ ...prev,
111
+ loading: false,
112
+ error: errorMessage
113
+ }));
114
+ }
115
+ },
116
+ [fetchActivityModels]
117
+ );
118
+ const deleteModel = useCallback(
119
+ async (id) => {
120
+ try {
121
+ await deleteActivityModel(id);
122
+ return true;
123
+ } catch (error) {
124
+ console.error("Erro ao deletar modelo:", error);
125
+ return false;
126
+ }
127
+ },
128
+ [deleteActivityModel]
129
+ );
130
+ return {
131
+ ...state,
132
+ fetchModels,
133
+ deleteModel
134
+ };
135
+ };
136
+ };
137
+ var createActivityModelsHook = createUseActivityModels;
138
+ export {
139
+ DEFAULT_MODELS_PAGINATION,
140
+ activityModelsApiResponseSchema,
141
+ createActivityModelsHook,
142
+ createUseActivityModels,
143
+ handleModelFetchError,
144
+ transformModelToTableItem
145
+ };
146
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useActivityModels.ts","../../../src/types/activitiesHistory.ts","../../../src/utils/hookErrorHandler.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { z } from 'zod';\nimport dayjs from 'dayjs';\nimport { ActivityDraftType } from '../types/activitiesHistory';\nimport type {\n ActivityModelResponse,\n ActivityModelTableItem,\n ActivityModelsApiResponse,\n ActivityModelFilters,\n ActivityPagination,\n} from '../types/activitiesHistory';\nimport { createFetchErrorHandler } from '../utils/hookErrorHandler';\n\n/**\n * Zod schema for activity draft filters\n */\nconst activityDraftFiltersSchema = z\n .object({\n questionTypes: z.array(z.string()).optional(),\n questionBanks: z.array(z.string()).optional(),\n subjects: z.array(z.string()).optional(),\n topics: z.array(z.string()).optional(),\n subtopics: z.array(z.string()).optional(),\n contents: z.array(z.string()).optional(),\n })\n .nullable();\n\n/**\n * Zod schema for activity model response validation\n */\nconst activityModelResponseSchema = z.object({\n id: z.string().uuid(),\n type: z.nativeEnum(ActivityDraftType),\n title: z.string().nullable(),\n creatorUserInstitutionId: z.string().uuid().nullable(),\n subjectId: z.string().uuid().nullable(),\n filters: activityDraftFiltersSchema,\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Zod schema for activity models API response validation\n */\nexport const activityModelsApiResponseSchema = z.object({\n message: z.string(),\n data: z.object({\n activityDrafts: z.array(activityModelResponseSchema),\n total: z.number(),\n }),\n});\n\n/**\n * Hook state interface\n */\nexport interface UseActivityModelsState {\n models: ActivityModelTableItem[];\n loading: boolean;\n error: string | null;\n pagination: ActivityPagination;\n}\n\n/**\n * Hook return type\n */\nexport interface UseActivityModelsReturn extends UseActivityModelsState {\n fetchModels: (\n filters?: ActivityModelFilters,\n subjectsMap?: Map<string, string>\n ) => Promise<void>;\n deleteModel: (id: string) => Promise<boolean>;\n}\n\n/**\n * Default pagination values\n */\nexport const DEFAULT_MODELS_PAGINATION: ActivityPagination = {\n total: 0,\n page: 1,\n limit: 10,\n totalPages: 0,\n};\n\n/**\n * Transform API response to table item format\n * @param model - Activity model from API response\n * @param subjectsMap - Map of subject IDs to subject names\n * @returns Formatted model for table display\n */\nexport const transformModelToTableItem = (\n model: ActivityModelResponse,\n subjectsMap?: Map<string, string>\n): ActivityModelTableItem => {\n const subjectName = model.subjectId\n ? subjectsMap?.get(model.subjectId) || ''\n : '';\n\n return {\n id: model.id,\n title: model.title || 'Sem título',\n savedAt: dayjs(model.createdAt).format('DD/MM/YYYY'),\n subject: subjectName,\n subjectId: model.subjectId,\n };\n};\n\n/**\n * Handle errors during model fetch\n * Uses the generic error handler factory to reduce code duplication\n */\nexport const handleModelFetchError = createFetchErrorHandler(\n 'Erro ao validar dados de modelos de atividades',\n 'Erro ao carregar modelos de atividades'\n);\n\n/**\n * Factory function to create useActivityModels hook\n *\n * @param fetchActivityModels - Function to fetch models from API\n * @param deleteActivityModel - Function to delete a model\n * @returns Hook for managing activity models\n *\n * @example\n * ```tsx\n * // In your app setup\n * const fetchActivityModels = async (filters) => {\n * const response = await api.get('/activity-drafts', { params: { ...filters, type: 'MODELO' } });\n * return response.data;\n * };\n *\n * const deleteActivityModel = async (id) => {\n * await api.delete(`/activity-drafts/${id}`);\n * };\n *\n * const useActivityModels = createUseActivityModels(fetchActivityModels, deleteActivityModel);\n *\n * // In your component\n * const { models, loading, error, pagination, fetchModels, deleteModel } = useActivityModels();\n * ```\n */\nexport const createUseActivityModels = (\n fetchActivityModels: (\n filters?: ActivityModelFilters\n ) => Promise<ActivityModelsApiResponse>,\n deleteActivityModel: (id: string) => Promise<void>\n) => {\n return (): UseActivityModelsReturn => {\n const [state, setState] = useState<UseActivityModelsState>({\n models: [],\n loading: false,\n error: null,\n pagination: DEFAULT_MODELS_PAGINATION,\n });\n\n /**\n * Fetch activity models from API\n * @param filters - Optional filters for pagination, search, etc.\n * @param subjectsMap - Map of subject IDs to subject names for display\n */\n const fetchModels = useCallback(\n async (\n filters?: ActivityModelFilters,\n subjectsMap?: Map<string, string>\n ) => {\n setState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n // Fetch data from API\n const responseData = await fetchActivityModels(filters);\n\n // Validate response with Zod\n const validatedData =\n activityModelsApiResponseSchema.parse(responseData);\n\n // Transform models to table format\n const tableItems = validatedData.data.activityDrafts.map((model) =>\n transformModelToTableItem(model, subjectsMap)\n );\n\n // Calculate pagination\n const limit = filters?.limit || 10;\n const page = filters?.page || 1;\n const total = validatedData.data.total;\n const totalPages = Math.ceil(total / limit);\n\n // Update state with validated and transformed data\n setState({\n models: tableItems,\n loading: false,\n error: null,\n pagination: {\n total,\n page,\n limit,\n totalPages,\n },\n });\n } catch (error) {\n const errorMessage = handleModelFetchError(error);\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorMessage,\n }));\n }\n },\n [fetchActivityModels]\n );\n\n /**\n * Delete an activity model\n * @param id - Model ID to delete\n * @returns True if deletion was successful\n */\n const deleteModel = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n await deleteActivityModel(id);\n return true;\n } catch (error) {\n console.error('Erro ao deletar modelo:', error);\n return false;\n }\n },\n [deleteActivityModel]\n );\n\n return {\n ...state,\n fetchModels,\n deleteModel,\n };\n };\n};\n\n/**\n * Alias for createUseActivityModels\n */\nexport const createActivityModelsHook = createUseActivityModels;\n","/**\n * Activities History Type Definitions\n * Types and interfaces for activities history and models functionality\n * Based on /activities/history and /activity-drafts endpoints\n */\n\nimport {\n GenericApiStatus,\n GenericDisplayStatus,\n BadgeActionType,\n getStatusBadgeAction,\n mapApiStatusToDisplay,\n} from './common';\n\n/**\n * Activity status from backend API /activities/history\n * Re-exported from common for backward compatibility\n */\nexport { GenericApiStatus as ActivityApiStatus } from './common';\n\n/**\n * Activity status for display in UI (Badge component)\n * Re-exported from common for backward compatibility\n */\nexport { GenericDisplayStatus as ActivityDisplayStatus } from './common';\n\n/**\n * Badge action types for activity status visualization\n * Re-exported from common for backward compatibility\n */\nexport { BadgeActionType as ActivityBadgeActionType } from './common';\n\n/**\n * Activity draft type enum (matches backend ACTIVITY_DRAFT_TYPE)\n */\nexport enum ActivityDraftType {\n MODELO = 'MODELO',\n RASCUNHO = 'RASCUNHO',\n}\n\n/**\n * Activity history response from backend API /activities/history\n */\nexport interface ActivityHistoryResponse {\n id: string;\n title: string;\n startDate: string | null;\n finalDate: string | null;\n status: GenericApiStatus;\n completionPercentage: number;\n subjectId: string;\n schoolId?: string;\n schoolName?: string;\n year?: string;\n className?: string;\n subjectName?: string;\n}\n\n/**\n * Activity table item interface for activities list table\n */\nexport interface ActivityTableItem extends Record<string, unknown> {\n id: string;\n startDate: string | null;\n deadline: string | null;\n title: string;\n school: string;\n year: string;\n subject: string;\n class: string;\n status: GenericDisplayStatus;\n completionPercentage: number;\n}\n\n/**\n * Pagination info from API\n */\nexport interface ActivityPagination {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n}\n\n/**\n * Activities history API complete response\n */\nexport interface ActivitiesHistoryApiResponse {\n message: string;\n data: {\n activities: ActivityHistoryResponse[];\n pagination: ActivityPagination;\n };\n}\n\n/**\n * Activity history filters for API query parameters\n */\nexport interface ActivityHistoryFilters {\n page?: number;\n limit?: number;\n status?: GenericApiStatus;\n search?: string;\n startDate?: string;\n finalDate?: string;\n subjectId?: string;\n schoolId?: string;\n sortBy?: 'finalDate' | 'title' | 'completionPercentage';\n sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * Activity draft filters object from backend\n */\nexport interface ActivityDraftFilters {\n questionTypes?: string[];\n questionBanks?: string[];\n subjects?: string[];\n topics?: string[];\n subtopics?: string[];\n contents?: string[];\n}\n\n/**\n * Activity model response from backend API (/activity-drafts)\n */\nexport interface ActivityModelResponse {\n id: string;\n type: ActivityDraftType;\n title: string | null;\n creatorUserInstitutionId: string | null;\n subjectId: string | null;\n filters: ActivityDraftFilters | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Activity model table item for display\n */\nexport interface ActivityModelTableItem extends Record<string, unknown> {\n id: string;\n title: string;\n savedAt: string;\n subject: string;\n subjectId: string | null;\n}\n\n/**\n * Activity models API response\n */\nexport interface ActivityModelsApiResponse {\n message: string;\n data: {\n activityDrafts: ActivityModelResponse[];\n total: number;\n };\n}\n\n/**\n * Activity model filters for API query\n */\nexport interface ActivityModelFilters {\n page?: number;\n limit?: number;\n search?: string;\n subjectId?: string;\n type?: ActivityDraftType;\n}\n\n/**\n * Filter option for dropdowns\n * Extends with index signature to be compatible with CheckBoxGroup Item type\n */\nexport interface ActivityFilterOption {\n id: string;\n name: string;\n [key: string]: unknown;\n}\n\n/**\n * User data for filter options (schools, classes, subjects)\n */\nexport interface ActivityUserFilterData {\n schools?: Array<{ id: string; name: string }>;\n classes?: Array<{ id: string; name: string; schoolId?: string }>;\n subjects?: Array<{ id: string; name: string }>;\n schoolYears?: Array<{ id: string; name: string }>;\n}\n\n/**\n * Get status badge action based on activity display status\n * @param status - Activity display status\n * @returns Badge action type for styling\n */\nexport const getActivityStatusBadgeAction = (\n status: GenericDisplayStatus\n): BadgeActionType => getStatusBadgeAction(status);\n\n/**\n * Activity status options for filter\n */\nexport const ACTIVITY_FILTER_STATUS_OPTIONS: ActivityFilterOption[] = [\n { id: GenericApiStatus.A_VENCER, name: 'A Vencer' },\n { id: GenericApiStatus.VENCIDA, name: 'Vencida' },\n { id: GenericApiStatus.CONCLUIDA, name: 'Concluída' },\n];\n\n/**\n * Map API status to display status\n * @param apiStatus - Status from backend API\n * @returns Formatted status for UI display\n */\nexport const mapActivityStatusToDisplay = (\n apiStatus: GenericApiStatus\n): GenericDisplayStatus => mapApiStatusToDisplay(apiStatus);\n","import { z } from 'zod';\n\n/**\n * Factory function to create a fetch error handler\n * This reduces code duplication across data fetching hooks\n *\n * @param validationErrorMessage - Message to display for Zod validation errors\n * @param genericErrorMessage - Message to display for other errors\n * @returns Error handler function that returns appropriate error message\n *\n * @example\n * ```typescript\n * const handleFetchError = createFetchErrorHandler(\n * 'Erro ao validar dados',\n * 'Erro ao carregar dados'\n * );\n *\n * try {\n * // fetch data\n * } catch (error) {\n * const errorMessage = handleFetchError(error);\n * }\n * ```\n */\nexport const createFetchErrorHandler =\n (validationErrorMessage: string, genericErrorMessage: string) =>\n (error: unknown): string => {\n if (error instanceof z.ZodError) {\n console.error(validationErrorMessage, error);\n return validationErrorMessage;\n }\n\n console.error(genericErrorMessage, error);\n return genericErrorMessage;\n };\n"],"mappings":"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","names":["z","ActivityDraftType","z"]}
@@ -0,0 +1,220 @@
1
+ import { z } from 'zod';
2
+ import { ActivityDraftType } from '../types/activitiesHistory';
3
+ import type { ActivityModelResponse, ActivityModelTableItem, ActivityModelsApiResponse, ActivityModelFilters, ActivityPagination } from '../types/activitiesHistory';
4
+ /**
5
+ * Zod schema for activity models API response validation
6
+ */
7
+ export declare const activityModelsApiResponseSchema: z.ZodObject<{
8
+ message: z.ZodString;
9
+ data: z.ZodObject<{
10
+ activityDrafts: z.ZodArray<z.ZodObject<{
11
+ id: z.ZodString;
12
+ type: z.ZodNativeEnum<typeof ActivityDraftType>;
13
+ title: z.ZodNullable<z.ZodString>;
14
+ creatorUserInstitutionId: z.ZodNullable<z.ZodString>;
15
+ subjectId: z.ZodNullable<z.ZodString>;
16
+ filters: z.ZodNullable<z.ZodObject<{
17
+ questionTypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
18
+ questionBanks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19
+ subjects: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
20
+ topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
21
+ subtopics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
+ contents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ contents?: string[] | undefined;
25
+ questionTypes?: string[] | undefined;
26
+ topics?: string[] | undefined;
27
+ subtopics?: string[] | undefined;
28
+ subjects?: string[] | undefined;
29
+ questionBanks?: string[] | undefined;
30
+ }, {
31
+ contents?: string[] | undefined;
32
+ questionTypes?: string[] | undefined;
33
+ topics?: string[] | undefined;
34
+ subtopics?: string[] | undefined;
35
+ subjects?: string[] | undefined;
36
+ questionBanks?: string[] | undefined;
37
+ }>>;
38
+ createdAt: z.ZodString;
39
+ updatedAt: z.ZodString;
40
+ }, "strip", z.ZodTypeAny, {
41
+ id: string;
42
+ type: ActivityDraftType;
43
+ title: string | null;
44
+ createdAt: string;
45
+ filters: {
46
+ contents?: string[] | undefined;
47
+ questionTypes?: string[] | undefined;
48
+ topics?: string[] | undefined;
49
+ subtopics?: string[] | undefined;
50
+ subjects?: string[] | undefined;
51
+ questionBanks?: string[] | undefined;
52
+ } | null;
53
+ subjectId: string | null;
54
+ creatorUserInstitutionId: string | null;
55
+ updatedAt: string;
56
+ }, {
57
+ id: string;
58
+ type: ActivityDraftType;
59
+ title: string | null;
60
+ createdAt: string;
61
+ filters: {
62
+ contents?: string[] | undefined;
63
+ questionTypes?: string[] | undefined;
64
+ topics?: string[] | undefined;
65
+ subtopics?: string[] | undefined;
66
+ subjects?: string[] | undefined;
67
+ questionBanks?: string[] | undefined;
68
+ } | null;
69
+ subjectId: string | null;
70
+ creatorUserInstitutionId: string | null;
71
+ updatedAt: string;
72
+ }>, "many">;
73
+ total: z.ZodNumber;
74
+ }, "strip", z.ZodTypeAny, {
75
+ total: number;
76
+ activityDrafts: {
77
+ id: string;
78
+ type: ActivityDraftType;
79
+ title: string | null;
80
+ createdAt: string;
81
+ filters: {
82
+ contents?: string[] | undefined;
83
+ questionTypes?: string[] | undefined;
84
+ topics?: string[] | undefined;
85
+ subtopics?: string[] | undefined;
86
+ subjects?: string[] | undefined;
87
+ questionBanks?: string[] | undefined;
88
+ } | null;
89
+ subjectId: string | null;
90
+ creatorUserInstitutionId: string | null;
91
+ updatedAt: string;
92
+ }[];
93
+ }, {
94
+ total: number;
95
+ activityDrafts: {
96
+ id: string;
97
+ type: ActivityDraftType;
98
+ title: string | null;
99
+ createdAt: string;
100
+ filters: {
101
+ contents?: string[] | undefined;
102
+ questionTypes?: string[] | undefined;
103
+ topics?: string[] | undefined;
104
+ subtopics?: string[] | undefined;
105
+ subjects?: string[] | undefined;
106
+ questionBanks?: string[] | undefined;
107
+ } | null;
108
+ subjectId: string | null;
109
+ creatorUserInstitutionId: string | null;
110
+ updatedAt: string;
111
+ }[];
112
+ }>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ data: {
115
+ total: number;
116
+ activityDrafts: {
117
+ id: string;
118
+ type: ActivityDraftType;
119
+ title: string | null;
120
+ createdAt: string;
121
+ filters: {
122
+ contents?: string[] | undefined;
123
+ questionTypes?: string[] | undefined;
124
+ topics?: string[] | undefined;
125
+ subtopics?: string[] | undefined;
126
+ subjects?: string[] | undefined;
127
+ questionBanks?: string[] | undefined;
128
+ } | null;
129
+ subjectId: string | null;
130
+ creatorUserInstitutionId: string | null;
131
+ updatedAt: string;
132
+ }[];
133
+ };
134
+ message: string;
135
+ }, {
136
+ data: {
137
+ total: number;
138
+ activityDrafts: {
139
+ id: string;
140
+ type: ActivityDraftType;
141
+ title: string | null;
142
+ createdAt: string;
143
+ filters: {
144
+ contents?: string[] | undefined;
145
+ questionTypes?: string[] | undefined;
146
+ topics?: string[] | undefined;
147
+ subtopics?: string[] | undefined;
148
+ subjects?: string[] | undefined;
149
+ questionBanks?: string[] | undefined;
150
+ } | null;
151
+ subjectId: string | null;
152
+ creatorUserInstitutionId: string | null;
153
+ updatedAt: string;
154
+ }[];
155
+ };
156
+ message: string;
157
+ }>;
158
+ /**
159
+ * Hook state interface
160
+ */
161
+ export interface UseActivityModelsState {
162
+ models: ActivityModelTableItem[];
163
+ loading: boolean;
164
+ error: string | null;
165
+ pagination: ActivityPagination;
166
+ }
167
+ /**
168
+ * Hook return type
169
+ */
170
+ export interface UseActivityModelsReturn extends UseActivityModelsState {
171
+ fetchModels: (filters?: ActivityModelFilters, subjectsMap?: Map<string, string>) => Promise<void>;
172
+ deleteModel: (id: string) => Promise<boolean>;
173
+ }
174
+ /**
175
+ * Default pagination values
176
+ */
177
+ export declare const DEFAULT_MODELS_PAGINATION: ActivityPagination;
178
+ /**
179
+ * Transform API response to table item format
180
+ * @param model - Activity model from API response
181
+ * @param subjectsMap - Map of subject IDs to subject names
182
+ * @returns Formatted model for table display
183
+ */
184
+ export declare const transformModelToTableItem: (model: ActivityModelResponse, subjectsMap?: Map<string, string>) => ActivityModelTableItem;
185
+ /**
186
+ * Handle errors during model fetch
187
+ * Uses the generic error handler factory to reduce code duplication
188
+ */
189
+ export declare const handleModelFetchError: (error: unknown) => string;
190
+ /**
191
+ * Factory function to create useActivityModels hook
192
+ *
193
+ * @param fetchActivityModels - Function to fetch models from API
194
+ * @param deleteActivityModel - Function to delete a model
195
+ * @returns Hook for managing activity models
196
+ *
197
+ * @example
198
+ * ```tsx
199
+ * // In your app setup
200
+ * const fetchActivityModels = async (filters) => {
201
+ * const response = await api.get('/activity-drafts', { params: { ...filters, type: 'MODELO' } });
202
+ * return response.data;
203
+ * };
204
+ *
205
+ * const deleteActivityModel = async (id) => {
206
+ * await api.delete(`/activity-drafts/${id}`);
207
+ * };
208
+ *
209
+ * const useActivityModels = createUseActivityModels(fetchActivityModels, deleteActivityModel);
210
+ *
211
+ * // In your component
212
+ * const { models, loading, error, pagination, fetchModels, deleteModel } = useActivityModels();
213
+ * ```
214
+ */
215
+ export declare const createUseActivityModels: (fetchActivityModels: (filters?: ActivityModelFilters) => Promise<ActivityModelsApiResponse>, deleteActivityModel: (id: string) => Promise<void>) => () => UseActivityModelsReturn;
216
+ /**
217
+ * Alias for createUseActivityModels
218
+ */
219
+ export declare const createActivityModelsHook: (fetchActivityModels: (filters?: ActivityModelFilters) => Promise<ActivityModelsApiResponse>, deleteActivityModel: (id: string) => Promise<void>) => () => UseActivityModelsReturn;
220
+ //# sourceMappingURL=useActivityModels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActivityModels.d.ts","sourceRoot":"","sources":["../../src/hooks/useActivityModels.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AA+BpC;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1C,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,WAAW,EAAE,CACX,OAAO,CAAC,EAAE,oBAAoB,EAC9B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,kBAKvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,OAAO,qBAAqB,EAC5B,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAChC,sBAYF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,4BAGjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,uBAAuB,GAClC,qBAAqB,CACnB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,yBAAyB,CAAC,EACvC,qBAAqB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAEvC,uBAuFZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,wBAjGd,CACnB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,yBAAyB,CAAC,uBAClB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,WAEvC,uBA4FkD,CAAC"}
@@ -0,0 +1,112 @@
1
+ import type { ChatMessage, ChatParticipant } from '../types/chat';
2
+ /**
3
+ * WebSocket connection states
4
+ */
5
+ export declare const WS_STATES: {
6
+ readonly CONNECTING: 0;
7
+ readonly OPEN: 1;
8
+ readonly CLOSING: 2;
9
+ readonly CLOSED: 3;
10
+ };
11
+ /**
12
+ * Options for the useChat hook
13
+ */
14
+ export interface UseChatOptions {
15
+ /** WebSocket URL (e.g., wss://api.example.com/chat/ws) */
16
+ wsUrl: string;
17
+ /** JWT authentication token */
18
+ token: string;
19
+ /** Chat room ID */
20
+ roomId: string;
21
+ /** Current user's userInstitutionId */
22
+ userId: string;
23
+ /** Callback when connection is established */
24
+ onConnect?: () => void;
25
+ /** Callback when connection is closed */
26
+ onDisconnect?: () => void;
27
+ /** Callback when an error occurs */
28
+ onError?: (error: Error) => void;
29
+ /** Auto-reconnect on disconnect (default: true) */
30
+ autoReconnect?: boolean;
31
+ /** Reconnect interval in ms (default: 3000) */
32
+ reconnectInterval?: number;
33
+ /** Max reconnect attempts (default: 5) */
34
+ maxReconnectAttempts?: number;
35
+ }
36
+ /**
37
+ * Return type for the useChat hook
38
+ */
39
+ export interface UseChatReturn {
40
+ /** Whether WebSocket is connected */
41
+ isConnected: boolean;
42
+ /** List of chat messages */
43
+ messages: ChatMessage[];
44
+ /** List of room participants */
45
+ participants: ChatParticipant[];
46
+ /** Send a text message */
47
+ sendMessage: (content: string) => void;
48
+ /** Leave the chat room */
49
+ leave: () => void;
50
+ /** Current error state */
51
+ error: Error | null;
52
+ /** Reconnect to the WebSocket */
53
+ reconnect: () => void;
54
+ /** Current user ID for identifying own messages */
55
+ currentUserId: string;
56
+ }
57
+ /**
58
+ * Hook for managing WebSocket connection to a chat room
59
+ *
60
+ * Handles:
61
+ * - WebSocket connection lifecycle
62
+ * - Message sending/receiving
63
+ * - Participant tracking
64
+ * - Auto-reconnection
65
+ *
66
+ * @param options - Hook configuration options
67
+ * @returns Chat state and actions
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * const {
72
+ * isConnected,
73
+ * messages,
74
+ * participants,
75
+ * sendMessage,
76
+ * error
77
+ * } = useChat({
78
+ * wsUrl: 'wss://api.example.com/chat/ws',
79
+ * token: authToken,
80
+ * roomId: 'room-123',
81
+ * userId: 'user-456',
82
+ * onConnect: () => console.log('Connected!'),
83
+ * onError: (err) => console.error('Error:', err),
84
+ * });
85
+ *
86
+ * const handleSend = () => {
87
+ * sendMessage('Hello, world!');
88
+ * };
89
+ * ```
90
+ */
91
+ export declare function useChat({ wsUrl, token, roomId, userId, onConnect, onDisconnect, onError, autoReconnect, reconnectInterval, maxReconnectAttempts, }: UseChatOptions): UseChatReturn;
92
+ /**
93
+ * Factory function to create a pre-configured useChat hook
94
+ *
95
+ * @param baseWsUrl - Base WebSocket URL
96
+ * @returns Factory function that creates the hook with room-specific options
97
+ *
98
+ * @example
99
+ * ```tsx
100
+ * // In your app setup
101
+ * const createChatHook = createUseChat('wss://api.example.com/chat/ws');
102
+ *
103
+ * // In component
104
+ * const { messages, sendMessage } = createChatHook({
105
+ * token: authToken,
106
+ * roomId: 'room-123',
107
+ * userId: 'user-456',
108
+ * });
109
+ * ```
110
+ */
111
+ export declare function createUseChat(baseWsUrl: string): (options: Omit<UseChatOptions, "wsUrl">) => UseChatReturn;
112
+ //# sourceMappingURL=useChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAGhB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,gCAAgC;IAChC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,0BAA0B;IAC1B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,0BAA0B;IAC1B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,iCAAiC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,YAAY,EACZ,OAAO,EACP,aAAoB,EACpB,iBAAwB,EACxB,oBAAwB,GACzB,EAAE,cAAc,GAAG,aAAa,CAuOhC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,IACrC,SAAS,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,mBAE/C"}
@@ -0,0 +1,76 @@
1
+ import type { ChatApiClient, ChatRoom, ChatRoomWithDetails, ChatUser } from '../types/chat';
2
+ /**
3
+ * Options for the useChatRooms hook
4
+ */
5
+ export interface UseChatRoomsOptions {
6
+ apiClient: ChatApiClient;
7
+ }
8
+ /**
9
+ * Return type for the useChatRooms hook
10
+ */
11
+ export interface UseChatRoomsReturn {
12
+ /** List of user's chat rooms */
13
+ rooms: ChatRoomWithDetails[];
14
+ /** Available users for creating new chat rooms */
15
+ availableUsers: ChatUser[];
16
+ /** Loading state */
17
+ loading: boolean;
18
+ /** Error state */
19
+ error: Error | null;
20
+ /** Fetch user's chat rooms */
21
+ fetchRooms: () => Promise<void>;
22
+ /** Fetch available users for chat */
23
+ fetchAvailableUsers: () => Promise<void>;
24
+ /** Create a new chat room */
25
+ createRoom: (participantIds: string[]) => Promise<ChatRoom | null>;
26
+ /** Clear error state */
27
+ clearError: () => void;
28
+ }
29
+ /**
30
+ * Hook for managing chat rooms via REST API
31
+ *
32
+ * Provides functionality to:
33
+ * - List user's chat rooms
34
+ * - Fetch available users for new chats
35
+ * - Create new chat rooms
36
+ *
37
+ * @param options - Hook configuration options
38
+ * @returns Chat rooms state and actions
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * const { rooms, fetchRooms, createRoom } = useChatRooms({ apiClient: api });
43
+ *
44
+ * useEffect(() => {
45
+ * fetchRooms();
46
+ * }, []);
47
+ *
48
+ * const handleCreateRoom = async (userIds: string[]) => {
49
+ * const room = await createRoom(userIds);
50
+ * if (room) {
51
+ * // Navigate to the new room
52
+ * }
53
+ * };
54
+ * ```
55
+ */
56
+ export declare function useChatRooms({ apiClient, }: UseChatRoomsOptions): UseChatRoomsReturn;
57
+ /**
58
+ * Factory function to create a pre-configured useChatRooms hook
59
+ *
60
+ * @param apiClient - API client instance
61
+ * @returns Pre-configured hook function
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * // In your app setup
66
+ * import { createUseChatRooms } from 'analytica-frontend-lib';
67
+ * import api from './services/api';
68
+ *
69
+ * export const useChatRooms = createUseChatRooms(api);
70
+ *
71
+ * // Then use directly in components
72
+ * const { rooms, fetchRooms } = useChatRooms();
73
+ * ```
74
+ */
75
+ export declare function createUseChatRooms(apiClient: ChatApiClient): () => UseChatRoomsReturn;
76
+ //# sourceMappingURL=useChatRooms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatRooms.d.ts","sourceRoot":"","sources":["../../src/hooks/useChatRooms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EAIT,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,kDAAkD;IAClD,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,6BAA6B;IAC7B,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACnE,wBAAwB;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,GACV,EAAE,mBAAmB,GAAG,kBAAkB,CAkG1C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,4BAE1D"}