analytica-frontend-lib 1.0.95 → 1.0.96

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.mjs CHANGED
@@ -5883,9 +5883,9 @@ import {
5883
5883
  import { CaretDown, Check as Check5, WarningCircle as WarningCircle5 } from "phosphor-react";
5884
5884
  import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
5885
5885
  var VARIANT_CLASSES4 = {
5886
- outlined: "border rounded-lg focus:border-primary-950",
5887
- underlined: "border-b focus:border-primary-950",
5888
- rounded: "border rounded-full focus:border-primary-950"
5886
+ outlined: "border-2 rounded-lg focus:border-primary-950",
5887
+ underlined: "border-b-2 focus:border-primary-950",
5888
+ rounded: "border-2 rounded-full focus:border-primary-950"
5889
5889
  };
5890
5890
  var SIZE_CLASSES12 = {
5891
5891
  small: "text-sm",
@@ -5970,6 +5970,7 @@ var injectStore4 = (children, store, size, selectId) => {
5970
5970
  var Select = ({
5971
5971
  children,
5972
5972
  defaultValue = "",
5973
+ className,
5973
5974
  value: propValue,
5974
5975
  onValueChange,
5975
5976
  size = "small",
@@ -6051,7 +6052,7 @@ var Select = ({
6051
6052
  }
6052
6053
  }, [propValue]);
6053
6054
  const sizeClasses = SIZE_CLASSES12[size];
6054
- return /* @__PURE__ */ jsxs26("div", { className: "w-full", children: [
6055
+ return /* @__PURE__ */ jsxs26("div", { className: cn("w-auto", className), children: [
6055
6056
  label && /* @__PURE__ */ jsx32(
6056
6057
  "label",
6057
6058
  {
@@ -6060,8 +6061,8 @@ var Select = ({
6060
6061
  children: label
6061
6062
  }
6062
6063
  ),
6063
- /* @__PURE__ */ jsx32("div", { className: cn("relative", sizeClasses), ref: selectRef, children: injectStore4(children, store, size, selectId) }),
6064
- /* @__PURE__ */ jsxs26("div", { className: "mt-1.5 gap-1.5", children: [
6064
+ /* @__PURE__ */ jsx32("div", { className: cn("relative"), ref: selectRef, children: injectStore4(children, store, size, selectId) }),
6065
+ (helperText || errorMessage) && /* @__PURE__ */ jsxs26("div", { className: "mt-1.5 gap-1.5", children: [
6065
6066
  helperText && /* @__PURE__ */ jsx32("p", { className: "text-sm text-text-500", children: helperText }),
6066
6067
  errorMessage && /* @__PURE__ */ jsxs26("p", { className: "flex gap-1 items-center text-sm text-indicator-error", children: [
6067
6068
  /* @__PURE__ */ jsx32(WarningCircle5, { size: 16 }),
@@ -6102,15 +6103,16 @@ var SelectTrigger = forwardRef16(
6102
6103
  {
6103
6104
  ref,
6104
6105
  id: selectId,
6105
- className: `
6106
- flex min-w-[220px] w-full items-center justify-between border-border-300
6107
- ${heightClasses} ${paddingClasses}
6108
- ${invalid && `${variant == "underlined" ? "border-b-2" : "border-2"} border-indicator-error text-text-600`}
6109
- ${disabled ? "cursor-not-allowed text-text-400 pointer-events-none opacity-50" : "cursor-pointer hover:bg-background-50 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground"}
6110
- ${!invalid && !disabled ? "text-text-700" : ""}
6111
- ${variantClasses}
6112
- ${className}
6113
- `,
6106
+ className: cn(
6107
+ "flex w-full items-center justify-between border-border-300",
6108
+ heightClasses,
6109
+ paddingClasses,
6110
+ invalid && `${variant == "underlined" ? "border-b-2" : "border-2"} border-indicator-error text-text-600`,
6111
+ disabled ? "cursor-not-allowed text-text-400 pointer-events-none opacity-50" : "cursor-pointer hover:bg-background-50 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground",
6112
+ !invalid && !disabled ? "text-text-700" : "",
6113
+ variantClasses,
6114
+ className
6115
+ ),
6114
6116
  onClick: toggleOpen,
6115
6117
  "aria-expanded": open,
6116
6118
  "aria-haspopup": "listbox",
@@ -6183,10 +6185,12 @@ var SelectItem = forwardRef16(
6183
6185
  const handleClick = (e) => {
6184
6186
  const labelNode = getLabelAsNode(children);
6185
6187
  if (!disabled) {
6186
- setValue(value);
6187
- setSelectedLabel(labelNode);
6188
+ const newValue = selectedValue === value ? "" : value;
6189
+ const newLabel = selectedValue === value ? "" : labelNode;
6190
+ setValue(newValue);
6191
+ setSelectedLabel(newLabel);
6188
6192
  setOpen(false);
6189
- onValueChange?.(value);
6193
+ onValueChange?.(newValue);
6190
6194
  }
6191
6195
  props.onClick?.(e);
6192
6196
  };
@@ -7154,6 +7158,10 @@ var useQuizStore = create7()(
7154
7158
  console.warn("selectAnswer called before userId is set");
7155
7159
  return;
7156
7160
  }
7161
+ const question = activeQuiz.quiz.questions.find(
7162
+ (q) => q.id === questionId
7163
+ );
7164
+ if (!question) return;
7157
7165
  const existingAnswerIndex = userAnswers.findIndex(
7158
7166
  (answer) => answer.questionId === questionId
7159
7167
  );
@@ -7161,8 +7169,10 @@ var useQuizStore = create7()(
7161
7169
  questionId,
7162
7170
  activityId,
7163
7171
  userId,
7164
- answer: null,
7165
- optionId: answerId
7172
+ answer: question.type === "DISSERTATIVA" /* DISSERTATIVA */ ? answerId : null,
7173
+ optionId: question.type === "DISSERTATIVA" /* DISSERTATIVA */ ? null : answerId,
7174
+ questionType: question.type,
7175
+ answerStatus: "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */
7166
7176
  };
7167
7177
  let updatedUserAnswers;
7168
7178
  if (existingAnswerIndex !== -1) {
@@ -7185,6 +7195,10 @@ var useQuizStore = create7()(
7185
7195
  console.warn("selectMultipleAnswer called before userId is set");
7186
7196
  return;
7187
7197
  }
7198
+ const question = activeQuiz.quiz.questions.find(
7199
+ (q) => q.id === questionId
7200
+ );
7201
+ if (!question) return;
7188
7202
  const filteredUserAnswers = userAnswers.filter(
7189
7203
  (answer) => answer.questionId !== questionId
7190
7204
  );
@@ -7194,7 +7208,11 @@ var useQuizStore = create7()(
7194
7208
  activityId,
7195
7209
  userId,
7196
7210
  answer: null,
7197
- optionId: answerId
7211
+ // selectMultipleAnswer is for non-dissertative questions
7212
+ optionId: answerId,
7213
+ // selectMultipleAnswer should only set optionId
7214
+ questionType: question.type,
7215
+ answerStatus: "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */
7198
7216
  })
7199
7217
  );
7200
7218
  const updatedUserAnswers = [
@@ -7205,6 +7223,50 @@ var useQuizStore = create7()(
7205
7223
  userAnswers: updatedUserAnswers
7206
7224
  });
7207
7225
  },
7226
+ selectDissertativeAnswer: (questionId, answer) => {
7227
+ const { getActiveQuiz, userAnswers } = get();
7228
+ const activeQuiz = getActiveQuiz();
7229
+ if (!activeQuiz) return;
7230
+ const activityId = activeQuiz.quiz.id;
7231
+ const userId = get().getUserId();
7232
+ if (!userId || userId === "") {
7233
+ console.warn(
7234
+ "selectDissertativeAnswer called before userId is set"
7235
+ );
7236
+ return;
7237
+ }
7238
+ const question = activeQuiz.quiz.questions.find(
7239
+ (q) => q.id === questionId
7240
+ );
7241
+ if (!question || question.type !== "DISSERTATIVA" /* DISSERTATIVA */) {
7242
+ console.warn(
7243
+ "selectDissertativeAnswer called for non-dissertative question"
7244
+ );
7245
+ return;
7246
+ }
7247
+ const existingAnswerIndex = userAnswers.findIndex(
7248
+ (answerItem) => answerItem.questionId === questionId
7249
+ );
7250
+ const newUserAnswer = {
7251
+ questionId,
7252
+ activityId,
7253
+ userId,
7254
+ answer,
7255
+ optionId: null,
7256
+ questionType: "DISSERTATIVA" /* DISSERTATIVA */,
7257
+ answerStatus: "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */
7258
+ };
7259
+ let updatedUserAnswers;
7260
+ if (existingAnswerIndex !== -1) {
7261
+ updatedUserAnswers = [...userAnswers];
7262
+ updatedUserAnswers[existingAnswerIndex] = newUserAnswer;
7263
+ } else {
7264
+ updatedUserAnswers = [...userAnswers, newUserAnswer];
7265
+ }
7266
+ set({
7267
+ userAnswers: updatedUserAnswers
7268
+ });
7269
+ },
7208
7270
  skipQuestion: () => {
7209
7271
  const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();
7210
7272
  const currentQuestion = getCurrentQuestion();
@@ -7225,7 +7287,9 @@ var useQuizStore = create7()(
7225
7287
  activityId,
7226
7288
  userId,
7227
7289
  answer: null,
7228
- optionId: null
7290
+ optionId: null,
7291
+ questionType: currentQuestion.type,
7292
+ answerStatus: "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */
7229
7293
  };
7230
7294
  let updatedUserAnswers;
7231
7295
  if (existingAnswerIndex !== -1) {
@@ -7249,6 +7313,10 @@ var useQuizStore = create7()(
7249
7313
  console.warn("addUserAnswer called before userId is set");
7250
7314
  return;
7251
7315
  }
7316
+ const question = activeQuiz.quiz.questions.find(
7317
+ (q) => q.id === questionId
7318
+ );
7319
+ if (!question) return;
7252
7320
  const existingAnswerIndex = userAnswers.findIndex(
7253
7321
  (answer) => answer.questionId === questionId
7254
7322
  );
@@ -7256,8 +7324,10 @@ var useQuizStore = create7()(
7256
7324
  questionId,
7257
7325
  activityId,
7258
7326
  userId,
7259
- answer: null,
7260
- optionId: answerId || null
7327
+ answer: question.type === "DISSERTATIVA" /* DISSERTATIVA */ ? answerId || null : null,
7328
+ optionId: question.type !== "DISSERTATIVA" /* DISSERTATIVA */ ? answerId || null : null,
7329
+ questionType: question.type,
7330
+ answerStatus: "PENDENTE_AVALIACAO" /* PENDENTE_AVALIACAO */
7261
7331
  };
7262
7332
  if (existingAnswerIndex !== -1) {
7263
7333
  const updatedUserAnswers = [...userAnswers];
@@ -7307,7 +7377,9 @@ var useQuizStore = create7()(
7307
7377
  },
7308
7378
  getAnsweredQuestions: () => {
7309
7379
  const { userAnswers } = get();
7310
- return userAnswers.filter((answer) => answer.optionId !== null).length;
7380
+ return userAnswers.filter(
7381
+ (answer) => answer.optionId !== null || answer.answer !== null
7382
+ ).length;
7311
7383
  },
7312
7384
  getUnansweredQuestions: () => {
7313
7385
  const { getActiveQuiz, userAnswers } = get();
@@ -7318,8 +7390,8 @@ var useQuizStore = create7()(
7318
7390
  const userAnswer = userAnswers.find(
7319
7391
  (answer) => answer.questionId === question.id
7320
7392
  );
7321
- const isAnswered = userAnswer && userAnswer.optionId !== null;
7322
- const isSkipped = userAnswer && userAnswer.optionId === null;
7393
+ const isAnswered = userAnswer && (userAnswer.optionId !== null || userAnswer.answer !== null);
7394
+ const isSkipped = userAnswer && userAnswer.optionId === null && userAnswer.answer === null;
7323
7395
  if (!isAnswered && !isSkipped) {
7324
7396
  unansweredQuestions.push(index + 1);
7325
7397
  }
@@ -7328,7 +7400,9 @@ var useQuizStore = create7()(
7328
7400
  },
7329
7401
  getSkippedQuestions: () => {
7330
7402
  const { userAnswers } = get();
7331
- return userAnswers.filter((answer) => answer.optionId === null).length;
7403
+ return userAnswers.filter(
7404
+ (answer) => answer.optionId === null && answer.answer === null
7405
+ ).length;
7332
7406
  },
7333
7407
  getProgress: () => {
7334
7408
  const { getTotalQuestions, getAnsweredQuestions } = get();
@@ -7341,14 +7415,14 @@ var useQuizStore = create7()(
7341
7415
  const userAnswer = userAnswers.find(
7342
7416
  (answer) => answer.questionId === questionId
7343
7417
  );
7344
- return userAnswer ? userAnswer.optionId !== null : false;
7418
+ return userAnswer ? userAnswer.optionId !== null || userAnswer.answer !== null : false;
7345
7419
  },
7346
7420
  isQuestionSkipped: (questionId) => {
7347
7421
  const { userAnswers } = get();
7348
7422
  const userAnswer = userAnswers.find(
7349
7423
  (answer) => answer.questionId === questionId
7350
7424
  );
7351
- return userAnswer ? userAnswer.optionId === null : false;
7425
+ return userAnswer ? userAnswer.optionId === null && userAnswer.answer === null : false;
7352
7426
  },
7353
7427
  getCurrentAnswer: () => {
7354
7428
  const { getCurrentQuestion, userAnswers } = get();
@@ -7357,7 +7431,7 @@ var useQuizStore = create7()(
7357
7431
  const userAnswer = userAnswers.find(
7358
7432
  (answer) => answer.questionId === currentQuestion.id
7359
7433
  );
7360
- return userAnswer?.optionId;
7434
+ return userAnswer;
7361
7435
  },
7362
7436
  getAllCurrentAnswer: () => {
7363
7437
  const { getCurrentQuestion, userAnswers } = get();
@@ -7391,8 +7465,8 @@ var useQuizStore = create7()(
7391
7465
  const userAnswer = userAnswers.find(
7392
7466
  (answer) => answer.questionId === question.id
7393
7467
  );
7394
- const hasAnswer = userAnswer && userAnswer.optionId !== null;
7395
- const isSkipped = userAnswer && userAnswer.optionId === null;
7468
+ const hasAnswer = userAnswer && (userAnswer.optionId !== null || userAnswer.answer !== null);
7469
+ const isSkipped = userAnswer && userAnswer.optionId === null && userAnswer.answer === null;
7396
7470
  if (!hasAnswer || isSkipped) {
7397
7471
  unansweredQuestions.push(index + 1);
7398
7472
  }
@@ -7423,7 +7497,7 @@ var useQuizStore = create7()(
7423
7497
  const answer = userAnswers.find(
7424
7498
  (answer2) => answer2.questionId === questionId
7425
7499
  );
7426
- return answer ? answer.optionId !== null : false;
7500
+ return answer ? answer.optionId !== null || answer.answer !== null : false;
7427
7501
  },
7428
7502
  getQuestionStatusFromUserAnswers: (questionId) => {
7429
7503
  const { userAnswers } = get();
@@ -7452,6 +7526,27 @@ var useQuizStore = create7()(
7452
7526
  return;
7453
7527
  }
7454
7528
  set({ currentQuestionIndex: questionIndex });
7529
+ },
7530
+ setAnswerStatus: (questionId, status) => {
7531
+ const { userAnswers } = get();
7532
+ const existingAnswerIndex = userAnswers.findIndex(
7533
+ (answer) => answer.questionId === questionId
7534
+ );
7535
+ if (existingAnswerIndex !== -1) {
7536
+ const updatedUserAnswers = [...userAnswers];
7537
+ updatedUserAnswers[existingAnswerIndex] = {
7538
+ ...updatedUserAnswers[existingAnswerIndex],
7539
+ answerStatus: status
7540
+ };
7541
+ set({ userAnswers: updatedUserAnswers });
7542
+ }
7543
+ },
7544
+ getAnswerStatus: (questionId) => {
7545
+ const { userAnswers } = get();
7546
+ const userAnswer = userAnswers.find(
7547
+ (answer) => answer.questionId === questionId
7548
+ );
7549
+ return userAnswer ? userAnswer.answerStatus : null;
7455
7550
  }
7456
7551
  };
7457
7552
  },
@@ -7482,35 +7577,18 @@ var Quiz = forwardRef19(({ children, className, ...props }, ref) => {
7482
7577
  });
7483
7578
  var QuizHeaderResult = forwardRef19(
7484
7579
  ({ className, ...props }, ref) => {
7485
- const { getCurrentQuestion, getCurrentAnswer, getAllCurrentAnswer } = useQuizStore();
7486
- const currentQuestion = getCurrentQuestion();
7487
- const userAnswer = getCurrentAnswer();
7580
+ const { getAllCurrentAnswer } = useQuizStore();
7581
+ const usersAnswer = getAllCurrentAnswer();
7488
7582
  const [isCorrect, setIsCorrect] = useState14(false);
7489
7583
  useEffect13(() => {
7490
- if (currentQuestion?.type === "MULTIPLA_CHOICE" /* MULTIPLA_CHOICE */) {
7491
- const allCurrentAnswers = getAllCurrentAnswer();
7492
- const isCorrectOption = currentQuestion.options.filter(
7493
- (op) => op.isCorrect
7494
- );
7495
- if (allCurrentAnswers?.length !== isCorrectOption.length) {
7496
- setIsCorrect(false);
7497
- return;
7498
- }
7499
- setIsCorrect(true);
7500
- allCurrentAnswers.forEach((answer) => {
7501
- const findInCorrectOptions = isCorrectOption.find(
7502
- (op) => op.id === answer.optionId
7503
- );
7504
- if (!findInCorrectOptions) {
7505
- setIsCorrect(false);
7506
- }
7507
- });
7508
- } else {
7584
+ if (usersAnswer) {
7509
7585
  setIsCorrect(
7510
- currentQuestion?.options.find((op) => op.id === userAnswer)?.isCorrect || false
7586
+ usersAnswer.length > 0 ? usersAnswer.map(
7587
+ (answer) => answer.answerStatus === "RESPOSTA_CORRETA" /* RESPOSTA_CORRETA */
7588
+ ).every(Boolean) : false
7511
7589
  );
7512
7590
  }
7513
- }, [currentQuestion, getAllCurrentAnswer]);
7591
+ }, [usersAnswer]);
7514
7592
  return /* @__PURE__ */ jsxs30(
7515
7593
  "div",
7516
7594
  {
@@ -7574,8 +7652,9 @@ var QuizHeader = () => {
7574
7652
  );
7575
7653
  };
7576
7654
  var QuizContent = forwardRef19(({ type = "Alternativas", className, variant, ...props }, ref) => {
7577
- const { getCurrentQuestion } = useQuizStore();
7655
+ const { getCurrentQuestion, getCurrentAnswer } = useQuizStore();
7578
7656
  const currentQuestion = getCurrentQuestion();
7657
+ const currentAnswer = getCurrentAnswer();
7579
7658
  return /* @__PURE__ */ jsxs30(Fragment8, { children: [
7580
7659
  /* @__PURE__ */ jsx37("div", { className: "px-4 pb-2 pt-6", children: /* @__PURE__ */ jsx37("p", { className: "font-bold text-lg text-text-950", children: type }) }),
7581
7660
  /* @__PURE__ */ jsx37(
@@ -7583,17 +7662,32 @@ var QuizContent = forwardRef19(({ type = "Alternativas", className, variant, ...
7583
7662
  {
7584
7663
  ref,
7585
7664
  className: cn(
7586
- "rounded-t-xl px-4 pt-4 pb-[80px] h-full flex flex-col gap-4 mb-auto",
7665
+ "bg-background rounded-t-xl px-4 pt-4 pb-[80px] h-full flex flex-col gap-4 mb-auto",
7587
7666
  className
7588
7667
  ),
7589
7668
  ...props,
7590
7669
  children: currentQuestion && /* @__PURE__ */ jsxs30(Fragment8, { children: [
7591
7670
  currentQuestion.type === "ALTERNATIVA" /* ALTERNATIVA */ && /* @__PURE__ */ jsx37(QuizAlternative, { variant }),
7592
7671
  currentQuestion.type === "MULTIPLA_CHOICE" /* MULTIPLA_CHOICE */ && /* @__PURE__ */ jsx37(QuizMultipleChoice, { variant }),
7593
- currentQuestion.type === "DISSERTATIVA" /* DISSERTATIVA */ && /* @__PURE__ */ jsx37("div", { children: "Componente de dissertativa" })
7672
+ currentQuestion.type === "DISSERTATIVA" /* DISSERTATIVA */ && /* @__PURE__ */ jsx37(QuizDissertative, { variant })
7594
7673
  ] })
7595
7674
  }
7596
- )
7675
+ ),
7676
+ currentQuestion?.type === "DISSERTATIVA" /* DISSERTATIVA */ && variant === "result" && currentAnswer?.answerStatus == "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && /* @__PURE__ */ jsxs30(Fragment8, { children: [
7677
+ /* @__PURE__ */ jsx37("div", { className: "px-4 pb-2 pt-6", children: /* @__PURE__ */ jsx37("p", { className: "font-bold text-lg text-text-950", children: "Observa\xE7\xE3o do professor" }) }),
7678
+ /* @__PURE__ */ jsx37(
7679
+ "div",
7680
+ {
7681
+ ref,
7682
+ className: cn(
7683
+ "bg-background rounded-t-xl px-4 pt-4 pb-[80px] h-full flex flex-col gap-4 mb-auto",
7684
+ className
7685
+ ),
7686
+ ...props,
7687
+ children: /* @__PURE__ */ jsx37("p", { className: "text-text-600 text-md whitespace-pre-wrap", children: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, urna eu tincidunt consectetur, nisi nisl aliquam nunc, eget aliquam massa nisl quis neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer euismod, urna eu tincidunt consectetur, nisi nisl aliquam nunc, eget aliquam massa nisl quis neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Nullam ac urna eu felis dapibus condimentum sit amet a augue. Sed non neque elit. Sed ut imperdiet nisi. Proin condimentum fermentum nunc. Etiam pharetra, erat sed fermentum feugiat, velit mauris egestas quam, ut aliquam massa nisl quis neque. Suspendisse in orci enim. Mauris euismod, urna eu tincidunt consectetur, nisi nisl aliquam nunc, eget aliquam massa nisl quis neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer euismod, urna eu tincidunt consectetur, nisi nisl aliquam nunc, eget aliquam massa nisl quis neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Nullam ac urna eu felis dapibus condimentum sit amet a augue. Sed non neque elit. Sed ut imperdiet nisi. Proin condimentum fermentum nunc. Etiam pharetra, erat sed fermentum feugiat, velit mauris egestas quam, ut aliquam massa nisl quis neque. Suspendisse in orci enim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer euismod, urna eu tincidunt consectetur, nisi nisl aliquam nunc, eget aliquam massa nisl quis neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Nullam ac urna eu felis dapibus condimentum sit amet a augue. Sed non neque elit. Sed ut imperdiet nisi. Proin condimentum fermentum nunc. Etiam pharetra, erat sed fermentum feugiat, velit mauris egestas quam, ut aliquam massa nisl quis neque. Suspendisse in orci enim." })
7688
+ }
7689
+ )
7690
+ ] })
7597
7691
  ] });
7598
7692
  });
7599
7693
  var QuizAlternative = ({ variant = "default" }) => {
@@ -7608,7 +7702,7 @@ var QuizAlternative = ({ variant = "default" }) => {
7608
7702
  );
7609
7703
  if (isCorrectOption?.id === option.id) {
7610
7704
  status = "correct" /* CORRECT */;
7611
- } else if (currentAnswer === option.id && option.id !== isCorrectOption?.id) {
7705
+ } else if (currentAnswer?.optionId === option.id && option.id !== isCorrectOption?.id) {
7612
7706
  status = "incorrect" /* INCORRECT */;
7613
7707
  }
7614
7708
  }
@@ -7627,8 +7721,8 @@ var QuizAlternative = ({ variant = "default" }) => {
7627
7721
  name: `question-${currentQuestion?.id || "1"}`,
7628
7722
  layout: "compact",
7629
7723
  alternatives,
7630
- value: currentAnswer,
7631
- selectedValue: currentAnswer,
7724
+ value: currentAnswer?.optionId || "",
7725
+ selectedValue: currentAnswer?.optionId || "",
7632
7726
  onValueChange: (value) => {
7633
7727
  if (currentQuestion) {
7634
7728
  selectAnswer(currentQuestion.id, value);
@@ -7709,6 +7803,46 @@ var QuizMultipleChoice = ({
7709
7803
  questionKey
7710
7804
  ) });
7711
7805
  };
7806
+ var QuizDissertative = ({
7807
+ variant = "default"
7808
+ }) => {
7809
+ const { getCurrentQuestion, getCurrentAnswer, selectDissertativeAnswer } = useQuizStore();
7810
+ const currentQuestion = getCurrentQuestion();
7811
+ const currentAnswer = getCurrentAnswer();
7812
+ const textareaRef = useRef9(null);
7813
+ const handleAnswerChange = (value) => {
7814
+ if (currentQuestion) {
7815
+ selectDissertativeAnswer(currentQuestion.id, value);
7816
+ }
7817
+ };
7818
+ const adjustTextareaHeight = useCallback2(() => {
7819
+ if (textareaRef.current) {
7820
+ textareaRef.current.style.height = "auto";
7821
+ const scrollHeight = textareaRef.current.scrollHeight;
7822
+ const minHeight = 120;
7823
+ const maxHeight = 400;
7824
+ const newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight);
7825
+ textareaRef.current.style.height = `${newHeight}px`;
7826
+ }
7827
+ }, []);
7828
+ useEffect13(() => {
7829
+ adjustTextareaHeight();
7830
+ }, [currentAnswer, adjustTextareaHeight]);
7831
+ if (!currentQuestion) {
7832
+ return /* @__PURE__ */ jsx37("div", { className: "space-y-4", children: /* @__PURE__ */ jsx37("p", { className: "text-text-600 text-md", children: "Nenhuma quest\xE3o dispon\xEDvel" }) });
7833
+ }
7834
+ return /* @__PURE__ */ jsx37("div", { className: "space-y-4 max-h-[600px] overflow-y-auto", children: variant === "default" ? /* @__PURE__ */ jsx37("div", { className: "space-y-4", children: /* @__PURE__ */ jsx37(
7835
+ TextArea_default,
7836
+ {
7837
+ ref: textareaRef,
7838
+ placeholder: "Escreva sua resposta",
7839
+ value: currentAnswer?.answer || "",
7840
+ onChange: (e) => handleAnswerChange(e.target.value),
7841
+ rows: 4,
7842
+ className: "min-h-[120px] max-h-[400px] resize-none overflow-y-auto"
7843
+ }
7844
+ ) }) : /* @__PURE__ */ jsx37("div", { className: "space-y-4", children: /* @__PURE__ */ jsx37("p", { className: "text-text-600 text-md whitespace-pre-wrap", children: currentAnswer?.answer || "Nenhuma resposta fornecida" }) }) });
7845
+ };
7712
7846
  var QuizQuestionList = ({
7713
7847
  filterType = "all",
7714
7848
  onQuestionClick
@@ -8300,11 +8434,13 @@ export {
8300
8434
  Quiz,
8301
8435
  QuizAlternative,
8302
8436
  QuizContent,
8437
+ QuizDissertative,
8303
8438
  QuizFooter,
8304
8439
  QuizHeader,
8305
8440
  QuizHeaderResult,
8306
8441
  QuizListResult,
8307
8442
  QuizListResultByMateria,
8443
+ QuizMultipleChoice,
8308
8444
  QuizQuestionList,
8309
8445
  QuizResultHeaderTitle,
8310
8446
  QuizResultPerformance,