analytica-frontend-lib 1.2.67 → 1.2.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/ActivityCardQuestionBanks/index.js +827 -244
  2. package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
  3. package/dist/ActivityCardQuestionBanks/index.mjs +828 -237
  4. package/dist/ActivityCardQuestionBanks/index.mjs.map +1 -1
  5. package/dist/ActivityCardQuestionPreview/index.js +650 -67
  6. package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
  7. package/dist/ActivityCardQuestionPreview/index.mjs +655 -64
  8. package/dist/ActivityCardQuestionPreview/index.mjs.map +1 -1
  9. package/dist/ActivityDetails/index.d.ts +6 -4
  10. package/dist/ActivityDetails/index.d.ts.map +1 -1
  11. package/dist/ActivityDetails/index.js +2381 -1007
  12. package/dist/ActivityDetails/index.js.map +1 -1
  13. package/dist/ActivityDetails/index.mjs +2352 -953
  14. package/dist/ActivityDetails/index.mjs.map +1 -1
  15. package/dist/ActivityPreview/index.js +1175 -592
  16. package/dist/ActivityPreview/index.js.map +1 -1
  17. package/dist/ActivityPreview/index.mjs +1171 -580
  18. package/dist/ActivityPreview/index.mjs.map +1 -1
  19. package/dist/CorrectActivityModal/index.d.ts +4 -2
  20. package/dist/CorrectActivityModal/index.d.ts.map +1 -1
  21. package/dist/CorrectActivityModal/index.js +1999 -527
  22. package/dist/CorrectActivityModal/index.js.map +1 -1
  23. package/dist/CorrectActivityModal/index.mjs +2030 -529
  24. package/dist/CorrectActivityModal/index.mjs.map +1 -1
  25. package/dist/Quiz/index.js +2 -0
  26. package/dist/Quiz/index.js.map +1 -1
  27. package/dist/Quiz/index.mjs +2 -0
  28. package/dist/Quiz/index.mjs.map +1 -1
  29. package/dist/hooks/useSendActivity/index.d.ts +47 -0
  30. package/dist/hooks/useSendActivity/index.d.ts.map +1 -0
  31. package/dist/hooks/useSendActivity/index.js +194 -0
  32. package/dist/hooks/useSendActivity/index.js.map +1 -0
  33. package/dist/hooks/useSendActivity/index.mjs +159 -0
  34. package/dist/hooks/useSendActivity/index.mjs.map +1 -0
  35. package/dist/hooks/useSendActivity.d.ts +47 -0
  36. package/dist/hooks/useSendActivity.d.ts.map +1 -0
  37. package/dist/index.d.ts +6 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +10284 -9202
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +10170 -9087
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/types/activities/index.d.ts +81 -0
  44. package/dist/types/activities/index.d.ts.map +1 -0
  45. package/dist/types/activities/index.js +52 -0
  46. package/dist/types/activities/index.js.map +1 -0
  47. package/dist/types/activities/index.mjs +25 -0
  48. package/dist/types/activities/index.mjs.map +1 -0
  49. package/dist/types/activities.d.ts +81 -0
  50. package/dist/types/activities.d.ts.map +1 -0
  51. package/dist/types/sendActivity/index.d.ts +127 -0
  52. package/dist/types/sendActivity/index.d.ts.map +1 -0
  53. package/dist/types/sendActivity/index.js +19 -0
  54. package/dist/types/sendActivity/index.js.map +1 -0
  55. package/dist/types/sendActivity/index.mjs +1 -0
  56. package/dist/types/sendActivity/index.mjs.map +1 -0
  57. package/dist/types/sendActivity.d.ts +127 -0
  58. package/dist/types/sendActivity.d.ts.map +1 -0
  59. package/dist/utils/questionRenderer/alternative/index.d.ts +8 -0
  60. package/dist/utils/questionRenderer/alternative/index.d.ts.map +1 -0
  61. package/dist/utils/questionRenderer/components/index.d.ts +25 -0
  62. package/dist/utils/questionRenderer/components/index.d.ts.map +1 -0
  63. package/dist/utils/questionRenderer/connectDots/index.d.ts +8 -0
  64. package/dist/utils/questionRenderer/connectDots/index.d.ts.map +1 -0
  65. package/dist/utils/questionRenderer/dissertative/index.d.ts +8 -0
  66. package/dist/utils/questionRenderer/dissertative/index.d.ts.map +1 -0
  67. package/dist/utils/questionRenderer/fill/index.d.ts +10 -0
  68. package/dist/utils/questionRenderer/fill/index.d.ts.map +1 -0
  69. package/dist/utils/questionRenderer/image/index.d.ts +8 -0
  70. package/dist/utils/questionRenderer/image/index.d.ts.map +1 -0
  71. package/dist/utils/questionRenderer/index.d.ts +31 -0
  72. package/dist/utils/questionRenderer/index.d.ts.map +1 -0
  73. package/dist/utils/questionRenderer/multipleChoice/index.d.ts +8 -0
  74. package/dist/utils/questionRenderer/multipleChoice/index.d.ts.map +1 -0
  75. package/dist/utils/questionRenderer/trueOrFalse/index.d.ts +9 -0
  76. package/dist/utils/questionRenderer/trueOrFalse/index.d.ts.map +1 -0
  77. package/dist/utils/questionRenderer/types.d.ts +14 -0
  78. package/dist/utils/questionRenderer/types.d.ts.map +1 -0
  79. package/dist/utils/studentActivityCorrection/constants.d.ts +13 -0
  80. package/dist/utils/studentActivityCorrection/constants.d.ts.map +1 -0
  81. package/dist/utils/studentActivityCorrection/converter.d.ts +13 -0
  82. package/dist/utils/studentActivityCorrection/converter.d.ts.map +1 -0
  83. package/dist/utils/studentActivityCorrection/index.d.ts +13 -0
  84. package/dist/utils/studentActivityCorrection/index.d.ts.map +1 -0
  85. package/dist/utils/studentActivityCorrection/types.d.ts +84 -0
  86. package/dist/utils/studentActivityCorrection/types.d.ts.map +1 -0
  87. package/dist/utils/studentActivityCorrection/utils.d.ts +30 -0
  88. package/dist/utils/studentActivityCorrection/utils.d.ts.map +1 -0
  89. package/package.json +1 -1
  90. package/dist/types/studentActivityCorrection.d.ts +0 -62
  91. package/dist/types/studentActivityCorrection.d.ts.map +0 -1
  92. package/dist/utils/questionRenderer.d.ts +0 -5
  93. package/dist/utils/questionRenderer.d.ts.map +0 -1
@@ -33,7 +33,7 @@ __export(ActivityCardQuestionPreview_exports, {
33
33
  ActivityCardQuestionPreview: () => ActivityCardQuestionPreview
34
34
  });
