analytica-frontend-lib 1.1.5 → 1.1.6
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/Quiz/index.d.mts +1 -2
- package/dist/Quiz/index.d.ts +1 -2
- package/dist/Quiz/index.js +31 -5
- package/dist/Quiz/index.js.map +1 -1
- package/dist/Quiz/index.mjs +31 -5
- package/dist/Quiz/index.mjs.map +1 -1
- package/dist/Quiz/useQuizStore/index.d.mts +2 -0
- package/dist/Quiz/useQuizStore/index.d.ts +2 -0
- package/dist/Quiz/useQuizStore/index.js +2 -0
- package/dist/Quiz/useQuizStore/index.js.map +1 -1
- package/dist/Quiz/useQuizStore/index.mjs +2 -0
- package/dist/Quiz/useQuizStore/index.mjs.map +1 -1
- package/dist/VideoPlayer/index.d.mts +41 -0
- package/dist/VideoPlayer/index.d.ts +41 -0
- package/dist/VideoPlayer/index.js +562 -0
- package/dist/VideoPlayer/index.js.map +1 -0
- package/dist/VideoPlayer/index.mjs +550 -0
- package/dist/VideoPlayer/index.mjs.map +1 -0
- package/dist/index.css +124 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +679 -226
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +672 -211
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +124 -0
- package/dist/styles.css.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -121,6 +121,7 @@ __export(src_exports, {
|
|
|
121
121
|
TextArea: () => TextArea_default,
|
|
122
122
|
Toast: () => Toast_default,
|
|
123
123
|
Toaster: () => Toaster_default,
|
|
124
|
+
VideoPlayer: () => VideoPlayer_default,
|
|
124
125
|
createZustandAuthAdapter: () => createZustandAuthAdapter,
|
|
125
126
|
getRootDomain: () => getRootDomain,
|
|
126
127
|
getStatusBadge: () => getStatusBadge,
|
|
@@ -4723,7 +4724,7 @@ var CardAudio = (0, import_react14.forwardRef)(
|
|
|
4723
4724
|
const [volume, setVolume] = (0, import_react14.useState)(1);
|
|
4724
4725
|
const [showVolumeControl, setShowVolumeControl] = (0, import_react14.useState)(false);
|
|
4725
4726
|
const audioRef = (0, import_react14.useRef)(null);
|
|
4726
|
-
const
|
|
4727
|
+
const formatTime2 = (time) => {
|
|
4727
4728
|
const minutes = Math.floor(time / 60);
|
|
4728
4729
|
const seconds = Math.floor(time % 60);
|
|
4729
4730
|
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
|
|
@@ -4841,7 +4842,7 @@ var CardAudio = (0, import_react14.forwardRef)(
|
|
|
4841
4842
|
] }) }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_phosphor_react12.Play, { size: 24 })
|
|
4842
4843
|
}
|
|
4843
4844
|
),
|
|
4844
|
-
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-text-800 text-sm font-medium min-w-[2.5rem]", children:
|
|
4845
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-text-800 text-sm font-medium min-w-[2.5rem]", children: formatTime2(currentTime) }),
|
|
4845
4846
|
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex-1 relative", "data-testid": "progress-bar", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
4846
4847
|
"button",
|
|
4847
4848
|
{
|
|
@@ -4868,7 +4869,7 @@ var CardAudio = (0, import_react14.forwardRef)(
|
|
|
4868
4869
|
)
|
|
4869
4870
|
}
|
|
4870
4871
|
) }),
|
|
4871
|
-
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-text-800 text-sm font-medium min-w-[2.5rem]", children:
|
|
4872
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-text-800 text-sm font-medium min-w-[2.5rem]", children: formatTime2(duration) }),
|
|
4872
4873
|
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "relative", children: [
|
|
4873
4874
|
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
4874
4875
|
"button",
|
|
@@ -6819,11 +6820,436 @@ var NotFound = ({
|
|
|
6819
6820
|
};
|
|
6820
6821
|
var NotFound_default = NotFound;
|
|
6821
6822
|
|
|
6822
|
-
// src/components/
|
|
6823
|
+
// src/components/VideoPlayer/VideoPlayer.tsx
|
|
6823
6824
|
var import_react22 = require("react");
|
|
6824
|
-
var
|
|
6825
|
+
var import_phosphor_react18 = require("phosphor-react");
|
|
6825
6826
|
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
6826
|
-
var
|
|
6827
|
+
var formatTime = (seconds) => {
|
|
6828
|
+
if (!seconds || isNaN(seconds)) return "0:00";
|
|
6829
|
+
const mins = Math.floor(seconds / 60);
|
|
6830
|
+
const secs = Math.floor(seconds % 60);
|
|
6831
|
+
return `${mins}:${secs.toString().padStart(2, "0")}`;
|
|
6832
|
+
};
|
|
6833
|
+
var VideoPlayer = ({
|
|
6834
|
+
src,
|
|
6835
|
+
poster,
|
|
6836
|
+
subtitles,
|
|
6837
|
+
title,
|
|
6838
|
+
subtitle: subtitleText,
|
|
6839
|
+
initialTime = 0,
|
|
6840
|
+
onTimeUpdate,
|
|
6841
|
+
onProgress,
|
|
6842
|
+
onVideoComplete,
|
|
6843
|
+
className,
|
|
6844
|
+
autoSave = true,
|
|
6845
|
+
storageKey = "video-progress"
|
|
6846
|
+
}) => {
|
|
6847
|
+
const videoRef = (0, import_react22.useRef)(null);
|
|
6848
|
+
const [isPlaying, setIsPlaying] = (0, import_react22.useState)(false);
|
|
6849
|
+
const [currentTime, setCurrentTime] = (0, import_react22.useState)(0);
|
|
6850
|
+
const [duration, setDuration] = (0, import_react22.useState)(0);
|
|
6851
|
+
const [isMuted, setIsMuted] = (0, import_react22.useState)(false);
|
|
6852
|
+
const [volume, setVolume] = (0, import_react22.useState)(1);
|
|
6853
|
+
const [isFullscreen, setIsFullscreen] = (0, import_react22.useState)(false);
|
|
6854
|
+
const [showControls, setShowControls] = (0, import_react22.useState)(true);
|
|
6855
|
+
const [hasCompleted, setHasCompleted] = (0, import_react22.useState)(false);
|
|
6856
|
+
const [showCaptions, setShowCaptions] = (0, import_react22.useState)(false);
|
|
6857
|
+
const [playbackRate, setPlaybackRate] = (0, import_react22.useState)(1);
|
|
6858
|
+
const [showSpeedMenu, setShowSpeedMenu] = (0, import_react22.useState)(false);
|
|
6859
|
+
const lastSaveTimeRef = (0, import_react22.useRef)(0);
|
|
6860
|
+
const trackRef = (0, import_react22.useRef)(null);
|
|
6861
|
+
(0, import_react22.useEffect)(() => {
|
|
6862
|
+
if (videoRef.current) {
|
|
6863
|
+
videoRef.current.volume = volume;
|
|
6864
|
+
videoRef.current.muted = isMuted;
|
|
6865
|
+
}
|
|
6866
|
+
}, [volume, isMuted]);
|
|
6867
|
+
(0, import_react22.useEffect)(() => {
|
|
6868
|
+
if (!autoSave || !storageKey) return;
|
|
6869
|
+
const raw = localStorage.getItem(`${storageKey}-${src}`);
|
|
6870
|
+
const saved = raw !== null ? Number(raw) : NaN;
|
|
6871
|
+
const hasValidSaved = Number.isFinite(saved) && saved >= 0;
|
|
6872
|
+
const hasValidInitial = Number.isFinite(initialTime) && initialTime >= 0;
|
|
6873
|
+
let start;
|
|
6874
|
+
if (hasValidInitial) {
|
|
6875
|
+
start = initialTime;
|
|
6876
|
+
} else if (hasValidSaved) {
|
|
6877
|
+
start = saved;
|
|
6878
|
+
} else {
|
|
6879
|
+
start = void 0;
|
|
6880
|
+
}
|
|
6881
|
+
if (start !== void 0 && videoRef.current) {
|
|
6882
|
+
videoRef.current.currentTime = start;
|
|
6883
|
+
setCurrentTime(start);
|
|
6884
|
+
}
|
|
6885
|
+
}, [src, storageKey, autoSave, initialTime]);
|
|
6886
|
+
const saveProgress = (0, import_react22.useCallback)(() => {
|
|
6887
|
+
if (!autoSave || !storageKey) return;
|
|
6888
|
+
const now = Date.now();
|
|
6889
|
+
if (now - lastSaveTimeRef.current > 5e3) {
|
|
6890
|
+
localStorage.setItem(`${storageKey}-${src}`, currentTime.toString());
|
|
6891
|
+
lastSaveTimeRef.current = now;
|
|
6892
|
+
}
|
|
6893
|
+
}, [autoSave, storageKey, src, currentTime]);
|
|
6894
|
+
const togglePlayPause = (0, import_react22.useCallback)(() => {
|
|
6895
|
+
if (videoRef.current) {
|
|
6896
|
+
if (isPlaying) {
|
|
6897
|
+
videoRef.current.pause();
|
|
6898
|
+
} else {
|
|
6899
|
+
videoRef.current.play();
|
|
6900
|
+
}
|
|
6901
|
+
setIsPlaying(!isPlaying);
|
|
6902
|
+
}
|
|
6903
|
+
}, [isPlaying]);
|
|
6904
|
+
const handleVolumeChange = (0, import_react22.useCallback)(
|
|
6905
|
+
(newVolume) => {
|
|
6906
|
+
if (videoRef.current) {
|
|
6907
|
+
const volumeValue = newVolume / 100;
|
|
6908
|
+
videoRef.current.volume = volumeValue;
|
|
6909
|
+
setVolume(volumeValue);
|
|
6910
|
+
if (volumeValue === 0) {
|
|
6911
|
+
videoRef.current.muted = true;
|
|
6912
|
+
setIsMuted(true);
|
|
6913
|
+
} else if (isMuted) {
|
|
6914
|
+
videoRef.current.muted = false;
|
|
6915
|
+
setIsMuted(false);
|
|
6916
|
+
}
|
|
6917
|
+
}
|
|
6918
|
+
},
|
|
6919
|
+
[isMuted]
|
|
6920
|
+
);
|
|
6921
|
+
const toggleMute = (0, import_react22.useCallback)(() => {
|
|
6922
|
+
if (videoRef.current) {
|
|
6923
|
+
if (isMuted) {
|
|
6924
|
+
const restoreVolume = volume > 0 ? volume : 0.5;
|
|
6925
|
+
videoRef.current.volume = restoreVolume;
|
|
6926
|
+
videoRef.current.muted = false;
|
|
6927
|
+
setVolume(restoreVolume);
|
|
6928
|
+
setIsMuted(false);
|
|
6929
|
+
} else {
|
|
6930
|
+
videoRef.current.muted = true;
|
|
6931
|
+
setIsMuted(true);
|
|
6932
|
+
}
|
|
6933
|
+
}
|
|
6934
|
+
}, [isMuted, volume]);
|
|
6935
|
+
const toggleFullscreen = (0, import_react22.useCallback)(() => {
|
|
6936
|
+
const container = videoRef.current?.parentElement;
|
|
6937
|
+
if (!container) return;
|
|
6938
|
+
if (!isFullscreen) {
|
|
6939
|
+
if (container.requestFullscreen) {
|
|
6940
|
+
container.requestFullscreen();
|
|
6941
|
+
}
|
|
6942
|
+
} else if (document.exitFullscreen) {
|
|
6943
|
+
document.exitFullscreen();
|
|
6944
|
+
}
|
|
6945
|
+
setIsFullscreen(!isFullscreen);
|
|
6946
|
+
}, [isFullscreen]);
|
|
6947
|
+
const handleSpeedChange = (0, import_react22.useCallback)((speed) => {
|
|
6948
|
+
if (videoRef.current) {
|
|
6949
|
+
videoRef.current.playbackRate = speed;
|
|
6950
|
+
setPlaybackRate(speed);
|
|
6951
|
+
setShowSpeedMenu(false);
|
|
6952
|
+
}
|
|
6953
|
+
}, []);
|
|
6954
|
+
const toggleSpeedMenu = (0, import_react22.useCallback)(() => {
|
|
6955
|
+
setShowSpeedMenu(!showSpeedMenu);
|
|
6956
|
+
}, [showSpeedMenu]);
|
|
6957
|
+
const toggleCaptions = (0, import_react22.useCallback)(() => {
|
|
6958
|
+
if (!trackRef.current?.track) return;
|
|
6959
|
+
const newShowCaptions = !showCaptions;
|
|
6960
|
+
setShowCaptions(newShowCaptions);
|
|
6961
|
+
trackRef.current.track.mode = newShowCaptions ? "showing" : "hidden";
|
|
6962
|
+
}, [showCaptions]);
|
|
6963
|
+
const handleTimeUpdate = (0, import_react22.useCallback)(() => {
|
|
6964
|
+
if (videoRef.current) {
|
|
6965
|
+
const current = videoRef.current.currentTime;
|
|
6966
|
+
setCurrentTime(current);
|
|
6967
|
+
saveProgress();
|
|
6968
|
+
onTimeUpdate?.(current);
|
|
6969
|
+
if (duration > 0) {
|
|
6970
|
+
const progressPercent = current / duration * 100;
|
|
6971
|
+
onProgress?.(progressPercent);
|
|
6972
|
+
if (progressPercent >= 95 && !hasCompleted) {
|
|
6973
|
+
setHasCompleted(true);
|
|
6974
|
+
onVideoComplete?.();
|
|
6975
|
+
}
|
|
6976
|
+
}
|
|
6977
|
+
}
|
|
6978
|
+
}, [
|
|
6979
|
+
duration,
|
|
6980
|
+
saveProgress,
|
|
6981
|
+
onTimeUpdate,
|
|
6982
|
+
onProgress,
|
|
6983
|
+
onVideoComplete,
|
|
6984
|
+
hasCompleted
|
|
6985
|
+
]);
|
|
6986
|
+
const handleLoadedMetadata = (0, import_react22.useCallback)(() => {
|
|
6987
|
+
if (videoRef.current) {
|
|
6988
|
+
setDuration(videoRef.current.duration);
|
|
6989
|
+
}
|
|
6990
|
+
}, []);
|
|
6991
|
+
(0, import_react22.useEffect)(() => {
|
|
6992
|
+
const handleVisibilityChange = () => {
|
|
6993
|
+
if (document.hidden && isPlaying && videoRef.current) {
|
|
6994
|
+
videoRef.current.pause();
|
|
6995
|
+
setIsPlaying(false);
|
|
6996
|
+
}
|
|
6997
|
+
};
|
|
6998
|
+
const handleBlur = () => {
|
|
6999
|
+
if (isPlaying && videoRef.current) {
|
|
7000
|
+
videoRef.current.pause();
|
|
7001
|
+
setIsPlaying(false);
|
|
7002
|
+
}
|
|
7003
|
+
};
|
|
7004
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
7005
|
+
window.addEventListener("blur", handleBlur);
|
|
7006
|
+
return () => {
|
|
7007
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
7008
|
+
window.removeEventListener("blur", handleBlur);
|
|
7009
|
+
};
|
|
7010
|
+
}, [isPlaying]);
|
|
7011
|
+
const progressPercentage = duration > 0 ? currentTime / duration * 100 : 0;
|
|
7012
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn("flex flex-col", className), children: [
|
|
7013
|
+
(title || subtitleText) && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "bg-subject-1 rounded-t-xl px-8 py-4 flex items-end justify-between min-h-20", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex flex-col gap-1", children: [
|
|
7014
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7015
|
+
Text_default,
|
|
7016
|
+
{
|
|
7017
|
+
as: "h2",
|
|
7018
|
+
size: "lg",
|
|
7019
|
+
weight: "bold",
|
|
7020
|
+
color: "text-text-900",
|
|
7021
|
+
className: "leading-5 tracking-wide",
|
|
7022
|
+
children: title
|
|
7023
|
+
}
|
|
7024
|
+
),
|
|
7025
|
+
subtitleText && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7026
|
+
Text_default,
|
|
7027
|
+
{
|
|
7028
|
+
as: "p",
|
|
7029
|
+
size: "sm",
|
|
7030
|
+
weight: "normal",
|
|
7031
|
+
color: "text-text-600",
|
|
7032
|
+
className: "leading-5",
|
|
7033
|
+
children: subtitleText
|
|
7034
|
+
}
|
|
7035
|
+
)
|
|
7036
|
+
] }) }),
|
|
7037
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
7038
|
+
"div",
|
|
7039
|
+
{
|
|
7040
|
+
className: cn(
|
|
7041
|
+
"relative w-full bg-background overflow-hidden group",
|
|
7042
|
+
title || subtitleText ? "rounded-b-xl" : "rounded-xl"
|
|
7043
|
+
),
|
|
7044
|
+
children: [
|
|
7045
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7046
|
+
"video",
|
|
7047
|
+
{
|
|
7048
|
+
ref: videoRef,
|
|
7049
|
+
src,
|
|
7050
|
+
poster,
|
|
7051
|
+
className: "w-full h-full object-contain",
|
|
7052
|
+
controlsList: "nodownload",
|
|
7053
|
+
onTimeUpdate: handleTimeUpdate,
|
|
7054
|
+
onLoadedMetadata: handleLoadedMetadata,
|
|
7055
|
+
onClick: togglePlayPause,
|
|
7056
|
+
onKeyDown: (e) => {
|
|
7057
|
+
if (e.key) {
|
|
7058
|
+
setShowControls(true);
|
|
7059
|
+
}
|
|
7060
|
+
if (e.key === " " || e.key === "Enter") {
|
|
7061
|
+
e.preventDefault();
|
|
7062
|
+
togglePlayPause();
|
|
7063
|
+
}
|
|
7064
|
+
if (e.key === "ArrowLeft" && videoRef.current) {
|
|
7065
|
+
e.preventDefault();
|
|
7066
|
+
videoRef.current.currentTime -= 10;
|
|
7067
|
+
}
|
|
7068
|
+
if (e.key === "ArrowRight" && videoRef.current) {
|
|
7069
|
+
e.preventDefault();
|
|
7070
|
+
videoRef.current.currentTime += 10;
|
|
7071
|
+
}
|
|
7072
|
+
if (e.key === "ArrowUp") {
|
|
7073
|
+
e.preventDefault();
|
|
7074
|
+
handleVolumeChange(Math.min(100, volume * 100 + 10));
|
|
7075
|
+
}
|
|
7076
|
+
if (e.key === "ArrowDown") {
|
|
7077
|
+
e.preventDefault();
|
|
7078
|
+
handleVolumeChange(Math.max(0, volume * 100 - 10));
|
|
7079
|
+
}
|
|
7080
|
+
if (e.key === "m" || e.key === "M") {
|
|
7081
|
+
e.preventDefault();
|
|
7082
|
+
toggleMute();
|
|
7083
|
+
}
|
|
7084
|
+
if (e.key === "f" || e.key === "F") {
|
|
7085
|
+
e.preventDefault();
|
|
7086
|
+
toggleFullscreen();
|
|
7087
|
+
}
|
|
7088
|
+
},
|
|
7089
|
+
tabIndex: 0,
|
|
7090
|
+
"aria-label": title ? `Video: ${title}` : "Video player",
|
|
7091
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7092
|
+
"track",
|
|
7093
|
+
{
|
|
7094
|
+
ref: trackRef,
|
|
7095
|
+
kind: "captions",
|
|
7096
|
+
src: subtitles || "data:text/vtt;charset=utf-8,WEBVTT%0A%0ANOTE%20No%20captions%20available",
|
|
7097
|
+
srcLang: "en",
|
|
7098
|
+
label: subtitles ? "Subtitles" : "No captions available",
|
|
7099
|
+
default: false
|
|
7100
|
+
}
|
|
7101
|
+
)
|
|
7102
|
+
}
|
|
7103
|
+
),
|
|
7104
|
+
!isPlaying && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "absolute inset-0 flex items-center justify-center bg-black/30 transition-opacity", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7105
|
+
IconButton_default,
|
|
7106
|
+
{
|
|
7107
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.Play, { size: 32, weight: "regular", className: "ml-1" }),
|
|
7108
|
+
onClick: togglePlayPause,
|
|
7109
|
+
"aria-label": "Play video",
|
|
7110
|
+
className: "!bg-transparent !text-white !w-auto !h-auto hover:!bg-transparent hover:!text-gray-200"
|
|
7111
|
+
}
|
|
7112
|
+
) }),
|
|
7113
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7114
|
+
"div",
|
|
7115
|
+
{
|
|
7116
|
+
className: cn(
|
|
7117
|
+
"absolute top-0 left-0 right-0 p-4 bg-gradient-to-b from-black/70 to-transparent transition-opacity",
|
|
7118
|
+
!isPlaying || showControls ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
7119
|
+
),
|
|
7120
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "ml-auto block", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7121
|
+
IconButton_default,
|
|
7122
|
+
{
|
|
7123
|
+
icon: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.ArrowsInSimple, { size: 24 }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.ArrowsOutSimple, { size: 24 }),
|
|
7124
|
+
onClick: toggleFullscreen,
|
|
7125
|
+
"aria-label": isFullscreen ? "Exit fullscreen" : "Enter fullscreen",
|
|
7126
|
+
className: "!bg-transparent !text-white hover:!bg-white/20"
|
|
7127
|
+
}
|
|
7128
|
+
) })
|
|
7129
|
+
}
|
|
7130
|
+
),
|
|
7131
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
7132
|
+
"div",
|
|
7133
|
+
{
|
|
7134
|
+
className: cn(
|
|
7135
|
+
"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/90 to-transparent transition-opacity",
|
|
7136
|
+
!isPlaying || showControls ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
7137
|
+
),
|
|
7138
|
+
children: [
|
|
7139
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "px-4 pb-2", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7140
|
+
"input",
|
|
7141
|
+
{
|
|
7142
|
+
type: "range",
|
|
7143
|
+
min: 0,
|
|
7144
|
+
max: duration || 100,
|
|
7145
|
+
value: currentTime,
|
|
7146
|
+
onChange: (e) => {
|
|
7147
|
+
const newTime = parseFloat(e.target.value);
|
|
7148
|
+
if (videoRef.current) {
|
|
7149
|
+
videoRef.current.currentTime = newTime;
|
|
7150
|
+
}
|
|
7151
|
+
},
|
|
7152
|
+
className: "w-full h-1 bg-neutral-600 rounded-full appearance-none cursor-pointer slider:bg-primary-600 focus:outline-none focus:ring-2 focus:ring-primary-500",
|
|
7153
|
+
"aria-label": "Video progress",
|
|
7154
|
+
style: {
|
|
7155
|
+
background: `linear-gradient(to right, #2271C4 ${progressPercentage}%, #D5D4D4 ${progressPercentage}%)`
|
|
7156
|
+
}
|
|
7157
|
+
}
|
|
7158
|
+
) }),
|
|
7159
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center justify-between px-4 pb-4", children: [
|
|
7160
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center gap-4", children: [
|
|
7161
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7162
|
+
IconButton_default,
|
|
7163
|
+
{
|
|
7164
|
+
icon: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.Pause, { size: 24 }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.Play, { size: 24 }),
|
|
7165
|
+
onClick: togglePlayPause,
|
|
7166
|
+
"aria-label": isPlaying ? "Pause" : "Play",
|
|
7167
|
+
className: "!bg-transparent !text-white hover:!bg-white/20"
|
|
7168
|
+
}
|
|
7169
|
+
),
|
|
7170
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7171
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7172
|
+
IconButton_default,
|
|
7173
|
+
{
|
|
7174
|
+
icon: isMuted ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.SpeakerSlash, { size: 24 }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.SpeakerHigh, { size: 24 }),
|
|
7175
|
+
onClick: toggleMute,
|
|
7176
|
+
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
7177
|
+
className: "!bg-transparent !text-white hover:!bg-white/20"
|
|
7178
|
+
}
|
|
7179
|
+
),
|
|
7180
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7181
|
+
"input",
|
|
7182
|
+
{
|
|
7183
|
+
type: "range",
|
|
7184
|
+
min: 0,
|
|
7185
|
+
max: 100,
|
|
7186
|
+
value: Math.round(volume * 100),
|
|
7187
|
+
onChange: (e) => handleVolumeChange(parseInt(e.target.value)),
|
|
7188
|
+
className: "w-20 h-1 bg-neutral-600 rounded-full appearance-none cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary-500",
|
|
7189
|
+
"aria-label": "Volume control",
|
|
7190
|
+
style: {
|
|
7191
|
+
background: `linear-gradient(to right, #2271C4 ${volume * 100}%, #D5D4D4 ${volume * 100}%)`
|
|
7192
|
+
}
|
|
7193
|
+
}
|
|
7194
|
+
)
|
|
7195
|
+
] }),
|
|
7196
|
+
subtitles && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7197
|
+
IconButton_default,
|
|
7198
|
+
{
|
|
7199
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.ClosedCaptioning, { size: 24 }),
|
|
7200
|
+
onClick: toggleCaptions,
|
|
7201
|
+
"aria-label": showCaptions ? "Hide captions" : "Show captions",
|
|
7202
|
+
className: cn(
|
|
7203
|
+
"!bg-transparent hover:!bg-white/20",
|
|
7204
|
+
showCaptions ? "!text-primary-400" : "!text-white"
|
|
7205
|
+
)
|
|
7206
|
+
}
|
|
7207
|
+
),
|
|
7208
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Text_default, { size: "sm", weight: "medium", color: "text-white", children: [
|
|
7209
|
+
formatTime(currentTime),
|
|
7210
|
+
" / ",
|
|
7211
|
+
formatTime(duration)
|
|
7212
|
+
] })
|
|
7213
|
+
] }),
|
|
7214
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "flex items-center gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "relative", children: [
|
|
7215
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
7216
|
+
IconButton_default,
|
|
7217
|
+
{
|
|
7218
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_phosphor_react18.DotsThreeVertical, { size: 24 }),
|
|
7219
|
+
onClick: toggleSpeedMenu,
|
|
7220
|
+
"aria-label": "Playback speed",
|
|
7221
|
+
className: "!bg-transparent !text-white hover:!bg-white/20"
|
|
7222
|
+
}
|
|
7223
|
+
),
|
|
7224
|
+
showSpeedMenu && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "absolute bottom-12 right-0 bg-black/90 rounded-lg p-2 min-w-20", children: [0.5, 0.75, 1, 1.25, 1.5, 2].map((speed) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
7225
|
+
"button",
|
|
7226
|
+
{
|
|
7227
|
+
onClick: () => handleSpeedChange(speed),
|
|
7228
|
+
className: `block w-full text-left px-3 py-1 text-sm rounded hover:bg-white/20 transition-colors ${playbackRate === speed ? "text-primary-400" : "text-white"}`,
|
|
7229
|
+
children: [
|
|
7230
|
+
speed,
|
|
7231
|
+
"x"
|
|
7232
|
+
]
|
|
7233
|
+
},
|
|
7234
|
+
speed
|
|
7235
|
+
)) })
|
|
7236
|
+
] }) })
|
|
7237
|
+
] })
|
|
7238
|
+
]
|
|
7239
|
+
}
|
|
7240
|
+
)
|
|
7241
|
+
]
|
|
7242
|
+
}
|
|
7243
|
+
)
|
|
7244
|
+
] });
|
|
7245
|
+
};
|
|
7246
|
+
var VideoPlayer_default = VideoPlayer;
|
|
7247
|
+
|
|
7248
|
+
// src/components/Auth/Auth.tsx
|
|
7249
|
+
var import_react23 = require("react");
|
|
7250
|
+
var import_react_router_dom = require("react-router-dom");
|
|
7251
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
7252
|
+
var AuthContext = (0, import_react23.createContext)(void 0);
|
|
6827
7253
|
var AuthProvider = ({
|
|
6828
7254
|
children,
|
|
6829
7255
|
checkAuthFn,
|
|
@@ -6833,12 +7259,12 @@ var AuthProvider = ({
|
|
|
6833
7259
|
getSessionFn,
|
|
6834
7260
|
getTokensFn
|
|
6835
7261
|
}) => {
|
|
6836
|
-
const [authState, setAuthState] = (0,
|
|
7262
|
+
const [authState, setAuthState] = (0, import_react23.useState)({
|
|
6837
7263
|
isAuthenticated: false,
|
|
6838
7264
|
isLoading: true,
|
|
6839
7265
|
...initialAuthState
|
|
6840
7266
|
});
|
|
6841
|
-
const checkAuth = (0,
|
|
7267
|
+
const checkAuth = (0, import_react23.useCallback)(async () => {
|
|
6842
7268
|
try {
|
|
6843
7269
|
setAuthState((prev) => ({ ...prev, isLoading: true }));
|
|
6844
7270
|
if (!checkAuthFn) {
|
|
@@ -6869,7 +7295,7 @@ var AuthProvider = ({
|
|
|
6869
7295
|
return false;
|
|
6870
7296
|
}
|
|
6871
7297
|
}, [checkAuthFn, getUserFn, getSessionFn, getTokensFn]);
|
|
6872
|
-
const signOut = (0,
|
|
7298
|
+
const signOut = (0, import_react23.useCallback)(() => {
|
|
6873
7299
|
if (signOutFn) {
|
|
6874
7300
|
signOutFn();
|
|
6875
7301
|
}
|
|
@@ -6881,10 +7307,10 @@ var AuthProvider = ({
|
|
|
6881
7307
|
tokens: void 0
|
|
6882
7308
|
}));
|
|
6883
7309
|
}, [signOutFn]);
|
|
6884
|
-
(0,
|
|
7310
|
+
(0, import_react23.useEffect)(() => {
|
|
6885
7311
|
checkAuth();
|
|
6886
7312
|
}, [checkAuth]);
|
|
6887
|
-
const contextValue = (0,
|
|
7313
|
+
const contextValue = (0, import_react23.useMemo)(
|
|
6888
7314
|
() => ({
|
|
6889
7315
|
...authState,
|
|
6890
7316
|
checkAuth,
|
|
@@ -6892,10 +7318,10 @@ var AuthProvider = ({
|
|
|
6892
7318
|
}),
|
|
6893
7319
|
[authState, checkAuth, signOut]
|
|
6894
7320
|
);
|
|
6895
|
-
return /* @__PURE__ */ (0,
|
|
7321
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AuthContext.Provider, { value: contextValue, children });
|
|
6896
7322
|
};
|
|
6897
7323
|
var useAuth = () => {
|
|
6898
|
-
const context = (0,
|
|
7324
|
+
const context = (0, import_react23.useContext)(AuthContext);
|
|
6899
7325
|
if (context === void 0) {
|
|
6900
7326
|
throw new Error("useAuth deve ser usado dentro de um AuthProvider");
|
|
6901
7327
|
}
|
|
@@ -6908,9 +7334,9 @@ var ProtectedRoute = ({
|
|
|
6908
7334
|
additionalCheck
|
|
6909
7335
|
}) => {
|
|
6910
7336
|
const { isAuthenticated, isLoading, ...authState } = useAuth();
|
|
6911
|
-
const defaultLoadingComponent = /* @__PURE__ */ (0,
|
|
7337
|
+
const defaultLoadingComponent = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-text-950 text-lg", children: "Carregando..." }) });
|
|
6912
7338
|
if (isLoading) {
|
|
6913
|
-
return /* @__PURE__ */ (0,
|
|
7339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: loadingComponent || defaultLoadingComponent });
|
|
6914
7340
|
}
|
|
6915
7341
|
if (!isAuthenticated) {
|
|
6916
7342
|
if (typeof window !== "undefined") {
|
|
@@ -6921,12 +7347,12 @@ var ProtectedRoute = ({
|
|
|
6921
7347
|
return null;
|
|
6922
7348
|
}
|
|
6923
7349
|
}
|
|
6924
|
-
return /* @__PURE__ */ (0,
|
|
7350
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_router_dom.Navigate, { to: redirectTo, replace: true });
|
|
6925
7351
|
}
|
|
6926
7352
|
if (additionalCheck && !additionalCheck({ isAuthenticated, isLoading, ...authState })) {
|
|
6927
|
-
return /* @__PURE__ */ (0,
|
|
7353
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_router_dom.Navigate, { to: redirectTo, replace: true });
|
|
6928
7354
|
}
|
|
6929
|
-
return /* @__PURE__ */ (0,
|
|
7355
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children });
|
|
6930
7356
|
};
|
|
6931
7357
|
var PublicRoute = ({
|
|
6932
7358
|
children,
|
|
@@ -6936,15 +7362,15 @@ var PublicRoute = ({
|
|
|
6936
7362
|
}) => {
|
|
6937
7363
|
const { isAuthenticated, isLoading } = useAuth();
|
|
6938
7364
|
if (checkAuthBeforeRender && isLoading) {
|
|
6939
|
-
return /* @__PURE__ */ (0,
|
|
7365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-text-950 text-lg", children: "Carregando..." }) });
|
|
6940
7366
|
}
|
|
6941
7367
|
if (isAuthenticated && redirectIfAuthenticated) {
|
|
6942
|
-
return /* @__PURE__ */ (0,
|
|
7368
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_router_dom.Navigate, { to: redirectTo, replace: true });
|
|
6943
7369
|
}
|
|
6944
|
-
return /* @__PURE__ */ (0,
|
|
7370
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children });
|
|
6945
7371
|
};
|
|
6946
7372
|
var withAuth = (Component, options = {}) => {
|
|
6947
|
-
return (props) => /* @__PURE__ */ (0,
|
|
7373
|
+
return (props) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ProtectedRoute, { ...options, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Component, { ...props }) });
|
|
6948
7374
|
};
|
|
6949
7375
|
var useAuthGuard = (options = {}) => {
|
|
6950
7376
|
const authState = useAuth();
|
|
@@ -6959,7 +7385,7 @@ var useAuthGuard = (options = {}) => {
|
|
|
6959
7385
|
var useRouteAuth = (fallbackPath = "/") => {
|
|
6960
7386
|
const { isAuthenticated, isLoading } = useAuth();
|
|
6961
7387
|
const location = (0, import_react_router_dom.useLocation)();
|
|
6962
|
-
const redirectToLogin = () => /* @__PURE__ */ (0,
|
|
7388
|
+
const redirectToLogin = () => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_router_dom.Navigate, { to: fallbackPath, state: { from: location }, replace: true });
|
|
6963
7389
|
return {
|
|
6964
7390
|
isAuthenticated,
|
|
6965
7391
|
isLoading,
|
|
@@ -7023,7 +7449,7 @@ function createZustandAuthAdapter(useAuthStore) {
|
|
|
7023
7449
|
}
|
|
7024
7450
|
|
|
7025
7451
|
// src/components/Auth/useUrlAuthentication.ts
|
|
7026
|
-
var
|
|
7452
|
+
var import_react24 = require("react");
|
|
7027
7453
|
var import_react_router_dom2 = require("react-router-dom");
|
|
7028
7454
|
var getAuthParams = (location, extractParams) => {
|
|
7029
7455
|
const searchParams = new URLSearchParams(location.search);
|
|
@@ -7071,7 +7497,7 @@ var handleUserData = (responseData, setUser) => {
|
|
|
7071
7497
|
};
|
|
7072
7498
|
function useUrlAuthentication(options) {
|
|
7073
7499
|
const location = (0, import_react_router_dom2.useLocation)();
|
|
7074
|
-
(0,
|
|
7500
|
+
(0, import_react24.useEffect)(() => {
|
|
7075
7501
|
const handleAuthentication = async () => {
|
|
7076
7502
|
const authParams = getAuthParams(location, options.extractParams);
|
|
7077
7503
|
if (!hasValidAuthParams(authParams)) {
|
|
@@ -7110,9 +7536,9 @@ function useUrlAuthentication(options) {
|
|
|
7110
7536
|
}
|
|
7111
7537
|
|
|
7112
7538
|
// src/components/Auth/useApiConfig.ts
|
|
7113
|
-
var
|
|
7539
|
+
var import_react25 = require("react");
|
|
7114
7540
|
function useApiConfig(api) {
|
|
7115
|
-
return (0,
|
|
7541
|
+
return (0, import_react25.useMemo)(
|
|
7116
7542
|
() => ({
|
|
7117
7543
|
get: (endpoint, config) => api.get(endpoint, config)
|
|
7118
7544
|
}),
|
|
@@ -7121,8 +7547,8 @@ function useApiConfig(api) {
|
|
|
7121
7547
|
}
|
|
7122
7548
|
|
|
7123
7549
|
// src/components/Quiz/Quiz.tsx
|
|
7124
|
-
var
|
|
7125
|
-
var
|
|
7550
|
+
var import_phosphor_react19 = require("phosphor-react");
|
|
7551
|
+
var import_react26 = require("react");
|
|
7126
7552
|
|
|
7127
7553
|
// src/components/Quiz/useQuizStore.ts
|
|
7128
7554
|
var import_zustand7 = require("zustand");
|
|
@@ -7158,6 +7584,7 @@ var useQuizStore = (0, import_zustand7.create)()(
|
|
|
7158
7584
|
isStarted: false,
|
|
7159
7585
|
isFinished: false,
|
|
7160
7586
|
userId: "",
|
|
7587
|
+
variant: "default",
|
|
7161
7588
|
// Setters
|
|
7162
7589
|
setBySimulated: (simulado) => set({ bySimulated: simulado }),
|
|
7163
7590
|
setByActivity: (atividade) => set({ byActivity: atividade }),
|
|
@@ -7165,6 +7592,7 @@ var useQuizStore = (0, import_zustand7.create)()(
|
|
|
7165
7592
|
setUserId: (userId) => set({ userId }),
|
|
7166
7593
|
setUserAnswers: (userAnswers) => set({ userAnswers }),
|
|
7167
7594
|
getUserId: () => get().userId,
|
|
7595
|
+
setVariant: (variant) => set({ variant }),
|
|
7168
7596
|
// Navigation
|
|
7169
7597
|
goToNextQuestion: () => {
|
|
7170
7598
|
const { currentQuestionIndex, getTotalQuestions } = get();
|
|
@@ -7620,13 +8048,13 @@ var simulated_result_default = "./simulated-result-QN5HCUY5.png";
|
|
|
7620
8048
|
var mock_image_question_default = "./mock-image-question-HEZCLFDL.png";
|
|
7621
8049
|
|
|
7622
8050
|
// src/components/Quiz/Quiz.tsx
|
|
7623
|
-
var
|
|
8051
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
7624
8052
|
var getStatusBadge = (status) => {
|
|
7625
8053
|
switch (status) {
|
|
7626
8054
|
case "correct":
|
|
7627
|
-
return /* @__PURE__ */ (0,
|
|
8055
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Badge_default, { variant: "solid", action: "success", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CheckCircle, {}), children: "Resposta correta" });
|
|
7628
8056
|
case "incorrect":
|
|
7629
|
-
return /* @__PURE__ */ (0,
|
|
8057
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Badge_default, { variant: "solid", action: "error", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.XCircle, {}), children: "Resposta incorreta" });
|
|
7630
8058
|
default:
|
|
7631
8059
|
return null;
|
|
7632
8060
|
}
|
|
@@ -7639,8 +8067,12 @@ var getStatusStyles = (variantCorrect) => {
|
|
|
7639
8067
|
return "bg-error-background border-error-300";
|
|
7640
8068
|
}
|
|
7641
8069
|
};
|
|
7642
|
-
var Quiz = (0,
|
|
7643
|
-
|
|
8070
|
+
var Quiz = (0, import_react26.forwardRef)(({ children, className, variant = "default", ...props }, ref) => {
|
|
8071
|
+
const { setVariant } = useQuizStore();
|
|
8072
|
+
(0, import_react26.useEffect)(() => {
|
|
8073
|
+
setVariant(variant);
|
|
8074
|
+
}, [variant, setVariant]);
|
|
8075
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7644
8076
|
"div",
|
|
7645
8077
|
{
|
|
7646
8078
|
ref,
|
|
@@ -7653,12 +8085,12 @@ var Quiz = (0, import_react25.forwardRef)(({ children, className, ...props }, re
|
|
|
7653
8085
|
}
|
|
7654
8086
|
);
|
|
7655
8087
|
});
|
|
7656
|
-
var QuizHeaderResult = (0,
|
|
8088
|
+
var QuizHeaderResult = (0, import_react26.forwardRef)(
|
|
7657
8089
|
({ className, ...props }, ref) => {
|
|
7658
8090
|
const { getAllCurrentAnswer } = useQuizStore();
|
|
7659
8091
|
const usersAnswer = getAllCurrentAnswer();
|
|
7660
|
-
const [isCorrect, setIsCorrect] = (0,
|
|
7661
|
-
(0,
|
|
8092
|
+
const [isCorrect, setIsCorrect] = (0, import_react26.useState)(false);
|
|
8093
|
+
(0, import_react26.useEffect)(() => {
|
|
7662
8094
|
if (usersAnswer) {
|
|
7663
8095
|
setIsCorrect(
|
|
7664
8096
|
usersAnswer.length > 0 ? usersAnswer.map(
|
|
@@ -7667,7 +8099,7 @@ var QuizHeaderResult = (0, import_react25.forwardRef)(
|
|
|
7667
8099
|
);
|
|
7668
8100
|
}
|
|
7669
8101
|
}, [usersAnswer]);
|
|
7670
|
-
return /* @__PURE__ */ (0,
|
|
8102
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7671
8103
|
"div",
|
|
7672
8104
|
{
|
|
7673
8105
|
ref,
|
|
@@ -7678,26 +8110,26 @@ var QuizHeaderResult = (0, import_react25.forwardRef)(
|
|
|
7678
8110
|
),
|
|
7679
8111
|
...props,
|
|
7680
8112
|
children: [
|
|
7681
|
-
/* @__PURE__ */ (0,
|
|
7682
|
-
/* @__PURE__ */ (0,
|
|
8113
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-lg", children: "Resultado" }),
|
|
8114
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-700 text-md", children: isCorrect ? "\u{1F389} Parab\xE9ns!!" : "N\xE3o foi dessa vez..." })
|
|
7683
8115
|
]
|
|
7684
8116
|
}
|
|
7685
8117
|
);
|
|
7686
8118
|
}
|
|
7687
8119
|
);
|
|
7688
|
-
var QuizTitle = (0,
|
|
8120
|
+
var QuizTitle = (0, import_react26.forwardRef)(
|
|
7689
8121
|
({ className, ...props }, ref) => {
|
|
7690
8122
|
const {
|
|
7691
8123
|
currentQuestionIndex,
|
|
7692
8124
|
getTotalQuestions,
|
|
7693
8125
|
getQuizTitle,
|
|
7694
8126
|
timeElapsed,
|
|
7695
|
-
formatTime,
|
|
8127
|
+
formatTime: formatTime2,
|
|
7696
8128
|
isStarted
|
|
7697
8129
|
} = useQuizStore();
|
|
7698
8130
|
const totalQuestions = getTotalQuestions();
|
|
7699
8131
|
const quizTitle = getQuizTitle();
|
|
7700
|
-
return /* @__PURE__ */ (0,
|
|
8132
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7701
8133
|
"div",
|
|
7702
8134
|
{
|
|
7703
8135
|
ref,
|
|
@@ -7707,25 +8139,25 @@ var QuizTitle = (0, import_react25.forwardRef)(
|
|
|
7707
8139
|
),
|
|
7708
8140
|
...props,
|
|
7709
8141
|
children: [
|
|
7710
|
-
/* @__PURE__ */ (0,
|
|
7711
|
-
/* @__PURE__ */ (0,
|
|
7712
|
-
/* @__PURE__ */ (0,
|
|
8142
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-col gap-2 text-center", children: [
|
|
8143
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-md", children: quizTitle }),
|
|
8144
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-600 text-xs", children: totalQuestions > 0 ? `${currentQuestionIndex + 1} de ${totalQuestions}` : "0 de 0" })
|
|
7713
8145
|
] }),
|
|
7714
|
-
/* @__PURE__ */ (0,
|
|
8146
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "absolute right-2", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Badge_default, { variant: "outlined", action: "info", iconLeft: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.Clock, {}), children: isStarted ? formatTime2(timeElapsed) : "00:00" }) })
|
|
7715
8147
|
]
|
|
7716
8148
|
}
|
|
7717
8149
|
);
|
|
7718
8150
|
}
|
|
7719
8151
|
);
|
|
7720
|
-
var QuizSubTitle = (0,
|
|
8152
|
+
var QuizSubTitle = (0, import_react26.forwardRef)(
|
|
7721
8153
|
({ subTitle, ...props }, ref) => {
|
|
7722
|
-
return /* @__PURE__ */ (0,
|
|
8154
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "px-4 pb-2 pt-6", ...props, ref, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "font-bold text-lg text-text-950", children: subTitle }) });
|
|
7723
8155
|
}
|
|
7724
8156
|
);
|
|
7725
8157
|
var QuizHeader = () => {
|
|
7726
8158
|
const { getCurrentQuestion, currentQuestionIndex } = useQuizStore();
|
|
7727
8159
|
const currentQuestion = getCurrentQuestion();
|
|
7728
|
-
return /* @__PURE__ */ (0,
|
|
8160
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7729
8161
|
HeaderAlternative,
|
|
7730
8162
|
{
|
|
7731
8163
|
title: currentQuestion ? `Quest\xE3o ${currentQuestionIndex + 1}` : "Quest\xE3o",
|
|
@@ -7734,8 +8166,8 @@ var QuizHeader = () => {
|
|
|
7734
8166
|
}
|
|
7735
8167
|
);
|
|
7736
8168
|
};
|
|
7737
|
-
var QuizContainer = (0,
|
|
7738
|
-
return /* @__PURE__ */ (0,
|
|
8169
|
+
var QuizContainer = (0, import_react26.forwardRef)(({ children, className, ...props }, ref) => {
|
|
8170
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7739
8171
|
"div",
|
|
7740
8172
|
{
|
|
7741
8173
|
ref,
|
|
@@ -7748,8 +8180,8 @@ var QuizContainer = (0, import_react25.forwardRef)(({ children, className, ...pr
|
|
|
7748
8180
|
}
|
|
7749
8181
|
);
|
|
7750
8182
|
});
|
|
7751
|
-
var QuizContent = (0,
|
|
7752
|
-
const { getCurrentQuestion } = useQuizStore();
|
|
8183
|
+
var QuizContent = (0, import_react26.forwardRef)(({ paddingBottom }) => {
|
|
8184
|
+
const { getCurrentQuestion, variant } = useQuizStore();
|
|
7753
8185
|
const currentQuestion = getCurrentQuestion();
|
|
7754
8186
|
const questionComponents = {
|
|
7755
8187
|
["ALTERNATIVA" /* ALTERNATIVA */]: QuizAlternative,
|
|
@@ -7761,7 +8193,7 @@ var QuizContent = (0, import_react25.forwardRef)(({ variant, paddingBottom }) =>
|
|
|
7761
8193
|
["IMAGEM" /* IMAGEM */]: QuizImageQuestion
|
|
7762
8194
|
};
|
|
7763
8195
|
const QuestionComponent = currentQuestion ? questionComponents[currentQuestion.type] : null;
|
|
7764
|
-
return QuestionComponent ? /* @__PURE__ */ (0,
|
|
8196
|
+
return QuestionComponent ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuestionComponent, { variant, paddingBottom }) : null;
|
|
7765
8197
|
});
|
|
7766
8198
|
var QuizAlternative = ({
|
|
7767
8199
|
variant = "default",
|
|
@@ -7789,10 +8221,10 @@ var QuizAlternative = ({
|
|
|
7789
8221
|
};
|
|
7790
8222
|
});
|
|
7791
8223
|
if (!alternatives)
|
|
7792
|
-
return /* @__PURE__ */ (0,
|
|
7793
|
-
return /* @__PURE__ */ (0,
|
|
7794
|
-
/* @__PURE__ */ (0,
|
|
7795
|
-
/* @__PURE__ */ (0,
|
|
8224
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { children: "N\xE3o h\xE1 Alternativas" }) });
|
|
8225
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8226
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8227
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7796
8228
|
AlternativesList,
|
|
7797
8229
|
{
|
|
7798
8230
|
mode: variant === "default" ? "interactive" : "readonly",
|
|
@@ -7818,15 +8250,15 @@ var QuizMultipleChoice = ({
|
|
|
7818
8250
|
const { getCurrentQuestion, selectMultipleAnswer, getAllCurrentAnswer } = useQuizStore();
|
|
7819
8251
|
const currentQuestion = getCurrentQuestion();
|
|
7820
8252
|
const allCurrentAnswers = getAllCurrentAnswer();
|
|
7821
|
-
const prevSelectedValuesRef = (0,
|
|
7822
|
-
const prevQuestionIdRef = (0,
|
|
7823
|
-
const allCurrentAnswerIds = (0,
|
|
8253
|
+
const prevSelectedValuesRef = (0, import_react26.useRef)([]);
|
|
8254
|
+
const prevQuestionIdRef = (0, import_react26.useRef)("");
|
|
8255
|
+
const allCurrentAnswerIds = (0, import_react26.useMemo)(() => {
|
|
7824
8256
|
return allCurrentAnswers?.map((answer) => answer.optionId) || [];
|
|
7825
8257
|
}, [allCurrentAnswers]);
|
|
7826
|
-
const selectedValues = (0,
|
|
8258
|
+
const selectedValues = (0, import_react26.useMemo)(() => {
|
|
7827
8259
|
return allCurrentAnswerIds?.filter((id) => id !== null) || [];
|
|
7828
8260
|
}, [allCurrentAnswerIds]);
|
|
7829
|
-
const stableSelectedValues = (0,
|
|
8261
|
+
const stableSelectedValues = (0, import_react26.useMemo)(() => {
|
|
7830
8262
|
const currentQuestionId = currentQuestion?.id || "";
|
|
7831
8263
|
const hasQuestionChanged = prevQuestionIdRef.current !== currentQuestionId;
|
|
7832
8264
|
if (hasQuestionChanged) {
|
|
@@ -7841,7 +8273,7 @@ var QuizMultipleChoice = ({
|
|
|
7841
8273
|
}
|
|
7842
8274
|
return prevSelectedValuesRef.current;
|
|
7843
8275
|
}, [selectedValues, currentQuestion?.id]);
|
|
7844
|
-
const handleSelectedValues = (0,
|
|
8276
|
+
const handleSelectedValues = (0, import_react26.useCallback)(
|
|
7845
8277
|
(values) => {
|
|
7846
8278
|
if (currentQuestion) {
|
|
7847
8279
|
selectMultipleAnswer(currentQuestion.id, values);
|
|
@@ -7849,7 +8281,7 @@ var QuizMultipleChoice = ({
|
|
|
7849
8281
|
},
|
|
7850
8282
|
[currentQuestion, selectMultipleAnswer]
|
|
7851
8283
|
);
|
|
7852
|
-
const questionKey = (0,
|
|
8284
|
+
const questionKey = (0, import_react26.useMemo)(
|
|
7853
8285
|
() => `question-${currentQuestion?.id || "1"}`,
|
|
7854
8286
|
[currentQuestion?.id]
|
|
7855
8287
|
);
|
|
@@ -7870,10 +8302,10 @@ var QuizMultipleChoice = ({
|
|
|
7870
8302
|
};
|
|
7871
8303
|
});
|
|
7872
8304
|
if (!choices)
|
|
7873
|
-
return /* @__PURE__ */ (0,
|
|
7874
|
-
return /* @__PURE__ */ (0,
|
|
7875
|
-
/* @__PURE__ */ (0,
|
|
7876
|
-
/* @__PURE__ */ (0,
|
|
8305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { children: "N\xE3o h\xE1 Escolhas Multiplas" }) });
|
|
8306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8307
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8308
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7877
8309
|
MultipleChoiceList,
|
|
7878
8310
|
{
|
|
7879
8311
|
choices,
|
|
@@ -7893,13 +8325,13 @@ var QuizDissertative = ({
|
|
|
7893
8325
|
const { getCurrentQuestion, getCurrentAnswer, selectDissertativeAnswer } = useQuizStore();
|
|
7894
8326
|
const currentQuestion = getCurrentQuestion();
|
|
7895
8327
|
const currentAnswer = getCurrentAnswer();
|
|
7896
|
-
const textareaRef = (0,
|
|
8328
|
+
const textareaRef = (0, import_react26.useRef)(null);
|
|
7897
8329
|
const handleAnswerChange = (value) => {
|
|
7898
8330
|
if (currentQuestion) {
|
|
7899
8331
|
selectDissertativeAnswer(currentQuestion.id, value);
|
|
7900
8332
|
}
|
|
7901
8333
|
};
|
|
7902
|
-
const adjustTextareaHeight = (0,
|
|
8334
|
+
const adjustTextareaHeight = (0, import_react26.useCallback)(() => {
|
|
7903
8335
|
if (textareaRef.current) {
|
|
7904
8336
|
textareaRef.current.style.height = "auto";
|
|
7905
8337
|
const scrollHeight = textareaRef.current.scrollHeight;
|
|
@@ -7909,15 +8341,15 @@ var QuizDissertative = ({
|
|
|
7909
8341
|
textareaRef.current.style.height = `${newHeight}px`;
|
|
7910
8342
|
}
|
|
7911
8343
|
}, []);
|
|
7912
|
-
(0,
|
|
8344
|
+
(0, import_react26.useEffect)(() => {
|
|
7913
8345
|
adjustTextareaHeight();
|
|
7914
8346
|
}, [currentAnswer, adjustTextareaHeight]);
|
|
7915
8347
|
if (!currentQuestion) {
|
|
7916
|
-
return /* @__PURE__ */ (0,
|
|
8348
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-600 text-md", children: "Nenhuma quest\xE3o dispon\xEDvel" }) });
|
|
7917
8349
|
}
|
|
7918
|
-
return /* @__PURE__ */ (0,
|
|
7919
|
-
/* @__PURE__ */ (0,
|
|
7920
|
-
/* @__PURE__ */ (0,
|
|
8350
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8351
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Resposta" }),
|
|
8352
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn(variant != "result" && paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4 max-h-[600px] overflow-y-auto", children: variant === "default" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7921
8353
|
TextArea_default,
|
|
7922
8354
|
{
|
|
7923
8355
|
ref: textareaRef,
|
|
@@ -7927,10 +8359,10 @@ var QuizDissertative = ({
|
|
|
7927
8359
|
rows: 4,
|
|
7928
8360
|
className: "min-h-[120px] max-h-[400px] resize-none overflow-y-auto"
|
|
7929
8361
|
}
|
|
7930
|
-
) }) : /* @__PURE__ */ (0,
|
|
7931
|
-
variant === "result" && currentAnswer?.answerStatus == "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && /* @__PURE__ */ (0,
|
|
7932
|
-
/* @__PURE__ */ (0,
|
|
7933
|
-
/* @__PURE__ */ (0,
|
|
8362
|
+
) }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-600 text-md whitespace-pre-wrap", children: currentAnswer?.answer || "Nenhuma resposta fornecida" }) }) }) }),
|
|
8363
|
+
variant === "result" && currentAnswer?.answerStatus == "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8364
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Observa\xE7\xE3o do professor" }),
|
|
8365
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("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." }) })
|
|
7934
8366
|
] })
|
|
7935
8367
|
] });
|
|
7936
8368
|
};
|
|
@@ -7958,16 +8390,16 @@ var QuizTrueOrFalse = ({
|
|
|
7958
8390
|
];
|
|
7959
8391
|
const getLetterByIndex = (index) => String.fromCharCode(97 + index);
|
|
7960
8392
|
const isDefaultVariant = variant == "default";
|
|
7961
|
-
return /* @__PURE__ */ (0,
|
|
7962
|
-
/* @__PURE__ */ (0,
|
|
7963
|
-
/* @__PURE__ */ (0,
|
|
8393
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8394
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8395
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-col gap-3.5", children: options.map((option, index) => {
|
|
7964
8396
|
const variantCorrect = option.isCorrect ? "correct" : "incorrect";
|
|
7965
|
-
return /* @__PURE__ */ (0,
|
|
8397
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7966
8398
|
"section",
|
|
7967
8399
|
{
|
|
7968
8400
|
className: "flex flex-col gap-2",
|
|
7969
8401
|
children: [
|
|
7970
|
-
/* @__PURE__ */ (0,
|
|
8402
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7971
8403
|
"div",
|
|
7972
8404
|
{
|
|
7973
8405
|
className: cn(
|
|
@@ -7975,20 +8407,20 @@ var QuizTrueOrFalse = ({
|
|
|
7975
8407
|
!isDefaultVariant ? getStatusStyles(variantCorrect) : ""
|
|
7976
8408
|
),
|
|
7977
8409
|
children: [
|
|
7978
|
-
/* @__PURE__ */ (0,
|
|
7979
|
-
isDefaultVariant ? /* @__PURE__ */ (0,
|
|
7980
|
-
/* @__PURE__ */ (0,
|
|
7981
|
-
/* @__PURE__ */ (0,
|
|
7982
|
-
/* @__PURE__ */ (0,
|
|
7983
|
-
/* @__PURE__ */ (0,
|
|
8410
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-900 text-sm", children: getLetterByIndex(index).concat(") ").concat(option.label) }),
|
|
8411
|
+
isDefaultVariant ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Select_default, { size: "medium", children: [
|
|
8412
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { className: "w-[180px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione opc\xE3o" }) }),
|
|
8413
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(SelectContent, { children: [
|
|
8414
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "V", children: "Verdadeiro" }),
|
|
8415
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "F", children: "Falso" })
|
|
7984
8416
|
] })
|
|
7985
|
-
] }) : /* @__PURE__ */ (0,
|
|
8417
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex-shrink-0", children: getStatusBadge(variantCorrect) })
|
|
7986
8418
|
]
|
|
7987
8419
|
}
|
|
7988
8420
|
),
|
|
7989
|
-
!isDefaultVariant && /* @__PURE__ */ (0,
|
|
7990
|
-
/* @__PURE__ */ (0,
|
|
7991
|
-
!option.isCorrect && /* @__PURE__ */ (0,
|
|
8421
|
+
!isDefaultVariant && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-row gap-2 items-center", children: [
|
|
8422
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 text-2xs", children: "Resposta selecionada: V" }),
|
|
8423
|
+
!option.isCorrect && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 text-2xs", children: "Resposta correta: F" })
|
|
7992
8424
|
] })
|
|
7993
8425
|
]
|
|
7994
8426
|
},
|
|
@@ -8051,7 +8483,7 @@ var QuizConnectDots = ({
|
|
|
8051
8483
|
isCorrect: false
|
|
8052
8484
|
}
|
|
8053
8485
|
];
|
|
8054
|
-
const [userAnswers, setUserAnswers] = (0,
|
|
8486
|
+
const [userAnswers, setUserAnswers] = (0, import_react26.useState)(() => {
|
|
8055
8487
|
if (variant === "result") {
|
|
8056
8488
|
return mockUserAnswers;
|
|
8057
8489
|
}
|
|
@@ -8080,13 +8512,13 @@ var QuizConnectDots = ({
|
|
|
8080
8512
|
const assignedDots = new Set(
|
|
8081
8513
|
userAnswers.map((a) => a.dotOption).filter(Boolean)
|
|
8082
8514
|
);
|
|
8083
|
-
return /* @__PURE__ */ (0,
|
|
8084
|
-
/* @__PURE__ */ (0,
|
|
8085
|
-
/* @__PURE__ */ (0,
|
|
8515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8516
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8517
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-col gap-3.5", children: options.map((option, index) => {
|
|
8086
8518
|
const answer = userAnswers[index];
|
|
8087
8519
|
const variantCorrect = answer.isCorrect ? "correct" : "incorrect";
|
|
8088
|
-
return /* @__PURE__ */ (0,
|
|
8089
|
-
/* @__PURE__ */ (0,
|
|
8520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col gap-2", children: [
|
|
8521
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8090
8522
|
"div",
|
|
8091
8523
|
{
|
|
8092
8524
|
className: cn(
|
|
@@ -8094,30 +8526,30 @@ var QuizConnectDots = ({
|
|
|
8094
8526
|
!isDefaultVariant ? getStatusStyles(variantCorrect) : ""
|
|
8095
8527
|
),
|
|
8096
8528
|
children: [
|
|
8097
|
-
/* @__PURE__ */ (0,
|
|
8098
|
-
isDefaultVariant ? /* @__PURE__ */ (0,
|
|
8529
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-900 text-sm", children: getLetterByIndex(index) + ") " + option.label }),
|
|
8530
|
+
isDefaultVariant ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8099
8531
|
Select_default,
|
|
8100
8532
|
{
|
|
8101
8533
|
size: "medium",
|
|
8102
8534
|
value: answer.dotOption || void 0,
|
|
8103
8535
|
onValueChange: (value) => handleSelectDot(index, value),
|
|
8104
8536
|
children: [
|
|
8105
|
-
/* @__PURE__ */ (0,
|
|
8106
|
-
/* @__PURE__ */ (0,
|
|
8537
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { className: "w-[180px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione op\xE7\xE3o" }) }),
|
|
8538
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectContent, { children: dotsOptions.filter(
|
|
8107
8539
|
(dot) => !assignedDots.has(dot.label) || answer.dotOption === dot.label
|
|
8108
|
-
).map((dot) => /* @__PURE__ */ (0,
|
|
8540
|
+
).map((dot) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: dot.label, children: dot.label }, dot.label)) })
|
|
8109
8541
|
]
|
|
8110
8542
|
}
|
|
8111
|
-
) : /* @__PURE__ */ (0,
|
|
8543
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex-shrink-0", children: answer.isCorrect === null ? null : getStatusBadge(variantCorrect) })
|
|
8112
8544
|
]
|
|
8113
8545
|
}
|
|
8114
8546
|
),
|
|
8115
|
-
!isDefaultVariant && /* @__PURE__ */ (0,
|
|
8116
|
-
/* @__PURE__ */ (0,
|
|
8547
|
+
!isDefaultVariant && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-row gap-2 items-center", children: [
|
|
8548
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-800 text-2xs", children: [
|
|
8117
8549
|
"Resposta selecionada: ",
|
|
8118
8550
|
answer.dotOption || "Nenhuma"
|
|
8119
8551
|
] }),
|
|
8120
|
-
!answer.isCorrect && /* @__PURE__ */ (0,
|
|
8552
|
+
!answer.isCorrect && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-800 text-2xs", children: [
|
|
8121
8553
|
"Resposta correta: ",
|
|
8122
8554
|
answer.correctOption
|
|
8123
8555
|
] })
|
|
@@ -8172,8 +8604,8 @@ var QuizFill = ({
|
|
|
8172
8604
|
isCorrect: true
|
|
8173
8605
|
}
|
|
8174
8606
|
];
|
|
8175
|
-
const [answers, setAnswers] = (0,
|
|
8176
|
-
const baseId = (0,
|
|
8607
|
+
const [answers, setAnswers] = (0, import_react26.useState)({});
|
|
8608
|
+
const baseId = (0, import_react26.useId)();
|
|
8177
8609
|
const getAvailableOptionsForSelect = (selectId) => {
|
|
8178
8610
|
const usedOptions = Object.entries(answers).filter(([key]) => key !== selectId).map(([, value]) => value);
|
|
8179
8611
|
return options.filter((option) => !usedOptions.includes(option));
|
|
@@ -8186,18 +8618,18 @@ var QuizFill = ({
|
|
|
8186
8618
|
const mockAnswer = mockUserAnswers.find(
|
|
8187
8619
|
(answer) => answer.selectId === selectId
|
|
8188
8620
|
);
|
|
8189
|
-
return /* @__PURE__ */ (0,
|
|
8621
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "inline-flex mb-2.5 text-success-600 font-semibold text-md border-b-2 border-success-600", children: mockAnswer?.correctAnswer });
|
|
8190
8622
|
};
|
|
8191
8623
|
const renderDefaultElement = (selectId, startIndex, selectedValue, availableOptionsForThisSelect) => {
|
|
8192
|
-
return /* @__PURE__ */ (0,
|
|
8624
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8193
8625
|
Select_default,
|
|
8194
8626
|
{
|
|
8195
8627
|
value: selectedValue,
|
|
8196
8628
|
onValueChange: (value) => handleSelectChange(selectId, value),
|
|
8197
8629
|
className: "inline-flex mb-2.5",
|
|
8198
8630
|
children: [
|
|
8199
|
-
/* @__PURE__ */ (0,
|
|
8200
|
-
/* @__PURE__ */ (0,
|
|
8631
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { className: "inline-flex w-auto min-w-[140px] h-8 mx-1 bg-white border-gray-300", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione op\xE7\xE3o" }) }),
|
|
8632
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectContent, { children: availableOptionsForThisSelect.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: option, children: option }, `${option}-${index}`)) })
|
|
8201
8633
|
]
|
|
8202
8634
|
},
|
|
8203
8635
|
`${selectId}-${startIndex}`
|
|
@@ -8209,8 +8641,8 @@ var QuizFill = ({
|
|
|
8209
8641
|
);
|
|
8210
8642
|
if (!mockAnswer) return null;
|
|
8211
8643
|
const action = mockAnswer.isCorrect ? "success" : "error";
|
|
8212
|
-
const icon = mockAnswer.isCorrect ? /* @__PURE__ */ (0,
|
|
8213
|
-
return /* @__PURE__ */ (0,
|
|
8644
|
+
const icon = mockAnswer.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CheckCircle, {}) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.XCircle, {});
|
|
8645
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8214
8646
|
Badge_default,
|
|
8215
8647
|
{
|
|
8216
8648
|
variant: "solid",
|
|
@@ -8218,7 +8650,7 @@ var QuizFill = ({
|
|
|
8218
8650
|
iconRight: icon,
|
|
8219
8651
|
size: "large",
|
|
8220
8652
|
className: "py-3 w-[180px] justify-between mb-2.5",
|
|
8221
|
-
children: /* @__PURE__ */ (0,
|
|
8653
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-900", children: mockAnswer.userAnswer })
|
|
8222
8654
|
},
|
|
8223
8655
|
selectId
|
|
8224
8656
|
);
|
|
@@ -8274,25 +8706,25 @@ var QuizFill = ({
|
|
|
8274
8706
|
}
|
|
8275
8707
|
return elements;
|
|
8276
8708
|
};
|
|
8277
|
-
return /* @__PURE__ */ (0,
|
|
8278
|
-
/* @__PURE__ */ (0,
|
|
8279
|
-
/* @__PURE__ */ (0,
|
|
8709
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8710
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8711
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: "h-auto pb-0", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-6 px-4 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8280
8712
|
"div",
|
|
8281
8713
|
{
|
|
8282
8714
|
className: cn(
|
|
8283
8715
|
"text-lg text-text-900 leading-8 h-auto",
|
|
8284
8716
|
variant != "result" && paddingBottom
|
|
8285
8717
|
),
|
|
8286
|
-
children: renderTextWithSelects(exampleText).map((element) => /* @__PURE__ */ (0,
|
|
8718
|
+
children: renderTextWithSelects(exampleText).map((element) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: element.element }, element.id))
|
|
8287
8719
|
}
|
|
8288
8720
|
) }) }),
|
|
8289
|
-
variant === "result" && /* @__PURE__ */ (0,
|
|
8290
|
-
/* @__PURE__ */ (0,
|
|
8291
|
-
/* @__PURE__ */ (0,
|
|
8721
|
+
variant === "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8722
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Resultado" }),
|
|
8723
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: "h-auto pb-0", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-6 px-4", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8292
8724
|
"div",
|
|
8293
8725
|
{
|
|
8294
8726
|
className: cn("text-lg text-text-900 leading-8", paddingBottom),
|
|
8295
|
-
children: renderTextWithSelects(exampleText, true).map((element) => /* @__PURE__ */ (0,
|
|
8727
|
+
children: renderTextWithSelects(exampleText, true).map((element) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: element.element }, element.id))
|
|
8296
8728
|
}
|
|
8297
8729
|
) }) })
|
|
8298
8730
|
] })
|
|
@@ -8312,7 +8744,7 @@ var QuizImageQuestion = ({
|
|
|
8312
8744
|
};
|
|
8313
8745
|
const correctRadiusRelative = calculateCorrectRadiusRelative();
|
|
8314
8746
|
const mockUserAnswerRelative = { x: 0.72, y: 0.348 };
|
|
8315
|
-
const [clickPositionRelative, setClickPositionRelative] = (0,
|
|
8747
|
+
const [clickPositionRelative, setClickPositionRelative] = (0, import_react26.useState)(variant == "result" ? mockUserAnswerRelative : null);
|
|
8316
8748
|
const convertToRelativeCoordinates = (x, y, rect) => {
|
|
8317
8749
|
const safeWidth = Math.max(rect.width, 1e-3);
|
|
8318
8750
|
const safeHeight = Math.max(rect.height, 1e-3);
|
|
@@ -8348,36 +8780,36 @@ var QuizImageQuestion = ({
|
|
|
8348
8780
|
}
|
|
8349
8781
|
return "bg-success-600/70 border-white";
|
|
8350
8782
|
};
|
|
8351
|
-
return /* @__PURE__ */ (0,
|
|
8352
|
-
/* @__PURE__ */ (0,
|
|
8353
|
-
/* @__PURE__ */ (0,
|
|
8783
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8784
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Clique na \xE1rea correta" }),
|
|
8785
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8354
8786
|
"div",
|
|
8355
8787
|
{
|
|
8356
8788
|
"data-testid": "quiz-image-container",
|
|
8357
8789
|
className: "space-y-6 p-3 relative inline-block",
|
|
8358
8790
|
children: [
|
|
8359
|
-
variant == "result" && /* @__PURE__ */ (0,
|
|
8791
|
+
variant == "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8360
8792
|
"div",
|
|
8361
8793
|
{
|
|
8362
8794
|
"data-testid": "quiz-legend",
|
|
8363
8795
|
className: "flex items-center gap-4 text-xs",
|
|
8364
8796
|
children: [
|
|
8365
|
-
/* @__PURE__ */ (0,
|
|
8366
|
-
/* @__PURE__ */ (0,
|
|
8367
|
-
/* @__PURE__ */ (0,
|
|
8797
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8798
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-primary/70 border border-[#F8CC2E]" }),
|
|
8799
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "\xC1rea correta" })
|
|
8368
8800
|
] }),
|
|
8369
|
-
/* @__PURE__ */ (0,
|
|
8370
|
-
/* @__PURE__ */ (0,
|
|
8371
|
-
/* @__PURE__ */ (0,
|
|
8801
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8802
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-success-600/70 border border-white" }),
|
|
8803
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "Resposta correta" })
|
|
8372
8804
|
] }),
|
|
8373
|
-
/* @__PURE__ */ (0,
|
|
8374
|
-
/* @__PURE__ */ (0,
|
|
8375
|
-
/* @__PURE__ */ (0,
|
|
8805
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8806
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-error/70 border border-white" }),
|
|
8807
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "Resposta incorreta" })
|
|
8376
8808
|
] })
|
|
8377
8809
|
]
|
|
8378
8810
|
}
|
|
8379
8811
|
),
|
|
8380
|
-
/* @__PURE__ */ (0,
|
|
8812
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8381
8813
|
"button",
|
|
8382
8814
|
{
|
|
8383
8815
|
"data-testid": "quiz-image-button",
|
|
@@ -8392,7 +8824,7 @@ var QuizImageQuestion = ({
|
|
|
8392
8824
|
},
|
|
8393
8825
|
"aria-label": "\xC1rea da imagem interativa",
|
|
8394
8826
|
children: [
|
|
8395
|
-
/* @__PURE__ */ (0,
|
|
8827
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8396
8828
|
"img",
|
|
8397
8829
|
{
|
|
8398
8830
|
"data-testid": "quiz-image",
|
|
@@ -8401,7 +8833,7 @@ var QuizImageQuestion = ({
|
|
|
8401
8833
|
className: "w-full h-auto rounded-md"
|
|
8402
8834
|
}
|
|
8403
8835
|
),
|
|
8404
|
-
variant === "result" && /* @__PURE__ */ (0,
|
|
8836
|
+
variant === "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8405
8837
|
"div",
|
|
8406
8838
|
{
|
|
8407
8839
|
"data-testid": "quiz-correct-circle",
|
|
@@ -8416,7 +8848,7 @@ var QuizImageQuestion = ({
|
|
|
8416
8848
|
}
|
|
8417
8849
|
}
|
|
8418
8850
|
),
|
|
8419
|
-
clickPositionRelative && /* @__PURE__ */ (0,
|
|
8851
|
+
clickPositionRelative && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8420
8852
|
"div",
|
|
8421
8853
|
{
|
|
8422
8854
|
"data-testid": "quiz-user-circle",
|
|
@@ -8484,16 +8916,16 @@ var QuizQuestionList = ({
|
|
|
8484
8916
|
return "Em branco";
|
|
8485
8917
|
}
|
|
8486
8918
|
};
|
|
8487
|
-
return /* @__PURE__ */ (0,
|
|
8488
|
-
([subjectId, questions]) => /* @__PURE__ */ (0,
|
|
8489
|
-
/* @__PURE__ */ (0,
|
|
8490
|
-
/* @__PURE__ */ (0,
|
|
8491
|
-
/* @__PURE__ */ (0,
|
|
8919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-6 px-4", children: Object.entries(filteredGroupedQuestions).map(
|
|
8920
|
+
([subjectId, questions]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col gap-2", children: [
|
|
8921
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "pt-6 pb-4 flex flex-row gap-2", children: [
|
|
8922
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "bg-primary-500 p-1 rounded-sm flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.BookOpen, { size: 17, className: "text-white" }) }),
|
|
8923
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 font-bold text-lg", children: subjectId })
|
|
8492
8924
|
] }),
|
|
8493
|
-
/* @__PURE__ */ (0,
|
|
8925
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ul", { className: "flex flex-col gap-2", children: questions.map((question) => {
|
|
8494
8926
|
const status = getQuestionStatus(question.id);
|
|
8495
8927
|
const questionNumber = getQuestionIndex(question.id);
|
|
8496
|
-
return /* @__PURE__ */ (0,
|
|
8928
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8497
8929
|
CardStatus,
|
|
8498
8930
|
{
|
|
8499
8931
|
header: `Quest\xE3o ${questionNumber.toString().padStart(2, "0")}`,
|
|
@@ -8509,13 +8941,12 @@ var QuizQuestionList = ({
|
|
|
8509
8941
|
] }, subjectId)
|
|
8510
8942
|
) });
|
|
8511
8943
|
};
|
|
8512
|
-
var QuizFooter = (0,
|
|
8944
|
+
var QuizFooter = (0, import_react26.forwardRef)(
|
|
8513
8945
|
({
|
|
8514
8946
|
className,
|
|
8515
8947
|
onGoToSimulated,
|
|
8516
8948
|
onDetailResult,
|
|
8517
8949
|
handleFinishSimulated,
|
|
8518
|
-
variant = "default",
|
|
8519
8950
|
...props
|
|
8520
8951
|
}, ref) => {
|
|
8521
8952
|
const {
|
|
@@ -8529,6 +8960,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8529
8960
|
skipQuestion,
|
|
8530
8961
|
getCurrentQuestion,
|
|
8531
8962
|
getQuestionStatusFromUserAnswers,
|
|
8963
|
+
variant,
|
|
8532
8964
|
getActiveQuiz
|
|
8533
8965
|
} = useQuizStore();
|
|
8534
8966
|
const totalQuestions = getTotalQuestions();
|
|
@@ -8537,10 +8969,11 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8537
8969
|
const currentAnswer = getCurrentAnswer();
|
|
8538
8970
|
const currentQuestion = getCurrentQuestion();
|
|
8539
8971
|
const isCurrentQuestionSkipped = currentQuestion ? getQuestionStatusFromUserAnswers(currentQuestion.id) === "skipped" : false;
|
|
8540
|
-
const [alertDialogOpen, setAlertDialogOpen] = (0,
|
|
8541
|
-
const [modalResultOpen, setModalResultOpen] = (0,
|
|
8542
|
-
const [modalNavigateOpen, setModalNavigateOpen] = (0,
|
|
8543
|
-
const [
|
|
8972
|
+
const [alertDialogOpen, setAlertDialogOpen] = (0, import_react26.useState)(false);
|
|
8973
|
+
const [modalResultOpen, setModalResultOpen] = (0, import_react26.useState)(false);
|
|
8974
|
+
const [modalNavigateOpen, setModalNavigateOpen] = (0, import_react26.useState)(false);
|
|
8975
|
+
const [modalResolutionOpen, setModalResolutionOpen] = (0, import_react26.useState)(false);
|
|
8976
|
+
const [filterType, setFilterType] = (0, import_react26.useState)("all");
|
|
8544
8977
|
const unansweredQuestions = getUnansweredQuestionsFromUserAnswers();
|
|
8545
8978
|
const userAnswers = getUserAnswers();
|
|
8546
8979
|
const allQuestions = getTotalQuestions();
|
|
@@ -8572,8 +9005,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8572
9005
|
setAlertDialogOpen(false);
|
|
8573
9006
|
}
|
|
8574
9007
|
};
|
|
8575
|
-
return /* @__PURE__ */ (0,
|
|
8576
|
-
/* @__PURE__ */ (0,
|
|
9008
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
9009
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8577
9010
|
"footer",
|
|
8578
9011
|
{
|
|
8579
9012
|
ref,
|
|
@@ -8582,17 +9015,17 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8582
9015
|
className
|
|
8583
9016
|
),
|
|
8584
9017
|
...props,
|
|
8585
|
-
children: variant === "default" ? /* @__PURE__ */ (0,
|
|
8586
|
-
/* @__PURE__ */ (0,
|
|
8587
|
-
/* @__PURE__ */ (0,
|
|
9018
|
+
children: variant === "default" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
9019
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-row items-center gap-1", children: [
|
|
9020
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8588
9021
|
IconButton_default,
|
|
8589
9022
|
{
|
|
8590
|
-
icon: /* @__PURE__ */ (0,
|
|
9023
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.SquaresFour, { size: 24, className: "text-text-950" }),
|
|
8591
9024
|
size: "md",
|
|
8592
9025
|
onClick: () => setModalNavigateOpen(true)
|
|
8593
9026
|
}
|
|
8594
9027
|
),
|
|
8595
|
-
isFirstQuestion ? /* @__PURE__ */ (0,
|
|
9028
|
+
isFirstQuestion ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8596
9029
|
Button_default,
|
|
8597
9030
|
{
|
|
8598
9031
|
variant: "outline",
|
|
@@ -8603,13 +9036,13 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8603
9036
|
},
|
|
8604
9037
|
children: "Pular"
|
|
8605
9038
|
}
|
|
8606
|
-
) : /* @__PURE__ */ (0,
|
|
9039
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8607
9040
|
Button_default,
|
|
8608
9041
|
{
|
|
8609
9042
|
size: "medium",
|
|
8610
9043
|
variant: "link",
|
|
8611
9044
|
action: "primary",
|
|
8612
|
-
iconLeft: /* @__PURE__ */ (0,
|
|
9045
|
+
iconLeft: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CaretLeft, { size: 18 }),
|
|
8613
9046
|
onClick: () => {
|
|
8614
9047
|
goToPreviousQuestion();
|
|
8615
9048
|
},
|
|
@@ -8617,7 +9050,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8617
9050
|
}
|
|
8618
9051
|
)
|
|
8619
9052
|
] }),
|
|
8620
|
-
!isFirstQuestion && /* @__PURE__ */ (0,
|
|
9053
|
+
!isFirstQuestion && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8621
9054
|
Button_default,
|
|
8622
9055
|
{
|
|
8623
9056
|
size: "small",
|
|
@@ -8630,7 +9063,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8630
9063
|
children: "Pular"
|
|
8631
9064
|
}
|
|
8632
9065
|
),
|
|
8633
|
-
isLastQuestion ? /* @__PURE__ */ (0,
|
|
9066
|
+
isLastQuestion ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8634
9067
|
Button_default,
|
|
8635
9068
|
{
|
|
8636
9069
|
size: "medium",
|
|
@@ -8640,13 +9073,13 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8640
9073
|
onClick: handleFinishQuiz,
|
|
8641
9074
|
children: "Finalizar"
|
|
8642
9075
|
}
|
|
8643
|
-
) : /* @__PURE__ */ (0,
|
|
9076
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8644
9077
|
Button_default,
|
|
8645
9078
|
{
|
|
8646
9079
|
size: "medium",
|
|
8647
9080
|
variant: "link",
|
|
8648
9081
|
action: "primary",
|
|
8649
|
-
iconRight: /* @__PURE__ */ (0,
|
|
9082
|
+
iconRight: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CaretRight, { size: 18 }),
|
|
8650
9083
|
disabled: !currentAnswer && !isCurrentQuestionSkipped,
|
|
8651
9084
|
onClick: () => {
|
|
8652
9085
|
goToNextQuestion();
|
|
@@ -8654,10 +9087,19 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8654
9087
|
children: "Avan\xE7ar"
|
|
8655
9088
|
}
|
|
8656
9089
|
)
|
|
8657
|
-
] }) : /* @__PURE__ */ (0,
|
|
9090
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-row items-center justify-end w-full", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9091
|
+
Button_default,
|
|
9092
|
+
{
|
|
9093
|
+
variant: "solid",
|
|
9094
|
+
action: "primary",
|
|
9095
|
+
size: "medium",
|
|
9096
|
+
onClick: () => setModalResolutionOpen(true),
|
|
9097
|
+
children: "Ver Resolu\xE7\xE3o"
|
|
9098
|
+
}
|
|
9099
|
+
) })
|
|
8658
9100
|
}
|
|
8659
9101
|
),
|
|
8660
|
-
/* @__PURE__ */ (0,
|
|
9102
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8661
9103
|
AlertDialog,
|
|
8662
9104
|
{
|
|
8663
9105
|
isOpen: alertDialogOpen,
|
|
@@ -8669,7 +9111,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8669
9111
|
onSubmit: handleAlertSubmit
|
|
8670
9112
|
}
|
|
8671
9113
|
),
|
|
8672
|
-
/* @__PURE__ */ (0,
|
|
9114
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8673
9115
|
Modal_default,
|
|
8674
9116
|
{
|
|
8675
9117
|
isOpen: modalResultOpen,
|
|
@@ -8679,8 +9121,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8679
9121
|
closeOnEscape: false,
|
|
8680
9122
|
hideCloseButton: true,
|
|
8681
9123
|
size: "md",
|
|
8682
|
-
children: /* @__PURE__ */ (0,
|
|
8683
|
-
/* @__PURE__ */ (0,
|
|
9124
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col w-full h-full items-center justify-center gap-4", children: [
|
|
9125
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8684
9126
|
"img",
|
|
8685
9127
|
{
|
|
8686
9128
|
src: simulated_result_default,
|
|
@@ -8688,9 +9130,9 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8688
9130
|
className: "w-[282px] h-auto object-cover"
|
|
8689
9131
|
}
|
|
8690
9132
|
),
|
|
8691
|
-
/* @__PURE__ */ (0,
|
|
8692
|
-
/* @__PURE__ */ (0,
|
|
8693
|
-
/* @__PURE__ */ (0,
|
|
9133
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-2 text-center", children: [
|
|
9134
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h2", { className: "text-text-950 font-bold text-lg", children: "Voc\xEA concluiu o simulado!" }),
|
|
9135
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-500 font-sm", children: [
|
|
8694
9136
|
"Voc\xEA acertou",
|
|
8695
9137
|
" ",
|
|
8696
9138
|
(() => {
|
|
@@ -8712,8 +9154,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8712
9154
|
" quest\xF5es."
|
|
8713
9155
|
] })
|
|
8714
9156
|
] }),
|
|
8715
|
-
/* @__PURE__ */ (0,
|
|
8716
|
-
/* @__PURE__ */ (0,
|
|
9157
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "px-6 flex flex-row items-center gap-2 w-full", children: [
|
|
9158
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8717
9159
|
Button_default,
|
|
8718
9160
|
{
|
|
8719
9161
|
variant: "outline",
|
|
@@ -8723,31 +9165,31 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8723
9165
|
children: "Ir para simulados"
|
|
8724
9166
|
}
|
|
8725
9167
|
),
|
|
8726
|
-
/* @__PURE__ */ (0,
|
|
9168
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Button_default, { className: "w-full", onClick: onDetailResult, children: "Detalhar resultado" })
|
|
8727
9169
|
] })
|
|
8728
9170
|
] })
|
|
8729
9171
|
}
|
|
8730
9172
|
),
|
|
8731
|
-
/* @__PURE__ */ (0,
|
|
9173
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8732
9174
|
Modal_default,
|
|
8733
9175
|
{
|
|
8734
9176
|
isOpen: modalNavigateOpen,
|
|
8735
9177
|
onClose: () => setModalNavigateOpen(false),
|
|
8736
9178
|
title: "Quest\xF5es",
|
|
8737
9179
|
size: "lg",
|
|
8738
|
-
children: /* @__PURE__ */ (0,
|
|
8739
|
-
/* @__PURE__ */ (0,
|
|
8740
|
-
/* @__PURE__ */ (0,
|
|
8741
|
-
/* @__PURE__ */ (0,
|
|
8742
|
-
/* @__PURE__ */ (0,
|
|
8743
|
-
/* @__PURE__ */ (0,
|
|
8744
|
-
/* @__PURE__ */ (0,
|
|
8745
|
-
/* @__PURE__ */ (0,
|
|
8746
|
-
/* @__PURE__ */ (0,
|
|
9180
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col w-full h-full", children: [
|
|
9181
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-row justify-between items-center py-6 pt-6 pb-4 border-b border-border-200", children: [
|
|
9182
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-lg", children: "Filtrar por" }),
|
|
9183
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "max-w-[266px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Select_default, { value: filterType, onValueChange: setFilterType, children: [
|
|
9184
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { variant: "rounded", className: "max-w-[266px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione uma op\xE7\xE3o" }) }),
|
|
9185
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(SelectContent, { children: [
|
|
9186
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "all", children: "Todas" }),
|
|
9187
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "unanswered", children: "Em branco" }),
|
|
9188
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "answered", children: "Respondidas" })
|
|
8747
9189
|
] })
|
|
8748
9190
|
] }) })
|
|
8749
9191
|
] }),
|
|
8750
|
-
/* @__PURE__ */ (0,
|
|
9192
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-col gap-2 not-lg:h-[calc(100vh-200px)] lg:max-h-[687px] overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8751
9193
|
QuizQuestionList,
|
|
8752
9194
|
{
|
|
8753
9195
|
filterType,
|
|
@@ -8756,29 +9198,39 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8756
9198
|
) })
|
|
8757
9199
|
] })
|
|
8758
9200
|
}
|
|
9201
|
+
),
|
|
9202
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9203
|
+
Modal_default,
|
|
9204
|
+
{
|
|
9205
|
+
isOpen: modalResolutionOpen,
|
|
9206
|
+
onClose: () => setModalResolutionOpen(false),
|
|
9207
|
+
title: "Resolu\xE7\xE3o",
|
|
9208
|
+
size: "lg",
|
|
9209
|
+
children: currentQuestion?.answerKey
|
|
9210
|
+
}
|
|
8759
9211
|
)
|
|
8760
9212
|
] });
|
|
8761
9213
|
}
|
|
8762
9214
|
);
|
|
8763
|
-
var QuizResultHeaderTitle = (0,
|
|
9215
|
+
var QuizResultHeaderTitle = (0, import_react26.forwardRef)(({ className, ...props }, ref) => {
|
|
8764
9216
|
const { bySimulated } = useQuizStore();
|
|
8765
|
-
return /* @__PURE__ */ (0,
|
|
9217
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8766
9218
|
"div",
|
|
8767
9219
|
{
|
|
8768
9220
|
ref,
|
|
8769
9221
|
className: cn("flex flex-row pt-4 justify-between", className),
|
|
8770
9222
|
...props,
|
|
8771
9223
|
children: [
|
|
8772
|
-
/* @__PURE__ */ (0,
|
|
8773
|
-
bySimulated && /* @__PURE__ */ (0,
|
|
9224
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-2xl", children: "Resultado" }),
|
|
9225
|
+
bySimulated && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Badge_default, { variant: "solid", action: "info", children: bySimulated.category })
|
|
8774
9226
|
]
|
|
8775
9227
|
}
|
|
8776
9228
|
);
|
|
8777
9229
|
});
|
|
8778
|
-
var QuizResultTitle = (0,
|
|
9230
|
+
var QuizResultTitle = (0, import_react26.forwardRef)(({ className, ...props }, ref) => {
|
|
8779
9231
|
const { getQuizTitle } = useQuizStore();
|
|
8780
9232
|
const quizTitle = getQuizTitle();
|
|
8781
|
-
return /* @__PURE__ */ (0,
|
|
9233
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8782
9234
|
"p",
|
|
8783
9235
|
{
|
|
8784
9236
|
className: cn("pt-6 pb-4 text-text-950 font-bold text-lg", className),
|
|
@@ -8788,12 +9240,12 @@ var QuizResultTitle = (0, import_react25.forwardRef)(({ className, ...props }, r
|
|
|
8788
9240
|
}
|
|
8789
9241
|
);
|
|
8790
9242
|
});
|
|
8791
|
-
var QuizResultPerformance = (0,
|
|
9243
|
+
var QuizResultPerformance = (0, import_react26.forwardRef)(
|
|
8792
9244
|
({ ...props }, ref) => {
|
|
8793
9245
|
const {
|
|
8794
9246
|
getTotalQuestions,
|
|
8795
9247
|
timeElapsed,
|
|
8796
|
-
formatTime,
|
|
9248
|
+
formatTime: formatTime2,
|
|
8797
9249
|
bySimulated,
|
|
8798
9250
|
byActivity,
|
|
8799
9251
|
byQuestionary,
|
|
@@ -8834,15 +9286,15 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8834
9286
|
});
|
|
8835
9287
|
}
|
|
8836
9288
|
const percentage = totalQuestions > 0 ? Math.round(correctAnswers / totalQuestions * 100) : 0;
|
|
8837
|
-
return /* @__PURE__ */ (0,
|
|
9289
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8838
9290
|
"div",
|
|
8839
9291
|
{
|
|
8840
9292
|
className: "flex flex-row gap-6 p-6 rounded-xl bg-background justify-between",
|
|
8841
9293
|
ref,
|
|
8842
9294
|
...props,
|
|
8843
9295
|
children: [
|
|
8844
|
-
/* @__PURE__ */ (0,
|
|
8845
|
-
/* @__PURE__ */ (0,
|
|
9296
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "relative", children: [
|
|
9297
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8846
9298
|
ProgressCircle_default,
|
|
8847
9299
|
{
|
|
8848
9300
|
size: "medium",
|
|
@@ -8852,21 +9304,21 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8852
9304
|
label: ""
|
|
8853
9305
|
}
|
|
8854
9306
|
),
|
|
8855
|
-
/* @__PURE__ */ (0,
|
|
8856
|
-
/* @__PURE__ */ (0,
|
|
8857
|
-
/* @__PURE__ */ (0,
|
|
8858
|
-
/* @__PURE__ */ (0,
|
|
9307
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center", children: [
|
|
9308
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-1 mb-1", children: [
|
|
9309
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.Clock, { size: 12, weight: "regular", className: "text-text-800" }),
|
|
9310
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-2xs font-medium text-text-800", children: formatTime2(timeElapsed) })
|
|
8859
9311
|
] }),
|
|
8860
|
-
/* @__PURE__ */ (0,
|
|
9312
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "text-2xl font-medium text-text-800 leading-7", children: [
|
|
8861
9313
|
correctAnswers,
|
|
8862
9314
|
" de ",
|
|
8863
9315
|
totalQuestions
|
|
8864
9316
|
] }),
|
|
8865
|
-
/* @__PURE__ */ (0,
|
|
9317
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "text-2xs font-medium text-text-600 mt-1", children: "Corretas" })
|
|
8866
9318
|
] })
|
|
8867
9319
|
] }),
|
|
8868
|
-
/* @__PURE__ */ (0,
|
|
8869
|
-
/* @__PURE__ */ (0,
|
|
9320
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-4 w-full", children: [
|
|
9321
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8870
9322
|
ProgressBar_default,
|
|
8871
9323
|
{
|
|
8872
9324
|
className: "w-full",
|
|
@@ -8880,7 +9332,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8880
9332
|
percentageClassName: "text-xs font-medium leading-[14px] text-right"
|
|
8881
9333
|
}
|
|
8882
9334
|
),
|
|
8883
|
-
/* @__PURE__ */ (0,
|
|
9335
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8884
9336
|
ProgressBar_default,
|
|
8885
9337
|
{
|
|
8886
9338
|
className: "w-full",
|
|
@@ -8894,7 +9346,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8894
9346
|
percentageClassName: "text-xs font-medium leading-[14px] text-right"
|
|
8895
9347
|
}
|
|
8896
9348
|
),
|
|
8897
|
-
/* @__PURE__ */ (0,
|
|
9349
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8898
9350
|
ProgressBar_default,
|
|
8899
9351
|
{
|
|
8900
9352
|
className: "w-full",
|
|
@@ -8914,7 +9366,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8914
9366
|
);
|
|
8915
9367
|
}
|
|
8916
9368
|
);
|
|
8917
|
-
var QuizListResult = (0,
|
|
9369
|
+
var QuizListResult = (0, import_react26.forwardRef)(({ className, onSubjectClick, ...props }, ref) => {
|
|
8918
9370
|
const {
|
|
8919
9371
|
getQuestionsGroupedBySubject,
|
|
8920
9372
|
isQuestionAnswered,
|
|
@@ -8943,9 +9395,9 @@ var QuizListResult = (0, import_react25.forwardRef)(({ className, onSubjectClick
|
|
|
8943
9395
|
};
|
|
8944
9396
|
}
|
|
8945
9397
|
);
|
|
8946
|
-
return /* @__PURE__ */ (0,
|
|
8947
|
-
/* @__PURE__ */ (0,
|
|
8948
|
-
/* @__PURE__ */ (0,
|
|
9398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { ref, className, ...props, children: [
|
|
9399
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "pt-6 pb-4 text-text-950 font-bold text-lg", children: "Mat\xE9rias" }),
|
|
9400
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ul", { className: "flex flex-col gap-2", children: subjectsStats.map((subject) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8949
9401
|
CardResults,
|
|
8950
9402
|
{
|
|
8951
9403
|
onClick: () => onSubjectClick?.(subject.subject),
|
|
@@ -8953,7 +9405,7 @@ var QuizListResult = (0, import_react25.forwardRef)(({ className, onSubjectClick
|
|
|
8953
9405
|
header: subject.subject,
|
|
8954
9406
|
correct_answers: subject.correct,
|
|
8955
9407
|
incorrect_answers: subject.incorrect,
|
|
8956
|
-
icon: /* @__PURE__ */ (0,
|
|
9408
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.Book, { size: 20 }),
|
|
8957
9409
|
direction: "row"
|
|
8958
9410
|
}
|
|
8959
9411
|
) }, subject.subject)) })
|
|
@@ -8970,13 +9422,13 @@ var QuizListResultByMateria = ({
|
|
|
8970
9422
|
} = useQuizStore();
|
|
8971
9423
|
const groupedQuestions = getQuestionsGroupedBySubject();
|
|
8972
9424
|
const answeredQuestions = groupedQuestions[subject] || [];
|
|
8973
|
-
return /* @__PURE__ */ (0,
|
|
8974
|
-
/* @__PURE__ */ (0,
|
|
8975
|
-
/* @__PURE__ */ (0,
|
|
8976
|
-
/* @__PURE__ */ (0,
|
|
8977
|
-
/* @__PURE__ */ (0,
|
|
9425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "w-full max-w-[1000px] flex flex-col mx-auto h-full relative not-lg:px-6", children: [
|
|
9426
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-row pt-4 justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-2xl", children: subject }) }),
|
|
9427
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col ", children: [
|
|
9428
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "pt-6 pb-4 text-text-950 font-bold text-lg", children: "Resultado das quest\xF5es" }),
|
|
9429
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ul", { className: "flex flex-col gap-2 pt-4", children: answeredQuestions.map((question) => {
|
|
8978
9430
|
const questionIndex = getQuestionIndex(question.id);
|
|
8979
|
-
return /* @__PURE__ */ (0,
|
|
9431
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8980
9432
|
CardStatus,
|
|
8981
9433
|
{
|
|
8982
9434
|
className: "max-w-full",
|
|
@@ -9089,6 +9541,7 @@ var QuizListResultByMateria = ({
|
|
|
9089
9541
|
TextArea,
|
|
9090
9542
|
Toast,
|
|
9091
9543
|
Toaster,
|
|
9544
|
+
VideoPlayer,
|
|
9092
9545
|
createZustandAuthAdapter,
|
|
9093
9546
|
getRootDomain,
|
|
9094
9547
|
getStatusBadge,
|