@thanh01.pmt/interactive-quiz-kit 1.0.66 → 1.0.67

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/player.cjs CHANGED
@@ -6311,7 +6311,7 @@ var cva = (base3, config2) => (props) => {
6311
6311
 
6312
6312
  // src/react-ui/components/elements/label.tsx
6313
6313
  var labelVariants = cva(
6314
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
6314
+ "text-sm font-Medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
6315
6315
  );
6316
6316
  var Label2 = React73__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React73__namespace.createElement(
6317
6317
  Root3,
@@ -31549,7 +31549,7 @@ var MarkdownRenderer = ({
31549
31549
  },
31550
31550
  h1: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("h1", { ...props, className: "text-3xl font-bold mb-6 mt-8 first:mt-0" }),
31551
31551
  h2: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("h2", { ...props, className: "text-2xl font-semibold mb-4 mt-6" }),
31552
- h3: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("h3", { ...props, className: "text-xl font-medium mb-3 mt-5" }),
31552
+ h3: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("h3", { ...props, className: "text-xl font-Medium mb-3 mt-5" }),
31553
31553
  ul: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("ul", { ...props, className: "my-4 space-y-2 list-disc list-inside" }),
31554
31554
  ol: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("ol", { ...props, className: "my-4 space-y-2 list-decimal list-inside" }),
31555
31555
  p: ({ node: node2, ...props }) => /* @__PURE__ */ React73__namespace.default.createElement("p", { ...props, className: "mb-4 leading-7" }),
@@ -32023,7 +32023,7 @@ var Input = React73__namespace.forwardRef(
32023
32023
  {
32024
32024
  type,
32025
32025
  className: cn(
32026
- "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
32026
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-Medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
32027
32027
  className
32028
32028
  ),
32029
32029
  ref,
@@ -32198,7 +32198,7 @@ init_react_shim();
32198
32198
  // src/react-ui/components/elements/button.tsx
32199
32199
  init_react_shim();
32200
32200
  var buttonVariants = cva(
32201
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
32201
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-Medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
32202
32202
  {
32203
32203
  variants: {
32204
32204
  variant: {
@@ -37146,7 +37146,7 @@ var MatchingQuestionUI = ({
37146
37146
  if (showCorrectAnswer && selectedOptionId) {
37147
37147
  borderColor = isSelectionCorrect ? "border-green-500" : "border-destructive";
37148
37148
  }
37149
- return /* @__PURE__ */ React73__namespace.default.createElement("div", { key: promptItem.id, className: `p-3 border rounded-md ${borderColor} transition-colors bg-background` }, /* @__PURE__ */ React73__namespace.default.createElement(Label2, { htmlFor: `select-prompt-${promptItem.id}`, className: "font-medium text-base block mb-2 whitespace-normal" }, /* @__PURE__ */ React73__namespace.default.createElement(MarkdownRenderer, { content: promptItem.content })), /* @__PURE__ */ React73__namespace.default.createElement(
37149
+ return /* @__PURE__ */ React73__namespace.default.createElement("div", { key: promptItem.id, className: `p-3 border rounded-md ${borderColor} transition-colors bg-background` }, /* @__PURE__ */ React73__namespace.default.createElement(Label2, { htmlFor: `select-prompt-${promptItem.id}`, className: "font-Medium text-base block mb-2 whitespace-normal" }, /* @__PURE__ */ React73__namespace.default.createElement(MarkdownRenderer, { content: promptItem.content })), /* @__PURE__ */ React73__namespace.default.createElement(
37150
37150
  Select2,
37151
37151
  {
37152
37152
  value: selectedOptionId,
@@ -37201,7 +37201,7 @@ var DragAndDropQuestionUI = ({
37201
37201
  } else {
37202
37202
  itemStyle += " border-muted";
37203
37203
  }
37204
- return /* @__PURE__ */ React73__namespace.default.createElement("div", { key: item.id, className: itemStyle }, /* @__PURE__ */ React73__namespace.default.createElement(Label2, { htmlFor: `select-draggable-${item.id}`, className: "font-medium text-base mb-2 sm:mb-0 sm:mr-4 flex-1" }, /* @__PURE__ */ React73__namespace.default.createElement(MarkdownRenderer, { content: item.content })), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 w-full sm:w-auto" }, /* @__PURE__ */ React73__namespace.default.createElement(
37204
+ return /* @__PURE__ */ React73__namespace.default.createElement("div", { key: item.id, className: itemStyle }, /* @__PURE__ */ React73__namespace.default.createElement(Label2, { htmlFor: `select-draggable-${item.id}`, className: "font-Medium text-base mb-2 sm:mb-0 sm:mr-4 flex-1" }, /* @__PURE__ */ React73__namespace.default.createElement(MarkdownRenderer, { content: item.content })), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 w-full sm:w-auto" }, /* @__PURE__ */ React73__namespace.default.createElement(
37205
37205
  Select2,
37206
37206
  {
37207
37207
  value: selectedDropZoneId,
@@ -64217,7 +64217,7 @@ var TabsTrigger2 = React73__namespace.forwardRef(({ className, ...props }, ref)
64217
64217
  {
64218
64218
  ref,
64219
64219
  className: cn(
64220
- "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
64220
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-Medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
64221
64221
  className
64222
64222
  ),
64223
64223
  ...props
@@ -64917,7 +64917,7 @@ var AccordionTrigger2 = React73__namespace.forwardRef(({ className, children, ..
64917
64917
  {
64918
64918
  ref,
64919
64919
  className: cn(
64920
- "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
64920
+ "flex flex-1 items-center justify-between py-4 font-Medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
64921
64921
  className
64922
64922
  ),
64923
64923
  ...props
@@ -65704,7 +65704,7 @@ var QuizResult = ({
65704
65704
  }
65705
65705
  return String(answer);
65706
65706
  };
65707
- return /* @__PURE__ */ React73__namespace.default.createElement(Card, { className: "w-full max-w-3xl mx-auto shadow-xl" }, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-3xl font-headline text-center" }, t2("practiceFlow.results.title", { quizTitle })), /* @__PURE__ */ React73__namespace.default.createElement(CardDescription, { className: "text-center text-lg" }, t2("practiceFlow.results.description"))), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, { className: "space-y-6" }, /* @__PURE__ */ React73__namespace.default.createElement(Card, { className: "bg-secondary/50" }, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-xl flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(BarChart2, { className: "mr-2 h-5 w-5 text-primary" }), t2("practiceFlow.results.overallScore"))), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, { className: "grid grid-cols-1 md:grid-cols-3 gap-4 text-center" }, /* @__PURE__ */ React73__namespace.default.createElement("div", null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.score, " / ", result.maxScore), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.points"))), /* @__PURE__ */ React73__namespace.default.createElement("div", null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.percentage.toFixed(2), "%"), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.percentage"))), /* @__PURE__ */ React73__namespace.default.createElement("div", null, result.passed !== void 0 && (result.passed ? /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex flex-col items-center text-green-600" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleCheckBig, { className: "h-10 w-10" }), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.passed"))) : /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex flex-col items-center text-destructive" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleX, { className: "h-10 w-10" }), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.failed"))))))), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__namespace.default.createElement(Clock, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__namespace.default.createElement("span", null, t2("practiceFlow.results.timeSpent")), /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold" }, result.totalTimeSpentSeconds?.toFixed(0) ?? "N/A", " ", t2("practiceFlow.results.timeUnit"))), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__namespace.default.createElement(Percent, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__namespace.default.createElement("span", null, t2("practiceFlow.results.avgTimePerQuestion")), /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold" }, result.averageTimePerQuestionSeconds?.toFixed(1) ?? "N/A", " ", t2("practiceFlow.results.timeUnit")))), result.scormStatus && result.scormStatus !== "idle" && result.scormStatus !== "no_api" && /* @__PURE__ */ React73__namespace.default.createElement(Card, null, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-lg" }, "SCORM Sync Status")), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: `flex items-center ${result.scormStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.scormStatus === "error" && /* @__PURE__ */ React73__namespace.default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold ml-1" }, result.scormStatus)), result.scormError && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.scormError))), result.webhookStatus && result.webhookStatus !== "idle" && /* @__PURE__ */ React73__namespace.default.createElement(Card, null, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-lg" }, "Webhook Sync Status")), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: `flex items-center ${result.webhookStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.webhookStatus === "error" && /* @__PURE__ */ React73__namespace.default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold ml-1" }, result.webhookStatus)), result.webhookError && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.webhookError))), /* @__PURE__ */ React73__namespace.default.createElement(Accordion2, { type: "single", collapsible: true, className: "w-full" }, /* @__PURE__ */ React73__namespace.default.createElement(AccordionItem2, { value: "question-breakdown" }, /* @__PURE__ */ React73__namespace.default.createElement(AccordionTrigger2, { className: "text-lg font-semibold" }, t2("practiceFlow.results.questionBreakdown")), /* @__PURE__ */ React73__namespace.default.createElement(AccordionContent2, null, /* @__PURE__ */ React73__namespace.default.createElement(ScrollArea2, { className: "h-[300px] pr-4" }, /* @__PURE__ */ React73__namespace.default.createElement("ul", { className: "space-y-4" }, result.questionResults.map((qResult, index3) => /* @__PURE__ */ React73__namespace.default.createElement("li", { key: qResult.questionId, className: "p-4 border rounded-md bg-background" }, /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ React73__namespace.default.createElement("h4", { className: "font-semibold" }, t2("common.questions", { count: index3 + 1 })), qResult.isCorrect ? /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "text-green-600 font-medium flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleCheckBig, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.passed")) : /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "text-destructive font-medium flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleX, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.failed"))), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.yourAnswer")), " ", getAnswerDisplay(qResult.userAnswer)), !qResult.isCorrect && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.correctAnswer")), " ", getAnswerDisplay(qResult.correctAnswer)), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.pointsEarned")), " ", qResult.pointsEarned), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.timeSpent")), " ", qResult.timeSpentSeconds?.toFixed(0) ?? "N/A", t2("practiceFlow.results.timeUnit")))))))))), /* @__PURE__ */ React73__namespace.default.createElement(CardFooter, { className: "flex flex-col sm:flex-row justify-between gap-2" }, onExitQuiz && /* @__PURE__ */ React73__namespace.default.createElement(Button, { variant: "outline", onClick: onExitQuiz, className: "w-full sm:w-auto" }, /* @__PURE__ */ React73__namespace.default.createElement(LogOut, { className: "mr-2 h-4 w-4" }), t2("common.exit")), showReviewButton && onGenerateReview && /* @__PURE__ */ React73__namespace.default.createElement(
65707
+ return /* @__PURE__ */ React73__namespace.default.createElement(Card, { className: "w-full max-w-3xl mx-auto shadow-xl" }, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-3xl font-headline text-center" }, t2("practiceFlow.results.title", { quizTitle })), /* @__PURE__ */ React73__namespace.default.createElement(CardDescription, { className: "text-center text-lg" }, t2("practiceFlow.results.description"))), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, { className: "space-y-6" }, /* @__PURE__ */ React73__namespace.default.createElement(Card, { className: "bg-secondary/50" }, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-xl flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(BarChart2, { className: "mr-2 h-5 w-5 text-primary" }), t2("practiceFlow.results.overallScore"))), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, { className: "grid grid-cols-1 md:grid-cols-3 gap-4 text-center" }, /* @__PURE__ */ React73__namespace.default.createElement("div", null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.score, " / ", result.maxScore), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.points"))), /* @__PURE__ */ React73__namespace.default.createElement("div", null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.percentage.toFixed(2), "%"), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.percentage"))), /* @__PURE__ */ React73__namespace.default.createElement("div", null, result.passed !== void 0 && (result.passed ? /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex flex-col items-center text-green-600" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleCheckBig, { className: "h-10 w-10" }), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.passed"))) : /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex flex-col items-center text-destructive" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleX, { className: "h-10 w-10" }), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.failed"))))))), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__namespace.default.createElement(Clock, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__namespace.default.createElement("span", null, t2("practiceFlow.results.timeSpent")), /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold" }, result.totalTimeSpentSeconds?.toFixed(0) ?? "N/A", " ", t2("practiceFlow.results.timeUnit"))), /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__namespace.default.createElement(Percent, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__namespace.default.createElement("span", null, t2("practiceFlow.results.avgTimePerQuestion")), /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold" }, result.averageTimePerQuestionSeconds?.toFixed(1) ?? "N/A", " ", t2("practiceFlow.results.timeUnit")))), result.scormStatus && result.scormStatus !== "idle" && result.scormStatus !== "no_api" && /* @__PURE__ */ React73__namespace.default.createElement(Card, null, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-lg" }, "SCORM Sync Status")), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: `flex items-center ${result.scormStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.scormStatus === "error" && /* @__PURE__ */ React73__namespace.default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold ml-1" }, result.scormStatus)), result.scormError && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.scormError))), result.webhookStatus && result.webhookStatus !== "idle" && /* @__PURE__ */ React73__namespace.default.createElement(Card, null, /* @__PURE__ */ React73__namespace.default.createElement(CardHeader, null, /* @__PURE__ */ React73__namespace.default.createElement(CardTitle, { className: "text-lg" }, "Webhook Sync Status")), /* @__PURE__ */ React73__namespace.default.createElement(CardContent, null, /* @__PURE__ */ React73__namespace.default.createElement("p", { className: `flex items-center ${result.webhookStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.webhookStatus === "error" && /* @__PURE__ */ React73__namespace.default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-semibold ml-1" }, result.webhookStatus)), result.webhookError && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.webhookError))), /* @__PURE__ */ React73__namespace.default.createElement(Accordion2, { type: "single", collapsible: true, className: "w-full" }, /* @__PURE__ */ React73__namespace.default.createElement(AccordionItem2, { value: "question-breakdown" }, /* @__PURE__ */ React73__namespace.default.createElement(AccordionTrigger2, { className: "text-lg font-semibold" }, t2("practiceFlow.results.questionBreakdown")), /* @__PURE__ */ React73__namespace.default.createElement(AccordionContent2, null, /* @__PURE__ */ React73__namespace.default.createElement(ScrollArea2, { className: "h-[300px] pr-4" }, /* @__PURE__ */ React73__namespace.default.createElement("ul", { className: "space-y-4" }, result.questionResults.map((qResult, index3) => /* @__PURE__ */ React73__namespace.default.createElement("li", { key: qResult.questionId, className: "p-4 border rounded-md bg-background" }, /* @__PURE__ */ React73__namespace.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ React73__namespace.default.createElement("h4", { className: "font-semibold" }, t2("common.questions", { count: index3 + 1 })), qResult.isCorrect ? /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "text-green-600 font-Medium flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleCheckBig, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.passed")) : /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "text-destructive font-Medium flex items-center" }, /* @__PURE__ */ React73__namespace.default.createElement(CircleX, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.failed"))), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.yourAnswer")), " ", getAnswerDisplay(qResult.userAnswer)), !qResult.isCorrect && /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.correctAnswer")), " ", getAnswerDisplay(qResult.correctAnswer)), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.pointsEarned")), " ", qResult.pointsEarned), /* @__PURE__ */ React73__namespace.default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__namespace.default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.timeSpent")), " ", qResult.timeSpentSeconds?.toFixed(0) ?? "N/A", t2("practiceFlow.results.timeUnit")))))))))), /* @__PURE__ */ React73__namespace.default.createElement(CardFooter, { className: "flex flex-col sm:flex-row justify-between gap-2" }, onExitQuiz && /* @__PURE__ */ React73__namespace.default.createElement(Button, { variant: "outline", onClick: onExitQuiz, className: "w-full sm:w-auto" }, /* @__PURE__ */ React73__namespace.default.createElement(LogOut, { className: "mr-2 h-4 w-4" }), t2("common.exit")), showReviewButton && onGenerateReview && /* @__PURE__ */ React73__namespace.default.createElement(
65708
65708
  Button,
65709
65709
  {
65710
65710
  onClick: onGenerateReview,
package/dist/player.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { s as QuizConfig } from './quiz-config-o4j2dfsu.cjs';
1
+ import { s as QuizConfig } from './quiz-config-CwaP-pBs.cjs';
2
2
 
3
3
  /**
4
4
  * Hàm này là entry point duy nhất cho gói SCORM hoặc môi trường độc lập.
package/dist/player.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { s as QuizConfig } from './quiz-config-o4j2dfsu.js';
1
+ import { s as QuizConfig } from './quiz-config-CwaP-pBs.js';
2
2
 
3
3
  /**
4
4
  * Hàm này là entry point duy nhất cho gói SCORM hoặc môi trường độc lập.
package/dist/player.mjs CHANGED
@@ -6246,7 +6246,7 @@ var cva = (base3, config2) => (props) => {
6246
6246
 
6247
6247
  // src/react-ui/components/elements/label.tsx
6248
6248
  var labelVariants = cva(
6249
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
6249
+ "text-sm font-Medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
6250
6250
  );
6251
6251
  var Label2 = React73.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React73.createElement(
6252
6252
  Root3,
@@ -31484,7 +31484,7 @@ var MarkdownRenderer = ({
31484
31484
  },
31485
31485
  h1: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("h1", { ...props, className: "text-3xl font-bold mb-6 mt-8 first:mt-0" }),
31486
31486
  h2: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("h2", { ...props, className: "text-2xl font-semibold mb-4 mt-6" }),
31487
- h3: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("h3", { ...props, className: "text-xl font-medium mb-3 mt-5" }),
31487
+ h3: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("h3", { ...props, className: "text-xl font-Medium mb-3 mt-5" }),
31488
31488
  ul: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("ul", { ...props, className: "my-4 space-y-2 list-disc list-inside" }),
31489
31489
  ol: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("ol", { ...props, className: "my-4 space-y-2 list-decimal list-inside" }),
31490
31490
  p: ({ node: node2, ...props }) => /* @__PURE__ */ React73__default.createElement("p", { ...props, className: "mb-4 leading-7" }),
@@ -31958,7 +31958,7 @@ var Input = React73.forwardRef(
31958
31958
  {
31959
31959
  type,
31960
31960
  className: cn(
31961
- "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
31961
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-Medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
31962
31962
  className
31963
31963
  ),
31964
31964
  ref,
@@ -32133,7 +32133,7 @@ init_react_shim();
32133
32133
  // src/react-ui/components/elements/button.tsx
32134
32134
  init_react_shim();
32135
32135
  var buttonVariants = cva(
32136
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
32136
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-Medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
32137
32137
  {
32138
32138
  variants: {
32139
32139
  variant: {
@@ -37081,7 +37081,7 @@ var MatchingQuestionUI = ({
37081
37081
  if (showCorrectAnswer && selectedOptionId) {
37082
37082
  borderColor = isSelectionCorrect ? "border-green-500" : "border-destructive";
37083
37083
  }
37084
- return /* @__PURE__ */ React73__default.createElement("div", { key: promptItem.id, className: `p-3 border rounded-md ${borderColor} transition-colors bg-background` }, /* @__PURE__ */ React73__default.createElement(Label2, { htmlFor: `select-prompt-${promptItem.id}`, className: "font-medium text-base block mb-2 whitespace-normal" }, /* @__PURE__ */ React73__default.createElement(MarkdownRenderer, { content: promptItem.content })), /* @__PURE__ */ React73__default.createElement(
37084
+ return /* @__PURE__ */ React73__default.createElement("div", { key: promptItem.id, className: `p-3 border rounded-md ${borderColor} transition-colors bg-background` }, /* @__PURE__ */ React73__default.createElement(Label2, { htmlFor: `select-prompt-${promptItem.id}`, className: "font-Medium text-base block mb-2 whitespace-normal" }, /* @__PURE__ */ React73__default.createElement(MarkdownRenderer, { content: promptItem.content })), /* @__PURE__ */ React73__default.createElement(
37085
37085
  Select2,
37086
37086
  {
37087
37087
  value: selectedOptionId,
@@ -37136,7 +37136,7 @@ var DragAndDropQuestionUI = ({
37136
37136
  } else {
37137
37137
  itemStyle += " border-muted";
37138
37138
  }
37139
- return /* @__PURE__ */ React73__default.createElement("div", { key: item.id, className: itemStyle }, /* @__PURE__ */ React73__default.createElement(Label2, { htmlFor: `select-draggable-${item.id}`, className: "font-medium text-base mb-2 sm:mb-0 sm:mr-4 flex-1" }, /* @__PURE__ */ React73__default.createElement(MarkdownRenderer, { content: item.content })), /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 w-full sm:w-auto" }, /* @__PURE__ */ React73__default.createElement(
37139
+ return /* @__PURE__ */ React73__default.createElement("div", { key: item.id, className: itemStyle }, /* @__PURE__ */ React73__default.createElement(Label2, { htmlFor: `select-draggable-${item.id}`, className: "font-Medium text-base mb-2 sm:mb-0 sm:mr-4 flex-1" }, /* @__PURE__ */ React73__default.createElement(MarkdownRenderer, { content: item.content })), /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 w-full sm:w-auto" }, /* @__PURE__ */ React73__default.createElement(
37140
37140
  Select2,
37141
37141
  {
37142
37142
  value: selectedDropZoneId,
@@ -64152,7 +64152,7 @@ var TabsTrigger2 = React73.forwardRef(({ className, ...props }, ref) => /* @__PU
64152
64152
  {
64153
64153
  ref,
64154
64154
  className: cn(
64155
- "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
64155
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-Medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
64156
64156
  className
64157
64157
  ),
64158
64158
  ...props
@@ -64852,7 +64852,7 @@ var AccordionTrigger2 = React73.forwardRef(({ className, children, ...props }, r
64852
64852
  {
64853
64853
  ref,
64854
64854
  className: cn(
64855
- "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
64855
+ "flex flex-1 items-center justify-between py-4 font-Medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
64856
64856
  className
64857
64857
  ),
64858
64858
  ...props
@@ -65639,7 +65639,7 @@ var QuizResult = ({
65639
65639
  }
65640
65640
  return String(answer);
65641
65641
  };
65642
- return /* @__PURE__ */ React73__default.createElement(Card, { className: "w-full max-w-3xl mx-auto shadow-xl" }, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-3xl font-headline text-center" }, t2("practiceFlow.results.title", { quizTitle })), /* @__PURE__ */ React73__default.createElement(CardDescription, { className: "text-center text-lg" }, t2("practiceFlow.results.description"))), /* @__PURE__ */ React73__default.createElement(CardContent, { className: "space-y-6" }, /* @__PURE__ */ React73__default.createElement(Card, { className: "bg-secondary/50" }, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-xl flex items-center" }, /* @__PURE__ */ React73__default.createElement(BarChart2, { className: "mr-2 h-5 w-5 text-primary" }), t2("practiceFlow.results.overallScore"))), /* @__PURE__ */ React73__default.createElement(CardContent, { className: "grid grid-cols-1 md:grid-cols-3 gap-4 text-center" }, /* @__PURE__ */ React73__default.createElement("div", null, /* @__PURE__ */ React73__default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.score, " / ", result.maxScore), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.points"))), /* @__PURE__ */ React73__default.createElement("div", null, /* @__PURE__ */ React73__default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.percentage.toFixed(2), "%"), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.percentage"))), /* @__PURE__ */ React73__default.createElement("div", null, result.passed !== void 0 && (result.passed ? /* @__PURE__ */ React73__default.createElement("div", { className: "flex flex-col items-center text-green-600" }, /* @__PURE__ */ React73__default.createElement(CircleCheckBig, { className: "h-10 w-10" }), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.passed"))) : /* @__PURE__ */ React73__default.createElement("div", { className: "flex flex-col items-center text-destructive" }, /* @__PURE__ */ React73__default.createElement(CircleX, { className: "h-10 w-10" }), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.failed"))))))), /* @__PURE__ */ React73__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" }, /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__default.createElement(Clock, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__default.createElement("span", null, t2("practiceFlow.results.timeSpent")), /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold" }, result.totalTimeSpentSeconds?.toFixed(0) ?? "N/A", " ", t2("practiceFlow.results.timeUnit"))), /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__default.createElement(Percent, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__default.createElement("span", null, t2("practiceFlow.results.avgTimePerQuestion")), /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold" }, result.averageTimePerQuestionSeconds?.toFixed(1) ?? "N/A", " ", t2("practiceFlow.results.timeUnit")))), result.scormStatus && result.scormStatus !== "idle" && result.scormStatus !== "no_api" && /* @__PURE__ */ React73__default.createElement(Card, null, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-lg" }, "SCORM Sync Status")), /* @__PURE__ */ React73__default.createElement(CardContent, null, /* @__PURE__ */ React73__default.createElement("p", { className: `flex items-center ${result.scormStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.scormStatus === "error" && /* @__PURE__ */ React73__default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold ml-1" }, result.scormStatus)), result.scormError && /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.scormError))), result.webhookStatus && result.webhookStatus !== "idle" && /* @__PURE__ */ React73__default.createElement(Card, null, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-lg" }, "Webhook Sync Status")), /* @__PURE__ */ React73__default.createElement(CardContent, null, /* @__PURE__ */ React73__default.createElement("p", { className: `flex items-center ${result.webhookStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.webhookStatus === "error" && /* @__PURE__ */ React73__default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold ml-1" }, result.webhookStatus)), result.webhookError && /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.webhookError))), /* @__PURE__ */ React73__default.createElement(Accordion2, { type: "single", collapsible: true, className: "w-full" }, /* @__PURE__ */ React73__default.createElement(AccordionItem2, { value: "question-breakdown" }, /* @__PURE__ */ React73__default.createElement(AccordionTrigger2, { className: "text-lg font-semibold" }, t2("practiceFlow.results.questionBreakdown")), /* @__PURE__ */ React73__default.createElement(AccordionContent2, null, /* @__PURE__ */ React73__default.createElement(ScrollArea2, { className: "h-[300px] pr-4" }, /* @__PURE__ */ React73__default.createElement("ul", { className: "space-y-4" }, result.questionResults.map((qResult, index3) => /* @__PURE__ */ React73__default.createElement("li", { key: qResult.questionId, className: "p-4 border rounded-md bg-background" }, /* @__PURE__ */ React73__default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ React73__default.createElement("h4", { className: "font-semibold" }, t2("common.questions", { count: index3 + 1 })), qResult.isCorrect ? /* @__PURE__ */ React73__default.createElement("span", { className: "text-green-600 font-medium flex items-center" }, /* @__PURE__ */ React73__default.createElement(CircleCheckBig, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.passed")) : /* @__PURE__ */ React73__default.createElement("span", { className: "text-destructive font-medium flex items-center" }, /* @__PURE__ */ React73__default.createElement(CircleX, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.failed"))), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.yourAnswer")), " ", getAnswerDisplay(qResult.userAnswer)), !qResult.isCorrect && /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.correctAnswer")), " ", getAnswerDisplay(qResult.correctAnswer)), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.pointsEarned")), " ", qResult.pointsEarned), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-medium" }, t2("practiceFlow.results.timeSpent")), " ", qResult.timeSpentSeconds?.toFixed(0) ?? "N/A", t2("practiceFlow.results.timeUnit")))))))))), /* @__PURE__ */ React73__default.createElement(CardFooter, { className: "flex flex-col sm:flex-row justify-between gap-2" }, onExitQuiz && /* @__PURE__ */ React73__default.createElement(Button, { variant: "outline", onClick: onExitQuiz, className: "w-full sm:w-auto" }, /* @__PURE__ */ React73__default.createElement(LogOut, { className: "mr-2 h-4 w-4" }), t2("common.exit")), showReviewButton && onGenerateReview && /* @__PURE__ */ React73__default.createElement(
65642
+ return /* @__PURE__ */ React73__default.createElement(Card, { className: "w-full max-w-3xl mx-auto shadow-xl" }, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-3xl font-headline text-center" }, t2("practiceFlow.results.title", { quizTitle })), /* @__PURE__ */ React73__default.createElement(CardDescription, { className: "text-center text-lg" }, t2("practiceFlow.results.description"))), /* @__PURE__ */ React73__default.createElement(CardContent, { className: "space-y-6" }, /* @__PURE__ */ React73__default.createElement(Card, { className: "bg-secondary/50" }, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-xl flex items-center" }, /* @__PURE__ */ React73__default.createElement(BarChart2, { className: "mr-2 h-5 w-5 text-primary" }), t2("practiceFlow.results.overallScore"))), /* @__PURE__ */ React73__default.createElement(CardContent, { className: "grid grid-cols-1 md:grid-cols-3 gap-4 text-center" }, /* @__PURE__ */ React73__default.createElement("div", null, /* @__PURE__ */ React73__default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.score, " / ", result.maxScore), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.points"))), /* @__PURE__ */ React73__default.createElement("div", null, /* @__PURE__ */ React73__default.createElement("p", { className: "text-3xl font-bold text-primary" }, result.percentage.toFixed(2), "%"), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm text-muted-foreground" }, t2("practiceFlow.results.percentage"))), /* @__PURE__ */ React73__default.createElement("div", null, result.passed !== void 0 && (result.passed ? /* @__PURE__ */ React73__default.createElement("div", { className: "flex flex-col items-center text-green-600" }, /* @__PURE__ */ React73__default.createElement(CircleCheckBig, { className: "h-10 w-10" }), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.passed"))) : /* @__PURE__ */ React73__default.createElement("div", { className: "flex flex-col items-center text-destructive" }, /* @__PURE__ */ React73__default.createElement(CircleX, { className: "h-10 w-10" }), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xl font-semibold mt-1" }, t2("practiceFlow.results.failed"))))))), /* @__PURE__ */ React73__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" }, /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__default.createElement(Clock, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__default.createElement("span", null, t2("practiceFlow.results.timeSpent")), /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold" }, result.totalTimeSpentSeconds?.toFixed(0) ?? "N/A", " ", t2("practiceFlow.results.timeUnit"))), /* @__PURE__ */ React73__default.createElement("div", { className: "flex items-center space-x-2 p-3 bg-muted rounded-md" }, /* @__PURE__ */ React73__default.createElement(Percent, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ React73__default.createElement("span", null, t2("practiceFlow.results.avgTimePerQuestion")), /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold" }, result.averageTimePerQuestionSeconds?.toFixed(1) ?? "N/A", " ", t2("practiceFlow.results.timeUnit")))), result.scormStatus && result.scormStatus !== "idle" && result.scormStatus !== "no_api" && /* @__PURE__ */ React73__default.createElement(Card, null, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-lg" }, "SCORM Sync Status")), /* @__PURE__ */ React73__default.createElement(CardContent, null, /* @__PURE__ */ React73__default.createElement("p", { className: `flex items-center ${result.scormStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.scormStatus === "error" && /* @__PURE__ */ React73__default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold ml-1" }, result.scormStatus)), result.scormError && /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.scormError))), result.webhookStatus && result.webhookStatus !== "idle" && /* @__PURE__ */ React73__default.createElement(Card, null, /* @__PURE__ */ React73__default.createElement(CardHeader, null, /* @__PURE__ */ React73__default.createElement(CardTitle, { className: "text-lg" }, "Webhook Sync Status")), /* @__PURE__ */ React73__default.createElement(CardContent, null, /* @__PURE__ */ React73__default.createElement("p", { className: `flex items-center ${result.webhookStatus === "error" ? "text-destructive" : "text-muted-foreground"}` }, result.webhookStatus === "error" && /* @__PURE__ */ React73__default.createElement(TriangleAlert, { className: "mr-2 h-4 w-4" }), "Status: ", /* @__PURE__ */ React73__default.createElement("span", { className: "font-semibold ml-1" }, result.webhookStatus)), result.webhookError && /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-destructive mt-1" }, "Details: ", result.webhookError))), /* @__PURE__ */ React73__default.createElement(Accordion2, { type: "single", collapsible: true, className: "w-full" }, /* @__PURE__ */ React73__default.createElement(AccordionItem2, { value: "question-breakdown" }, /* @__PURE__ */ React73__default.createElement(AccordionTrigger2, { className: "text-lg font-semibold" }, t2("practiceFlow.results.questionBreakdown")), /* @__PURE__ */ React73__default.createElement(AccordionContent2, null, /* @__PURE__ */ React73__default.createElement(ScrollArea2, { className: "h-[300px] pr-4" }, /* @__PURE__ */ React73__default.createElement("ul", { className: "space-y-4" }, result.questionResults.map((qResult, index3) => /* @__PURE__ */ React73__default.createElement("li", { key: qResult.questionId, className: "p-4 border rounded-md bg-background" }, /* @__PURE__ */ React73__default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ React73__default.createElement("h4", { className: "font-semibold" }, t2("common.questions", { count: index3 + 1 })), qResult.isCorrect ? /* @__PURE__ */ React73__default.createElement("span", { className: "text-green-600 font-Medium flex items-center" }, /* @__PURE__ */ React73__default.createElement(CircleCheckBig, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.passed")) : /* @__PURE__ */ React73__default.createElement("span", { className: "text-destructive font-Medium flex items-center" }, /* @__PURE__ */ React73__default.createElement(CircleX, { className: "mr-1 h-4 w-4" }), " ", t2("practiceFlow.results.failed"))), /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.yourAnswer")), " ", getAnswerDisplay(qResult.userAnswer)), !qResult.isCorrect && /* @__PURE__ */ React73__default.createElement("p", { className: "text-sm" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.correctAnswer")), " ", getAnswerDisplay(qResult.correctAnswer)), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.pointsEarned")), " ", qResult.pointsEarned), /* @__PURE__ */ React73__default.createElement("p", { className: "text-xs text-muted-foreground" }, /* @__PURE__ */ React73__default.createElement("span", { className: "font-Medium" }, t2("practiceFlow.results.timeSpent")), " ", qResult.timeSpentSeconds?.toFixed(0) ?? "N/A", t2("practiceFlow.results.timeUnit")))))))))), /* @__PURE__ */ React73__default.createElement(CardFooter, { className: "flex flex-col sm:flex-row justify-between gap-2" }, onExitQuiz && /* @__PURE__ */ React73__default.createElement(Button, { variant: "outline", onClick: onExitQuiz, className: "w-full sm:w-auto" }, /* @__PURE__ */ React73__default.createElement(LogOut, { className: "mr-2 h-4 w-4" }), t2("common.exit")), showReviewButton && onGenerateReview && /* @__PURE__ */ React73__default.createElement(
65643
65643
  Button,
65644
65644
  {
65645
65645
  onClick: onGenerateReview,
@@ -12,7 +12,7 @@ interface BaseQuestion {
12
12
  learningObjective?: string;
13
13
  glossary?: string[];
14
14
  bloomLevel?: string;
15
- difficulty?: 'easy' | 'medium' | 'hard';
15
+ difficulty?: 'Easy' | 'Medium' | 'Hard';
16
16
  contextCode?: string;
17
17
  gradeBand?: string;
18
18
  course?: string;
@@ -12,7 +12,7 @@ interface BaseQuestion {
12
12
  learningObjective?: string;
13
13
  glossary?: string[];
14
14
  bloomLevel?: string;
15
- difficulty?: 'easy' | 'medium' | 'hard';
15
+ difficulty?: 'Easy' | 'Medium' | 'Hard';
16
16
  contextCode?: string;
17
17
  gradeBand?: string;
18
18
  course?: string;