35
35
  module.exports = __toCommonJS(ActivityCardQuestionPreview_exports);
36
- var import_react9 = require("react");
36
+ var import_react11 = require("react");
37
37
 
38
38
  // src/components/Accordation/Accordation.tsx
39
39
  var import_react3 = require("react");
@@ -3019,7 +3019,7 @@ var AlternativesList = ({
3019
3019
  const groupName = name || `alternatives-${uniqueId}`;
3020
3020
  const [actualValue, setActualValue] = (0, import_react7.useState)(value);
3021
3021
  const isReadonly = mode === "readonly";
3022
- const getStatusStyles = (status, isReadonly2) => {
3022
+ const getStatusStyles2 = (status, isReadonly2) => {
3023
3023
  const hoverClass = isReadonly2 ? "" : "hover:bg-background-50";
3024
3024
  switch (status) {
3025
3025
  case "correct":
@@ -3030,7 +3030,7 @@ var AlternativesList = ({
3030
3030
  return `bg-background border-border-100 ${hoverClass}`;
3031
3031
  }
3032
3032
  };
3033
- const getStatusBadge = (status) => {
3033
+ const getStatusBadge2 = (status) => {
3034
3034
  switch (status) {
3035
3035
  case "correct":
3036
3036
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Badge_default, { variant: "solid", action: "success", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_phosphor_react5.CheckCircle, {}), children: "Resposta correta" });
@@ -3060,8 +3060,8 @@ var AlternativesList = ({
3060
3060
  } else if (isCorrectAnswer) {
3061
3061
  displayStatus = "correct";
3062
3062
  }
3063
- const statusStyles = getStatusStyles(displayStatus, true);
3064
- const statusBadge = getStatusBadge(displayStatus);
3063
+ const statusStyles = getStatusStyles2(displayStatus, true);
3064
+ const statusBadge = getStatusBadge2(displayStatus);
3065
3065
  const renderRadio = () => {
3066
3066
  const radioClasses = `w-6 h-6 rounded-full border-2 cursor-default transition-all duration-200 flex items-center justify-center ${isUserSelected ? "border-primary-950 bg-background" : "border-border-400 bg-background"}`;
3067
3067
  const dotClasses = "w-3 h-3 rounded-full bg-primary-950 transition-all duration-200";
@@ -3152,8 +3152,8 @@ var AlternativesList = ({
3152
3152
  className: cn("flex flex-col", getLayoutClasses(), className),
3153
3153
  children: alternatives.map((alternative, index) => {
3154
3154
  const alternativeId = alternative.value || `alt-${index}`;
3155
- const statusStyles = getStatusStyles(alternative.status, false);
3156
- const statusBadge = getStatusBadge(alternative.status);
3155
+ const statusStyles = getStatusStyles2(alternative.status, false);
3156
+ const statusBadge = getStatusBadge2(alternative.status);
3157
3157
  if (layout === "detailed") {
3158
3158
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3159
3159
  "div",
@@ -3259,21 +3259,56 @@ var HeaderAlternative = (0, import_react7.forwardRef)(
3259
3259
  }
3260
3260
  );
3261
3261
 
3262
- // src/types/questionTypes.ts
3263
- var questionTypeLabels = {
3264
- ["ALTERNATIVA" /* ALTERNATIVA */]: "Alternativa",
3265
- ["VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */]: "Verdadeiro ou Falso",
3266
- ["DISSERTATIVA" /* DISSERTATIVA */]: "Discursiva",
3267
- ["IMAGEM" /* IMAGEM */]: "Imagem",
3268
- ["MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */]: "M\xFAltipla Escolha",
3269
- ["LIGAR_PONTOS" /* LIGAR_PONTOS */]: "Ligar Pontos",
3270
- ["PREENCHER" /* PREENCHER */]: "Preencher Lacunas"
3262
+ // src/utils/questionRenderer/alternative/index.tsx
3263
+ var import_jsx_runtime15 = require("react/jsx-runtime");
3264
+ var renderQuestionAlternative = ({
3265
+ question,
3266
+ result
3267
+ }) => {
3268
+ const alternatives = question.options?.map((option) => {
3269
+ const isCorrectOption = result?.options?.find((op) => op.id === option.id)?.isCorrect || false;
3270
+ const isSelected = result?.selectedOptions?.some(
3271
+ (selectedOption) => selectedOption.optionId === option.id
3272
+ ) || false;
3273
+ const shouldShowCorrectAnswers = result?.answerStatus !== "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */;
3274
+ let status;
3275
+ if (shouldShowCorrectAnswers) {
3276
+ if (isCorrectOption) {
3277
+ status = "correct" /* CORRECT */;
3278
+ } else if (isSelected && !isCorrectOption) {
3279
+ status = "incorrect" /* INCORRECT */;
3280
+ } else {
3281
+ status = "neutral" /* NEUTRAL */;
3282
+ }
3283
+ } else {
3284
+ status = "neutral" /* NEUTRAL */;
3285
+ }
3286
+ return {
3287
+ label: option.option,
3288
+ value: option.id,
3289
+ status
3290
+ };
3291
+ });
3292
+ if (!alternatives || alternatives.length === 0) {
3293
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text_default, { size: "sm", weight: "normal", children: "N\xE3o h\xE1 Alternativas" }) });
3294
+ }
3295
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3296
+ AlternativesList,
3297
+ {
3298
+ mode: "readonly",
3299
+ name: `question-${question.id}`,
3300
+ layout: "compact",
3301
+ alternatives,
3302
+ selectedValue: result?.selectedOptions?.[0]?.optionId || ""
3303
+ },
3304
+ `question-${question.id}`
3305
+ ) });
3271
3306
  };
3272
3307
 
3273
3308
  // src/components/MultipleChoice/MultipleChoice.tsx
3274
3309
  var import_react8 = require("react");
3275
3310
  var import_phosphor_react6 = require("phosphor-react");
3276
- var import_jsx_runtime15 = require("react/jsx-runtime");
3311
+ var import_jsx_runtime16 = require("react/jsx-runtime");
3277
3312
  var MultipleChoiceList = ({
3278
3313
  disabled = false,
3279
3314
  className = "",
@@ -3287,17 +3322,17 @@ var MultipleChoiceList = ({
3287
3322
  (0, import_react8.useEffect)(() => {
3288
3323
  setActualValue(selectedValues);
3289
3324
  }, [selectedValues]);
3290
- const getStatusBadge = (status) => {
3325
+ const getStatusBadge2 = (status) => {
3291
3326
  switch (status) {
3292
3327
  case "correct":
3293
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Badge_default, { variant: "solid", action: "success", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_phosphor_react6.CheckCircle, {}), children: "Resposta correta" });
3328
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Badge_default, { variant: "solid", action: "success", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_phosphor_react6.CheckCircle, {}), children: "Resposta correta" });
3294
3329
  case "incorrect":
3295
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Badge_default, { variant: "solid", action: "error", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_phosphor_react6.XCircle, {}), children: "Resposta incorreta" });
3330
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Badge_default, { variant: "solid", action: "error", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_phosphor_react6.XCircle, {}), children: "Resposta incorreta" });
3296
3331
  default:
3297
3332
  return null;
3298
3333
  }
3299
3334
  };
3300
- const getStatusStyles = (status) => {
3335
+ const getStatusStyles2 = (status) => {
3301
3336
  switch (status) {
3302
3337
  case "correct":
3303
3338
  return "bg-success-background border-success-300";
@@ -3313,14 +3348,14 @@ var MultipleChoiceList = ({
3313
3348
  isSelected ? "border-primary-950 bg-primary-950 text-text" : "border-border-400 bg-background",
3314
3349
  isDisabled && "opacity-40 cursor-not-allowed"
3315
3350
  );
3316
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: checkboxClasses, children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_phosphor_react6.Check, { size: 16, weight: "bold" }) });
3351
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: checkboxClasses, children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_phosphor_react6.Check, { size: 16, weight: "bold" }) });
3317
3352
  };
3318
3353
  if (mode === "readonly") {
3319
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn("flex flex-col gap-2", className), children: choices.map((choice, i) => {
3354
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: cn("flex flex-col gap-2", className), children: choices.map((choice, i) => {
3320
3355
  const isSelected = actualValue?.includes(choice.value) || false;
3321
- const statusStyles = getStatusStyles(choice.status);
3322
- const statusBadge = getStatusBadge(choice.status);
3323
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
3356
+ const statusStyles = getStatusStyles2(choice.status);
3357
+ const statusBadge = getStatusBadge2(choice.status);
3358
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
3324
3359
  "div",
3325
3360
  {
3326
3361
  className: cn(
@@ -3329,9 +3364,9 @@ var MultipleChoiceList = ({
3329
3364
  choice.disabled ? "opacity-50 cursor-not-allowed" : ""
3330
3365
  ),
3331
3366
  children: [
3332
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2 flex-1", children: [
3367
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 flex-1", children: [
3333
3368
  renderVisualCheckbox(isSelected, choice.disabled || disabled),
3334
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3369
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3335
3370
  "span",
3336
3371
  {
3337
3372
  className: cn(
@@ -3343,14 +3378,14 @@ var MultipleChoiceList = ({
3343
3378
  }
3344
3379
  )
3345
3380
  ] }),
3346
- statusBadge && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex-shrink-0", children: statusBadge })
3381
+ statusBadge && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex-shrink-0", children: statusBadge })
3347
3382
  ]
3348
3383
  },
3349
3384
  `readonly-${choice.value}-${i}`
3350
3385
  );
3351
3386
  }) });
3352
3387
  }
3353
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3388
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3354
3389
  "div",
3355
3390
  {
3356
3391
  className: cn(
@@ -3358,7 +3393,7 @@ var MultipleChoiceList = ({
3358
3393
  disabled ? "opacity-50 cursor-not-allowed" : "",
3359
3394
  className
3360
3395
  ),
3361
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3396
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3362
3397
  CheckboxList_default,
3363
3398
  {
3364
3399
  name,
@@ -3368,12 +3403,12 @@ var MultipleChoiceList = ({
3368
3403
  onHandleSelectedValues?.(v);
3369
3404
  },
3370
3405
  disabled,
3371
- children: choices.map((choice, i) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
3406
+ children: choices.map((choice, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
3372
3407
  "div",
3373
3408
  {
3374
3409
  className: "flex flex-row gap-2 items-center",
3375
3410
  children: [
3376
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3411
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3377
3412
  CheckboxListItem,
3378
3413
  {
3379
3414
  value: choice.value,
@@ -3381,7 +3416,7 @@ var MultipleChoiceList = ({
3381
3416
  disabled: choice.disabled || disabled
3382
3417
  }
3383
3418
  ),
3384
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3419
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3385
3420
  "label",
3386
3421
  {
3387
3422
  htmlFor: `interactive-${choice.value}-${i}`,
@@ -3403,32 +3438,580 @@ var MultipleChoiceList = ({
3403
3438
  );
3404
3439
  };
3405
3440
 
3406
- // src/utils/questionRenderer.ts
3441
+ // src/utils/questionRenderer/multipleChoice/index.tsx
3442
+ var import_jsx_runtime17 = require("react/jsx-runtime");
3443
+ var renderQuestionMultipleChoice = ({
3444
+ question,
3445
+ result
3446
+ }) => {
3447
+ const choices = question.options?.map((option) => {
3448
+ const isCorrectOption = result?.options?.find((op) => op.id === option.id)?.isCorrect || false;
3449
+ const isSelected = result?.selectedOptions?.some(
3450
+ (op) => op.optionId === option.id
3451
+ );
3452
+ const shouldShowCorrectAnswers = result?.answerStatus !== "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */ && result?.answerStatus !== "NAO_RESPONDIDO" /* NAO_RESPONDIDO */;
3453
+ let status;
3454
+ if (shouldShowCorrectAnswers) {
3455
+ if (isCorrectOption) {
3456
+ status = "correct" /* CORRECT */;
3457
+ } else if (isSelected && !isCorrectOption) {
3458
+ status = "incorrect" /* INCORRECT */;
3459
+ } else {
3460
+ status = "neutral" /* NEUTRAL */;
3461
+ }
3462
+ } else {
3463
+ status = "neutral" /* NEUTRAL */;
3464
+ }
3465
+ return {
3466
+ label: option.option,
3467
+ value: option.id,
3468
+ status
3469
+ };
3470
+ });
3471
+ if (!choices || choices.length === 0) {
3472
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Text_default, { size: "sm", weight: "normal", children: "N\xE3o h\xE1 Escolhas M\xFAltiplas" }) });
3473
+ }
3474
+ const selectedValues = result?.selectedOptions?.map((op) => op.optionId) || [];
3475
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3476
+ MultipleChoiceList,
3477
+ {
3478
+ mode: "readonly",
3479
+ name: `question-${question.id}`,
3480
+ choices,
3481
+ selectedValues
3482
+ },
3483
+ `question-${question.id}`
3484
+ ) });
3485
+ };
3486
+
3487
+ // src/components/Quiz/QuizContent.tsx
3488
+ var import_react9 = require("react");
3489
+ var import_phosphor_react7 = require("phosphor-react");
3490
+
3491
+ // src/assets/img/mock-image-question.png
3492
+ var mock_image_question_default = "../mock-image-question-HEZCLFDL.png";
3493
+
3494
+ // src/components/Quiz/QuizContent.tsx
3495
+ var import_jsx_runtime18 = require("react/jsx-runtime");
3496
+ var getStatusStyles = (variantCorrect) => {
3497
+ switch (variantCorrect) {
3498
+ case "correct":
3499
+ return "bg-success-background border-success-300";
3500
+ case "incorrect":
3501
+ return "bg-error-background border-error-300";
3502
+ default:
3503
+ return "";
3504
+ }
3505
+ };
3506
+ var QuizSubTitle = (0, import_react9.forwardRef)(
3507
+ ({ subTitle, ...props }, ref) => {
3508
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "px-4 pb-2 pt-6", ...props, ref, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "font-bold text-lg text-text-950", children: subTitle }) });
3509
+ }
3510
+ );
3511
+ var QuizContainer = (0, import_react9.forwardRef)(({ children, className, ...props }, ref) => {
3512
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3513
+ "div",
3514
+ {
3515
+ ref,
3516
+ className: cn(
3517
+ "bg-background rounded-t-xl px-4 pt-4 pb-[80px] h-auto flex flex-col gap-4 mb-auto",
3518
+ className
3519
+ ),
3520
+ ...props,
3521
+ children
3522
+ }
3523
+ );
3524
+ });
3525
+
3526
+ // src/utils/questionRenderer/components/index.tsx
3527
+ var import_react10 = require("react");
3528
+ var import_phosphor_react8 = require("phosphor-react");
3529
+ var import_jsx_runtime19 = require("react/jsx-runtime");
3530
+ var getStatusBadge = (status) => {
3531
+ switch (status) {
3532
+ case "correct":
3533
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Badge_default, { variant: "solid", action: "success", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_phosphor_react8.CheckCircle, {}), children: "Resposta correta" });
3534
+ case "incorrect":
3535
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Badge_default, { variant: "solid", action: "error", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_phosphor_react8.XCircle, {}), children: "Resposta incorreta" });
3536
+ default:
3537
+ return null;
3538
+ }
3539
+ };
3540
+ var QuestionContainer = ({
3541
+ children,
3542
+ className
3543
+ }) => {
3544
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3545
+ "div",
3546
+ {
3547
+ className: cn(
3548
+ "bg-background rounded-t-xl px-4 pt-4 pb-[80px] h-auto flex flex-col gap-4 mb-auto",
3549
+ className
3550
+ ),
3551
+ children
3552
+ }
3553
+ );
3554
+ };
3555
+ var QuestionSubTitle = ({ subTitle }) => {
3556
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "px-4 pb-2 pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Text_default, { size: "md", weight: "bold", color: "text-text-950", children: subTitle }) });
3557
+ };
3558
+ var FillQuestionContent = ({
3559
+ question,
3560
+ result
3561
+ }) => {
3562
+ const text = question.statement || "";
3563
+ const baseId = (0, import_react10.useId)();
3564
+ const studentAnswers = {};
3565
+ try {
3566
+ if (result?.answer) {
3567
+ const parsed = typeof result.answer === "string" ? JSON.parse(result.answer) : result.answer;
3568
+ if (typeof parsed === "object") {
3569
+ Object.assign(studentAnswers, parsed);
3570
+ }
3571
+ }
3572
+ } catch (error) {
3573
+ console.error("Error parsing answer:", error);
3574
+ }
3575
+ const regex = /\{\{([\p{L}\p{M}\d_]+)\}\}/gu;
3576
+ const placeholders = [];
3577
+ let match;
3578
+ while ((match = regex.exec(text)) !== null) {
3579
+ placeholders.push(match[1]);
3580
+ }
3581
+ const correctAnswers = {};
3582
+ placeholders.forEach((placeholder) => {
3583
+ correctAnswers[placeholder] = studentAnswers[placeholder]?.correctAnswer || `[${placeholder}]`;
3584
+ });
3585
+ const addTextElement = (elements, textContent, elementCounter) => {
3586
+ if (textContent) {
3587
+ elements.push({
3588
+ element: textContent,
3589
+ id: `${baseId}-text-${++elementCounter.current}`
3590
+ });
3591
+ }
3592
+ };
3593
+ const renderGabaritoPlaceholder = (selectId, elementCounter) => {
3594
+ const correctAnswer = correctAnswers[selectId] || `[${selectId}]`;
3595
+ return {
3596
+ element: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3597
+ Text_default,
3598
+ {
3599
+ size: "md",
3600
+ weight: "semibold",
3601
+ color: "text-success-600",
3602
+ className: "inline-flex mb-2.5 border-b-2 border-success-600",
3603
+ children: correctAnswer
3604
+ },
3605
+ `${baseId}-gabarito-${selectId}`
3606
+ ),
3607
+ id: `${baseId}-gabarito-${++elementCounter.current}`
3608
+ };
3609
+ };
3610
+ const renderStudentPlaceholder = (selectId, elementCounter) => {
3611
+ const studentAnswer = studentAnswers[selectId];
3612
+ if (!studentAnswer) {
3613
+ return {
3614
+ element: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3615
+ Text_default,
3616
+ {
3617
+ size: "md",
3618
+ weight: "normal",
3619
+ color: "text-text-400",
3620
+ className: "inline-flex mb-2.5 border-b-2 border-text-300",
3621
+ children: "[N\xE3o respondido]"
3622
+ },
3623
+ `${baseId}-no-answer-${selectId}`
3624
+ ),
3625
+ id: `${baseId}-no-answer-${++elementCounter.current}`
3626
+ };
3627
+ }
3628
+ const isCorrect = studentAnswer.isCorrect;
3629
+ const colorClass = isCorrect ? "text-success-600 border-success-600" : "text-error-600 border-error-600";
3630
+ return {
3631
+ element: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3632
+ Badge_default,
3633
+ {
3634
+ variant: "solid",
3635
+ action: isCorrect ? "success" : "error",
3636
+ iconRight: isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_phosphor_react8.CheckCircle, {}) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_phosphor_react8.XCircle, {}),
3637
+ size: "large",
3638
+ className: `py-3 w-[180px] justify-between mb-2.5 ${colorClass}`,
3639
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-text-900", children: studentAnswer.answer })
3640
+ },
3641
+ `${baseId}-answer-${selectId}`
3642
+ ),
3643
+ id: `${baseId}-answer-${++elementCounter.current}`
3644
+ };
3645
+ };
3646
+ const renderTextWithAnswers = (isGabarito = false) => {
3647
+ const elements = [];
3648
+ let lastIndex = 0;
3649
+ const elementCounter = { current: 0 };
3650
+ regex.lastIndex = 0;
3651
+ while ((match = regex.exec(text)) !== null) {
3652
+ const [fullMatch, selectId] = match;
3653
+ const startIndex = match.index;
3654
+ if (startIndex > lastIndex) {
3655
+ addTextElement(
3656
+ elements,
3657
+ text.slice(lastIndex, startIndex),
3658
+ elementCounter
3659
+ );
3660
+ }
3661
+ const placeholderElement = isGabarito ? renderGabaritoPlaceholder(selectId, elementCounter) : renderStudentPlaceholder(selectId, elementCounter);
3662
+ elements.push(placeholderElement);
3663
+ lastIndex = match.index + fullMatch.length;
3664
+ }
3665
+ if (lastIndex < text.length) {
3666
+ addTextElement(elements, text.slice(lastIndex), elementCounter);
3667
+ }
3668
+ return elements;
3669
+ };
3670
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "pt-2 space-y-4", children: [
3671
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-2", children: [
3672
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Text_default, { size: "xs", weight: "normal", color: "text-text-500", children: "Resposta do aluno:" }),
3673
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "p-3 bg-background-50 rounded-lg border border-border-100", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "leading-8", children: renderTextWithAnswers(false).map((element) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3674
+ Text_default,
3675
+ {
3676
+ size: "md",
3677
+ weight: "normal",
3678
+ color: "text-text-900",
3679
+ children: element.element
3680
+ },
3681
+ element.id
3682
+ )) }) })
3683
+ ] }),
3684
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-2", children: [
3685
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Text_default, { size: "xs", weight: "normal", color: "text-text-500", children: "Gabarito:" }),
3686
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "p-3 bg-background-50 rounded-lg border border-border-100", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "leading-8", children: renderTextWithAnswers(true).map((element) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3687
+ Text_default,
3688
+ {
3689
+ size: "md",
3690
+ weight: "normal",
3691
+ color: "text-text-900",
3692
+ children: element.element
3693
+ },
3694
+ element.id
3695
+ )) }) })
3696
+ ] })
3697
+ ] });
3698
+ };
3699
+
3700
+ // src/utils/questionRenderer/trueOrFalse/index.tsx
3701
+ var import_jsx_runtime20 = require("react/jsx-runtime");
3702
+ var renderQuestionTrueOrFalse = ({
3703
+ question,
3704
+ result
3705
+ }) => {
3706
+ const options = question.options || [];
3707
+ const getLetterByIndex = (index) => String.fromCodePoint(97 + index);
3708
+ const shouldShowStatus = result?.answerStatus !== "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */ && result?.answerStatus !== "NAO_RESPONDIDO" /* NAO_RESPONDIDO */;
3709
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex flex-col gap-3.5", children: options.map((option, index) => {
3710
+ const statementIsTrue = result?.options?.find((op) => op.id === option.id)?.isCorrect || false;
3711
+ const isSelected = result?.selectedOptions?.some(
3712
+ (op) => op.optionId === option.id
3713
+ );
3714
+ const isStudentCorrect = statementIsTrue === isSelected;
3715
+ const variantCorrect = statementIsTrue ? "correct" : "incorrect";
3716
+ const studentAnswer = isSelected ? "V" : "F";
3717
+ const correctAnswer = statementIsTrue ? "V" : "F";
3718
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3719
+ "section",
3720
+ {
3721
+ className: "flex flex-col gap-2",
3722
+ children: [
3723
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3724
+ "div",
3725
+ {
3726
+ className: cn(
3727
+ "flex flex-row justify-between items-center gap-2 p-2 rounded-md border",
3728
+ shouldShowStatus ? getStatusStyles(variantCorrect) : ""
3729
+ ),
3730
+ children: [
3731
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-900", children: getLetterByIndex(index).concat(") ").concat(option.option) }),
3732
+ shouldShowStatus && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex-shrink-0", children: getStatusBadge(isStudentCorrect ? "correct" : "incorrect") })
3733
+ ]
3734
+ }
3735
+ ),
3736
+ shouldShowStatus && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { className: "flex flex-row gap-2 items-center", children: [
3737
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text_default, { size: "2xs", weight: "normal", color: "text-text-800", children: [
3738
+ "Resposta selecionada: ",
3739
+ studentAnswer
3740
+ ] }),
3741
+ !isStudentCorrect && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text_default, { size: "2xs", weight: "normal", color: "text-text-800", children: [
3742
+ "Resposta correta: ",
3743
+ correctAnswer
3744
+ ] })
3745
+ ] })
3746
+ ]
3747
+ },
3748
+ option.id || `option-${index}`
3749
+ );
3750
+ }) }) });
3751
+ };
3752
+
3753
+ // src/utils/questionRenderer/dissertative/index.tsx
3754
+ var import_jsx_runtime21 = require("react/jsx-runtime");
3755
+ var renderQuestionDissertative = ({
3756
+ result
3757
+ }) => {
3758
+ const localAnswer = result?.answer || "";
3759
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "pt-2 space-y-4", children: [
3760
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2", children: [
3761
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-950", children: "Resposta do aluno" }),
3762
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "p-3 bg-background-50 rounded-lg border border-border-100", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-700", children: localAnswer || "Nenhuma resposta fornecida" }) })
3763
+ ] }),
3764
+ result?.answerStatus === "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && result?.teacherFeedback && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2", children: [
3765
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text_default, { size: "xs", weight: "normal", color: "text-text-500", children: "Observa\xE7\xE3o do professor:" }),
3766
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "p-3 bg-background-50 rounded-lg border border-border-100", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-700", children: result.teacherFeedback }) })
3767
+ ] })
3768
+ ] });
3769
+ };
3770
+
3771
+ // src/utils/questionRenderer/fill/index.tsx
3772
+ var import_jsx_runtime22 = require("react/jsx-runtime");
3773
+ var renderQuestionFill = ({
3774
+ question,
3775
+ result
3776
+ }) => {
3777
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(FillQuestionContent, { question, result });
3778
+ };
3779
+
3780
+ // src/utils/questionRenderer/image/index.tsx
3781
+ var import_jsx_runtime23 = require("react/jsx-runtime");
3782
+ var renderQuestionImage = ({
3783
+ result
3784
+ }) => {
3785
+ const correctPositionRelative = { x: 0.48, y: 0.45 };
3786
+ const correctRadiusRelative = 0.1;
3787
+ let userPositionRelative = null;
3788
+ try {
3789
+ if (result?.answer) {
3790
+ const parsed = typeof result.answer === "string" ? JSON.parse(result.answer) : result.answer;
3791
+ if (parsed && typeof parsed.x === "number" && typeof parsed.y === "number") {
3792
+ userPositionRelative = { x: parsed.x, y: parsed.y };
3793
+ }
3794
+ }
3795
+ } catch {
3796
+ userPositionRelative = null;
3797
+ }
3798
+ const isCorrect = userPositionRelative ? Math.sqrt(
3799
+ Math.pow(userPositionRelative.x - correctPositionRelative.x, 2) + Math.pow(userPositionRelative.y - correctPositionRelative.y, 2)
3800
+ ) <= correctRadiusRelative : false;
3801
+ const getUserCircleColorClasses = () => {
3802
+ if (!userPositionRelative) return "";
3803
+ return isCorrect ? "bg-success-600/70 border-white" : "bg-indicator-error/70 border-white";
3804
+ };
3805
+ const getPositionDescription = (x, y) => {
3806
+ const xPercent = Math.round(x * 100);
3807
+ const yPercent = Math.round(y * 100);
3808
+ return `${xPercent}% da esquerda, ${yPercent}% do topo`;
3809
+ };
3810
+ const getSpatialRelationship = () => {
3811
+ if (!userPositionRelative) {
3812
+ return `\xC1rea correta localizada em ${getPositionDescription(
3813
+ correctPositionRelative.x,
3814
+ correctPositionRelative.y
3815
+ )}. Nenhuma resposta do aluno fornecida.`;
3816
+ }
3817
+ const deltaX = userPositionRelative.x - correctPositionRelative.x;
3818
+ const deltaY = userPositionRelative.y - correctPositionRelative.y;
3819
+ const distance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
3820
+ const distancePercent = Math.round(distance * 100);
3821
+ let direction = "";
3822
+ if (Math.abs(deltaX) > Math.abs(deltaY)) {
3823
+ direction = deltaX > 0 ? "\xE0 direita" : "\xE0 esquerda";
3824
+ } else {
3825
+ direction = deltaY > 0 ? "abaixo" : "acima";
3826
+ }
3827
+ const correctPos = getPositionDescription(
3828
+ correctPositionRelative.x,
3829
+ correctPositionRelative.y
3830
+ );
3831
+ const userPos = getPositionDescription(
3832
+ userPositionRelative.x,
3833
+ userPositionRelative.y
3834
+ );
3835
+ return `\xC1rea correta localizada em ${correctPos}. Resposta do aluno em ${userPos}. A resposta do aluno est\xE1 ${distancePercent}% de dist\xE2ncia ${direction} da \xE1rea correta. ${isCorrect ? "A resposta est\xE1 dentro da \xE1rea de toler\xE2ncia e \xE9 considerada correta." : "A resposta est\xE1 fora da \xE1rea de toler\xE2ncia e \xE9 considerada incorreta."}`;
3836
+ };
3837
+ const correctPositionDescription = getPositionDescription(
3838
+ correctPositionRelative.x,
3839
+ correctPositionRelative.y
3840
+ );
3841
+ const imageAltText = `Quest\xE3o de imagem com \xE1rea correta localizada em ${correctPositionDescription}`;
3842
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "pt-2 space-y-4", children: [
3843
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-4 text-xs", children: [
3844
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
3845
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-primary/70 border border-[#F8CC2E]" }),
3846
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-600", children: "\xC1rea correta" })
3847
+ ] }),
3848
+ userPositionRelative && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
3849
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
3850
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "w-3 h-3 rounded-full bg-success-600/70 border border-white" }),
3851
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-600", children: "Resposta correta" })
3852
+ ] }),
3853
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
3854
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-error/70 border border-white" }),
3855
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Text_default, { size: "sm", weight: "normal", color: "text-text-600", children: "Resposta incorreta" })
3856
+ ] })
3857
+ ] })
3858
+ ] }),
3859
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "relative w-full", children: [
3860
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "sr-only", children: getSpatialRelationship() }),
3861
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3862
+ "img",
3863
+ {
3864
+ src: mock_image_question_default,
3865
+ alt: imageAltText,
3866
+ className: "w-full h-auto rounded-md"
3867
+ }
3868
+ ),
3869
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3870
+ "div",
3871
+ {
3872
+ role: "img",
3873
+ "aria-label": `\xC1rea correta marcada em ${correctPositionDescription}`,
3874
+ className: "absolute rounded-full bg-indicator-primary/70 border-4 border-[#F8CC2E] pointer-events-none",
3875
+ style: {
3876
+ minWidth: "50px",
3877
+ maxWidth: "160px",
3878
+ width: "15%",
3879
+ aspectRatio: "1 / 1",
3880
+ left: `calc(${correctPositionRelative.x * 100}% - 7.5%)`,
3881
+ top: `calc(${correctPositionRelative.y * 100}% - 15%)`
3882
+ },
3883
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
3884
+ Text_default,
3885
+ {
3886
+ size: "sm",
3887
+ weight: "normal",
3888
+ color: "text-text-600",
3889
+ className: "sr-only",
3890
+ children: [
3891
+ "C\xEDrculo amarelo indicando a \xE1rea correta da resposta, posicionado em",
3892
+ " ",
3893
+ correctPositionDescription
3894
+ ]
3895
+ }
3896
+ )
3897
+ }
3898
+ ),
3899
+ userPositionRelative && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3900
+ "div",
3901
+ {
3902
+ role: "img",
3903
+ "aria-label": `Resposta do aluno marcada em ${getPositionDescription(
3904
+ userPositionRelative.x,
3905
+ userPositionRelative.y
3906
+ )}, ${isCorrect ? "correta" : "incorreta"}`,
3907
+ className: `absolute rounded-full border-4 pointer-events-none ${getUserCircleColorClasses()}`,
3908
+ style: {
3909
+ minWidth: "30px",
3910
+ maxWidth: "52px",
3911
+ width: "5%",
3912
+ aspectRatio: "1 / 1",
3913
+ left: `calc(${userPositionRelative.x * 100}% - 2.5%)`,
3914
+ top: `calc(${userPositionRelative.y * 100}% - 2.5%)`
3915
+ },
3916
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
3917
+ Text_default,
3918
+ {
3919
+ size: "sm",
3920
+ weight: "normal",
3921
+ color: "text-text-600",
3922
+ className: "sr-only",
3923
+ children: [
3924
+ "C\xEDrculo ",
3925
+ isCorrect ? "verde" : "vermelho",
3926
+ " indicando a resposta do aluno, posicionado em",
3927
+ " ",
3928
+ getPositionDescription(
3929
+ userPositionRelative.x,
3930
+ userPositionRelative.y
3931
+ ),
3932
+ ". A resposta est\xE1",
3933
+ " ",
3934
+ Math.round(
3935
+ Math.sqrt(
3936
+ Math.pow(
3937
+ userPositionRelative.x - correctPositionRelative.x,
3938
+ 2
3939
+ ) + Math.pow(
3940
+ userPositionRelative.y - correctPositionRelative.y,
3941
+ 2
3942
+ )
3943
+ ) * 100
3944
+ ),
3945
+ "% de dist\xE2ncia da \xE1rea correta e \xE9 considerada",
3946
+ " ",
3947
+ isCorrect ? "correta" : "incorreta",
3948
+ "."
3949
+ ]
3950
+ }
3951
+ )
3952
+ }
3953
+ )
3954
+ ] })
3955
+ ] });
3956
+ };
3957
+
3958
+ // src/utils/questionRenderer/connectDots/index.tsx
3959
+ var import_jsx_runtime24 = require("react/jsx-runtime");
3960
+ var renderQuestionConnectDots = ({
3961
+ paddingBottom
3962
+ } = {}) => {
3963
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
3964
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(QuestionSubTitle, { subTitle: "Tipo de quest\xE3o: Ligar Pontos" }),
3965
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(QuestionContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text_default, { size: "md", weight: "normal", color: "text-text-600", children: "Tipo de quest\xE3o: Ligar Pontos (n\xE3o implementado)" }) }) })
3966
+ ] });
3967
+ };
3968
+
3969
+ // src/utils/questionRenderer/index.tsx
3970
+ var questionRendererMap = {
3971
+ ["ALTERNATIVA" /* ALTERNATIVA */]: renderQuestionAlternative,
3972
+ ["MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */]: renderQuestionMultipleChoice,
3973
+ ["VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */]: renderQuestionTrueOrFalse,
3974
+ ["DISSERTATIVA" /* DISSERTATIVA */]: renderQuestionDissertative,
3975
+ ["PREENCHER" /* PREENCHER */]: renderQuestionFill,
3976
+ ["IMAGEM" /* IMAGEM */]: renderQuestionImage,
3977
+ ["LIGAR_PONTOS" /* LIGAR_PONTOS */]: renderQuestionConnectDots
3978
+ };
3407
3979
  var renderFromMap = (renderers, questionType) => {
3408
3980
  if (!questionType) return null;
3409
3981
  const renderer = renderers[questionType];
3410
3982
  return renderer ? renderer() : null;
3411
3983
  };
3412
3984
 
3985
+ // src/types/questionTypes.ts
3986
+ var questionTypeLabels = {
3987
+ ["ALTERNATIVA" /* ALTERNATIVA */]: "Alternativa",
3988
+ ["VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */]: "Verdadeiro ou Falso",
3989
+ ["DISSERTATIVA" /* DISSERTATIVA */]: "Discursiva",
3990
+ ["IMAGEM" /* IMAGEM */]: "Imagem",
3991
+ ["MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */]: "M\xFAltipla Escolha",
3992
+ ["LIGAR_PONTOS" /* LIGAR_PONTOS */]: "Ligar Pontos",
3993
+ ["PREENCHER" /* PREENCHER */]: "Preencher Lacunas"
3994
+ };
3995
+
3413
3996
  // src/components/ActivityCardQuestionPreview/ActivityCardQuestionPreview.tsx
3414
- var import_phosphor_react7 = require("phosphor-react");
3415
- var import_jsx_runtime16 = require("react/jsx-runtime");
3997
+ var import_phosphor_react9 = require("phosphor-react");
3998
+ var import_jsx_runtime25 = require("react/jsx-runtime");
3416
3999
  var QuestionHeader = ({
3417
4000
  badgeColor,
3418
4001
  iconName,
3419
4002
  subjectName,
3420
4003
  resolvedQuestionTypeLabel,
3421
4004
  position
3422
- }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex flex-row gap-2 text-text-650", children: [
3423
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: [
3424
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4005
+ }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-row gap-2 text-text-650", children: [
4006
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: [
4007
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3425
4008
  "span",
3426
4009
  {
3427
4010
  className: "size-4 rounded-sm flex items-center justify-center shrink-0 text-text-950",
3428
4011
  style: {
3429
4012
  backgroundColor: badgeColor
3430
4013
  },
3431
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4014
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3432
4015
  IconRender_default,
3433
4016
  {
3434
4017
  iconName: iconName ?? "Book",
@@ -3438,13 +4021,13 @@ var QuestionHeader = ({
3438
4021
  )
3439
4022
  }
3440
4023
  ),
3441
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text_default, { size: "sm", children: subjectName ?? "Assunto n\xE3o informado" })
4024
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Text_default, { size: "sm", children: subjectName ?? "Assunto n\xE3o informado" })
3442
4025
  ] }),
3443
- typeof position === "number" && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Text_default, { size: "sm", className: "text-text-700", children: [
4026
+ typeof position === "number" && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Text_default, { size: "sm", className: "text-text-700", children: [
3444
4027
  "#",
3445
4028
  position
3446
4029
  ] }) }),
3447
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text_default, { size: "sm", className: "", children: resolvedQuestionTypeLabel ?? "Tipo de quest\xE3o" }) })
4030
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "py-1 px-2 flex flex-row items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Text_default, { size: "sm", className: "", children: resolvedQuestionTypeLabel ?? "Tipo de quest\xE3o" }) })
3448
4031
  ] });
