analytica-frontend-lib 1.2.35 → 1.2.36

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/index.js CHANGED
@@ -172,8 +172,10 @@ __export(src_exports, {
172
172
  VideoPlayer: () => VideoPlayer_default,
173
173
  Whiteboard: () => Whiteboard_default,
174
174
  cn: () => cn,
175
+ createActivityFiltersDataHook: () => createActivityFiltersDataHook,
175
176
  createNotificationStore: () => createNotificationStore,
176
177
  createNotificationsHook: () => createNotificationsHook,
178
+ createUseActivityFiltersData: () => createUseActivityFiltersData,
177
179
  createUseNotificationStore: () => createUseNotificationStore,
178
180
  createUseNotifications: () => createUseNotifications,
179
181
  createZustandAuthAdapter: () => createZustandAuthAdapter,
@@ -217,6 +219,7 @@ __export(src_exports, {
217
219
  useBreadcrumbBuilder: () => useBreadcrumbBuilder,
218
220
  useInstitutionId: () => useInstitutionId,
219
221
  useMobile: () => useMobile,
222
+ useQuestionFiltersStore: () => useQuestionFiltersStore,
220
223
  useQuizStore: () => useQuizStore,
221
224
  useRouteAuth: () => useRouteAuth,
222
225
  useTableFilter: () => useTableFilter,
@@ -11321,6 +11324,503 @@ var questionTypeLabels = {
11321
11324
  ["PREENCHER" /* PREENCHER */]: "Preencher Lacunas"
11322
11325
  };
11323
11326
 
11327
+ // src/hooks/useActivityFiltersData.ts
11328
+ var import_react35 = require("react");
11329
+ var mapQuestionTypeToEnum = (type) => {
11330
+ const upperType = type.toUpperCase();
11331
+ const typeMap = {
11332
+ ALTERNATIVA: "ALTERNATIVA" /* ALTERNATIVA */,
11333
+ DISSERTATIVA: "DISSERTATIVA" /* DISSERTATIVA */,
11334
+ MULTIPLA_ESCOLHA: "MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */,
11335
+ VERDADEIRO_FALSO: "VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */,
11336
+ IMAGEM: "IMAGEM" /* IMAGEM */,
11337
+ LIGAR_PONTOS: "LIGAR_PONTOS" /* LIGAR_PONTOS */,
11338
+ PREENCHER: "PREENCHER" /* PREENCHER */
11339
+ };
11340
+ return typeMap[upperType] || null;
11341
+ };
11342
+ var areCategoriesSame = (prev, current) => {
11343
+ if (prev.length !== current.length) return false;
11344
+ return current.every((category) => {
11345
+ const prevCategory = prev.find((c) => c.key === category.key);
11346
+ if (!prevCategory) return false;
11347
+ const prevIds = (prevCategory.itens || []).map(
11348
+ (item) => item.id
11349
+ );
11350
+ const currentIds = (category.itens || []).map(
11351
+ (item) => item.id
11352
+ );
11353
+ if (prevIds.length !== currentIds.length) return false;
11354
+ return currentIds.every((id) => prevIds.includes(id));
11355
+ });
11356
+ };
11357
+ var mergeCategoriesWithSelection = (prev, current) => {
11358
+ return current.map((category) => {
11359
+ const prevCategory = prev.find((c) => c.key === category.key);
11360
+ if (!prevCategory) {
11361
+ return category;
11362
+ }
11363
+ const validSelectedIds = (prevCategory.selectedIds || []).filter(
11364
+ (id) => category.itens?.some((item) => item.id === id)
11365
+ );
11366
+ return {
11367
+ ...category,
11368
+ selectedIds: validSelectedIds
11369
+ };
11370
+ });
11371
+ };
11372
+ var mapSelectedNames = (ids, items) => {
11373
+ return ids.map((id) => {
11374
+ const item = items.find((t) => t.id === id);
11375
+ return item ? item.name : null;
11376
+ }).filter((name) => name !== null);
11377
+ };
11378
+ var useActivityFiltersDataImpl = (apiClient, options) => {
11379
+ const { selectedSubjects, institutionId } = options;
11380
+ const [banksState, setBanksState] = (0, import_react35.useState)({
11381
+ banks: [],
11382
+ bankYears: [],
11383
+ loading: false,
11384
+ error: null
11385
+ });
11386
+ const loadBanks = (0, import_react35.useCallback)(async () => {
11387
+ setBanksState((prev) => ({ ...prev, loading: true, error: null }));
11388
+ try {
11389
+ const response = await apiClient.get(
11390
+ "/questions/exam-institutions"
11391
+ );
11392
+ const banksMap = /* @__PURE__ */ new Map();
11393
+ const bankYearsArray = [];
11394
+ for (const item of response.data.data) {
11395
+ if (!item.questionBankName) continue;
11396
+ const existingBank = banksMap.get(item.questionBankName);
11397
+ if (existingBank) {
11398
+ if (!existingBank.years.includes(item.year)) {
11399
+ existingBank.years.push(item.year);
11400
+ }
11401
+ existingBank.questionsCount += item.questionsCount;
11402
+ } else {
11403
+ banksMap.set(item.questionBankName, {
11404
+ id: item.questionBankName,
11405
+ name: item.questionBankName,
11406
+ examInstitution: item.questionBankName,
11407
+ years: [item.year],
11408
+ questionsCount: item.questionsCount
11409
+ });
11410
+ }
11411
+ bankYearsArray.push({
11412
+ id: `${item.questionBankYearId}-${item.questionBankName}`,
11413
+ name: item.year,
11414
+ bankId: item.questionBankName
11415
+ });
11416
+ }
11417
+ const banks = Array.from(banksMap.values()).map((bank) => ({
11418
+ id: bank.id,
11419
+ name: bank.name,
11420
+ examInstitution: bank.examInstitution
11421
+ }));
11422
+ setBanksState({
11423
+ banks,
11424
+ bankYears: bankYearsArray,
11425
+ loading: false,
11426
+ error: null
11427
+ });
11428
+ } catch (error) {
11429
+ console.error("Erro ao carregar bancas de vestibular:", error);
11430
+ setBanksState((prev) => ({
11431
+ ...prev,
11432
+ loading: false,
11433
+ error: "Erro ao carregar bancas de vestibular"
11434
+ }));
11435
+ }
11436
+ }, [apiClient]);
11437
+ const [areasState, setAreasState] = (0, import_react35.useState)({
11438
+ knowledgeAreas: [],
11439
+ loading: false,
11440
+ error: null
11441
+ });
11442
+ const loadKnowledgeAreas = (0, import_react35.useCallback)(async () => {
11443
+ setAreasState((prev) => ({ ...prev, loading: true, error: null }));
11444
+ try {
11445
+ const response = await apiClient.get(
11446
+ "/knowledge/subjects"
11447
+ );
11448
+ setAreasState({
11449
+ knowledgeAreas: response.data.data,
11450
+ loading: false,
11451
+ error: null
11452
+ });
11453
+ } catch (error) {
11454
+ console.error("Erro ao carregar \xE1reas de conhecimento:", error);
11455
+ setAreasState((prev) => ({
11456
+ ...prev,
11457
+ loading: false,
11458
+ error: "Erro ao carregar \xE1reas de conhecimento"
11459
+ }));
11460
+ }
11461
+ }, [apiClient]);
11462
+ const [questionTypesState, setQuestionTypesState] = (0, import_react35.useState)({
11463
+ questionTypes: [],
11464
+ loading: false,
11465
+ error: null
11466
+ });
11467
+ const loadQuestionTypes = (0, import_react35.useCallback)(async () => {
11468
+ if (!institutionId) {
11469
+ setQuestionTypesState((prev) => ({
11470
+ ...prev,
11471
+ questionTypes: [],
11472
+ loading: false,
11473
+ error: null
11474
+ }));
11475
+ return;
11476
+ }
11477
+ setQuestionTypesState((prev) => ({
11478
+ ...prev,
11479
+ loading: true,
11480
+ error: null
11481
+ }));
11482
+ try {
11483
+ const response = await apiClient.get(
11484
+ `/institutions/${institutionId}/question-types`
11485
+ );
11486
+ const mappedTypes = response.data.data.questionTypes.map(mapQuestionTypeToEnum).filter((type) => type !== null);
11487
+ setQuestionTypesState({
11488
+ questionTypes: mappedTypes,
11489
+ loading: false,
11490
+ error: null
11491
+ });
11492
+ } catch (error) {
11493
+ console.error("Erro ao carregar tipos de quest\xF5es:", error);
11494
+ setQuestionTypesState((prev) => ({
11495
+ ...prev,
11496
+ loading: false,
11497
+ error: "Erro ao carregar tipos de quest\xF5es"
11498
+ }));
11499
+ }
11500
+ }, [apiClient, institutionId]);
11501
+ const [knowledgeStructure, setKnowledgeStructure] = (0, import_react35.useState)({
11502
+ topics: [],
11503
+ subtopics: [],
11504
+ contents: [],
11505
+ loading: false,
11506
+ error: null
11507
+ });
11508
+ const [knowledgeCategories, setKnowledgeCategories] = (0, import_react35.useState)([]);
11509
+ const previousSubjectsRef = (0, import_react35.useRef)(null);
11510
+ const loadTopics = (0, import_react35.useCallback)(
11511
+ async (subjectIds) => {
11512
+ if (subjectIds.length === 0) {
11513
+ setKnowledgeStructure({
11514
+ topics: [],
11515
+ subtopics: [],
11516
+ contents: [],
11517
+ loading: false,
11518
+ error: null
11519
+ });
11520
+ setKnowledgeCategories([]);
11521
+ return;
11522
+ }
11523
+ setKnowledgeStructure((prev) => ({
11524
+ ...prev,
11525
+ loading: true,
11526
+ error: null
11527
+ }));
11528
+ try {
11529
+ const response = await apiClient.post(
11530
+ "/knowledge/topics",
11531
+ { subjectIds }
11532
+ );
11533
+ const topics = response.data.data.map((topic) => ({
11534
+ id: topic.id,
11535
+ name: topic.name
11536
+ }));
11537
+ setKnowledgeStructure((prev) => ({
11538
+ ...prev,
11539
+ topics,
11540
+ subtopics: [],
11541
+ contents: [],
11542
+ loading: false,
11543
+ error: null
11544
+ }));
11545
+ } catch (error) {
11546
+ console.error("Erro ao carregar temas:", error);
11547
+ setKnowledgeStructure((prev) => ({
11548
+ ...prev,
11549
+ topics: [],
11550
+ subtopics: [],
11551
+ contents: [],
11552
+ loading: false,
11553
+ error: "Erro ao carregar temas"
11554
+ }));
11555
+ }
11556
+ },
11557
+ [apiClient]
11558
+ );
11559
+ const loadSubtopics = (0, import_react35.useCallback)(
11560
+ async (topicIds, options2 = {}) => {
11561
+ const { forceApi = false } = options2;
11562
+ if (topicIds.length === 0 && !forceApi) {
11563
+ setKnowledgeStructure((prev) => ({
11564
+ ...prev,
11565
+ subtopics: [],
11566
+ contents: [],
11567
+ loading: false,
11568
+ error: null
11569
+ }));
11570
+ return;
11571
+ }
11572
+ setKnowledgeStructure((prev) => ({
11573
+ ...prev,
11574
+ loading: topicIds.length > 0,
11575
+ error: null
11576
+ }));
11577
+ try {
11578
+ const response = await apiClient.post(
11579
+ "/knowledge/subtopics",
11580
+ { topicIds }
11581
+ );
11582
+ const subtopics = response.data.data.map(
11583
+ (subtopic) => ({
11584
+ id: subtopic.id,
11585
+ name: subtopic.name,
11586
+ topicId: subtopic.topicId || topicIds[0]
11587
+ })
11588
+ );
11589
+ setKnowledgeStructure((prev) => ({
11590
+ ...prev,
11591
+ subtopics,
11592
+ contents: [],
11593
+ loading: false,
11594
+ error: null
11595
+ }));
11596
+ } catch (error) {
11597
+ console.error("Erro ao carregar subtemas:", error);
11598
+ setKnowledgeStructure((prev) => ({
11599
+ ...prev,
11600
+ subtopics: [],
11601
+ contents: [],
11602
+ loading: false,
11603
+ error: "Erro ao carregar subtemas"
11604
+ }));
11605
+ }
11606
+ },
11607
+ [apiClient]
11608
+ );
11609
+ const loadContents = (0, import_react35.useCallback)(
11610
+ async (subtopicIds) => {
11611
+ if (subtopicIds.length === 0) {
11612
+ setKnowledgeStructure((prev) => ({
11613
+ ...prev,
11614
+ contents: [],
11615
+ loading: false,
11616
+ error: null
11617
+ }));
11618
+ return;
11619
+ }
11620
+ setKnowledgeStructure((prev) => ({
11621
+ ...prev,
11622
+ loading: true,
11623
+ error: null
11624
+ }));
11625
+ try {
11626
+ const response = await apiClient.post(
11627
+ "/knowledge/contents",
11628
+ { subtopicIds }
11629
+ );
11630
+ const contents = response.data.data.map(
11631
+ (content) => ({
11632
+ id: content.id,
11633
+ name: content.name,
11634
+ subtopicId: content.subtopicId || subtopicIds[0]
11635
+ })
11636
+ );
11637
+ setKnowledgeStructure((prev) => ({
11638
+ ...prev,
11639
+ contents,
11640
+ loading: false,
11641
+ error: null
11642
+ }));
11643
+ } catch (error) {
11644
+ console.error("Erro ao carregar conte\xFAdos:", error);
11645
+ setKnowledgeStructure((prev) => ({
11646
+ ...prev,
11647
+ contents: [],
11648
+ loading: false,
11649
+ error: "Erro ao carregar conte\xFAdos"
11650
+ }));
11651
+ }
11652
+ },
11653
+ [apiClient]
11654
+ );
11655
+ (0, import_react35.useEffect)(() => {
11656
+ const previousSubjects = previousSubjectsRef.current;
11657
+ const subjectsChanged = !previousSubjects || previousSubjects.length !== selectedSubjects.length || selectedSubjects.some((id, index) => id !== previousSubjects[index]);
11658
+ if (!subjectsChanged) return;
11659
+ previousSubjectsRef.current = selectedSubjects;
11660
+ if (selectedSubjects.length > 0) {
11661
+ loadTopics(selectedSubjects);
11662
+ return;
11663
+ }
11664
+ setKnowledgeStructure({
11665
+ topics: [],
11666
+ subtopics: [],
11667
+ contents: [],
11668
+ loading: false,
11669
+ error: null
11670
+ });
11671
+ setKnowledgeCategories([]);
11672
+ }, [selectedSubjects, loadTopics]);
11673
+ const handleCategoriesChange = (0, import_react35.useCallback)(
11674
+ (updatedCategories) => {
11675
+ const isFirstChange = knowledgeCategories.length === 0;
11676
+ const currentTemaCategory = knowledgeCategories.find(
11677
+ (c) => c.key === "tema"
11678
+ );
11679
+ const currentSubtemaCategory = knowledgeCategories.find(
11680
+ (c) => c.key === "subtema"
11681
+ );
11682
+ const currentSelectedTopicIds = currentTemaCategory?.selectedIds || [];
11683
+ const currentSelectedSubtopicIds = currentSubtemaCategory?.selectedIds || [];
11684
+ const temaCategory = updatedCategories.find((c) => c.key === "tema");
11685
+ const selectedTopicIds = temaCategory?.selectedIds || [];
11686
+ const subtemaCategory = updatedCategories.find(
11687
+ (c) => c.key === "subtema"
11688
+ );
11689
+ const selectedSubtopicIds = subtemaCategory?.selectedIds || [];
11690
+ setKnowledgeCategories(updatedCategories);
11691
+ const topicIdsChanged = isFirstChange || currentSelectedTopicIds.length !== selectedTopicIds.length || currentSelectedTopicIds.some(
11692
+ (id) => !selectedTopicIds.includes(id)
11693
+ ) || selectedTopicIds.some(
11694
+ (id) => !currentSelectedTopicIds.includes(id)
11695
+ );
11696
+ if (topicIdsChanged) {
11697
+ loadSubtopics(selectedTopicIds, {
11698
+ forceApi: selectedTopicIds.length === 0
11699
+ });
11700
+ }
11701
+ const subtopicIdsChanged = isFirstChange || currentSelectedSubtopicIds.length !== selectedSubtopicIds.length || currentSelectedSubtopicIds.some(
11702
+ (id) => !selectedSubtopicIds.includes(id)
11703
+ ) || selectedSubtopicIds.some(
11704
+ (id) => !currentSelectedSubtopicIds.includes(id)
11705
+ );
11706
+ if (subtopicIdsChanged) {
11707
+ if (selectedSubtopicIds.length > 0) {
11708
+ loadContents(selectedSubtopicIds);
11709
+ } else {
11710
+ loadContents([]);
11711
+ }
11712
+ }
11713
+ },
11714
+ [knowledgeCategories, loadSubtopics, loadContents]
11715
+ );
11716
+ (0, import_react35.useEffect)(() => {
11717
+ if (knowledgeStructure.topics.length === 0) {
11718
+ setKnowledgeCategories((prev) => {
11719
+ if (prev.length === 0) {
11720
+ return prev;
11721
+ }
11722
+ return [];
11723
+ });
11724
+ return;
11725
+ }
11726
+ const categories = [
11727
+ {
11728
+ key: "tema",
11729
+ label: "Tema",
11730
+ dependsOn: [],
11731
+ itens: knowledgeStructure.topics,
11732
+ selectedIds: []
11733
+ },
11734
+ {
11735
+ key: "subtema",
11736
+ label: "Subtema",
11737
+ dependsOn: ["tema"],
11738
+ itens: knowledgeStructure.subtopics,
11739
+ filteredBy: [{ key: "tema", internalField: "topicId" }],
11740
+ selectedIds: []
11741
+ },
11742
+ {
11743
+ key: "assunto",
11744
+ label: "Assunto",
11745
+ dependsOn: ["subtema"],
11746
+ itens: knowledgeStructure.contents,
11747
+ filteredBy: [{ key: "subtema", internalField: "subtopicId" }],
11748
+ selectedIds: []
11749
+ }
11750
+ ];
11751
+ setKnowledgeCategories(
11752
+ (prev) => areCategoriesSame(prev, categories) ? prev : mergeCategoriesWithSelection(prev, categories)
11753
+ );
11754
+ }, [
11755
+ selectedSubjects,
11756
+ knowledgeStructure.topics,
11757
+ knowledgeStructure.subtopics,
11758
+ knowledgeStructure.contents
11759
+ ]);
11760
+ const selectedKnowledgeSummary = (0, import_react35.useMemo)(() => {
11761
+ const temaCategory = knowledgeCategories.find((c) => c.key === "tema");
11762
+ const subtemaCategory = knowledgeCategories.find(
11763
+ (c) => c.key === "subtema"
11764
+ );
11765
+ const assuntoCategory = knowledgeCategories.find(
11766
+ (c) => c.key === "assunto"
11767
+ );
11768
+ const selectedTopics = mapSelectedNames(
11769
+ temaCategory?.selectedIds || [],
11770
+ knowledgeStructure.topics
11771
+ );
11772
+ const selectedSubtopics = mapSelectedNames(
11773
+ subtemaCategory?.selectedIds || [],
11774
+ knowledgeStructure.subtopics
11775
+ );
11776
+ const selectedContents = mapSelectedNames(
11777
+ assuntoCategory?.selectedIds || [],
11778
+ knowledgeStructure.contents
11779
+ );
11780
+ return {
11781
+ topics: selectedTopics,
11782
+ subtopics: selectedSubtopics,
11783
+ contents: selectedContents
11784
+ };
11785
+ }, [knowledgeCategories, knowledgeStructure]);
11786
+ const enableSummary = (0, import_react35.useMemo)(() => {
11787
+ return knowledgeStructure.topics.length === 1 || knowledgeStructure.subtopics.length === 1 || knowledgeStructure.contents.length === 1;
11788
+ }, [knowledgeStructure]);
11789
+ return {
11790
+ // Vestibular Banks
11791
+ banks: banksState.banks,
11792
+ bankYears: banksState.bankYears,
11793
+ loadingBanks: banksState.loading,
11794
+ banksError: banksState.error,
11795
+ loadBanks,
11796
+ // Knowledge Areas
11797
+ knowledgeAreas: areasState.knowledgeAreas,
11798
+ loadingSubjects: areasState.loading,
11799
+ subjectsError: areasState.error,
11800
+ loadKnowledgeAreas,
11801
+ // Knowledge Structure
11802
+ knowledgeStructure,
11803
+ knowledgeCategories,
11804
+ handleCategoriesChange,
11805
+ selectedKnowledgeSummary,
11806
+ enableSummary,
11807
+ loadTopics,
11808
+ loadSubtopics,
11809
+ loadContents,
11810
+ // Question Types
11811
+ questionTypes: questionTypesState.questionTypes,
11812
+ loadingQuestionTypes: questionTypesState.loading,
11813
+ questionTypesError: questionTypesState.error,
11814
+ loadQuestionTypes
11815
+ };
11816
+ };
11817
+ var createUseActivityFiltersData = (apiClient) => {
11818
+ return (options) => useActivityFiltersDataImpl(apiClient, options);
11819
+ };
11820
+ var createActivityFiltersDataHook = (apiClient) => {
11821
+ return createUseActivityFiltersData(apiClient);
11822
+ };
11823
+
11324
11824
  // src/components/Filter/FilterModal.tsx
11325
11825
  var import_jsx_runtime57 = require("react/jsx-runtime");
11326
11826
  var FilterModal = ({
@@ -11464,10 +11964,10 @@ var FilterModal = ({
11464
11964
  };
11465
11965
 
11466
11966
  // src/components/Filter/useTableFilter.ts
11467
- var import_react35 = require("react");
11967
+ var import_react36 = require("react");
11468
11968
  var useTableFilter = (initialConfigs, options = {}) => {
11469
11969
  const { syncWithUrl = false } = options;
11470
- const getInitialState = (0, import_react35.useCallback)(() => {
11970
+ const getInitialState = (0, import_react36.useCallback)(() => {
11471
11971
  if (!syncWithUrl || globalThis.window === void 0) {
11472
11972
  return initialConfigs;
11473
11973
  }
@@ -11485,8 +11985,8 @@ var useTableFilter = (initialConfigs, options = {}) => {
11485
11985
  }));
11486
11986
  return configsWithUrlState;
11487
11987
  }, [initialConfigs, syncWithUrl]);
11488
- const [filterConfigs, setFilterConfigs] = (0, import_react35.useState)(getInitialState);
11489
- const activeFilters = (0, import_react35.useMemo)(() => {
11988
+ const [filterConfigs, setFilterConfigs] = (0, import_react36.useState)(getInitialState);
11989
+ const activeFilters = (0, import_react36.useMemo)(() => {
11490
11990
  const filters = {};
11491
11991
  for (const config of filterConfigs) {
11492
11992
  for (const category of config.categories) {
@@ -11498,10 +11998,10 @@ var useTableFilter = (initialConfigs, options = {}) => {
11498
11998
  return filters;
11499
11999
  }, [filterConfigs]);
11500
12000
  const hasActiveFilters = Object.keys(activeFilters).length > 0;
11501
- const updateFilters = (0, import_react35.useCallback)((configs) => {
12001
+ const updateFilters = (0, import_react36.useCallback)((configs) => {
11502
12002
  setFilterConfigs(configs);
11503
12003
  }, []);
11504
- const applyFilters = (0, import_react35.useCallback)(() => {
12004
+ const applyFilters = (0, import_react36.useCallback)(() => {
11505
12005
  if (!syncWithUrl || globalThis.window === void 0) {
11506
12006
  return;
11507
12007
  }
@@ -11519,7 +12019,7 @@ var useTableFilter = (initialConfigs, options = {}) => {
11519
12019
  }
11520
12020
  globalThis.window.history.replaceState({}, "", url.toString());
11521
12021
  }, [filterConfigs, syncWithUrl]);
11522
- const clearFilters = (0, import_react35.useCallback)(() => {
12022
+ const clearFilters = (0, import_react36.useCallback)(() => {
11523
12023
  const clearedConfigs = filterConfigs.map((config) => ({
11524
12024
  ...config,
11525
12025
  categories: config.categories.map((category) => ({
@@ -11539,7 +12039,7 @@ var useTableFilter = (initialConfigs, options = {}) => {
11539
12039
  globalThis.window.history.replaceState({}, "", url.toString());
11540
12040
  }
11541
12041
  }, [filterConfigs, syncWithUrl]);
11542
- (0, import_react35.useEffect)(() => {
12042
+ (0, import_react36.useEffect)(() => {
11543
12043
  if (!syncWithUrl || globalThis.window === void 0) {
11544
12044
  return;
11545
12045
  }
@@ -11560,9 +12060,9 @@ var useTableFilter = (initialConfigs, options = {}) => {
11560
12060
  };
11561
12061
 
11562
12062
  // src/components/ActivityFilters/ActivityFilters.tsx
11563
- var import_react36 = require("react");
12063
+ var import_react37 = require("react");
11564
12064
  var import_jsx_runtime58 = require("react/jsx-runtime");
11565
- var questionTypes = [
12065
+ var questionTypesFallback = [
11566
12066
  "ALTERNATIVA" /* ALTERNATIVA */,
11567
12067
  "VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */,
11568
12068
  "DISSERTATIVA" /* DISSERTATIVA */,
@@ -11576,7 +12076,7 @@ var QuestionTypeFilter = ({
11576
12076
  onToggleType,
11577
12077
  allowedQuestionTypes
11578
12078
  }) => {
11579
- const availableQuestionTypes = allowedQuestionTypes || questionTypes;
12079
+ const availableQuestionTypes = allowedQuestionTypes || questionTypesFallback;
11580
12080
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11581
12081
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Text_default, { size: "sm", weight: "bold", className: "mb-3 block", children: "Tipo de quest\xE3o" }),
11582
12082
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "grid grid-cols-2 gap-2", children: availableQuestionTypes.map((questionType) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
@@ -11701,45 +12201,42 @@ var FilterActions = ({
11701
12201
  ] });
11702
12202
  };
11703
12203
  var ActivityFilters = ({
12204
+ apiClient,
11704
12205
  onFiltersChange,
11705
12206
  variant = "default",
11706
- // Data
11707
- banks = [],
11708
- bankYears = [],
11709
- knowledgeAreas = [],
11710
- knowledgeStructure = {
11711
- topics: [],
11712
- subtopics: [],
11713
- contents: [],
11714
- loading: false,
11715
- error: null
11716
- },
11717
- knowledgeCategories = [],
12207
+ institutionId = null,
11718
12208
  // Question types
11719
12209
  allowedQuestionTypes,
11720
- // Loading states
11721
- loadingBanks = false,
11722
- loadingKnowledge: _loadingKnowledge = false,
11723
- loadingSubjects = false,
11724
- // Errors
11725
- banksError = null,
11726
- subjectsError = null,
11727
- // Load functions
11728
- loadBanks,
11729
- loadKnowledge,
11730
- loadTopics,
11731
- loadSubtopics: _loadSubtopics,
11732
- loadContents: _loadContents,
11733
- // Handlers
11734
- handleCategoriesChange,
11735
12210
  // Action buttons
11736
12211
  onClearFilters,
11737
12212
  onApplyFilters
11738
12213
  }) => {
11739
- const [selectedQuestionTypes, setSelectedQuestionTypes] = (0, import_react36.useState)([]);
11740
- const [selectedSubject, setSelectedSubject] = (0, import_react36.useState)(null);
11741
- const prevAllowedQuestionTypesRef = (0, import_react36.useRef)(null);
11742
- (0, import_react36.useEffect)(() => {
12214
+ const useActivityFiltersData = createUseActivityFiltersData(apiClient);
12215
+ const [selectedQuestionTypes, setSelectedQuestionTypes] = (0, import_react37.useState)([]);
12216
+ const [selectedSubject, setSelectedSubject] = (0, import_react37.useState)(null);
12217
+ const {
12218
+ banks,
12219
+ bankYears,
12220
+ loadingBanks,
12221
+ banksError,
12222
+ knowledgeAreas,
12223
+ loadingSubjects,
12224
+ subjectsError,
12225
+ knowledgeStructure,
12226
+ knowledgeCategories,
12227
+ handleCategoriesChange,
12228
+ loadBanks,
12229
+ loadKnowledgeAreas,
12230
+ loadQuestionTypes,
12231
+ questionTypes,
12232
+ loadingQuestionTypes,
12233
+ questionTypesError
12234
+ } = useActivityFiltersData({
12235
+ selectedSubjects: selectedSubject ? [selectedSubject] : [],
12236
+ institutionId
12237
+ });
12238
+ const prevAllowedQuestionTypesRef = (0, import_react37.useRef)(null);
12239
+ (0, import_react37.useEffect)(() => {
11743
12240
  if (!allowedQuestionTypes || allowedQuestionTypes.length === 0) {
11744
12241
  prevAllowedQuestionTypesRef.current = null;
11745
12242
  return;
@@ -11772,8 +12269,8 @@ var ActivityFilters = ({
11772
12269
  return prev;
11773
12270
  });
11774
12271
  }, [allowedQuestionTypes]);
11775
- const [bankCategories, setBankCategories] = (0, import_react36.useState)([]);
11776
- const selectedSubjects = (0, import_react36.useMemo)(
12272
+ const [bankCategories, setBankCategories] = (0, import_react37.useState)([]);
12273
+ const selectedSubjects = (0, import_react37.useMemo)(
11777
12274
  () => selectedSubject ? [selectedSubject] : [],
11778
12275
  [selectedSubject]
11779
12276
  );
@@ -11786,7 +12283,7 @@ var ActivityFilters = ({
11786
12283
  const handleBankCategoriesChange = (updatedCategories) => {
11787
12284
  setBankCategories(updatedCategories);
11788
12285
  };
11789
- (0, import_react36.useEffect)(() => {
12286
+ (0, import_react37.useEffect)(() => {
11790
12287
  setBankCategories((prevCategories) => {
11791
12288
  const bankCategory = {
11792
12289
  key: "banca",
@@ -11812,37 +12309,42 @@ var ActivityFilters = ({
11812
12309
  return [bankCategory, yearCategory];
11813
12310
  });
11814
12311
  }, [banks, bankYears]);
11815
- (0, import_react36.useEffect)(() => {
12312
+ (0, import_react37.useEffect)(() => {
11816
12313
  if (loadBanks) {
11817
12314
  loadBanks();
11818
12315
  }
11819
- if (loadKnowledge) {
11820
- loadKnowledge();
12316
+ if (loadKnowledgeAreas) {
12317
+ loadKnowledgeAreas();
11821
12318
  }
11822
- }, [loadBanks, loadKnowledge]);
11823
- (0, import_react36.useEffect)(() => {
11824
- if (selectedSubject && loadTopics) {
11825
- loadTopics([selectedSubject]);
12319
+ if (loadQuestionTypes) {
12320
+ loadQuestionTypes();
12321
+ }
12322
+ }, [loadBanks, loadKnowledgeAreas, loadQuestionTypes, institutionId]);
12323
+ const availableQuestionTypes = (0, import_react37.useMemo)(() => {
12324
+ const source = questionTypes && questionTypes.length > 0 ? questionTypes : questionTypesFallback;
12325
+ if (!allowedQuestionTypes || allowedQuestionTypes.length === 0) {
12326
+ return source;
11826
12327
  }
11827
- }, [selectedSubject, loadTopics]);
11828
- const getSelectedKnowledgeIds = (0, import_react36.useCallback)(() => {
12328
+ return source.filter((type) => allowedQuestionTypes.includes(type));
12329
+ }, [questionTypes, allowedQuestionTypes]);
12330
+ const getSelectedKnowledgeIds = (0, import_react37.useCallback)(() => {
11829
12331
  return getSelectedIdsFromCategories(knowledgeCategories, {
11830
12332
  topicIds: "tema",
11831
12333
  subtopicIds: "subtema",
11832
12334
  contentIds: "assunto"
11833
12335
  });
11834
12336
  }, [knowledgeCategories]);
11835
- const getSelectedBankIds = (0, import_react36.useCallback)(() => {
12337
+ const getSelectedBankIds = (0, import_react37.useCallback)(() => {
11836
12338
  return getSelectedIdsFromCategories(bankCategories, {
11837
12339
  bankIds: "banca",
11838
12340
  yearIds: "ano"
11839
12341
  });
11840
12342
  }, [bankCategories]);
11841
- const onFiltersChangeRef = (0, import_react36.useRef)(onFiltersChange);
11842
- (0, import_react36.useEffect)(() => {
12343
+ const onFiltersChangeRef = (0, import_react37.useRef)(onFiltersChange);
12344
+ (0, import_react37.useEffect)(() => {
11843
12345
  onFiltersChangeRef.current = onFiltersChange;
11844
12346
  }, [onFiltersChange]);
11845
- (0, import_react36.useEffect)(() => {
12347
+ (0, import_react37.useEffect)(() => {
11846
12348
  const knowledgeIds = getSelectedKnowledgeIds();
11847
12349
  const bankIds = getSelectedBankIds();
11848
12350
  const filters = {
@@ -11873,7 +12375,25 @@ var ActivityFilters = ({
11873
12375
  {
11874
12376
  selectedTypes: selectedQuestionTypes,
11875
12377
  onToggleType: toggleQuestionType,
11876
- allowedQuestionTypes
12378
+ allowedQuestionTypes: availableQuestionTypes
12379
+ }
12380
+ ),
12381
+ loadingQuestionTypes && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
12382
+ Text_default,
12383
+ {
12384
+ size: "sm",
12385
+ className: "text-text-600",
12386
+ "data-testid": "question-types-loading",
12387
+ children: "Carregando tipos de quest\xE3o..."
12388
+ }
12389
+ ),
12390
+ questionTypesError && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
12391
+ Text_default,
12392
+ {
12393
+ size: "sm",
12394
+ className: "text-error-500",
12395
+ "data-testid": "question-types-error",
12396
+ children: questionTypesError
11877
12397
  }
11878
12398
  ),
11879
12399
  /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
@@ -11926,7 +12446,7 @@ var ActivityFiltersPopover = ({
11926
12446
  triggerLabel = "Filtro de quest\xF5es",
11927
12447
  ...activityFiltersProps
11928
12448
  }) => {
11929
- const [open, setOpen] = (0, import_react36.useState)(false);
12449
+ const [open, setOpen] = (0, import_react37.useState)(false);
11930
12450
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(DropdownMenu_default, { open, onOpenChange: setOpen, children: [
11931
12451
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(DropdownMenuTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button_default, { variant: "outline", children: triggerLabel }) }),
11932
12452
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
@@ -11948,7 +12468,7 @@ var ActivityFiltersPopover = ({
11948
12468
  };
11949
12469
 
11950
12470
  // src/components/TableProvider/TableProvider.tsx
11951
- var import_react37 = require("react");
12471
+ var import_react38 = require("react");
11952
12472
  var import_phosphor_react26 = require("phosphor-react");
11953
12473
  var import_jsx_runtime59 = require("react/jsx-runtime");
11954
12474
  function TableProvider({
@@ -11972,7 +12492,7 @@ function TableProvider({
11972
12492
  onRowClick,
11973
12493
  children
11974
12494
  }) {
11975
- const [searchQuery, setSearchQuery] = (0, import_react37.useState)("");
12495
+ const [searchQuery, setSearchQuery] = (0, import_react38.useState)("");
11976
12496
  const sortResultRaw = useTableSort(data, { syncWithUrl: true });
11977
12497
  const sortResult = enableTableSort ? sortResultRaw : {
11978
12498
  sortedData: data,
@@ -11983,7 +12503,7 @@ function TableProvider({
11983
12503
  };
11984
12504
  const { sortedData, sortColumn, sortDirection, handleSort } = sortResult;
11985
12505
  const filterResultRaw = useTableFilter(initialFilters, { syncWithUrl: true });
11986
- const disabledFilterResult = (0, import_react37.useMemo)(
12506
+ const disabledFilterResult = (0, import_react38.useMemo)(
11987
12507
  () => ({
11988
12508
  filterConfigs: [],
11989
12509
  activeFilters: {},
@@ -12013,10 +12533,10 @@ function TableProvider({
12013
12533
  totalItems,
12014
12534
  totalPages
12015
12535
  } = paginationConfig;
12016
- const [currentPage, setCurrentPage] = (0, import_react37.useState)(1);
12017
- const [itemsPerPage, setItemsPerPage] = (0, import_react37.useState)(defaultItemsPerPage);
12018
- const [isFilterModalOpen, setIsFilterModalOpen] = (0, import_react37.useState)(false);
12019
- const combinedParams = (0, import_react37.useMemo)(() => {
12536
+ const [currentPage, setCurrentPage] = (0, import_react38.useState)(1);
12537
+ const [itemsPerPage, setItemsPerPage] = (0, import_react38.useState)(defaultItemsPerPage);
12538
+ const [isFilterModalOpen, setIsFilterModalOpen] = (0, import_react38.useState)(false);
12539
+ const combinedParams = (0, import_react38.useMemo)(() => {
12020
12540
  const params = {
12021
12541
  page: currentPage,
12022
12542
  limit: itemsPerPage
@@ -12043,26 +12563,26 @@ function TableProvider({
12043
12563
  enableFilters,
12044
12564
  enableTableSort
12045
12565
  ]);
12046
- (0, import_react37.useEffect)(() => {
12566
+ (0, import_react38.useEffect)(() => {
12047
12567
  onParamsChange?.(combinedParams);
12048
12568
  }, [combinedParams]);
12049
- const handleSearchChange = (0, import_react37.useCallback)((value) => {
12569
+ const handleSearchChange = (0, import_react38.useCallback)((value) => {
12050
12570
  setSearchQuery(value);
12051
12571
  setCurrentPage(1);
12052
12572
  }, []);
12053
- const handleFilterApply = (0, import_react37.useCallback)(() => {
12573
+ const handleFilterApply = (0, import_react38.useCallback)(() => {
12054
12574
  applyFilters();
12055
12575
  setIsFilterModalOpen(false);
12056
12576
  setCurrentPage(1);
12057
12577
  }, [applyFilters]);
12058
- const handlePageChange = (0, import_react37.useCallback)((page) => {
12578
+ const handlePageChange = (0, import_react38.useCallback)((page) => {
12059
12579
  setCurrentPage(page);
12060
12580
  }, []);
12061
- const handleItemsPerPageChange = (0, import_react37.useCallback)((items) => {
12581
+ const handleItemsPerPageChange = (0, import_react38.useCallback)((items) => {
12062
12582
  setItemsPerPage(items);
12063
12583
  setCurrentPage(1);
12064
12584
  }, []);
12065
- const handleRowClickInternal = (0, import_react37.useCallback)(
12585
+ const handleRowClickInternal = (0, import_react38.useCallback)(
12066
12586
  (row, index) => {
12067
12587
  if (enableRowClick && onRowClick) {
12068
12588
  onRowClick(row, index);
@@ -12070,7 +12590,7 @@ function TableProvider({
12070
12590
  },
12071
12591
  [enableRowClick, onRowClick]
12072
12592
  );
12073
- const useInternalPagination = (0, import_react37.useMemo)(
12593
+ const useInternalPagination = (0, import_react38.useMemo)(
12074
12594
  () => enablePagination && !onParamsChange && totalItems === void 0 && totalPages === void 0,
12075
12595
  [enablePagination, onParamsChange, totalItems, totalPages]
12076
12596
  );
@@ -12078,7 +12598,7 @@ function TableProvider({
12078
12598
  (totalItems ?? (useInternalPagination ? sortedData.length : data.length)) / itemsPerPage
12079
12599
  );
12080
12600
  const calculatedTotalItems = totalItems ?? (useInternalPagination ? sortedData.length : data.length);
12081
- const displayData = (0, import_react37.useMemo)(() => {
12601
+ const displayData = (0, import_react38.useMemo)(() => {
12082
12602
  if (!useInternalPagination) {
12083
12603
  return sortedData;
12084
12604
  }
@@ -12245,7 +12765,7 @@ var TableProvider_default = TableProvider;
12245
12765
 
12246
12766
  // src/components/Select/Select.tsx
12247
12767
  var import_zustand10 = require("zustand");
12248
- var import_react38 = require("react");
12768
+ var import_react39 = require("react");
12249
12769
  var import_phosphor_react27 = require("phosphor-react");
12250
12770
  var import_jsx_runtime60 = require("react/jsx-runtime");
12251
12771
  var VARIANT_CLASSES4 = {
@@ -12305,13 +12825,13 @@ function getLabelAsNode(children) {
12305
12825
  if (typeof children === "string" || typeof children === "number") {
12306
12826
  return children;
12307
12827
  }
12308
- const flattened = import_react38.Children.toArray(children);
12828
+ const flattened = import_react39.Children.toArray(children);
12309
12829
  if (flattened.length === 1) return flattened[0];
12310
12830
  return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_jsx_runtime60.Fragment, { children: flattened });
12311
12831
  }
12312
12832
  var injectStore5 = (children, store, size, selectId) => {
12313
- return import_react38.Children.map(children, (child) => {
12314
- if ((0, import_react38.isValidElement)(child)) {
12833
+ return import_react39.Children.map(children, (child) => {
12834
+ if ((0, import_react39.isValidElement)(child)) {
12315
12835
  const typedChild = child;
12316
12836
  const newProps = {
12317
12837
  store
@@ -12328,7 +12848,7 @@ var injectStore5 = (children, store, size, selectId) => {
12328
12848
  selectId
12329
12849
  );
12330
12850
  }
12331
- return (0, import_react38.cloneElement)(typedChild, newProps);
12851
+ return (0, import_react39.cloneElement)(typedChild, newProps);
12332
12852
  }
12333
12853
  return child;
12334
12854
  });
@@ -12345,18 +12865,18 @@ var Select = ({
12345
12865
  errorMessage,
12346
12866
  id
12347
12867
  }) => {
12348
- const storeRef = (0, import_react38.useRef)(null);
12868
+ const storeRef = (0, import_react39.useRef)(null);
12349
12869
  storeRef.current ??= createSelectStore(onValueChange);
12350
12870
  const store = storeRef.current;
12351
- const selectRef = (0, import_react38.useRef)(null);
12871
+ const selectRef = (0, import_react39.useRef)(null);
12352
12872
  const { open, setOpen, setValue, selectedLabel } = (0, import_zustand10.useStore)(store, (s) => s);
12353
- const generatedId = (0, import_react38.useId)();
12873
+ const generatedId = (0, import_react39.useId)();
12354
12874
  const selectId = id ?? `select-${generatedId}`;
12355
12875
  const findLabelForValue = (children2, targetValue) => {
12356
12876
  let found = null;
12357
12877
  const search = (nodes) => {
12358
- import_react38.Children.forEach(nodes, (child) => {
12359
- if (!(0, import_react38.isValidElement)(child)) return;
12878
+ import_react39.Children.forEach(nodes, (child) => {
12879
+ if (!(0, import_react39.isValidElement)(child)) return;
12360
12880
  const typedChild = child;
12361
12881
  if (typedChild.type === SelectItem && typedChild.props.value === targetValue) {
12362
12882
  if (typeof typedChild.props.children === "string")
@@ -12369,13 +12889,13 @@ var Select = ({
12369
12889
  search(children2);
12370
12890
  return found;
12371
12891
  };
12372
- (0, import_react38.useEffect)(() => {
12892
+ (0, import_react39.useEffect)(() => {
12373
12893
  if (!selectedLabel && defaultValue) {
12374
12894
  const label2 = findLabelForValue(children, defaultValue);
12375
12895
  if (label2) store.setState({ selectedLabel: label2 });
12376
12896
  }
12377
12897
  }, [children, defaultValue, selectedLabel]);
12378
- (0, import_react38.useEffect)(() => {
12898
+ (0, import_react39.useEffect)(() => {
12379
12899
  const handleClickOutside = (event) => {
12380
12900
  if (selectRef.current && !selectRef.current.contains(event.target)) {
12381
12901
  setOpen(false);
@@ -12410,7 +12930,7 @@ var Select = ({
12410
12930
  document.removeEventListener("keydown", handleArrowKeys);
12411
12931
  };
12412
12932
  }, [open]);
12413
- (0, import_react38.useEffect)(() => {
12933
+ (0, import_react39.useEffect)(() => {
12414
12934
  if (propValue) {
12415
12935
  setValue(propValue);
12416
12936
  const label2 = findLabelForValue(children, propValue);
@@ -12447,7 +12967,7 @@ var SelectValue = ({
12447
12967
  const value = (0, import_zustand10.useStore)(store, (s) => s.value);
12448
12968
  return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "text-inherit flex gap-2 items-center", children: selectedLabel || placeholder || value });
12449
12969
  };
12450
- var SelectTrigger = (0, import_react38.forwardRef)(
12970
+ var SelectTrigger = (0, import_react39.forwardRef)(
12451
12971
  ({
12452
12972
  className,
12453
12973
  invalid = false,
@@ -12501,7 +13021,7 @@ var SelectTrigger = (0, import_react38.forwardRef)(
12501
13021
  }
12502
13022
  );
12503
13023
  SelectTrigger.displayName = "SelectTrigger";
12504
- var SelectContent = (0, import_react38.forwardRef)(
13024
+ var SelectContent = (0, import_react39.forwardRef)(
12505
13025
  ({
12506
13026
  children,
12507
13027
  className,
@@ -12531,7 +13051,7 @@ var SelectContent = (0, import_react38.forwardRef)(
12531
13051
  }
12532
13052
  );
12533
13053
  SelectContent.displayName = "SelectContent";
12534
- var SelectItem = (0, import_react38.forwardRef)(
13054
+ var SelectItem = (0, import_react39.forwardRef)(
12535
13055
  ({
12536
13056
  className,
12537
13057
  children,
@@ -12590,7 +13110,7 @@ var Select_default = Select;
12590
13110
 
12591
13111
  // src/components/Menu/Menu.tsx
12592
13112
  var import_zustand11 = require("zustand");
12593
- var import_react39 = require("react");
13113
+ var import_react40 = require("react");
12594
13114
  var import_phosphor_react28 = require("phosphor-react");
12595
13115
  var import_jsx_runtime61 = require("react/jsx-runtime");
12596
13116
  var createMenuStore = (onValueChange) => (0, import_zustand11.create)((set) => ({
@@ -12611,7 +13131,7 @@ var VARIANT_CLASSES5 = {
12611
13131
  "menu-overflow": "",
12612
13132
  breadcrumb: "bg-transparent shadow-none !px-0"
12613
13133
  };
12614
- var Menu = (0, import_react39.forwardRef)(
13134
+ var Menu = (0, import_react40.forwardRef)(
12615
13135
  ({
12616
13136
  className,
12617
13137
  children,
@@ -12621,11 +13141,11 @@ var Menu = (0, import_react39.forwardRef)(
12621
13141
  onValueChange,
12622
13142
  ...props
12623
13143
  }, ref) => {
12624
- const storeRef = (0, import_react39.useRef)(null);
13144
+ const storeRef = (0, import_react40.useRef)(null);
12625
13145
  storeRef.current ??= createMenuStore(onValueChange);
12626
13146
  const store = storeRef.current;
12627
13147
  const { setValue } = (0, import_zustand11.useStore)(store, (s) => s);
12628
- (0, import_react39.useEffect)(() => {
13148
+ (0, import_react40.useEffect)(() => {
12629
13149
  setValue(propValue ?? defaultValue);
12630
13150
  }, [defaultValue, propValue, setValue]);
12631
13151
  const baseClasses = variant === "menu-overflow" ? "w-fit py-2 flex flex-row items-center justify-center" : "w-full py-2 flex flex-row items-center justify-center";
@@ -12646,7 +13166,7 @@ var Menu = (0, import_react39.forwardRef)(
12646
13166
  }
12647
13167
  );
12648
13168
  Menu.displayName = "Menu";
12649
- var MenuContent = (0, import_react39.forwardRef)(
13169
+ var MenuContent = (0, import_react40.forwardRef)(
12650
13170
  ({ className, children, variant = "menu", ...props }, ref) => {
12651
13171
  const baseClasses = "w-full flex flex-row items-center gap-2";
12652
13172
  const variantClasses = variant === "menu2" || variant === "menu-overflow" ? "overflow-x-auto scroll-smooth" : "";
@@ -12668,7 +13188,7 @@ var MenuContent = (0, import_react39.forwardRef)(
12668
13188
  }
12669
13189
  );
12670
13190
  MenuContent.displayName = "MenuContent";
12671
- var MenuItem = (0, import_react39.forwardRef)(
13191
+ var MenuItem = (0, import_react40.forwardRef)(
12672
13192
  ({
12673
13193
  className,
12674
13194
  children,
@@ -12826,10 +13346,10 @@ var MenuOverflow = ({
12826
13346
  onValueChange,
12827
13347
  ...props
12828
13348
  }) => {
12829
- const containerRef = (0, import_react39.useRef)(null);
12830
- const [showLeftArrow, setShowLeftArrow] = (0, import_react39.useState)(false);
12831
- const [showRightArrow, setShowRightArrow] = (0, import_react39.useState)(false);
12832
- (0, import_react39.useEffect)(() => {
13349
+ const containerRef = (0, import_react40.useRef)(null);
13350
+ const [showLeftArrow, setShowLeftArrow] = (0, import_react40.useState)(false);
13351
+ const [showRightArrow, setShowRightArrow] = (0, import_react40.useState)(false);
13352
+ (0, import_react40.useEffect)(() => {
12833
13353
  const checkScroll = () => internalCheckScroll(
12834
13354
  containerRef.current,
12835
13355
  setShowLeftArrow,
@@ -12889,11 +13409,11 @@ var MenuOverflow = ({
12889
13409
  }
12890
13410
  );
12891
13411
  };
12892
- var injectStore6 = (children, store) => import_react39.Children.map(children, (child) => {
12893
- if (!(0, import_react39.isValidElement)(child)) return child;
13412
+ var injectStore6 = (children, store) => import_react40.Children.map(children, (child) => {
13413
+ if (!(0, import_react40.isValidElement)(child)) return child;
12894
13414
  const typedChild = child;
12895
13415
  const shouldInject = typedChild.type === MenuItem;
12896
- return (0, import_react39.cloneElement)(typedChild, {
13416
+ return (0, import_react40.cloneElement)(typedChild, {
12897
13417
  ...shouldInject ? { store } : {},
12898
13418
  ...typedChild.props.children ? { children: injectStore6(typedChild.props.children, store) } : {}
12899
13419
  });
@@ -13152,12 +13672,12 @@ var NotFound = ({
13152
13672
  var NotFound_default = NotFound;
13153
13673
 
13154
13674
  // src/components/VideoPlayer/VideoPlayer.tsx
13155
- var import_react41 = require("react");
13675
+ var import_react42 = require("react");
13156
13676
  var import_react_dom = require("react-dom");
13157
13677
  var import_phosphor_react31 = require("phosphor-react");
13158
13678
 
13159
13679
  // src/components/DownloadButton/DownloadButton.tsx
13160
- var import_react40 = require("react");
13680
+ var import_react41 = require("react");
13161
13681
  var import_phosphor_react30 = require("phosphor-react");
13162
13682
  var import_jsx_runtime64 = require("react/jsx-runtime");
13163
13683
  var getMimeType = (url) => {
@@ -13234,13 +13754,13 @@ var DownloadButton = ({
13234
13754
  lessonTitle = "aula",
13235
13755
  disabled = false
13236
13756
  }) => {
13237
- const [isDownloading, setIsDownloading] = (0, import_react40.useState)(false);
13238
- const isValidUrl = (0, import_react40.useCallback)((url) => {
13757
+ const [isDownloading, setIsDownloading] = (0, import_react41.useState)(false);
13758
+ const isValidUrl = (0, import_react41.useCallback)((url) => {
13239
13759
  return Boolean(
13240
13760
  url && url.trim() !== "" && url !== "undefined" && url !== "null"
13241
13761
  );
13242
13762
  }, []);
13243
- const getAvailableContent = (0, import_react40.useCallback)(() => {
13763
+ const getAvailableContent = (0, import_react41.useCallback)(() => {
13244
13764
  const downloads = [];
13245
13765
  if (isValidUrl(content.urlDoc)) {
13246
13766
  downloads.push({
@@ -13275,7 +13795,7 @@ var DownloadButton = ({
13275
13795
  }
13276
13796
  return downloads;
13277
13797
  }, [content, isValidUrl]);
13278
- const handleDownload = (0, import_react40.useCallback)(async () => {
13798
+ const handleDownload = (0, import_react41.useCallback)(async () => {
13279
13799
  if (disabled || isDownloading) return;
13280
13800
  const availableContent = getAvailableContent();
13281
13801
  if (availableContent.length === 0) {
@@ -13413,9 +13933,9 @@ var SpeedMenu = ({
13413
13933
  iconSize = 24,
13414
13934
  isTinyMobile = false
13415
13935
  }) => {
13416
- const buttonRef = (0, import_react41.useRef)(null);
13417
- const speedMenuContainerRef = (0, import_react41.useRef)(null);
13418
- const speedMenuRef = (0, import_react41.useRef)(null);
13936
+ const buttonRef = (0, import_react42.useRef)(null);
13937
+ const speedMenuContainerRef = (0, import_react42.useRef)(null);
13938
+ const speedMenuRef = (0, import_react42.useRef)(null);
13419
13939
  const getMenuPosition = () => {
13420
13940
  if (!buttonRef.current) return { top: 0, left: 0 };
13421
13941
  const rect = buttonRef.current.getBoundingClientRect();
@@ -13429,7 +13949,7 @@ var SpeedMenu = ({
13429
13949
  };
13430
13950
  };
13431
13951
  const position = getMenuPosition();
13432
- (0, import_react41.useEffect)(() => {
13952
+ (0, import_react42.useEffect)(() => {
13433
13953
  const handleClickOutside = (event) => {
13434
13954
  const target = event.target;
13435
13955
  const isOutsideContainer = speedMenuContainerRef.current && !speedMenuContainerRef.current.contains(target);
@@ -13508,28 +14028,28 @@ var VideoPlayer = ({
13508
14028
  onDownloadComplete,
13509
14029
  onDownloadError
13510
14030
  }) => {
13511
- const videoRef = (0, import_react41.useRef)(null);
14031
+ const videoRef = (0, import_react42.useRef)(null);
13512
14032
  const { isUltraSmallMobile, isTinyMobile } = useMobile();
13513
- const [isPlaying, setIsPlaying] = (0, import_react41.useState)(false);
13514
- const [currentTime, setCurrentTime] = (0, import_react41.useState)(0);
13515
- const [duration, setDuration] = (0, import_react41.useState)(0);
13516
- const [isMuted, setIsMuted] = (0, import_react41.useState)(false);
13517
- const [volume, setVolume] = (0, import_react41.useState)(1);
13518
- const [isFullscreen, setIsFullscreen] = (0, import_react41.useState)(false);
13519
- const [showControls, setShowControls] = (0, import_react41.useState)(true);
13520
- const [hasCompleted, setHasCompleted] = (0, import_react41.useState)(false);
13521
- const [showCaptions, setShowCaptions] = (0, import_react41.useState)(false);
13522
- const [subtitlesValidation, setSubtitlesValidation] = (0, import_react41.useState)("idle");
13523
- (0, import_react41.useEffect)(() => {
14033
+ const [isPlaying, setIsPlaying] = (0, import_react42.useState)(false);
14034
+ const [currentTime, setCurrentTime] = (0, import_react42.useState)(0);
14035
+ const [duration, setDuration] = (0, import_react42.useState)(0);
14036
+ const [isMuted, setIsMuted] = (0, import_react42.useState)(false);
14037
+ const [volume, setVolume] = (0, import_react42.useState)(1);
14038
+ const [isFullscreen, setIsFullscreen] = (0, import_react42.useState)(false);
14039
+ const [showControls, setShowControls] = (0, import_react42.useState)(true);
14040
+ const [hasCompleted, setHasCompleted] = (0, import_react42.useState)(false);
14041
+ const [showCaptions, setShowCaptions] = (0, import_react42.useState)(false);
14042
+ const [subtitlesValidation, setSubtitlesValidation] = (0, import_react42.useState)("idle");
14043
+ (0, import_react42.useEffect)(() => {
13524
14044
  setHasCompleted(false);
13525
14045
  }, [src]);
13526
- const [playbackRate, setPlaybackRate] = (0, import_react41.useState)(1);
13527
- const [showSpeedMenu, setShowSpeedMenu] = (0, import_react41.useState)(false);
13528
- const lastSaveTimeRef = (0, import_react41.useRef)(0);
13529
- const trackRef = (0, import_react41.useRef)(null);
13530
- const controlsTimeoutRef = (0, import_react41.useRef)(null);
13531
- const lastMousePositionRef = (0, import_react41.useRef)({ x: 0, y: 0 });
13532
- const isUserInteracting = (0, import_react41.useCallback)(() => {
14046
+ const [playbackRate, setPlaybackRate] = (0, import_react42.useState)(1);
14047
+ const [showSpeedMenu, setShowSpeedMenu] = (0, import_react42.useState)(false);
14048
+ const lastSaveTimeRef = (0, import_react42.useRef)(0);
14049
+ const trackRef = (0, import_react42.useRef)(null);
14050
+ const controlsTimeoutRef = (0, import_react42.useRef)(null);
14051
+ const lastMousePositionRef = (0, import_react42.useRef)({ x: 0, y: 0 });
14052
+ const isUserInteracting = (0, import_react42.useCallback)(() => {
13533
14053
  if (showSpeedMenu) {
13534
14054
  return true;
13535
14055
  }
@@ -13546,13 +14066,13 @@ var VideoPlayer = ({
13546
14066
  }
13547
14067
  return false;
13548
14068
  }, [showSpeedMenu]);
13549
- const clearControlsTimeout = (0, import_react41.useCallback)(() => {
14069
+ const clearControlsTimeout = (0, import_react42.useCallback)(() => {
13550
14070
  if (controlsTimeoutRef.current) {
13551
14071
  clearTimeout(controlsTimeoutRef.current);
13552
14072
  controlsTimeoutRef.current = null;
13553
14073
  }
13554
14074
  }, []);
13555
- const showControlsWithTimer = (0, import_react41.useCallback)(() => {
14075
+ const showControlsWithTimer = (0, import_react42.useCallback)(() => {
13556
14076
  setShowControls(true);
13557
14077
  clearControlsTimeout();
13558
14078
  if (isFullscreen) {
@@ -13567,7 +14087,7 @@ var VideoPlayer = ({
13567
14087
  }, CONTROLS_HIDE_TIMEOUT);
13568
14088
  }
13569
14089
  }, [isFullscreen, isPlaying, clearControlsTimeout]);
13570
- const handleMouseMove = (0, import_react41.useCallback)(
14090
+ const handleMouseMove = (0, import_react42.useCallback)(
13571
14091
  (event) => {
13572
14092
  const currentX = event.clientX;
13573
14093
  const currentY = event.clientY;
@@ -13580,10 +14100,10 @@ var VideoPlayer = ({
13580
14100
  },
13581
14101
  [showControlsWithTimer]
13582
14102
  );
13583
- const handleMouseEnter = (0, import_react41.useCallback)(() => {
14103
+ const handleMouseEnter = (0, import_react42.useCallback)(() => {
13584
14104
  showControlsWithTimer();
13585
14105
  }, [showControlsWithTimer]);
13586
- const handleMouseLeave = (0, import_react41.useCallback)(() => {
14106
+ const handleMouseLeave = (0, import_react42.useCallback)(() => {
13587
14107
  const userInteracting = isUserInteracting();
13588
14108
  clearControlsTimeout();
13589
14109
  if (!isFullscreen && !userInteracting) {
@@ -13592,13 +14112,13 @@ var VideoPlayer = ({
13592
14112
  }, LEAVE_HIDE_TIMEOUT);
13593
14113
  }
13594
14114
  }, [isFullscreen, clearControlsTimeout, isUserInteracting]);
13595
- (0, import_react41.useEffect)(() => {
14115
+ (0, import_react42.useEffect)(() => {
13596
14116
  if (videoRef.current) {
13597
14117
  videoRef.current.volume = volume;
13598
14118
  videoRef.current.muted = isMuted;
13599
14119
  }
13600
14120
  }, [volume, isMuted]);
13601
- (0, import_react41.useEffect)(() => {
14121
+ (0, import_react42.useEffect)(() => {
13602
14122
  const video = videoRef.current;
13603
14123
  if (!video) return;
13604
14124
  const onPlay = () => setIsPlaying(true);
@@ -13613,13 +14133,13 @@ var VideoPlayer = ({
13613
14133
  video.removeEventListener("ended", onEnded);
13614
14134
  };
13615
14135
  }, []);
13616
- (0, import_react41.useEffect)(() => {
14136
+ (0, import_react42.useEffect)(() => {
13617
14137
  const video = videoRef.current;
13618
14138
  if (!video) return;
13619
14139
  video.setAttribute("playsinline", "");
13620
14140
  video.setAttribute("webkit-playsinline", "");
13621
14141
  }, []);
13622
- (0, import_react41.useEffect)(() => {
14142
+ (0, import_react42.useEffect)(() => {
13623
14143
  if (isPlaying) {
13624
14144
  showControlsWithTimer();
13625
14145
  } else {
@@ -13631,7 +14151,7 @@ var VideoPlayer = ({
13631
14151
  }
13632
14152
  }
13633
14153
  }, [isPlaying, isFullscreen, showControlsWithTimer, clearControlsTimeout]);
13634
- (0, import_react41.useEffect)(() => {
14154
+ (0, import_react42.useEffect)(() => {
13635
14155
  const video = videoRef.current;
13636
14156
  if (!video) return;
13637
14157
  const handleFullscreenChange = () => {
@@ -13666,7 +14186,7 @@ var VideoPlayer = ({
13666
14186
  );
13667
14187
  };
13668
14188
  }, [showControlsWithTimer]);
13669
- (0, import_react41.useEffect)(() => {
14189
+ (0, import_react42.useEffect)(() => {
13670
14190
  const init = () => {
13671
14191
  if (!isFullscreen) {
13672
14192
  showControlsWithTimer();
@@ -13688,7 +14208,7 @@ var VideoPlayer = ({
13688
14208
  };
13689
14209
  }
13690
14210
  }, []);
13691
- const getInitialTime = (0, import_react41.useCallback)(() => {
14211
+ const getInitialTime = (0, import_react42.useCallback)(() => {
13692
14212
  if (!autoSave || !storageKey) {
13693
14213
  return Number.isFinite(initialTime) && initialTime >= 0 ? initialTime : void 0;
13694
14214
  }
@@ -13701,14 +14221,14 @@ var VideoPlayer = ({
13701
14221
  if (hasValidSaved) return saved;
13702
14222
  return void 0;
13703
14223
  }, [autoSave, storageKey, src, initialTime]);
13704
- (0, import_react41.useEffect)(() => {
14224
+ (0, import_react42.useEffect)(() => {
13705
14225
  const start = getInitialTime();
13706
14226
  if (start !== void 0 && videoRef.current) {
13707
14227
  videoRef.current.currentTime = start;
13708
14228
  setCurrentTime(start);
13709
14229
  }
13710
14230
  }, [getInitialTime]);
13711
- const saveProgress = (0, import_react41.useCallback)(
14231
+ const saveProgress = (0, import_react42.useCallback)(
13712
14232
  (time) => {
13713
14233
  if (!autoSave || !storageKey) return;
13714
14234
  const now = Date.now();
@@ -13719,7 +14239,7 @@ var VideoPlayer = ({
13719
14239
  },
13720
14240
  [autoSave, storageKey, src]
13721
14241
  );
13722
- const togglePlayPause = (0, import_react41.useCallback)(async () => {
14242
+ const togglePlayPause = (0, import_react42.useCallback)(async () => {
13723
14243
  const video = videoRef.current;
13724
14244
  if (!video) return;
13725
14245
  if (!video.paused) {
@@ -13731,7 +14251,7 @@ var VideoPlayer = ({
13731
14251
  } catch {
13732
14252
  }
13733
14253
  }, []);
13734
- const handleVolumeChange = (0, import_react41.useCallback)(
14254
+ const handleVolumeChange = (0, import_react42.useCallback)(
13735
14255
  (newVolume) => {
13736
14256
  const video = videoRef.current;
13737
14257
  if (!video) return;
@@ -13750,7 +14270,7 @@ var VideoPlayer = ({
13750
14270
  },
13751
14271
  [isMuted]
13752
14272
  );
13753
- const toggleMute = (0, import_react41.useCallback)(() => {
14273
+ const toggleMute = (0, import_react42.useCallback)(() => {
13754
14274
  const video = videoRef.current;
13755
14275
  if (!video) return;
13756
14276
  if (isMuted) {
@@ -13764,20 +14284,20 @@ var VideoPlayer = ({
13764
14284
  setIsMuted(true);
13765
14285
  }
13766
14286
  }, [isMuted, volume]);
13767
- const handleSeek = (0, import_react41.useCallback)((newTime) => {
14287
+ const handleSeek = (0, import_react42.useCallback)((newTime) => {
13768
14288
  const video = videoRef.current;
13769
14289
  if (video) {
13770
14290
  video.currentTime = newTime;
13771
14291
  }
13772
14292
  }, []);
13773
- const isSafariIOS = (0, import_react41.useCallback)(() => {
14293
+ const isSafariIOS = (0, import_react42.useCallback)(() => {
13774
14294
  const ua = navigator.userAgent;
13775
14295
  const isIOS = /iPad|iPhone|iPod/.test(ua);
13776
14296
  const isWebKit = /WebKit/.test(ua);
13777
14297
  const isNotChrome = !/CriOS|Chrome/.test(ua);
13778
14298
  return isIOS && isWebKit && isNotChrome;
13779
14299
  }, []);
13780
- const toggleFullscreen = (0, import_react41.useCallback)(() => {
14300
+ const toggleFullscreen = (0, import_react42.useCallback)(() => {
13781
14301
  const video = videoRef.current;
13782
14302
  const container = video?.parentElement;
13783
14303
  if (!video || !container) return;
@@ -13794,24 +14314,24 @@ var VideoPlayer = ({
13794
14314
  document.exitFullscreen();
13795
14315
  }
13796
14316
  }, [isFullscreen, isSafariIOS]);
13797
- const handleSpeedChange = (0, import_react41.useCallback)((speed) => {
14317
+ const handleSpeedChange = (0, import_react42.useCallback)((speed) => {
13798
14318
  if (videoRef.current) {
13799
14319
  videoRef.current.playbackRate = speed;
13800
14320
  setPlaybackRate(speed);
13801
14321
  setShowSpeedMenu(false);
13802
14322
  }
13803
14323
  }, []);
13804
- const toggleSpeedMenu = (0, import_react41.useCallback)(() => {
14324
+ const toggleSpeedMenu = (0, import_react42.useCallback)(() => {
13805
14325
  setShowSpeedMenu(!showSpeedMenu);
13806
14326
  }, [showSpeedMenu]);
13807
- const toggleCaptions = (0, import_react41.useCallback)(() => {
14327
+ const toggleCaptions = (0, import_react42.useCallback)(() => {
13808
14328
  if (!trackRef.current?.track || !subtitles || subtitlesValidation !== "valid")
13809
14329
  return;
13810
14330
  const newShowCaptions = !showCaptions;
13811
14331
  setShowCaptions(newShowCaptions);
13812
14332
  trackRef.current.track.mode = newShowCaptions ? "showing" : "hidden";
13813
14333
  }, [showCaptions, subtitles, subtitlesValidation]);
13814
- const checkVideoCompletion = (0, import_react41.useCallback)(
14334
+ const checkVideoCompletion = (0, import_react42.useCallback)(
13815
14335
  (progressPercent) => {
13816
14336
  if (progressPercent >= 95 && !hasCompleted) {
13817
14337
  setHasCompleted(true);
@@ -13820,7 +14340,7 @@ var VideoPlayer = ({
13820
14340
  },
13821
14341
  [hasCompleted, onVideoComplete]
13822
14342
  );
13823
- const handleTimeUpdate = (0, import_react41.useCallback)(() => {
14343
+ const handleTimeUpdate = (0, import_react42.useCallback)(() => {
13824
14344
  const video = videoRef.current;
13825
14345
  if (!video) return;
13826
14346
  const current = video.currentTime;
@@ -13833,12 +14353,12 @@ var VideoPlayer = ({
13833
14353
  checkVideoCompletion(progressPercent);
13834
14354
  }
13835
14355
  }, [duration, saveProgress, onTimeUpdate, onProgress, checkVideoCompletion]);
13836
- const handleLoadedMetadata = (0, import_react41.useCallback)(() => {
14356
+ const handleLoadedMetadata = (0, import_react42.useCallback)(() => {
13837
14357
  if (videoRef.current) {
13838
14358
  setDuration(videoRef.current.duration);
13839
14359
  }
13840
14360
  }, []);
13841
- (0, import_react41.useEffect)(() => {
14361
+ (0, import_react42.useEffect)(() => {
13842
14362
  const controller = new AbortController();
13843
14363
  const validateSubtitles = async () => {
13844
14364
  if (!subtitles) {
@@ -13885,12 +14405,12 @@ var VideoPlayer = ({
13885
14405
  controller.abort();
13886
14406
  };
13887
14407
  }, [subtitles]);
13888
- (0, import_react41.useEffect)(() => {
14408
+ (0, import_react42.useEffect)(() => {
13889
14409
  if (trackRef.current?.track) {
13890
14410
  trackRef.current.track.mode = showCaptions && subtitles && subtitlesValidation === "valid" ? "showing" : "hidden";
13891
14411
  }
13892
14412
  }, [subtitles, showCaptions, subtitlesValidation]);
13893
- (0, import_react41.useEffect)(() => {
14413
+ (0, import_react42.useEffect)(() => {
13894
14414
  const handleVisibilityChange = () => {
13895
14415
  if (document.hidden && isPlaying && videoRef.current) {
13896
14416
  videoRef.current.pause();
@@ -13912,54 +14432,54 @@ var VideoPlayer = ({
13912
14432
  };
13913
14433
  }, [isPlaying, clearControlsTimeout]);
13914
14434
  const progressPercentage = duration > 0 ? currentTime / duration * 100 : 0;
13915
- const getIconSize2 = (0, import_react41.useCallback)(() => {
14435
+ const getIconSize2 = (0, import_react42.useCallback)(() => {
13916
14436
  if (isTinyMobile) return 18;
13917
14437
  if (isUltraSmallMobile) return 20;
13918
14438
  return 24;
13919
14439
  }, [isTinyMobile, isUltraSmallMobile]);
13920
- const getControlsPadding = (0, import_react41.useCallback)(() => {
14440
+ const getControlsPadding = (0, import_react42.useCallback)(() => {
13921
14441
  if (isTinyMobile) return "px-2 pb-2 pt-1";
13922
14442
  if (isUltraSmallMobile) return "px-3 pb-3 pt-1";
13923
14443
  return "px-4 pb-4";
13924
14444
  }, [isTinyMobile, isUltraSmallMobile]);
13925
- const getControlsGap = (0, import_react41.useCallback)(() => {
14445
+ const getControlsGap = (0, import_react42.useCallback)(() => {
13926
14446
  if (isTinyMobile) return "gap-1";
13927
14447
  if (isUltraSmallMobile) return "gap-2";
13928
14448
  return "gap-4";
13929
14449
  }, [isTinyMobile, isUltraSmallMobile]);
13930
- const getProgressBarPadding = (0, import_react41.useCallback)(() => {
14450
+ const getProgressBarPadding = (0, import_react42.useCallback)(() => {
13931
14451
  if (isTinyMobile) return "px-2 pb-1";
13932
14452
  if (isUltraSmallMobile) return "px-3 pb-1";
13933
14453
  return "px-4 pb-2";
13934
14454
  }, [isTinyMobile, isUltraSmallMobile]);
13935
- const getCenterPlayButtonPosition = (0, import_react41.useCallback)(() => {
14455
+ const getCenterPlayButtonPosition = (0, import_react42.useCallback)(() => {
13936
14456
  if (isTinyMobile) return "items-center justify-center -translate-y-12";
13937
14457
  if (isUltraSmallMobile) return "items-center justify-center -translate-y-8";
13938
14458
  return "items-center justify-center";
13939
14459
  }, [isTinyMobile, isUltraSmallMobile]);
13940
- const getTopControlsOpacity = (0, import_react41.useCallback)(() => {
14460
+ const getTopControlsOpacity = (0, import_react42.useCallback)(() => {
13941
14461
  return showControls ? "opacity-100" : "opacity-0";
13942
14462
  }, [showControls]);
13943
- const getBottomControlsOpacity = (0, import_react41.useCallback)(() => {
14463
+ const getBottomControlsOpacity = (0, import_react42.useCallback)(() => {
13944
14464
  return showControls ? "opacity-100" : "opacity-0";
13945
14465
  }, [showControls]);
13946
- const seekBackward = (0, import_react41.useCallback)(() => {
14466
+ const seekBackward = (0, import_react42.useCallback)(() => {
13947
14467
  if (videoRef.current) {
13948
14468
  videoRef.current.currentTime -= 10;
13949
14469
  }
13950
14470
  }, []);
13951
- const seekForward = (0, import_react41.useCallback)(() => {
14471
+ const seekForward = (0, import_react42.useCallback)(() => {
13952
14472
  if (videoRef.current) {
13953
14473
  videoRef.current.currentTime += 10;
13954
14474
  }
13955
14475
  }, []);
13956
- const increaseVolume = (0, import_react41.useCallback)(() => {
14476
+ const increaseVolume = (0, import_react42.useCallback)(() => {
13957
14477
  handleVolumeChange(Math.min(100, volume * 100 + 10));
13958
14478
  }, [handleVolumeChange, volume]);
13959
- const decreaseVolume = (0, import_react41.useCallback)(() => {
14479
+ const decreaseVolume = (0, import_react42.useCallback)(() => {
13960
14480
  handleVolumeChange(Math.max(0, volume * 100 - 10));
13961
14481
  }, [handleVolumeChange, volume]);
13962
- const handleVideoKeyDown = (0, import_react41.useCallback)(
14482
+ const handleVideoKeyDown = (0, import_react42.useCallback)(
13963
14483
  (e) => {
13964
14484
  if (!e.key) return;
13965
14485
  e.stopPropagation();
@@ -14202,7 +14722,7 @@ var VideoPlayer = ({
14202
14722
  var VideoPlayer_default = VideoPlayer;
14203
14723
 
14204
14724
  // src/components/Whiteboard/Whiteboard.tsx
14205
- var import_react42 = require("react");
14725
+ var import_react43 = require("react");
14206
14726
  var import_phosphor_react32 = require("phosphor-react");
14207
14727
  var import_jsx_runtime66 = require("react/jsx-runtime");
14208
14728
  var IMAGE_WIDTH = 225;
@@ -14215,8 +14735,8 @@ var Whiteboard = ({
14215
14735
  imagesPerRow = 2,
14216
14736
  ...rest
14217
14737
  }) => {
14218
- const [imageErrors, setImageErrors] = (0, import_react42.useState)(/* @__PURE__ */ new Set());
14219
- const handleDownload = (0, import_react42.useCallback)(
14738
+ const [imageErrors, setImageErrors] = (0, import_react43.useState)(/* @__PURE__ */ new Set());
14739
+ const handleDownload = (0, import_react43.useCallback)(
14220
14740
  (image) => {
14221
14741
  if (onDownload) {
14222
14742
  onDownload(image);
@@ -14233,7 +14753,7 @@ var Whiteboard = ({
14233
14753
  },
14234
14754
  [onDownload]
14235
14755
  );
14236
- const handleImageError = (0, import_react42.useCallback)((imageId) => {
14756
+ const handleImageError = (0, import_react43.useCallback)((imageId) => {
14237
14757
  setImageErrors((prev) => new Set(prev).add(imageId));
14238
14758
  }, []);
14239
14759
  const gridColsClass = images?.length === 1 ? "grid-cols-1" : {
@@ -14320,10 +14840,10 @@ var Whiteboard = ({
14320
14840
  var Whiteboard_default = Whiteboard;
14321
14841
 
14322
14842
  // src/components/Auth/Auth.tsx
14323
- var import_react43 = require("react");
14843
+ var import_react44 = require("react");
14324
14844
  var import_react_router_dom = require("react-router-dom");
14325
14845
  var import_jsx_runtime67 = require("react/jsx-runtime");
14326
- var AuthContext = (0, import_react43.createContext)(void 0);
14846
+ var AuthContext = (0, import_react44.createContext)(void 0);
14327
14847
  var AuthProvider = ({
14328
14848
  children,
14329
14849
  checkAuthFn,
@@ -14333,12 +14853,12 @@ var AuthProvider = ({
14333
14853
  getSessionFn,
14334
14854
  getTokensFn
14335
14855
  }) => {
14336
- const [authState, setAuthState] = (0, import_react43.useState)({
14856
+ const [authState, setAuthState] = (0, import_react44.useState)({
14337
14857
  isAuthenticated: false,
14338
14858
  isLoading: true,
14339
14859
  ...initialAuthState
14340
14860
  });
14341
- const checkAuth = (0, import_react43.useCallback)(async () => {
14861
+ const checkAuth = (0, import_react44.useCallback)(async () => {
14342
14862
  try {
14343
14863
  setAuthState((prev) => ({ ...prev, isLoading: true }));
14344
14864
  if (!checkAuthFn) {
@@ -14369,7 +14889,7 @@ var AuthProvider = ({
14369
14889
  return false;
14370
14890
  }
14371
14891
  }, [checkAuthFn, getUserFn, getSessionFn, getTokensFn]);
14372
- const signOut = (0, import_react43.useCallback)(() => {
14892
+ const signOut = (0, import_react44.useCallback)(() => {
14373
14893
  if (signOutFn) {
14374
14894
  signOutFn();
14375
14895
  }
@@ -14381,10 +14901,10 @@ var AuthProvider = ({
14381
14901
  tokens: void 0
14382
14902
  }));
14383
14903
  }, [signOutFn]);
14384
- (0, import_react43.useEffect)(() => {
14904
+ (0, import_react44.useEffect)(() => {
14385
14905
  checkAuth();
14386
14906
  }, [checkAuth]);
14387
- const contextValue = (0, import_react43.useMemo)(
14907
+ const contextValue = (0, import_react44.useMemo)(
14388
14908
  () => ({
14389
14909
  ...authState,
14390
14910
  checkAuth,
@@ -14395,7 +14915,7 @@ var AuthProvider = ({
14395
14915
  return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(AuthContext.Provider, { value: contextValue, children });
14396
14916
  };
14397
14917
  var useAuth = () => {
14398
- const context = (0, import_react43.useContext)(AuthContext);
14918
+ const context = (0, import_react44.useContext)(AuthContext);
14399
14919
  if (context === void 0) {
14400
14920
  throw new Error("useAuth deve ser usado dentro de um AuthProvider");
14401
14921
  }
@@ -14535,7 +15055,7 @@ function createZustandAuthAdapter(useAuthStore2) {
14535
15055
  }
14536
15056
 
14537
15057
  // src/components/Auth/useUrlAuthentication.ts
14538
- var import_react44 = require("react");
15058
+ var import_react45 = require("react");
14539
15059
  var import_react_router_dom2 = require("react-router-dom");
14540
15060
  var getAuthParams = (location, extractParams) => {
14541
15061
  const searchParams = new URLSearchParams(location.search);
@@ -14583,8 +15103,8 @@ var handleUserData = (responseData, setUser) => {
14583
15103
  };
14584
15104
  function useUrlAuthentication(options) {
14585
15105
  const location = (0, import_react_router_dom2.useLocation)();
14586
- const processedRef = (0, import_react44.useRef)(false);
14587
- (0, import_react44.useEffect)(() => {
15106
+ const processedRef = (0, import_react45.useRef)(false);
15107
+ (0, import_react45.useEffect)(() => {
14588
15108
  const handleAuthentication = async () => {
14589
15109
  if (processedRef.current) {
14590
15110
  return;
@@ -14655,9 +15175,9 @@ function useUrlAuthentication(options) {
14655
15175
  }
14656
15176
 
14657
15177
  // src/components/Auth/useApiConfig.ts
14658
- var import_react45 = require("react");
15178
+ var import_react46 = require("react");
14659
15179
  function useApiConfig(api) {
14660
- return (0, import_react45.useMemo)(
15180
+ return (0, import_react46.useMemo)(
14661
15181
  () => ({
14662
15182
  get: (endpoint, config) => api.get(endpoint, config)
14663
15183
  }),
@@ -14667,13 +15187,13 @@ function useApiConfig(api) {
14667
15187
 
14668
15188
  // src/components/Quiz/Quiz.tsx
14669
15189
  var import_phosphor_react35 = require("phosphor-react");
14670
- var import_react48 = require("react");
15190
+ var import_react49 = require("react");
14671
15191
 
14672
15192
  // src/components/Quiz/QuizContent.tsx
14673
- var import_react47 = require("react");
15193
+ var import_react48 = require("react");
14674
15194
 
14675
15195
  // src/components/MultipleChoice/MultipleChoice.tsx
14676
- var import_react46 = require("react");
15196
+ var import_react47 = require("react");
14677
15197
  var import_phosphor_react33 = require("phosphor-react");
14678
15198
  var import_jsx_runtime68 = require("react/jsx-runtime");
14679
15199
  var MultipleChoiceList = ({
@@ -14685,8 +15205,8 @@ var MultipleChoiceList = ({
14685
15205
  onHandleSelectedValues,
14686
15206
  mode = "interactive"
14687
15207
  }) => {
14688
- const [actualValue, setActualValue] = (0, import_react46.useState)(selectedValues);
14689
- (0, import_react46.useEffect)(() => {
15208
+ const [actualValue, setActualValue] = (0, import_react47.useState)(selectedValues);
15209
+ (0, import_react47.useEffect)(() => {
14690
15210
  setActualValue(selectedValues);
14691
15211
  }, [selectedValues]);
14692
15212
  const getStatusBadge2 = (status) => {
@@ -14831,12 +15351,12 @@ var getStatusStyles = (variantCorrect) => {
14831
15351
  return "bg-error-background border-error-300";
14832
15352
  }
14833
15353
  };
14834
- var QuizSubTitle = (0, import_react47.forwardRef)(
15354
+ var QuizSubTitle = (0, import_react48.forwardRef)(
14835
15355
  ({ subTitle, ...props }, ref) => {
14836
15356
  return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "px-4 pb-2 pt-6", ...props, ref, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("p", { className: "font-bold text-lg text-text-950", children: subTitle }) });
14837
15357
  }
14838
15358
  );
14839
- var QuizContainer = (0, import_react47.forwardRef)(({ children, className, ...props }, ref) => {
15359
+ var QuizContainer = (0, import_react48.forwardRef)(({ children, className, ...props }, ref) => {
14840
15360
  return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14841
15361
  "div",
14842
15362
  {
@@ -14925,15 +15445,15 @@ var QuizMultipleChoice = ({ paddingBottom }) => {
14925
15445
  const currentQuestionResult = getQuestionResultByQuestionId(
14926
15446
  currentQuestion?.id || ""
14927
15447
  );
14928
- const prevSelectedValuesRef = (0, import_react47.useRef)([]);
14929
- const prevQuestionIdRef = (0, import_react47.useRef)("");
14930
- const allCurrentAnswerIds = (0, import_react47.useMemo)(() => {
15448
+ const prevSelectedValuesRef = (0, import_react48.useRef)([]);
15449
+ const prevQuestionIdRef = (0, import_react48.useRef)("");
15450
+ const allCurrentAnswerIds = (0, import_react48.useMemo)(() => {
14931
15451
  return allCurrentAnswers?.map((answer) => answer.optionId) || [];
14932
15452
  }, [allCurrentAnswers]);
14933
- const selectedValues = (0, import_react47.useMemo)(() => {
15453
+ const selectedValues = (0, import_react48.useMemo)(() => {
14934
15454
  return allCurrentAnswerIds?.filter((id) => id !== null) || [];
14935
15455
  }, [allCurrentAnswerIds]);
14936
- const stableSelectedValues = (0, import_react47.useMemo)(() => {
15456
+ const stableSelectedValues = (0, import_react48.useMemo)(() => {
14937
15457
  const currentQuestionId = currentQuestion?.id || "";
14938
15458
  const hasQuestionChanged = prevQuestionIdRef.current !== currentQuestionId;
14939
15459
  if (hasQuestionChanged) {
@@ -14957,7 +15477,7 @@ var QuizMultipleChoice = ({ paddingBottom }) => {
14957
15477
  variant,
14958
15478
  currentQuestionResult?.selectedOptions
14959
15479
  ]);
14960
- const handleSelectedValues = (0, import_react47.useCallback)(
15480
+ const handleSelectedValues = (0, import_react48.useCallback)(
14961
15481
  (values) => {
14962
15482
  if (currentQuestion) {
14963
15483
  selectMultipleAnswer(currentQuestion.id, values);
@@ -14965,7 +15485,7 @@ var QuizMultipleChoice = ({ paddingBottom }) => {
14965
15485
  },
14966
15486
  [currentQuestion, selectMultipleAnswer]
14967
15487
  );
14968
- const questionKey = (0, import_react47.useMemo)(
15488
+ const questionKey = (0, import_react48.useMemo)(
14969
15489
  () => `question-${currentQuestion?.id || "1"}`,
14970
15490
  [currentQuestion?.id]
14971
15491
  );
@@ -15026,14 +15546,14 @@ var QuizDissertative = ({ paddingBottom }) => {
15026
15546
  currentQuestion?.id || ""
15027
15547
  );
15028
15548
  const currentAnswer = getCurrentAnswer();
15029
- const textareaRef = (0, import_react47.useRef)(null);
15549
+ const textareaRef = (0, import_react48.useRef)(null);
15030
15550
  const charLimit = getDissertativeCharLimit();
15031
15551
  const handleAnswerChange = (value) => {
15032
15552
  if (currentQuestion) {
15033
15553
  selectDissertativeAnswer(currentQuestion.id, value);
15034
15554
  }
15035
15555
  };
15036
- const adjustTextareaHeight = (0, import_react47.useCallback)(() => {
15556
+ const adjustTextareaHeight = (0, import_react48.useCallback)(() => {
15037
15557
  if (textareaRef.current) {
15038
15558
  textareaRef.current.style.height = "auto";
15039
15559
  const scrollHeight = textareaRef.current.scrollHeight;
@@ -15043,7 +15563,7 @@ var QuizDissertative = ({ paddingBottom }) => {
15043
15563
  textareaRef.current.style.height = `${newHeight}px`;
15044
15564
  }
15045
15565
  }, []);
15046
- (0, import_react47.useEffect)(() => {
15566
+ (0, import_react48.useEffect)(() => {
15047
15567
  adjustTextareaHeight();
15048
15568
  }, [currentAnswer, adjustTextareaHeight]);
15049
15569
  if (!currentQuestion) {
@@ -15184,7 +15704,7 @@ var QuizConnectDots = ({ paddingBottom }) => {
15184
15704
  isCorrect: false
15185
15705
  }
15186
15706
  ];
15187
- const [userAnswers, setUserAnswers] = (0, import_react47.useState)(() => {
15707
+ const [userAnswers, setUserAnswers] = (0, import_react48.useState)(() => {
15188
15708
  if (variant === "result") {
15189
15709
  return mockUserAnswers;
15190
15710
  }
@@ -15303,8 +15823,8 @@ var QuizFill = ({ paddingBottom }) => {
15303
15823
  isCorrect: true
15304
15824
  }
15305
15825
  ];
15306
- const [answers, setAnswers] = (0, import_react47.useState)({});
15307
- const baseId = (0, import_react47.useId)();
15826
+ const [answers, setAnswers] = (0, import_react48.useState)({});
15827
+ const baseId = (0, import_react48.useId)();
15308
15828
  const getAvailableOptionsForSelect = (selectId) => {
15309
15829
  const usedOptions = new Set(
15310
15830
  Object.entries(answers).filter(([key]) => key !== selectId).map(([, value]) => value)
@@ -15443,7 +15963,7 @@ var QuizImageQuestion = ({ paddingBottom }) => {
15443
15963
  };
15444
15964
  const correctRadiusRelative = calculateCorrectRadiusRelative();
15445
15965
  const mockUserAnswerRelative = { x: 0.72, y: 0.348 };
15446
- const [clickPositionRelative, setClickPositionRelative] = (0, import_react47.useState)(variant == "result" ? mockUserAnswerRelative : null);
15966
+ const [clickPositionRelative, setClickPositionRelative] = (0, import_react48.useState)(variant == "result" ? mockUserAnswerRelative : null);
15447
15967
  const convertToRelativeCoordinates = (x, y, rect) => {
15448
15968
  const safeWidth = Math.max(rect.width, 1e-3);
15449
15969
  const safeHeight = Math.max(rect.height, 1e-3);
@@ -15609,14 +16129,14 @@ var getFinishConfirmationText = (type) => {
15609
16129
  const config = getQuizTypeConfig(type);
15610
16130
  return `Tem certeza que deseja finalizar ${config.article} ${config.label.toLowerCase()}?`;
15611
16131
  };
15612
- var Quiz = (0, import_react48.forwardRef)(({ children, className, variant = "default", ...props }, ref) => {
16132
+ var Quiz = (0, import_react49.forwardRef)(({ children, className, variant = "default", ...props }, ref) => {
15613
16133
  const { setVariant } = useQuizStore();
15614
- (0, import_react48.useEffect)(() => {
16134
+ (0, import_react49.useEffect)(() => {
15615
16135
  setVariant(variant);
15616
16136
  }, [variant, setVariant]);
15617
16137
  return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { ref, className: cn("flex flex-col", className), ...props, children });
15618
16138
  });
15619
- var QuizTitle = (0, import_react48.forwardRef)(({ className, onBack, ...props }, ref) => {
16139
+ var QuizTitle = (0, import_react49.forwardRef)(({ className, onBack, ...props }, ref) => {
15620
16140
  const {
15621
16141
  quiz,
15622
16142
  currentQuestionIndex,
@@ -15626,7 +16146,7 @@ var QuizTitle = (0, import_react48.forwardRef)(({ className, onBack, ...props },
15626
16146
  formatTime: formatTime2,
15627
16147
  isStarted
15628
16148
  } = useQuizStore();
15629
- const [showExitConfirmation, setShowExitConfirmation] = (0, import_react48.useState)(false);
16149
+ const [showExitConfirmation, setShowExitConfirmation] = (0, import_react49.useState)(false);
15630
16150
  const totalQuestions = getTotalQuestions();
15631
16151
  const quizTitle = getQuizTitle();
15632
16152
  const handleBackClick = () => {
@@ -15795,7 +16315,7 @@ var QuizQuestionList = ({
15795
16315
  )
15796
16316
  ] });
15797
16317
  };
15798
- var QuizFooter = (0, import_react48.forwardRef)(
16318
+ var QuizFooter = (0, import_react49.forwardRef)(
15799
16319
  ({
15800
16320
  className,
15801
16321
  onGoToSimulated,
@@ -15829,8 +16349,8 @@ var QuizFooter = (0, import_react48.forwardRef)(
15829
16349
  const currentAnswer = getCurrentAnswer();
15830
16350
  const currentQuestion = getCurrentQuestion();
15831
16351
  const isCurrentQuestionSkipped = currentQuestion ? getQuestionStatusFromUserAnswers(currentQuestion.id) === "skipped" : false;
15832
- const [activeModal, setActiveModal] = (0, import_react48.useState)(null);
15833
- const [filterType, setFilterType] = (0, import_react48.useState)("all");
16352
+ const [activeModal, setActiveModal] = (0, import_react49.useState)(null);
16353
+ const [filterType, setFilterType] = (0, import_react49.useState)("all");
15834
16354
  const openModal = (modalName) => setActiveModal(modalName);
15835
16355
  const closeModal = () => setActiveModal(null);
15836
16356
  const isModalOpen = (modalName) => activeModal === modalName;
@@ -16172,7 +16692,7 @@ var QuizFooter = (0, import_react48.forwardRef)(
16172
16692
  );
16173
16693
 
16174
16694
  // src/components/Quiz/QuizResult.tsx
16175
- var import_react49 = require("react");
16695
+ var import_react50 = require("react");
16176
16696
  var import_phosphor_react36 = require("phosphor-react");
16177
16697
  var import_jsx_runtime71 = require("react/jsx-runtime");
16178
16698
  var QuizBadge = ({
@@ -16194,15 +16714,15 @@ var QuizBadge = ({
16194
16714
  return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Badge_default, { variant: "solid", action: "info", "data-testid": "quiz-badge", children: subtype });
16195
16715
  }
16196
16716
  };
16197
- var QuizHeaderResult = (0, import_react49.forwardRef)(
16717
+ var QuizHeaderResult = (0, import_react50.forwardRef)(
16198
16718
  ({ className, ...props }, ref) => {
16199
16719
  const {
16200
16720
  getQuestionResultByQuestionId,
16201
16721
  getCurrentQuestion,
16202
16722
  questionsResult
16203
16723
  } = useQuizStore();
16204
- const [status, setStatus] = (0, import_react49.useState)(void 0);
16205
- (0, import_react49.useEffect)(() => {
16724
+ const [status, setStatus] = (0, import_react50.useState)(void 0);
16725
+ (0, import_react50.useEffect)(() => {
16206
16726
  const cq = getCurrentQuestion();
16207
16727
  if (!cq) {
16208
16728
  setStatus(void 0);
@@ -16266,7 +16786,7 @@ var QuizHeaderResult = (0, import_react49.forwardRef)(
16266
16786
  );
16267
16787
  }
16268
16788
  );
16269
- var QuizResultHeaderTitle = (0, import_react49.forwardRef)(({ className, showBadge = true, onRepeat, canRetry, ...props }, ref) => {
16789
+ var QuizResultHeaderTitle = (0, import_react50.forwardRef)(({ className, showBadge = true, onRepeat, canRetry, ...props }, ref) => {
16270
16790
  const { quiz } = useQuizStore();
16271
16791
  return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
16272
16792
  "div",
@@ -16296,7 +16816,7 @@ var QuizResultHeaderTitle = (0, import_react49.forwardRef)(({ className, showBad
16296
16816
  }
16297
16817
  );
16298
16818
  });
16299
- var QuizResultTitle = (0, import_react49.forwardRef)(({ className, ...props }, ref) => {
16819
+ var QuizResultTitle = (0, import_react50.forwardRef)(({ className, ...props }, ref) => {
16300
16820
  const { getQuizTitle } = useQuizStore();
16301
16821
  const quizTitle = getQuizTitle();
16302
16822
  return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
@@ -16340,7 +16860,7 @@ var calculateAnswerStatistics = (answers) => {
16340
16860
  }
16341
16861
  return stats;
16342
16862
  };
16343
- var QuizResultPerformance = (0, import_react49.forwardRef)(({ showDetails = true, ...props }, ref) => {
16863
+ var QuizResultPerformance = (0, import_react50.forwardRef)(({ showDetails = true, ...props }, ref) => {
16344
16864
  const {
16345
16865
  getTotalQuestions,
16346
16866
  formatTime: formatTime2,
@@ -16445,7 +16965,7 @@ var QuizResultPerformance = (0, import_react49.forwardRef)(({ showDetails = true
16445
16965
  }
16446
16966
  );
16447
16967
  });
16448
- var QuizListResult = (0, import_react49.forwardRef)(({ className, onSubjectClick, ...props }, ref) => {
16968
+ var QuizListResult = (0, import_react50.forwardRef)(({ className, onSubjectClick, ...props }, ref) => {
16449
16969
  const { getQuestionsGroupedBySubject } = useQuizStore();
16450
16970
  const { isDark } = useTheme();
16451
16971
  const groupedQuestions = getQuestionsGroupedBySubject();
@@ -16575,7 +17095,7 @@ var BreadcrumbMenu = ({
16575
17095
  };
16576
17096
 
16577
17097
  // src/components/BreadcrumbMenu/useBreadcrumbBuilder.ts
16578
- var import_react50 = require("react");
17098
+ var import_react51 = require("react");
16579
17099
 
16580
17100
  // src/components/BreadcrumbMenu/breadcrumbStore.ts
16581
17101
  var import_zustand12 = require("zustand");
@@ -16704,7 +17224,7 @@ var useBreadcrumbBuilder = (config) => {
16704
17224
  (level) => isBreadcrumbWithData(level) ? level.data : null
16705
17225
  );
16706
17226
  const levelUrlIds = levels.map((level) => level.urlId);
16707
- (0, import_react50.useEffect)(() => {
17227
+ (0, import_react51.useEffect)(() => {
16708
17228
  const newBreadcrumbs = [root];
16709
17229
  const previousIds = [];
16710
17230
  for (const level of levels) {
@@ -16736,11 +17256,11 @@ var useBreadcrumbBuilder = (config) => {
16736
17256
  };
16737
17257
 
16738
17258
  // src/components/BreadcrumbMenu/useUrlParams.ts
16739
- var import_react51 = require("react");
17259
+ var import_react52 = require("react");
16740
17260
  var import_react_router_dom4 = require("react-router-dom");
16741
17261
  var useUrlParams = (config) => {
16742
17262
  const location = (0, import_react_router_dom4.useLocation)();
16743
- return (0, import_react51.useMemo)(() => {
17263
+ return (0, import_react52.useMemo)(() => {
16744
17264
  const segments = location.pathname.split("/").filter(Boolean);
16745
17265
  const params = {};
16746
17266
  for (const [key, index] of Object.entries(config)) {
@@ -16751,15 +17271,15 @@ var useUrlParams = (config) => {
16751
17271
  };
16752
17272
 
16753
17273
  // src/hooks/useAppInitialization.ts
16754
- var import_react53 = require("react");
17274
+ var import_react54 = require("react");
16755
17275
 
16756
17276
  // src/hooks/useInstitution.ts
16757
- var import_react52 = require("react");
17277
+ var import_react53 = require("react");
16758
17278
  function useInstitutionId() {
16759
- const [institutionId, setInstitutionId] = (0, import_react52.useState)(() => {
17279
+ const [institutionId, setInstitutionId] = (0, import_react53.useState)(() => {
16760
17280
  return document.querySelector('meta[name="institution-id"]')?.getAttribute("content") ?? null;
16761
17281
  });
16762
- (0, import_react52.useEffect)(() => {
17282
+ (0, import_react53.useEffect)(() => {
16763
17283
  const metaTag = document.querySelector('meta[name="institution-id"]');
16764
17284
  if (!metaTag) return;
16765
17285
  const observer = new MutationObserver(() => {
@@ -16926,7 +17446,7 @@ var useAuthStore = (0, import_zustand14.create)()(
16926
17446
  function useAppInitialization() {
16927
17447
  const getInstitutionId = useInstitutionId();
16928
17448
  const { initialize, initialized, institutionId } = useAppStore();
16929
- const authFunctions = (0, import_react53.useMemo)(
17449
+ const authFunctions = (0, import_react54.useMemo)(
16930
17450
  () => ({
16931
17451
  checkAuth: async () => {
16932
17452
  const { sessionInfo, tokens } = useAuthStore.getState();
@@ -16963,7 +17483,7 @@ function useAppInitialization() {
16963
17483
  }
16964
17484
 
16965
17485
  // src/hooks/useAppContent.ts
16966
- var import_react54 = require("react");
17486
+ var import_react55 = require("react");
16967
17487
  var import_react_router_dom5 = require("react-router-dom");
16968
17488
  function useAppContent(config) {
16969
17489
  const navigate = (0, import_react_router_dom5.useNavigate)();
@@ -16989,20 +17509,20 @@ function useAppContent(config) {
16989
17509
  navigate("/painel");
16990
17510
  }
16991
17511
  };
16992
- const handleSetSelectedProfile = (0, import_react54.useCallback)(
17512
+ const handleSetSelectedProfile = (0, import_react55.useCallback)(
16993
17513
  (profile) => {
16994
17514
  setSelectedProfile(profile);
16995
17515
  },
16996
17516
  [setSelectedProfile]
16997
17517
  );
16998
- const handleClearParamsFromURL = (0, import_react54.useCallback)(() => {
17518
+ const handleClearParamsFromURL = (0, import_react55.useCallback)(() => {
16999
17519
  if (onClearParamsFromURL) {
17000
17520
  onClearParamsFromURL();
17001
17521
  } else {
17002
17522
  globalThis.location.replace("/painel");
17003
17523
  }
17004
17524
  }, [onClearParamsFromURL]);
17005
- const handleError = (0, import_react54.useCallback)(
17525
+ const handleError = (0, import_react55.useCallback)(
17006
17526
  (error) => {
17007
17527
  if (onError) {
17008
17528
  onError(error);
@@ -17013,7 +17533,7 @@ function useAppContent(config) {
17013
17533
  },
17014
17534
  [navigate, onError]
17015
17535
  );
17016
- const urlAuthConfig = (0, import_react54.useMemo)(
17536
+ const urlAuthConfig = (0, import_react55.useMemo)(
17017
17537
  () => ({
17018
17538
  setTokens,
17019
17539
  setSessionInfo,
@@ -17039,10 +17559,10 @@ function useAppContent(config) {
17039
17559
  );
17040
17560
  useUrlAuthentication(urlAuthConfig);
17041
17561
  const { sessionInfo } = useAuth();
17042
- const institutionIdToUse = (0, import_react54.useMemo)(() => {
17562
+ const institutionIdToUse = (0, import_react55.useMemo)(() => {
17043
17563
  return sessionInfo?.institutionId || getInstitutionId;
17044
17564
  }, [sessionInfo?.institutionId, getInstitutionId]);
17045
- (0, import_react54.useEffect)(() => {
17565
+ (0, import_react55.useEffect)(() => {
17046
17566
  if (institutionIdToUse && !initialized) {
17047
17567
  initialize(institutionIdToUse);
17048
17568
  }
@@ -17054,9 +17574,30 @@ function useAppContent(config) {
17054
17574
  };
17055
17575
  }
17056
17576
 
17577
+ // src/store/questionFiltersStore.ts
17578
+ var import_zustand15 = require("zustand");
17579
+ var useQuestionFiltersStore = (0, import_zustand15.create)((set) => ({
17580
+ draftFilters: null,
17581
+ appliedFilters: null,
17582
+ setDraftFilters: (filters) => {
17583
+ set({ draftFilters: filters });
17584
+ },
17585
+ applyFilters: () => {
17586
+ set((state) => ({
17587
+ appliedFilters: state.draftFilters
17588
+ }));
17589
+ },
17590
+ clearFilters: () => {
17591
+ set({
17592
+ draftFilters: null,
17593
+ appliedFilters: null
17594
+ });
17595
+ }
17596
+ }));
17597
+
17057
17598
  // src/components/ActivityCardQuestionBanks/ActivityCardQuestionBanks.tsx
17058
17599
  var import_phosphor_react37 = require("phosphor-react");
17059
- var import_react55 = require("react");
17600
+ var import_react56 = require("react");
17060
17601
  var import_jsx_runtime73 = require("react/jsx-runtime");
17061
17602
  var ActivityCardQuestionBanks = ({
17062
17603
  question,
@@ -17068,7 +17609,7 @@ var ActivityCardQuestionBanks = ({
17068
17609
  assunto,
17069
17610
  enunciado
17070
17611
  } = {}) => {
17071
- const alternatives = (0, import_react55.useMemo)(() => {
17612
+ const alternatives = (0, import_react56.useMemo)(() => {
17072
17613
  if (!question?.options || questionType !== "ALTERNATIVA" /* ALTERNATIVA */)
17073
17614
  return [];
17074
17615
  const correctOptionIds2 = question.correctOptionIds || [];
@@ -17082,13 +17623,13 @@ var ActivityCardQuestionBanks = ({
17082
17623
  };
17083
17624
  });
17084
17625
  }, [question, questionType]);
17085
- const correctOptionId = (0, import_react55.useMemo)(() => {
17626
+ const correctOptionId = (0, import_react56.useMemo)(() => {
17086
17627
  if (!question?.correctOptionIds || question.correctOptionIds.length === 0) {
17087
17628
  return void 0;
17088
17629
  }
17089
17630
  return question.correctOptionIds[0];
17090
17631
  }, [question]);
17091
- const multipleChoices = (0, import_react55.useMemo)(() => {
17632
+ const multipleChoices = (0, import_react56.useMemo)(() => {
17092
17633
  if (!question?.options || questionType !== "MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */)
17093
17634
  return [];
17094
17635
  const correctOptionIds2 = question.correctOptionIds || [];
@@ -17102,7 +17643,7 @@ var ActivityCardQuestionBanks = ({
17102
17643
  };
17103
17644
  });
17104
17645
  }, [question, questionType]);
17105
- const correctOptionIds = (0, import_react55.useMemo)(() => {
17646
+ const correctOptionIds = (0, import_react56.useMemo)(() => {
17106
17647
  return question?.correctOptionIds || [];
17107
17648
  }, [question]);
17108
17649
  const getStatusBadge2 = (status) => {
@@ -17285,7 +17826,7 @@ var formatDateToBrazilian = (dateString) => {
17285
17826
  };
17286
17827
 
17287
17828
  // src/components/ActivityDetails/ActivityDetails.tsx
17288
- var import_react56 = require("react");
17829
+ var import_react57 = require("react");
17289
17830
  var import_phosphor_react38 = require("phosphor-react");
17290
17831
  var import_jsx_runtime74 = require("react/jsx-runtime");
17291
17832
  var createTableColumns = (onCorrectActivity) => [
@@ -17383,20 +17924,20 @@ var ActivityDetails = ({
17383
17924
  mapSubjectNameToEnum
17384
17925
  }) => {
17385
17926
  const { isMobile } = useMobile();
17386
- const [page, setPage] = (0, import_react56.useState)(1);
17387
- const [limit, setLimit] = (0, import_react56.useState)(10);
17388
- const [sortBy, setSortBy] = (0, import_react56.useState)(void 0);
17389
- const [sortOrder, setSortOrder] = (0, import_react56.useState)(
17927
+ const [page, setPage] = (0, import_react57.useState)(1);
17928
+ const [limit, setLimit] = (0, import_react57.useState)(10);
17929
+ const [sortBy, setSortBy] = (0, import_react57.useState)(void 0);
17930
+ const [sortOrder, setSortOrder] = (0, import_react57.useState)(
17390
17931
  void 0
17391
17932
  );
17392
- const [data, setData] = (0, import_react56.useState)(null);
17393
- const [correctionData, setCorrectionData] = (0, import_react56.useState)(null);
17394
- const [loading, setLoading] = (0, import_react56.useState)(true);
17395
- const [error, setError] = (0, import_react56.useState)(null);
17396
- const [isModalOpen, setIsModalOpen] = (0, import_react56.useState)(false);
17397
- const [isViewOnlyModal, setIsViewOnlyModal] = (0, import_react56.useState)(false);
17398
- const [correctionError, setCorrectionError] = (0, import_react56.useState)(null);
17399
- (0, import_react56.useEffect)(() => {
17933
+ const [data, setData] = (0, import_react57.useState)(null);
17934
+ const [correctionData, setCorrectionData] = (0, import_react57.useState)(null);
17935
+ const [loading, setLoading] = (0, import_react57.useState)(true);
17936
+ const [error, setError] = (0, import_react57.useState)(null);
17937
+ const [isModalOpen, setIsModalOpen] = (0, import_react57.useState)(false);
17938
+ const [isViewOnlyModal, setIsViewOnlyModal] = (0, import_react57.useState)(false);
17939
+ const [correctionError, setCorrectionError] = (0, import_react57.useState)(null);
17940
+ (0, import_react57.useEffect)(() => {
17400
17941
  const loadData = async () => {
17401
17942
  if (!activityId) return;
17402
17943
  setLoading(true);
@@ -17419,7 +17960,7 @@ var ActivityDetails = ({
17419
17960
  };
17420
17961
  loadData();
17421
17962
  }, [activityId, page, limit, sortBy, sortOrder, fetchActivityDetails]);
17422
- const handleCorrectActivity = (0, import_react56.useCallback)(
17963
+ const handleCorrectActivity = (0, import_react57.useCallback)(
17423
17964
  async (studentId) => {
17424
17965
  const student = data?.students.find((s) => s.studentId === studentId);
17425
17966
  if (!student || !activityId) return;
@@ -17439,10 +17980,10 @@ var ActivityDetails = ({
17439
17980
  },
17440
17981
  [data?.students, activityId, fetchStudentCorrection]
17441
17982
  );
17442
- const handleCloseModal = (0, import_react56.useCallback)(() => {
17983
+ const handleCloseModal = (0, import_react57.useCallback)(() => {
17443
17984
  setIsModalOpen(false);
17444
17985
  }, []);
17445
- const handleObservationSubmit = (0, import_react56.useCallback)(
17986
+ const handleObservationSubmit = (0, import_react57.useCallback)(
17446
17987
  async (observation, files) => {
17447
17988
  if (!activityId || !correctionData?.studentId) return;
17448
17989
  try {
@@ -17459,7 +18000,7 @@ var ActivityDetails = ({
17459
18000
  },
17460
18001
  [activityId, correctionData?.studentId, submitObservation]
17461
18002
  );
17462
- const tableData = (0, import_react56.useMemo)(() => {
18003
+ const tableData = (0, import_react57.useMemo)(() => {
17463
18004
  if (!data?.students) return [];
17464
18005
  return data.students.map((student) => ({
17465
18006
  id: student.studentId,
@@ -17471,7 +18012,7 @@ var ActivityDetails = ({
17471
18012
  score: student.score
17472
18013
  }));
17473
18014
  }, [data?.students]);
17474
- const columns = (0, import_react56.useMemo)(
18015
+ const columns = (0, import_react57.useMemo)(
17475
18016
  () => createTableColumns(handleCorrectActivity),
17476
18017
  [handleCorrectActivity]
17477
18018
  );
@@ -17728,10 +18269,10 @@ var ActivityDetails = ({
17728
18269
  };
17729
18270
 
17730
18271
  // src/components/Support/Support.tsx
17731
- var import_react59 = require("react");
18272
+ var import_react60 = require("react");
17732
18273
  var import_react_hook_form = require("react-hook-form");
17733
18274
  var import_zod2 = require("@hookform/resolvers/zod");
17734
- var import_react60 = require("@phosphor-icons/react");
18275
+ var import_react61 = require("@phosphor-icons/react");
17735
18276
  var import_dayjs2 = __toESM(require("dayjs"));
17736
18277
 
17737
18278
  // src/components/Support/schema/index.ts
@@ -17754,7 +18295,7 @@ var supportSchema = import_zod.z.object({
17754
18295
  });
17755
18296
 
17756
18297
  // src/components/Support/components/TicketModal.tsx
17757
- var import_react58 = require("react");
18298
+ var import_react59 = require("react");
17758
18299
  var import_dayjs = __toESM(require("dayjs"));
17759
18300
  var import_pt_br = require("dayjs/locale/pt-br");
17760
18301
 
@@ -17834,19 +18375,19 @@ var mapInternalStatusToApi = (internalStatus) => {
17834
18375
  };
17835
18376
 
17836
18377
  // src/components/Support/utils/supportUtils.tsx
17837
- var import_react57 = require("@phosphor-icons/react");
18378
+ var import_react58 = require("@phosphor-icons/react");
17838
18379
  var import_jsx_runtime75 = require("react/jsx-runtime");
17839
18380
  var getCategoryIcon = (category, size = 16) => {
17840
18381
  if (!category) return null;
17841
18382
  switch (category) {
17842
18383
  case "acesso" /* ACESSO */:
17843
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react57.KeyIcon, { size });
18384
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react58.KeyIcon, { size });
17844
18385
  case "tecnico" /* TECNICO */:
17845
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react57.BugIcon, { size });
18386
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react58.BugIcon, { size });
17846
18387
  case "outros" /* OUTROS */:
17847
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react57.InfoIcon, { size });
18388
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react58.InfoIcon, { size });
17848
18389
  default:
17849
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react57.InfoIcon, { size });
18390
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react58.InfoIcon, { size });
17850
18391
  }
17851
18392
  };
17852
18393
 
@@ -17876,17 +18417,17 @@ var TicketModal = ({
17876
18417
  apiClient,
17877
18418
  userId
17878
18419
  }) => {
17879
- const [showCloseConfirmation, setShowCloseConfirmation] = (0, import_react58.useState)(false);
17880
- const [responseText, setResponseText] = (0, import_react58.useState)("");
17881
- const [answers, setAnswers] = (0, import_react58.useState)([]);
17882
- const [isSubmittingAnswer, setIsSubmittingAnswer] = (0, import_react58.useState)(false);
17883
- const [isLoadingAnswers, setIsLoadingAnswers] = (0, import_react58.useState)(false);
18420
+ const [showCloseConfirmation, setShowCloseConfirmation] = (0, import_react59.useState)(false);
18421
+ const [responseText, setResponseText] = (0, import_react59.useState)("");
18422
+ const [answers, setAnswers] = (0, import_react59.useState)([]);
18423
+ const [isSubmittingAnswer, setIsSubmittingAnswer] = (0, import_react59.useState)(false);
18424
+ const [isLoadingAnswers, setIsLoadingAnswers] = (0, import_react59.useState)(false);
17884
18425
  const handleCloseTicket = () => {
17885
18426
  onTicketClose?.(ticket.id);
17886
18427
  setShowCloseConfirmation(false);
17887
18428
  onClose();
17888
18429
  };
17889
- const fetchAnswers = (0, import_react58.useCallback)(async () => {
18430
+ const fetchAnswers = (0, import_react59.useCallback)(async () => {
17890
18431
  if (!ticket.id || ticket.status !== "respondido" /* RESPONDIDO */) return;
17891
18432
  setIsLoadingAnswers(true);
17892
18433
  try {
@@ -17925,7 +18466,7 @@ var TicketModal = ({
17925
18466
  }
17926
18467
  };
17927
18468
  const canCloseTicket = ticket.status !== "encerrado" /* ENCERRADO */;
17928
- (0, import_react58.useEffect)(() => {
18469
+ (0, import_react59.useEffect)(() => {
17929
18470
  if (isOpen) {
17930
18471
  setResponseText("");
17931
18472
  (async () => {
@@ -18263,7 +18804,7 @@ var TicketCard = ({
18263
18804
  getCategoryIcon(ticket.category, 18),
18264
18805
  getCategoryText(ticket.category)
18265
18806
  ] }),
18266
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.CaretRightIcon, { size: 24, className: "text-text-800" })
18807
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.CaretRightIcon, { size: 24, className: "text-text-800" })
18267
18808
  ] })
18268
18809
  ]
18269
18810
  },
@@ -18308,21 +18849,21 @@ var Support = ({
18308
18849
  onTicketCreated,
18309
18850
  onTicketClosed
18310
18851
  }) => {
18311
- const [activeTab, setActiveTab] = (0, import_react59.useState)("criar-pedido");
18312
- const [selectedProblem, setSelectedProblem] = (0, import_react59.useState)(null);
18313
- const [statusFilter, setStatusFilter] = (0, import_react59.useState)("todos");
18314
- const [categoryFilter, setCategoryFilter] = (0, import_react59.useState)("todos");
18315
- const [selectedTicket, setSelectedTicket] = (0, import_react59.useState)(
18852
+ const [activeTab, setActiveTab] = (0, import_react60.useState)("criar-pedido");
18853
+ const [selectedProblem, setSelectedProblem] = (0, import_react60.useState)(null);
18854
+ const [statusFilter, setStatusFilter] = (0, import_react60.useState)("todos");
18855
+ const [categoryFilter, setCategoryFilter] = (0, import_react60.useState)("todos");
18856
+ const [selectedTicket, setSelectedTicket] = (0, import_react60.useState)(
18316
18857
  null
18317
18858
  );
18318
- const [isModalOpen, setIsModalOpen] = (0, import_react59.useState)(false);
18319
- const [submitError, setSubmitError] = (0, import_react59.useState)(null);
18320
- const [showSuccessToast, setShowSuccessToast] = (0, import_react59.useState)(false);
18321
- const [showCloseSuccessToast, setShowCloseSuccessToast] = (0, import_react59.useState)(false);
18322
- const [showCloseErrorToast, setShowCloseErrorToast] = (0, import_react59.useState)(false);
18323
- const [allTickets, setAllTickets] = (0, import_react59.useState)([]);
18324
- const [loadingTickets, setLoadingTickets] = (0, import_react59.useState)(false);
18325
- const [currentPage, setCurrentPage] = (0, import_react59.useState)(1);
18859
+ const [isModalOpen, setIsModalOpen] = (0, import_react60.useState)(false);
18860
+ const [submitError, setSubmitError] = (0, import_react60.useState)(null);
18861
+ const [showSuccessToast, setShowSuccessToast] = (0, import_react60.useState)(false);
18862
+ const [showCloseSuccessToast, setShowCloseSuccessToast] = (0, import_react60.useState)(false);
18863
+ const [showCloseErrorToast, setShowCloseErrorToast] = (0, import_react60.useState)(false);
18864
+ const [allTickets, setAllTickets] = (0, import_react60.useState)([]);
18865
+ const [loadingTickets, setLoadingTickets] = (0, import_react60.useState)(false);
18866
+ const [currentPage, setCurrentPage] = (0, import_react60.useState)(1);
18326
18867
  const ITEMS_PER_PAGE = 10;
18327
18868
  const handlePrevPage = () => {
18328
18869
  if (currentPage > 1) {
@@ -18335,13 +18876,13 @@ var Support = ({
18335
18876
  setCurrentPage(currentPage + 1);
18336
18877
  }
18337
18878
  };
18338
- (0, import_react59.useEffect)(() => {
18879
+ (0, import_react60.useEffect)(() => {
18339
18880
  if (activeTab === "historico") {
18340
18881
  fetchTickets(statusFilter);
18341
18882
  setCurrentPage(1);
18342
18883
  }
18343
18884
  }, [activeTab, statusFilter]);
18344
- (0, import_react59.useEffect)(() => {
18885
+ (0, import_react60.useEffect)(() => {
18345
18886
  setCurrentPage(1);
18346
18887
  }, [categoryFilter]);
18347
18888
  const convertApiTicketToComponent = (apiTicket) => {
@@ -18471,17 +19012,17 @@ var Support = ({
18471
19012
  {
18472
19013
  id: "tecnico" /* TECNICO */,
18473
19014
  title: "T\xE9cnico",
18474
- icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.BugIcon, { size: 24 })
19015
+ icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.BugIcon, { size: 24 })
18475
19016
  },
18476
19017
  {
18477
19018
  id: "acesso" /* ACESSO */,
18478
19019
  title: "Acesso",
18479
- icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.KeyIcon, { size: 24 })
19020
+ icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.KeyIcon, { size: 24 })
18480
19021
  },
18481
19022
  {
18482
19023
  id: "outros" /* OUTROS */,
18483
19024
  title: "Outros",
18484
- icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.InfoIcon, { size: 24 })
19025
+ icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.InfoIcon, { size: 24 })
18485
19026
  }
18486
19027
  ];
18487
19028
  const emptyImage = emptyStateImage || suporthistory_default;
@@ -18601,15 +19142,15 @@ var Support = ({
18601
19142
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(SelectContent, { children: [
18602
19143
  /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(SelectItem, { value: "todos", children: "Todos" }),
18603
19144
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(SelectItem, { value: "tecnico" /* TECNICO */, children: [
18604
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.BugIcon, { size: 16 }),
19145
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.BugIcon, { size: 16 }),
18605
19146
  " T\xE9cnico"
18606
19147
  ] }),
18607
19148
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(SelectItem, { value: "acesso" /* ACESSO */, children: [
18608
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.KeyIcon, { size: 16 }),
19149
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.KeyIcon, { size: 16 }),
18609
19150
  " Acesso"
18610
19151
  ] }),
18611
19152
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(SelectItem, { value: "outros" /* OUTROS */, children: [
18612
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.InfoIcon, { size: 16 }),
19153
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react61.InfoIcon, { size: 16 }),
18613
19154
  " Outros"
18614
19155
  ] })
18615
19156
  ] })
@@ -18852,8 +19393,10 @@ var Support_default = Support;
18852
19393
  VideoPlayer,
18853
19394
  Whiteboard,
18854
19395
  cn,
19396
+ createActivityFiltersDataHook,
18855
19397
  createNotificationStore,
18856
19398
  createNotificationsHook,
19399
+ createUseActivityFiltersData,
18857
19400
  createUseNotificationStore,
18858
19401
  createUseNotifications,
18859
19402
  createZustandAuthAdapter,
@@ -18897,6 +19440,7 @@ var Support_default = Support;
18897
19440
  useBreadcrumbBuilder,
18898
19441
  useInstitutionId,
18899
19442
  useMobile,
19443
+ useQuestionFiltersStore,
18900
19444
  useQuizStore,
18901
19445
  useRouteAuth,
18902
19446
  useTableFilter,