3449
4032
  var ActivityCardQuestionPreview = ({
3450
4033
  subjectName = "Assunto n\xE3o informado",
@@ -3462,13 +4045,13 @@ var ActivityCardQuestionPreview = ({
3462
4045
  position
3463
4046
  }) => {
3464
4047
  const badgeColor = getSubjectColorWithOpacity(subjectColor, isDark) ?? subjectColor;
3465
- const [isExpanded, setIsExpanded] = (0, import_react9.useState)(defaultExpanded);
4048
+ const [isExpanded, setIsExpanded] = (0, import_react11.useState)(defaultExpanded);
3466
4049
  const correctOptionIds = question?.correctOptionIds || [];
3467
4050
  const resolvedQuestionTypeLabel = questionType && questionTypeLabels[questionType] ? questionTypeLabels[questionType] : questionTypeLabel || "Tipo de quest\xE3o";
3468
4051
  const safeSubjectName = subjectName ?? "Assunto n\xE3o informado";
3469
4052
  const safeIconName = iconName ?? "Book";
3470
4053
  const safeResolvedLabel = resolvedQuestionTypeLabel ?? "Tipo de quest\xE3o";
3471
- const alternatives = (0, import_react9.useMemo)(() => {
4054
+ const alternatives = (0, import_react11.useMemo)(() => {
3472
4055
  if (!question?.options || questionType !== "ALTERNATIVA" /* ALTERNATIVA */)
3473
4056
  return [];
3474
4057
  return question.options.map((option) => {
@@ -3481,7 +4064,7 @@ var ActivityCardQuestionPreview = ({
3481
4064
  };
3482
4065
  });
3483
4066
  }, [question, questionType, correctOptionIds]);
3484
- const multipleChoices = (0, import_react9.useMemo)(() => {
4067
+ const multipleChoices = (0, import_react11.useMemo)(() => {
3485
4068
  if (!question?.options || questionType !== "MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */)
3486
4069
  return [];
3487
4070
  return question.options.map((option) => {
@@ -3496,7 +4079,7 @@ var ActivityCardQuestionPreview = ({
3496
4079
  }, [question, questionType, correctOptionIds]);
3497
4080
  const renderAlternative = () => {
3498
4081
  if (alternatives.length === 0) return null;
3499
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4082
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3500
4083
  AlternativesList,
3501
4084
  {
3502
4085
  alternatives,
@@ -3509,7 +4092,7 @@ var ActivityCardQuestionPreview = ({
3509
4092
  };
3510
4093
  const renderMultipleChoice = () => {
3511
4094
  if (multipleChoices.length === 0) return null;
3512
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4095
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3513
4096
  MultipleChoiceList,
3514
4097
  {
3515
4098
  choices: multipleChoices,
@@ -3521,10 +4104,10 @@ var ActivityCardQuestionPreview = ({
3521
4104
  };
3522
4105
  const renderTrueOrFalse = () => {
3523
4106
  if (!question?.options || question.options.length === 0) return null;
3524
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex flex-col gap-3.5", children: question.options.map((option, index) => {
4107
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex flex-col gap-3.5", children: question.options.map((option, index) => {
3525
4108
  const isCorrect = correctOptionIds.includes(option.id);
3526
4109
  const correctAnswer = isCorrect ? "Verdadeiro" : "Falso";
3527
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("section", { className: "flex flex-col gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4110
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("section", { className: "flex flex-col gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3528
4111
  "div",
3529
4112
  {
3530
4113
  className: cn(
@@ -3532,18 +4115,18 @@ var ActivityCardQuestionPreview = ({
3532
4115
  isCorrect ? "bg-success-background border-success-300" : "bg-error-background border-error-300"
3533
4116
  ),
3534
4117
  children: [
3535
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text_default, { size: "sm", className: "text-text-900", children: String.fromCodePoint(97 + index).concat(") ").concat(option.option) }),
3536
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex flex-row items-center gap-2 flex-shrink-0", children: [
3537
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Text_default, { size: "sm", className: "text-text-700", children: [
4118
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Text_default, { size: "sm", className: "text-text-900", children: String.fromCodePoint(97 + index).concat(") ").concat(option.option) }),
4119
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-row items-center gap-2 flex-shrink-0", children: [
4120
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Text_default, { size: "sm", className: "text-text-700", children: [
3538
4121
  "Resposta correta: ",
3539
4122
  correctAnswer
3540
4123
  ] }),
3541
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4124
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3542
4125
  Badge_default,
3543
4126
  {
3544
4127
  variant: "solid",
3545
4128
  action: isCorrect ? "success" : "error",
3546
- iconLeft: isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_phosphor_react7.CheckCircle, {}) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_phosphor_react7.XCircle, {}),
4129
+ iconLeft: isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_phosphor_react9.CheckCircle, {}) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_phosphor_react9.XCircle, {}),
3547
4130
  children: isCorrect ? "Resposta correta" : "Resposta incorreta"
3548
4131
  }
3549
4132
  )
@@ -3554,7 +4137,7 @@ var ActivityCardQuestionPreview = ({
3554
4137
  }) }) });
3555
4138
  };
3556
4139
  const renderDissertative = () => {
3557
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "mt-4 px-2 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text_default, { size: "sm", className: "text-text-600 italic", children: "Resposta do aluno" }) });
4140
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-4 px-2 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Text_default, { size: "sm", className: "text-text-600 italic", children: "Resposta do aluno" }) });
3558
4141
  };
3559
4142
  const renderConnectDots = () => null;
3560
4143
  const renderFill = () => null;
@@ -3568,7 +4151,7 @@ var ActivityCardQuestionPreview = ({
3568
4151
  ["PREENCHER" /* PREENCHER */]: renderFill,
3569
4152
  ["IMAGEM" /* IMAGEM */]: renderImage
3570
4153
  };
3571
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4154
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3572
4155
  "div",
3573
4156
  {
3574
4157
  className: "w-full",
@@ -3598,13 +4181,13 @@ var ActivityCardQuestionPreview = ({
3598
4181
  }
3599
4182
  },
3600
4183
  children: [
3601
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4184
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3602
4185
  "div",
3603
4186
  {
3604
4187
  "data-drag-preview": "true",
3605
4188
  className: "fixed -left-[9999px] -top-[9999px] pointer-events-none z-[9999] w-[440px]",
3606
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "w-full rounded-lg border border-border-200 bg-background", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "w-full min-w-0 flex flex-col gap-2 py-2", children: [
3607
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4189
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "w-full rounded-lg border border-border-200 bg-background", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "w-full min-w-0 flex flex-col gap-2 py-2", children: [
4190
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3608
4191
  QuestionHeader,
3609
4192
  {
3610
4193
  badgeColor,
@@ -3614,7 +4197,7 @@ var ActivityCardQuestionPreview = ({
3614
4197
  position
3615
4198
  }
3616
4199
  ),
3617
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4200
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3618
4201
  Text_default,
3619
4202
  {
3620
4203
  size: "md",
@@ -3626,7 +4209,7 @@ var ActivityCardQuestionPreview = ({
3626
4209
  ] }) })
3627
4210
  }
3628
4211
  ),
3629
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4212
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3630
4213
  CardAccordation,
3631
4214
  {
3632
4215
  className: cn(
@@ -3637,8 +4220,8 @@ var ActivityCardQuestionPreview = ({
3637
4220
  onToggleExpanded: setIsExpanded,
3638
4221
  defaultExpanded,
3639
4222
  value,
3640
- trigger: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "w-full min-w-0 flex flex-col gap-2 py-2", children: [
3641
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4223
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "w-full min-w-0 flex flex-col gap-2 py-2", children: [
4224
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3642
4225
  QuestionHeader,
3643
4226
  {
3644
4227
  badgeColor,
@@ -3648,7 +4231,7 @@ var ActivityCardQuestionPreview = ({
3648
4231
  position
3649
4232
  }
3650
4233
  ),
3651
- !isExpanded && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4234
+ !isExpanded && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3652
4235
  Text_default,
3653
4236
  {
3654
4237
  size: "md",
@@ -3659,7 +4242,7 @@ var ActivityCardQuestionPreview = ({
3659
4242
  )
3660
4243
  ] }),
3661
4244
  children: [
3662
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4245
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3663
4246
  Text_default,
3664
4247
  {
3665
4248
  size: "md",