analytica-frontend-lib 1.1.5 → 1.1.7
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/Auth/AuthProvider/index.js +12 -0
- package/dist/Auth/AuthProvider/index.js.map +1 -1
- package/dist/Auth/AuthProvider/index.mjs +12 -0
- package/dist/Auth/AuthProvider/index.mjs.map +1 -1
- package/dist/Auth/ProtectedRoute/index.js +12 -0
- package/dist/Auth/ProtectedRoute/index.js.map +1 -1
- package/dist/Auth/ProtectedRoute/index.mjs +12 -0
- package/dist/Auth/ProtectedRoute/index.mjs.map +1 -1
- package/dist/Auth/PublicRoute/index.js +12 -0
- package/dist/Auth/PublicRoute/index.js.map +1 -1
- package/dist/Auth/PublicRoute/index.mjs +12 -0
- package/dist/Auth/PublicRoute/index.mjs.map +1 -1
- package/dist/Auth/getRootDomain/index.js +12 -0
- package/dist/Auth/getRootDomain/index.js.map +1 -1
- package/dist/Auth/getRootDomain/index.mjs +12 -0
- package/dist/Auth/getRootDomain/index.mjs.map +1 -1
- package/dist/Auth/index.d.mts +15 -1
- package/dist/Auth/index.d.ts +15 -1
- package/dist/Auth/index.js +12 -0
- package/dist/Auth/index.js.map +1 -1
- package/dist/Auth/index.mjs +12 -0
- package/dist/Auth/index.mjs.map +1 -1
- package/dist/Auth/useAuth/index.js +12 -0
- package/dist/Auth/useAuth/index.js.map +1 -1
- package/dist/Auth/useAuth/index.mjs +12 -0
- package/dist/Auth/useAuth/index.mjs.map +1 -1
- package/dist/Auth/useAuthGuard/index.js +12 -0
- package/dist/Auth/useAuthGuard/index.js.map +1 -1
- package/dist/Auth/useAuthGuard/index.mjs +12 -0
- package/dist/Auth/useAuthGuard/index.mjs.map +1 -1
- package/dist/Auth/useRouteAuth/index.js +12 -0
- package/dist/Auth/useRouteAuth/index.js.map +1 -1
- package/dist/Auth/useRouteAuth/index.mjs +12 -0
- package/dist/Auth/useRouteAuth/index.mjs.map +1 -1
- package/dist/Auth/withAuth/index.js +12 -0
- package/dist/Auth/withAuth/index.js.map +1 -1
- package/dist/Auth/withAuth/index.mjs +12 -0
- package/dist/Auth/withAuth/index.mjs.map +1 -1
- 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 +691 -226
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +684 -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,
|
|
@@ -6972,7 +7398,19 @@ var getRootDomain = () => {
|
|
|
6972
7398
|
if (hostname === "localhost") {
|
|
6973
7399
|
return `${protocol}//${hostname}${portStr}`;
|
|
6974
7400
|
}
|
|
7401
|
+
const isIPv4 = /^\d{1,3}(?:\.\d{1,3}){3}$/.test(hostname);
|
|
7402
|
+
const isIPv6 = hostname.includes(":");
|
|
7403
|
+
if (isIPv4 || isIPv6) {
|
|
7404
|
+
return `${protocol}//${hostname}${portStr}`;
|
|
7405
|
+
}
|
|
6975
7406
|
const parts = hostname.split(".");
|
|
7407
|
+
if (parts.length >= 3 && parts[parts.length - 2] === "com" && parts[parts.length - 1] === "br") {
|
|
7408
|
+
if (parts.length === 3) {
|
|
7409
|
+
return `${protocol}//${hostname}${portStr}`;
|
|
7410
|
+
}
|
|
7411
|
+
const base = parts.slice(-3).join(".");
|
|
7412
|
+
return `${protocol}//${base}${portStr}`;
|
|
7413
|
+
}
|
|
6976
7414
|
if (parts.length > 2) {
|
|
6977
7415
|
const base = parts.slice(-2).join(".");
|
|
6978
7416
|
return `${protocol}//${base}${portStr}`;
|
|
@@ -7023,7 +7461,7 @@ function createZustandAuthAdapter(useAuthStore) {
|
|
|
7023
7461
|
}
|
|
7024
7462
|
|
|
7025
7463
|
// src/components/Auth/useUrlAuthentication.ts
|
|
7026
|
-
var
|
|
7464
|
+
var import_react24 = require("react");
|
|
7027
7465
|
var import_react_router_dom2 = require("react-router-dom");
|
|
7028
7466
|
var getAuthParams = (location, extractParams) => {
|
|
7029
7467
|
const searchParams = new URLSearchParams(location.search);
|
|
@@ -7071,7 +7509,7 @@ var handleUserData = (responseData, setUser) => {
|
|
|
7071
7509
|
};
|
|
7072
7510
|
function useUrlAuthentication(options) {
|
|
7073
7511
|
const location = (0, import_react_router_dom2.useLocation)();
|
|
7074
|
-
(0,
|
|
7512
|
+
(0, import_react24.useEffect)(() => {
|
|
7075
7513
|
const handleAuthentication = async () => {
|
|
7076
7514
|
const authParams = getAuthParams(location, options.extractParams);
|
|
7077
7515
|
if (!hasValidAuthParams(authParams)) {
|
|
@@ -7110,9 +7548,9 @@ function useUrlAuthentication(options) {
|
|
|
7110
7548
|
}
|
|
7111
7549
|
|
|
7112
7550
|
// src/components/Auth/useApiConfig.ts
|
|
7113
|
-
var
|
|
7551
|
+
var import_react25 = require("react");
|
|
7114
7552
|
function useApiConfig(api) {
|
|
7115
|
-
return (0,
|
|
7553
|
+
return (0, import_react25.useMemo)(
|
|
7116
7554
|
() => ({
|
|
7117
7555
|
get: (endpoint, config) => api.get(endpoint, config)
|
|
7118
7556
|
}),
|
|
@@ -7121,8 +7559,8 @@ function useApiConfig(api) {
|
|
|
7121
7559
|
}
|
|
7122
7560
|
|
|
7123
7561
|
// src/components/Quiz/Quiz.tsx
|
|
7124
|
-
var
|
|
7125
|
-
var
|
|
7562
|
+
var import_phosphor_react19 = require("phosphor-react");
|
|
7563
|
+
var import_react26 = require("react");
|
|
7126
7564
|
|
|
7127
7565
|
// src/components/Quiz/useQuizStore.ts
|
|
7128
7566
|
var import_zustand7 = require("zustand");
|
|
@@ -7158,6 +7596,7 @@ var useQuizStore = (0, import_zustand7.create)()(
|
|
|
7158
7596
|
isStarted: false,
|
|
7159
7597
|
isFinished: false,
|
|
7160
7598
|
userId: "",
|
|
7599
|
+
variant: "default",
|
|
7161
7600
|
// Setters
|
|
7162
7601
|
setBySimulated: (simulado) => set({ bySimulated: simulado }),
|
|
7163
7602
|
setByActivity: (atividade) => set({ byActivity: atividade }),
|
|
@@ -7165,6 +7604,7 @@ var useQuizStore = (0, import_zustand7.create)()(
|
|
|
7165
7604
|
setUserId: (userId) => set({ userId }),
|
|
7166
7605
|
setUserAnswers: (userAnswers) => set({ userAnswers }),
|
|
7167
7606
|
getUserId: () => get().userId,
|
|
7607
|
+
setVariant: (variant) => set({ variant }),
|
|
7168
7608
|
// Navigation
|
|
7169
7609
|
goToNextQuestion: () => {
|
|
7170
7610
|
const { currentQuestionIndex, getTotalQuestions } = get();
|
|
@@ -7620,13 +8060,13 @@ var simulated_result_default = "./simulated-result-QN5HCUY5.png";
|
|
|
7620
8060
|
var mock_image_question_default = "./mock-image-question-HEZCLFDL.png";
|
|
7621
8061
|
|
|
7622
8062
|
// src/components/Quiz/Quiz.tsx
|
|
7623
|
-
var
|
|
8063
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
7624
8064
|
var getStatusBadge = (status) => {
|
|
7625
8065
|
switch (status) {
|
|
7626
8066
|
case "correct":
|
|
7627
|
-
return /* @__PURE__ */ (0,
|
|
8067
|
+
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
8068
|
case "incorrect":
|
|
7629
|
-
return /* @__PURE__ */ (0,
|
|
8069
|
+
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
8070
|
default:
|
|
7631
8071
|
return null;
|
|
7632
8072
|
}
|
|
@@ -7639,8 +8079,12 @@ var getStatusStyles = (variantCorrect) => {
|
|
|
7639
8079
|
return "bg-error-background border-error-300";
|
|
7640
8080
|
}
|
|
7641
8081
|
};
|
|
7642
|
-
var Quiz = (0,
|
|
7643
|
-
|
|
8082
|
+
var Quiz = (0, import_react26.forwardRef)(({ children, className, variant = "default", ...props }, ref) => {
|
|
8083
|
+
const { setVariant } = useQuizStore();
|
|
8084
|
+
(0, import_react26.useEffect)(() => {
|
|
8085
|
+
setVariant(variant);
|
|
8086
|
+
}, [variant, setVariant]);
|
|
8087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7644
8088
|
"div",
|
|
7645
8089
|
{
|
|
7646
8090
|
ref,
|
|
@@ -7653,12 +8097,12 @@ var Quiz = (0, import_react25.forwardRef)(({ children, className, ...props }, re
|
|
|
7653
8097
|
}
|
|
7654
8098
|
);
|
|
7655
8099
|
});
|
|
7656
|
-
var QuizHeaderResult = (0,
|
|
8100
|
+
var QuizHeaderResult = (0, import_react26.forwardRef)(
|
|
7657
8101
|
({ className, ...props }, ref) => {
|
|
7658
8102
|
const { getAllCurrentAnswer } = useQuizStore();
|
|
7659
8103
|
const usersAnswer = getAllCurrentAnswer();
|
|
7660
|
-
const [isCorrect, setIsCorrect] = (0,
|
|
7661
|
-
(0,
|
|
8104
|
+
const [isCorrect, setIsCorrect] = (0, import_react26.useState)(false);
|
|
8105
|
+
(0, import_react26.useEffect)(() => {
|
|
7662
8106
|
if (usersAnswer) {
|
|
7663
8107
|
setIsCorrect(
|
|
7664
8108
|
usersAnswer.length > 0 ? usersAnswer.map(
|
|
@@ -7667,7 +8111,7 @@ var QuizHeaderResult = (0, import_react25.forwardRef)(
|
|
|
7667
8111
|
);
|
|
7668
8112
|
}
|
|
7669
8113
|
}, [usersAnswer]);
|
|
7670
|
-
return /* @__PURE__ */ (0,
|
|
8114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7671
8115
|
"div",
|
|
7672
8116
|
{
|
|
7673
8117
|
ref,
|
|
@@ -7678,26 +8122,26 @@ var QuizHeaderResult = (0, import_react25.forwardRef)(
|
|
|
7678
8122
|
),
|
|
7679
8123
|
...props,
|
|
7680
8124
|
children: [
|
|
7681
|
-
/* @__PURE__ */ (0,
|
|
7682
|
-
/* @__PURE__ */ (0,
|
|
8125
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-lg", children: "Resultado" }),
|
|
8126
|
+
/* @__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
8127
|
]
|
|
7684
8128
|
}
|
|
7685
8129
|
);
|
|
7686
8130
|
}
|
|
7687
8131
|
);
|
|
7688
|
-
var QuizTitle = (0,
|
|
8132
|
+
var QuizTitle = (0, import_react26.forwardRef)(
|
|
7689
8133
|
({ className, ...props }, ref) => {
|
|
7690
8134
|
const {
|
|
7691
8135
|
currentQuestionIndex,
|
|
7692
8136
|
getTotalQuestions,
|
|
7693
8137
|
getQuizTitle,
|
|
7694
8138
|
timeElapsed,
|
|
7695
|
-
formatTime,
|
|
8139
|
+
formatTime: formatTime2,
|
|
7696
8140
|
isStarted
|
|
7697
8141
|
} = useQuizStore();
|
|
7698
8142
|
const totalQuestions = getTotalQuestions();
|
|
7699
8143
|
const quizTitle = getQuizTitle();
|
|
7700
|
-
return /* @__PURE__ */ (0,
|
|
8144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7701
8145
|
"div",
|
|
7702
8146
|
{
|
|
7703
8147
|
ref,
|
|
@@ -7707,25 +8151,25 @@ var QuizTitle = (0, import_react25.forwardRef)(
|
|
|
7707
8151
|
),
|
|
7708
8152
|
...props,
|
|
7709
8153
|
children: [
|
|
7710
|
-
/* @__PURE__ */ (0,
|
|
7711
|
-
/* @__PURE__ */ (0,
|
|
7712
|
-
/* @__PURE__ */ (0,
|
|
8154
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-col gap-2 text-center", children: [
|
|
8155
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-md", children: quizTitle }),
|
|
8156
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-600 text-xs", children: totalQuestions > 0 ? `${currentQuestionIndex + 1} de ${totalQuestions}` : "0 de 0" })
|
|
7713
8157
|
] }),
|
|
7714
|
-
/* @__PURE__ */ (0,
|
|
8158
|
+
/* @__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
8159
|
]
|
|
7716
8160
|
}
|
|
7717
8161
|
);
|
|
7718
8162
|
}
|
|
7719
8163
|
);
|
|
7720
|
-
var QuizSubTitle = (0,
|
|
8164
|
+
var QuizSubTitle = (0, import_react26.forwardRef)(
|
|
7721
8165
|
({ subTitle, ...props }, ref) => {
|
|
7722
|
-
return /* @__PURE__ */ (0,
|
|
8166
|
+
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
8167
|
}
|
|
7724
8168
|
);
|
|
7725
8169
|
var QuizHeader = () => {
|
|
7726
8170
|
const { getCurrentQuestion, currentQuestionIndex } = useQuizStore();
|
|
7727
8171
|
const currentQuestion = getCurrentQuestion();
|
|
7728
|
-
return /* @__PURE__ */ (0,
|
|
8172
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7729
8173
|
HeaderAlternative,
|
|
7730
8174
|
{
|
|
7731
8175
|
title: currentQuestion ? `Quest\xE3o ${currentQuestionIndex + 1}` : "Quest\xE3o",
|
|
@@ -7734,8 +8178,8 @@ var QuizHeader = () => {
|
|
|
7734
8178
|
}
|
|
7735
8179
|
);
|
|
7736
8180
|
};
|
|
7737
|
-
var QuizContainer = (0,
|
|
7738
|
-
return /* @__PURE__ */ (0,
|
|
8181
|
+
var QuizContainer = (0, import_react26.forwardRef)(({ children, className, ...props }, ref) => {
|
|
8182
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
7739
8183
|
"div",
|
|
7740
8184
|
{
|
|
7741
8185
|
ref,
|
|
@@ -7748,8 +8192,8 @@ var QuizContainer = (0, import_react25.forwardRef)(({ children, className, ...pr
|
|
|
7748
8192
|
}
|
|
7749
8193
|
);
|
|
7750
8194
|
});
|
|
7751
|
-
var QuizContent = (0,
|
|
7752
|
-
const { getCurrentQuestion } = useQuizStore();
|
|
8195
|
+
var QuizContent = (0, import_react26.forwardRef)(({ paddingBottom }) => {
|
|
8196
|
+
const { getCurrentQuestion, variant } = useQuizStore();
|
|
7753
8197
|
const currentQuestion = getCurrentQuestion();
|
|
7754
8198
|
const questionComponents = {
|
|
7755
8199
|
["ALTERNATIVA" /* ALTERNATIVA */]: QuizAlternative,
|
|
@@ -7761,7 +8205,7 @@ var QuizContent = (0, import_react25.forwardRef)(({ variant, paddingBottom }) =>
|
|
|
7761
8205
|
["IMAGEM" /* IMAGEM */]: QuizImageQuestion
|
|
7762
8206
|
};
|
|
7763
8207
|
const QuestionComponent = currentQuestion ? questionComponents[currentQuestion.type] : null;
|
|
7764
|
-
return QuestionComponent ? /* @__PURE__ */ (0,
|
|
8208
|
+
return QuestionComponent ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuestionComponent, { variant, paddingBottom }) : null;
|
|
7765
8209
|
});
|
|
7766
8210
|
var QuizAlternative = ({
|
|
7767
8211
|
variant = "default",
|
|
@@ -7789,10 +8233,10 @@ var QuizAlternative = ({
|
|
|
7789
8233
|
};
|
|
7790
8234
|
});
|
|
7791
8235
|
if (!alternatives)
|
|
7792
|
-
return /* @__PURE__ */ (0,
|
|
7793
|
-
return /* @__PURE__ */ (0,
|
|
7794
|
-
/* @__PURE__ */ (0,
|
|
7795
|
-
/* @__PURE__ */ (0,
|
|
8236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { children: "N\xE3o h\xE1 Alternativas" }) });
|
|
8237
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8238
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8239
|
+
/* @__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
8240
|
AlternativesList,
|
|
7797
8241
|
{
|
|
7798
8242
|
mode: variant === "default" ? "interactive" : "readonly",
|
|
@@ -7818,15 +8262,15 @@ var QuizMultipleChoice = ({
|
|
|
7818
8262
|
const { getCurrentQuestion, selectMultipleAnswer, getAllCurrentAnswer } = useQuizStore();
|
|
7819
8263
|
const currentQuestion = getCurrentQuestion();
|
|
7820
8264
|
const allCurrentAnswers = getAllCurrentAnswer();
|
|
7821
|
-
const prevSelectedValuesRef = (0,
|
|
7822
|
-
const prevQuestionIdRef = (0,
|
|
7823
|
-
const allCurrentAnswerIds = (0,
|
|
8265
|
+
const prevSelectedValuesRef = (0, import_react26.useRef)([]);
|
|
8266
|
+
const prevQuestionIdRef = (0, import_react26.useRef)("");
|
|
8267
|
+
const allCurrentAnswerIds = (0, import_react26.useMemo)(() => {
|
|
7824
8268
|
return allCurrentAnswers?.map((answer) => answer.optionId) || [];
|
|
7825
8269
|
}, [allCurrentAnswers]);
|
|
7826
|
-
const selectedValues = (0,
|
|
8270
|
+
const selectedValues = (0, import_react26.useMemo)(() => {
|
|
7827
8271
|
return allCurrentAnswerIds?.filter((id) => id !== null) || [];
|
|
7828
8272
|
}, [allCurrentAnswerIds]);
|
|
7829
|
-
const stableSelectedValues = (0,
|
|
8273
|
+
const stableSelectedValues = (0, import_react26.useMemo)(() => {
|
|
7830
8274
|
const currentQuestionId = currentQuestion?.id || "";
|
|
7831
8275
|
const hasQuestionChanged = prevQuestionIdRef.current !== currentQuestionId;
|
|
7832
8276
|
if (hasQuestionChanged) {
|
|
@@ -7841,7 +8285,7 @@ var QuizMultipleChoice = ({
|
|
|
7841
8285
|
}
|
|
7842
8286
|
return prevSelectedValuesRef.current;
|
|
7843
8287
|
}, [selectedValues, currentQuestion?.id]);
|
|
7844
|
-
const handleSelectedValues = (0,
|
|
8288
|
+
const handleSelectedValues = (0, import_react26.useCallback)(
|
|
7845
8289
|
(values) => {
|
|
7846
8290
|
if (currentQuestion) {
|
|
7847
8291
|
selectMultipleAnswer(currentQuestion.id, values);
|
|
@@ -7849,7 +8293,7 @@ var QuizMultipleChoice = ({
|
|
|
7849
8293
|
},
|
|
7850
8294
|
[currentQuestion, selectMultipleAnswer]
|
|
7851
8295
|
);
|
|
7852
|
-
const questionKey = (0,
|
|
8296
|
+
const questionKey = (0, import_react26.useMemo)(
|
|
7853
8297
|
() => `question-${currentQuestion?.id || "1"}`,
|
|
7854
8298
|
[currentQuestion?.id]
|
|
7855
8299
|
);
|
|
@@ -7870,10 +8314,10 @@ var QuizMultipleChoice = ({
|
|
|
7870
8314
|
};
|
|
7871
8315
|
});
|
|
7872
8316
|
if (!choices)
|
|
7873
|
-
return /* @__PURE__ */ (0,
|
|
7874
|
-
return /* @__PURE__ */ (0,
|
|
7875
|
-
/* @__PURE__ */ (0,
|
|
7876
|
-
/* @__PURE__ */ (0,
|
|
8317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { children: "N\xE3o h\xE1 Escolhas Multiplas" }) });
|
|
8318
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8319
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8320
|
+
/* @__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
8321
|
MultipleChoiceList,
|
|
7878
8322
|
{
|
|
7879
8323
|
choices,
|
|
@@ -7893,13 +8337,13 @@ var QuizDissertative = ({
|
|
|
7893
8337
|
const { getCurrentQuestion, getCurrentAnswer, selectDissertativeAnswer } = useQuizStore();
|
|
7894
8338
|
const currentQuestion = getCurrentQuestion();
|
|
7895
8339
|
const currentAnswer = getCurrentAnswer();
|
|
7896
|
-
const textareaRef = (0,
|
|
8340
|
+
const textareaRef = (0, import_react26.useRef)(null);
|
|
7897
8341
|
const handleAnswerChange = (value) => {
|
|
7898
8342
|
if (currentQuestion) {
|
|
7899
8343
|
selectDissertativeAnswer(currentQuestion.id, value);
|
|
7900
8344
|
}
|
|
7901
8345
|
};
|
|
7902
|
-
const adjustTextareaHeight = (0,
|
|
8346
|
+
const adjustTextareaHeight = (0, import_react26.useCallback)(() => {
|
|
7903
8347
|
if (textareaRef.current) {
|
|
7904
8348
|
textareaRef.current.style.height = "auto";
|
|
7905
8349
|
const scrollHeight = textareaRef.current.scrollHeight;
|
|
@@ -7909,15 +8353,15 @@ var QuizDissertative = ({
|
|
|
7909
8353
|
textareaRef.current.style.height = `${newHeight}px`;
|
|
7910
8354
|
}
|
|
7911
8355
|
}, []);
|
|
7912
|
-
(0,
|
|
8356
|
+
(0, import_react26.useEffect)(() => {
|
|
7913
8357
|
adjustTextareaHeight();
|
|
7914
8358
|
}, [currentAnswer, adjustTextareaHeight]);
|
|
7915
8359
|
if (!currentQuestion) {
|
|
7916
|
-
return /* @__PURE__ */ (0,
|
|
8360
|
+
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
8361
|
}
|
|
7918
|
-
return /* @__PURE__ */ (0,
|
|
7919
|
-
/* @__PURE__ */ (0,
|
|
7920
|
-
/* @__PURE__ */ (0,
|
|
8362
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8363
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Resposta" }),
|
|
8364
|
+
/* @__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
8365
|
TextArea_default,
|
|
7922
8366
|
{
|
|
7923
8367
|
ref: textareaRef,
|
|
@@ -7927,10 +8371,10 @@ var QuizDissertative = ({
|
|
|
7927
8371
|
rows: 4,
|
|
7928
8372
|
className: "min-h-[120px] max-h-[400px] resize-none overflow-y-auto"
|
|
7929
8373
|
}
|
|
7930
|
-
) }) : /* @__PURE__ */ (0,
|
|
7931
|
-
variant === "result" && currentAnswer?.answerStatus == "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && /* @__PURE__ */ (0,
|
|
7932
|
-
/* @__PURE__ */ (0,
|
|
7933
|
-
/* @__PURE__ */ (0,
|
|
8374
|
+
) }) : /* @__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" }) }) }) }),
|
|
8375
|
+
variant === "result" && currentAnswer?.answerStatus == "RESPOSTA_INCORRETA" /* RESPOSTA_INCORRETA */ && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8376
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Observa\xE7\xE3o do professor" }),
|
|
8377
|
+
/* @__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
8378
|
] })
|
|
7935
8379
|
] });
|
|
7936
8380
|
};
|
|
@@ -7958,16 +8402,16 @@ var QuizTrueOrFalse = ({
|
|
|
7958
8402
|
];
|
|
7959
8403
|
const getLetterByIndex = (index) => String.fromCharCode(97 + index);
|
|
7960
8404
|
const isDefaultVariant = variant == "default";
|
|
7961
|
-
return /* @__PURE__ */ (0,
|
|
7962
|
-
/* @__PURE__ */ (0,
|
|
7963
|
-
/* @__PURE__ */ (0,
|
|
8405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8406
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8407
|
+
/* @__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
8408
|
const variantCorrect = option.isCorrect ? "correct" : "incorrect";
|
|
7965
|
-
return /* @__PURE__ */ (0,
|
|
8409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7966
8410
|
"section",
|
|
7967
8411
|
{
|
|
7968
8412
|
className: "flex flex-col gap-2",
|
|
7969
8413
|
children: [
|
|
7970
|
-
/* @__PURE__ */ (0,
|
|
8414
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
7971
8415
|
"div",
|
|
7972
8416
|
{
|
|
7973
8417
|
className: cn(
|
|
@@ -7975,20 +8419,20 @@ var QuizTrueOrFalse = ({
|
|
|
7975
8419
|
!isDefaultVariant ? getStatusStyles(variantCorrect) : ""
|
|
7976
8420
|
),
|
|
7977
8421
|
children: [
|
|
7978
|
-
/* @__PURE__ */ (0,
|
|
7979
|
-
isDefaultVariant ? /* @__PURE__ */ (0,
|
|
7980
|
-
/* @__PURE__ */ (0,
|
|
7981
|
-
/* @__PURE__ */ (0,
|
|
7982
|
-
/* @__PURE__ */ (0,
|
|
7983
|
-
/* @__PURE__ */ (0,
|
|
8422
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-900 text-sm", children: getLetterByIndex(index).concat(") ").concat(option.label) }),
|
|
8423
|
+
isDefaultVariant ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Select_default, { size: "medium", children: [
|
|
8424
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { className: "w-[180px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione opc\xE3o" }) }),
|
|
8425
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(SelectContent, { children: [
|
|
8426
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "V", children: "Verdadeiro" }),
|
|
8427
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "F", children: "Falso" })
|
|
7984
8428
|
] })
|
|
7985
|
-
] }) : /* @__PURE__ */ (0,
|
|
8429
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex-shrink-0", children: getStatusBadge(variantCorrect) })
|
|
7986
8430
|
]
|
|
7987
8431
|
}
|
|
7988
8432
|
),
|
|
7989
|
-
!isDefaultVariant && /* @__PURE__ */ (0,
|
|
7990
|
-
/* @__PURE__ */ (0,
|
|
7991
|
-
!option.isCorrect && /* @__PURE__ */ (0,
|
|
8433
|
+
!isDefaultVariant && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-row gap-2 items-center", children: [
|
|
8434
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 text-2xs", children: "Resposta selecionada: V" }),
|
|
8435
|
+
!option.isCorrect && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 text-2xs", children: "Resposta correta: F" })
|
|
7992
8436
|
] })
|
|
7993
8437
|
]
|
|
7994
8438
|
},
|
|
@@ -8051,7 +8495,7 @@ var QuizConnectDots = ({
|
|
|
8051
8495
|
isCorrect: false
|
|
8052
8496
|
}
|
|
8053
8497
|
];
|
|
8054
|
-
const [userAnswers, setUserAnswers] = (0,
|
|
8498
|
+
const [userAnswers, setUserAnswers] = (0, import_react26.useState)(() => {
|
|
8055
8499
|
if (variant === "result") {
|
|
8056
8500
|
return mockUserAnswers;
|
|
8057
8501
|
}
|
|
@@ -8080,13 +8524,13 @@ var QuizConnectDots = ({
|
|
|
8080
8524
|
const assignedDots = new Set(
|
|
8081
8525
|
userAnswers.map((a) => a.dotOption).filter(Boolean)
|
|
8082
8526
|
);
|
|
8083
|
-
return /* @__PURE__ */ (0,
|
|
8084
|
-
/* @__PURE__ */ (0,
|
|
8085
|
-
/* @__PURE__ */ (0,
|
|
8527
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8528
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
8529
|
+
/* @__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
8530
|
const answer = userAnswers[index];
|
|
8087
8531
|
const variantCorrect = answer.isCorrect ? "correct" : "incorrect";
|
|
8088
|
-
return /* @__PURE__ */ (0,
|
|
8089
|
-
/* @__PURE__ */ (0,
|
|
8532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col gap-2", children: [
|
|
8533
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8090
8534
|
"div",
|
|
8091
8535
|
{
|
|
8092
8536
|
className: cn(
|
|
@@ -8094,30 +8538,30 @@ var QuizConnectDots = ({
|
|
|
8094
8538
|
!isDefaultVariant ? getStatusStyles(variantCorrect) : ""
|
|
8095
8539
|
),
|
|
8096
8540
|
children: [
|
|
8097
|
-
/* @__PURE__ */ (0,
|
|
8098
|
-
isDefaultVariant ? /* @__PURE__ */ (0,
|
|
8541
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-900 text-sm", children: getLetterByIndex(index) + ") " + option.label }),
|
|
8542
|
+
isDefaultVariant ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8099
8543
|
Select_default,
|
|
8100
8544
|
{
|
|
8101
8545
|
size: "medium",
|
|
8102
8546
|
value: answer.dotOption || void 0,
|
|
8103
8547
|
onValueChange: (value) => handleSelectDot(index, value),
|
|
8104
8548
|
children: [
|
|
8105
|
-
/* @__PURE__ */ (0,
|
|
8106
|
-
/* @__PURE__ */ (0,
|
|
8549
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectTrigger, { className: "w-[180px]", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectValue, { placeholder: "Selecione op\xE7\xE3o" }) }),
|
|
8550
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectContent, { children: dotsOptions.filter(
|
|
8107
8551
|
(dot) => !assignedDots.has(dot.label) || answer.dotOption === dot.label
|
|
8108
|
-
).map((dot) => /* @__PURE__ */ (0,
|
|
8552
|
+
).map((dot) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: dot.label, children: dot.label }, dot.label)) })
|
|
8109
8553
|
]
|
|
8110
8554
|
}
|
|
8111
|
-
) : /* @__PURE__ */ (0,
|
|
8555
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex-shrink-0", children: answer.isCorrect === null ? null : getStatusBadge(variantCorrect) })
|
|
8112
8556
|
]
|
|
8113
8557
|
}
|
|
8114
8558
|
),
|
|
8115
|
-
!isDefaultVariant && /* @__PURE__ */ (0,
|
|
8116
|
-
/* @__PURE__ */ (0,
|
|
8559
|
+
!isDefaultVariant && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "flex flex-row gap-2 items-center", children: [
|
|
8560
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-800 text-2xs", children: [
|
|
8117
8561
|
"Resposta selecionada: ",
|
|
8118
8562
|
answer.dotOption || "Nenhuma"
|
|
8119
8563
|
] }),
|
|
8120
|
-
!answer.isCorrect && /* @__PURE__ */ (0,
|
|
8564
|
+
!answer.isCorrect && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-800 text-2xs", children: [
|
|
8121
8565
|
"Resposta correta: ",
|
|
8122
8566
|
answer.correctOption
|
|
8123
8567
|
] })
|
|
@@ -8172,8 +8616,8 @@ var QuizFill = ({
|
|
|
8172
8616
|
isCorrect: true
|
|
8173
8617
|
}
|
|
8174
8618
|
];
|
|
8175
|
-
const [answers, setAnswers] = (0,
|
|
8176
|
-
const baseId = (0,
|
|
8619
|
+
const [answers, setAnswers] = (0, import_react26.useState)({});
|
|
8620
|
+
const baseId = (0, import_react26.useId)();
|
|
8177
8621
|
const getAvailableOptionsForSelect = (selectId) => {
|
|
8178
8622
|
const usedOptions = Object.entries(answers).filter(([key]) => key !== selectId).map(([, value]) => value);
|
|
8179
8623
|
return options.filter((option) => !usedOptions.includes(option));
|
|
@@ -8186,18 +8630,18 @@ var QuizFill = ({
|
|
|
8186
8630
|
const mockAnswer = mockUserAnswers.find(
|
|
8187
8631
|
(answer) => answer.selectId === selectId
|
|
8188
8632
|
);
|
|
8189
|
-
return /* @__PURE__ */ (0,
|
|
8633
|
+
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
8634
|
};
|
|
8191
8635
|
const renderDefaultElement = (selectId, startIndex, selectedValue, availableOptionsForThisSelect) => {
|
|
8192
|
-
return /* @__PURE__ */ (0,
|
|
8636
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8193
8637
|
Select_default,
|
|
8194
8638
|
{
|
|
8195
8639
|
value: selectedValue,
|
|
8196
8640
|
onValueChange: (value) => handleSelectChange(selectId, value),
|
|
8197
8641
|
className: "inline-flex mb-2.5",
|
|
8198
8642
|
children: [
|
|
8199
|
-
/* @__PURE__ */ (0,
|
|
8200
|
-
/* @__PURE__ */ (0,
|
|
8643
|
+
/* @__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" }) }),
|
|
8644
|
+
/* @__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
8645
|
]
|
|
8202
8646
|
},
|
|
8203
8647
|
`${selectId}-${startIndex}`
|
|
@@ -8209,8 +8653,8 @@ var QuizFill = ({
|
|
|
8209
8653
|
);
|
|
8210
8654
|
if (!mockAnswer) return null;
|
|
8211
8655
|
const action = mockAnswer.isCorrect ? "success" : "error";
|
|
8212
|
-
const icon = mockAnswer.isCorrect ? /* @__PURE__ */ (0,
|
|
8213
|
-
return /* @__PURE__ */ (0,
|
|
8656
|
+
const icon = mockAnswer.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CheckCircle, {}) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.XCircle, {});
|
|
8657
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8214
8658
|
Badge_default,
|
|
8215
8659
|
{
|
|
8216
8660
|
variant: "solid",
|
|
@@ -8218,7 +8662,7 @@ var QuizFill = ({
|
|
|
8218
8662
|
iconRight: icon,
|
|
8219
8663
|
size: "large",
|
|
8220
8664
|
className: "py-3 w-[180px] justify-between mb-2.5",
|
|
8221
|
-
children: /* @__PURE__ */ (0,
|
|
8665
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-900", children: mockAnswer.userAnswer })
|
|
8222
8666
|
},
|
|
8223
8667
|
selectId
|
|
8224
8668
|
);
|
|
@@ -8274,25 +8718,25 @@ var QuizFill = ({
|
|
|
8274
8718
|
}
|
|
8275
8719
|
return elements;
|
|
8276
8720
|
};
|
|
8277
|
-
return /* @__PURE__ */ (0,
|
|
8278
|
-
/* @__PURE__ */ (0,
|
|
8279
|
-
/* @__PURE__ */ (0,
|
|
8721
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8722
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Alternativas" }),
|
|
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 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8280
8724
|
"div",
|
|
8281
8725
|
{
|
|
8282
8726
|
className: cn(
|
|
8283
8727
|
"text-lg text-text-900 leading-8 h-auto",
|
|
8284
8728
|
variant != "result" && paddingBottom
|
|
8285
8729
|
),
|
|
8286
|
-
children: renderTextWithSelects(exampleText).map((element) => /* @__PURE__ */ (0,
|
|
8730
|
+
children: renderTextWithSelects(exampleText).map((element) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: element.element }, element.id))
|
|
8287
8731
|
}
|
|
8288
8732
|
) }) }),
|
|
8289
|
-
variant === "result" && /* @__PURE__ */ (0,
|
|
8290
|
-
/* @__PURE__ */ (0,
|
|
8291
|
-
/* @__PURE__ */ (0,
|
|
8733
|
+
variant === "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8734
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Resultado" }),
|
|
8735
|
+
/* @__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
8736
|
"div",
|
|
8293
8737
|
{
|
|
8294
8738
|
className: cn("text-lg text-text-900 leading-8", paddingBottom),
|
|
8295
|
-
children: renderTextWithSelects(exampleText, true).map((element) => /* @__PURE__ */ (0,
|
|
8739
|
+
children: renderTextWithSelects(exampleText, true).map((element) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: element.element }, element.id))
|
|
8296
8740
|
}
|
|
8297
8741
|
) }) })
|
|
8298
8742
|
] })
|
|
@@ -8312,7 +8756,7 @@ var QuizImageQuestion = ({
|
|
|
8312
8756
|
};
|
|
8313
8757
|
const correctRadiusRelative = calculateCorrectRadiusRelative();
|
|
8314
8758
|
const mockUserAnswerRelative = { x: 0.72, y: 0.348 };
|
|
8315
|
-
const [clickPositionRelative, setClickPositionRelative] = (0,
|
|
8759
|
+
const [clickPositionRelative, setClickPositionRelative] = (0, import_react26.useState)(variant == "result" ? mockUserAnswerRelative : null);
|
|
8316
8760
|
const convertToRelativeCoordinates = (x, y, rect) => {
|
|
8317
8761
|
const safeWidth = Math.max(rect.width, 1e-3);
|
|
8318
8762
|
const safeHeight = Math.max(rect.height, 1e-3);
|
|
@@ -8348,36 +8792,36 @@ var QuizImageQuestion = ({
|
|
|
8348
8792
|
}
|
|
8349
8793
|
return "bg-success-600/70 border-white";
|
|
8350
8794
|
};
|
|
8351
|
-
return /* @__PURE__ */ (0,
|
|
8352
|
-
/* @__PURE__ */ (0,
|
|
8353
|
-
/* @__PURE__ */ (0,
|
|
8795
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
8796
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizSubTitle, { subTitle: "Clique na \xE1rea correta" }),
|
|
8797
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(QuizContainer, { className: cn("", paddingBottom), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8354
8798
|
"div",
|
|
8355
8799
|
{
|
|
8356
8800
|
"data-testid": "quiz-image-container",
|
|
8357
8801
|
className: "space-y-6 p-3 relative inline-block",
|
|
8358
8802
|
children: [
|
|
8359
|
-
variant == "result" && /* @__PURE__ */ (0,
|
|
8803
|
+
variant == "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8360
8804
|
"div",
|
|
8361
8805
|
{
|
|
8362
8806
|
"data-testid": "quiz-legend",
|
|
8363
8807
|
className: "flex items-center gap-4 text-xs",
|
|
8364
8808
|
children: [
|
|
8365
|
-
/* @__PURE__ */ (0,
|
|
8366
|
-
/* @__PURE__ */ (0,
|
|
8367
|
-
/* @__PURE__ */ (0,
|
|
8809
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8810
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-primary/70 border border-[#F8CC2E]" }),
|
|
8811
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "\xC1rea correta" })
|
|
8368
8812
|
] }),
|
|
8369
|
-
/* @__PURE__ */ (0,
|
|
8370
|
-
/* @__PURE__ */ (0,
|
|
8371
|
-
/* @__PURE__ */ (0,
|
|
8813
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8814
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-success-600/70 border border-white" }),
|
|
8815
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "Resposta correta" })
|
|
8372
8816
|
] }),
|
|
8373
|
-
/* @__PURE__ */ (0,
|
|
8374
|
-
/* @__PURE__ */ (0,
|
|
8375
|
-
/* @__PURE__ */ (0,
|
|
8817
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8818
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-3 h-3 rounded-full bg-indicator-error/70 border border-white" }),
|
|
8819
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-text-600 font-medium text-sm", children: "Resposta incorreta" })
|
|
8376
8820
|
] })
|
|
8377
8821
|
]
|
|
8378
8822
|
}
|
|
8379
8823
|
),
|
|
8380
|
-
/* @__PURE__ */ (0,
|
|
8824
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8381
8825
|
"button",
|
|
8382
8826
|
{
|
|
8383
8827
|
"data-testid": "quiz-image-button",
|
|
@@ -8392,7 +8836,7 @@ var QuizImageQuestion = ({
|
|
|
8392
8836
|
},
|
|
8393
8837
|
"aria-label": "\xC1rea da imagem interativa",
|
|
8394
8838
|
children: [
|
|
8395
|
-
/* @__PURE__ */ (0,
|
|
8839
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8396
8840
|
"img",
|
|
8397
8841
|
{
|
|
8398
8842
|
"data-testid": "quiz-image",
|
|
@@ -8401,7 +8845,7 @@ var QuizImageQuestion = ({
|
|
|
8401
8845
|
className: "w-full h-auto rounded-md"
|
|
8402
8846
|
}
|
|
8403
8847
|
),
|
|
8404
|
-
variant === "result" && /* @__PURE__ */ (0,
|
|
8848
|
+
variant === "result" && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8405
8849
|
"div",
|
|
8406
8850
|
{
|
|
8407
8851
|
"data-testid": "quiz-correct-circle",
|
|
@@ -8416,7 +8860,7 @@ var QuizImageQuestion = ({
|
|
|
8416
8860
|
}
|
|
8417
8861
|
}
|
|
8418
8862
|
),
|
|
8419
|
-
clickPositionRelative && /* @__PURE__ */ (0,
|
|
8863
|
+
clickPositionRelative && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8420
8864
|
"div",
|
|
8421
8865
|
{
|
|
8422
8866
|
"data-testid": "quiz-user-circle",
|
|
@@ -8484,16 +8928,16 @@ var QuizQuestionList = ({
|
|
|
8484
8928
|
return "Em branco";
|
|
8485
8929
|
}
|
|
8486
8930
|
};
|
|
8487
|
-
return /* @__PURE__ */ (0,
|
|
8488
|
-
([subjectId, questions]) => /* @__PURE__ */ (0,
|
|
8489
|
-
/* @__PURE__ */ (0,
|
|
8490
|
-
/* @__PURE__ */ (0,
|
|
8491
|
-
/* @__PURE__ */ (0,
|
|
8931
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "space-y-6 px-4", children: Object.entries(filteredGroupedQuestions).map(
|
|
8932
|
+
([subjectId, questions]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col gap-2", children: [
|
|
8933
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "pt-6 pb-4 flex flex-row gap-2", children: [
|
|
8934
|
+
/* @__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" }) }),
|
|
8935
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-800 font-bold text-lg", children: subjectId })
|
|
8492
8936
|
] }),
|
|
8493
|
-
/* @__PURE__ */ (0,
|
|
8937
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ul", { className: "flex flex-col gap-2", children: questions.map((question) => {
|
|
8494
8938
|
const status = getQuestionStatus(question.id);
|
|
8495
8939
|
const questionNumber = getQuestionIndex(question.id);
|
|
8496
|
-
return /* @__PURE__ */ (0,
|
|
8940
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8497
8941
|
CardStatus,
|
|
8498
8942
|
{
|
|
8499
8943
|
header: `Quest\xE3o ${questionNumber.toString().padStart(2, "0")}`,
|
|
@@ -8509,13 +8953,12 @@ var QuizQuestionList = ({
|
|
|
8509
8953
|
] }, subjectId)
|
|
8510
8954
|
) });
|
|
8511
8955
|
};
|
|
8512
|
-
var QuizFooter = (0,
|
|
8956
|
+
var QuizFooter = (0, import_react26.forwardRef)(
|
|
8513
8957
|
({
|
|
8514
8958
|
className,
|
|
8515
8959
|
onGoToSimulated,
|
|
8516
8960
|
onDetailResult,
|
|
8517
8961
|
handleFinishSimulated,
|
|
8518
|
-
variant = "default",
|
|
8519
8962
|
...props
|
|
8520
8963
|
}, ref) => {
|
|
8521
8964
|
const {
|
|
@@ -8529,6 +8972,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8529
8972
|
skipQuestion,
|
|
8530
8973
|
getCurrentQuestion,
|
|
8531
8974
|
getQuestionStatusFromUserAnswers,
|
|
8975
|
+
variant,
|
|
8532
8976
|
getActiveQuiz
|
|
8533
8977
|
} = useQuizStore();
|
|
8534
8978
|
const totalQuestions = getTotalQuestions();
|
|
@@ -8537,10 +8981,11 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8537
8981
|
const currentAnswer = getCurrentAnswer();
|
|
8538
8982
|
const currentQuestion = getCurrentQuestion();
|
|
8539
8983
|
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 [
|
|
8984
|
+
const [alertDialogOpen, setAlertDialogOpen] = (0, import_react26.useState)(false);
|
|
8985
|
+
const [modalResultOpen, setModalResultOpen] = (0, import_react26.useState)(false);
|
|
8986
|
+
const [modalNavigateOpen, setModalNavigateOpen] = (0, import_react26.useState)(false);
|
|
8987
|
+
const [modalResolutionOpen, setModalResolutionOpen] = (0, import_react26.useState)(false);
|
|
8988
|
+
const [filterType, setFilterType] = (0, import_react26.useState)("all");
|
|
8544
8989
|
const unansweredQuestions = getUnansweredQuestionsFromUserAnswers();
|
|
8545
8990
|
const userAnswers = getUserAnswers();
|
|
8546
8991
|
const allQuestions = getTotalQuestions();
|
|
@@ -8572,8 +9017,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8572
9017
|
setAlertDialogOpen(false);
|
|
8573
9018
|
}
|
|
8574
9019
|
};
|
|
8575
|
-
return /* @__PURE__ */ (0,
|
|
8576
|
-
/* @__PURE__ */ (0,
|
|
9020
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
9021
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8577
9022
|
"footer",
|
|
8578
9023
|
{
|
|
8579
9024
|
ref,
|
|
@@ -8582,17 +9027,17 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8582
9027
|
className
|
|
8583
9028
|
),
|
|
8584
9029
|
...props,
|
|
8585
|
-
children: variant === "default" ? /* @__PURE__ */ (0,
|
|
8586
|
-
/* @__PURE__ */ (0,
|
|
8587
|
-
/* @__PURE__ */ (0,
|
|
9030
|
+
children: variant === "default" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
9031
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-row items-center gap-1", children: [
|
|
9032
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8588
9033
|
IconButton_default,
|
|
8589
9034
|
{
|
|
8590
|
-
icon: /* @__PURE__ */ (0,
|
|
9035
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.SquaresFour, { size: 24, className: "text-text-950" }),
|
|
8591
9036
|
size: "md",
|
|
8592
9037
|
onClick: () => setModalNavigateOpen(true)
|
|
8593
9038
|
}
|
|
8594
9039
|
),
|
|
8595
|
-
isFirstQuestion ? /* @__PURE__ */ (0,
|
|
9040
|
+
isFirstQuestion ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8596
9041
|
Button_default,
|
|
8597
9042
|
{
|
|
8598
9043
|
variant: "outline",
|
|
@@ -8603,13 +9048,13 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8603
9048
|
},
|
|
8604
9049
|
children: "Pular"
|
|
8605
9050
|
}
|
|
8606
|
-
) : /* @__PURE__ */ (0,
|
|
9051
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8607
9052
|
Button_default,
|
|
8608
9053
|
{
|
|
8609
9054
|
size: "medium",
|
|
8610
9055
|
variant: "link",
|
|
8611
9056
|
action: "primary",
|
|
8612
|
-
iconLeft: /* @__PURE__ */ (0,
|
|
9057
|
+
iconLeft: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CaretLeft, { size: 18 }),
|
|
8613
9058
|
onClick: () => {
|
|
8614
9059
|
goToPreviousQuestion();
|
|
8615
9060
|
},
|
|
@@ -8617,7 +9062,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8617
9062
|
}
|
|
8618
9063
|
)
|
|
8619
9064
|
] }),
|
|
8620
|
-
!isFirstQuestion && /* @__PURE__ */ (0,
|
|
9065
|
+
!isFirstQuestion && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8621
9066
|
Button_default,
|
|
8622
9067
|
{
|
|
8623
9068
|
size: "small",
|
|
@@ -8630,7 +9075,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8630
9075
|
children: "Pular"
|
|
8631
9076
|
}
|
|
8632
9077
|
),
|
|
8633
|
-
isLastQuestion ? /* @__PURE__ */ (0,
|
|
9078
|
+
isLastQuestion ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8634
9079
|
Button_default,
|
|
8635
9080
|
{
|
|
8636
9081
|
size: "medium",
|
|
@@ -8640,13 +9085,13 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8640
9085
|
onClick: handleFinishQuiz,
|
|
8641
9086
|
children: "Finalizar"
|
|
8642
9087
|
}
|
|
8643
|
-
) : /* @__PURE__ */ (0,
|
|
9088
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8644
9089
|
Button_default,
|
|
8645
9090
|
{
|
|
8646
9091
|
size: "medium",
|
|
8647
9092
|
variant: "link",
|
|
8648
9093
|
action: "primary",
|
|
8649
|
-
iconRight: /* @__PURE__ */ (0,
|
|
9094
|
+
iconRight: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.CaretRight, { size: 18 }),
|
|
8650
9095
|
disabled: !currentAnswer && !isCurrentQuestionSkipped,
|
|
8651
9096
|
onClick: () => {
|
|
8652
9097
|
goToNextQuestion();
|
|
@@ -8654,10 +9099,19 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8654
9099
|
children: "Avan\xE7ar"
|
|
8655
9100
|
}
|
|
8656
9101
|
)
|
|
8657
|
-
] }) : /* @__PURE__ */ (0,
|
|
9102
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-row items-center justify-end w-full", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9103
|
+
Button_default,
|
|
9104
|
+
{
|
|
9105
|
+
variant: "solid",
|
|
9106
|
+
action: "primary",
|
|
9107
|
+
size: "medium",
|
|
9108
|
+
onClick: () => setModalResolutionOpen(true),
|
|
9109
|
+
children: "Ver Resolu\xE7\xE3o"
|
|
9110
|
+
}
|
|
9111
|
+
) })
|
|
8658
9112
|
}
|
|
8659
9113
|
),
|
|
8660
|
-
/* @__PURE__ */ (0,
|
|
9114
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8661
9115
|
AlertDialog,
|
|
8662
9116
|
{
|
|
8663
9117
|
isOpen: alertDialogOpen,
|
|
@@ -8669,7 +9123,7 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8669
9123
|
onSubmit: handleAlertSubmit
|
|
8670
9124
|
}
|
|
8671
9125
|
),
|
|
8672
|
-
/* @__PURE__ */ (0,
|
|
9126
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8673
9127
|
Modal_default,
|
|
8674
9128
|
{
|
|
8675
9129
|
isOpen: modalResultOpen,
|
|
@@ -8679,8 +9133,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8679
9133
|
closeOnEscape: false,
|
|
8680
9134
|
hideCloseButton: true,
|
|
8681
9135
|
size: "md",
|
|
8682
|
-
children: /* @__PURE__ */ (0,
|
|
8683
|
-
/* @__PURE__ */ (0,
|
|
9136
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col w-full h-full items-center justify-center gap-4", children: [
|
|
9137
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8684
9138
|
"img",
|
|
8685
9139
|
{
|
|
8686
9140
|
src: simulated_result_default,
|
|
@@ -8688,9 +9142,9 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8688
9142
|
className: "w-[282px] h-auto object-cover"
|
|
8689
9143
|
}
|
|
8690
9144
|
),
|
|
8691
|
-
/* @__PURE__ */ (0,
|
|
8692
|
-
/* @__PURE__ */ (0,
|
|
8693
|
-
/* @__PURE__ */ (0,
|
|
9145
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-2 text-center", children: [
|
|
9146
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h2", { className: "text-text-950 font-bold text-lg", children: "Voc\xEA concluiu o simulado!" }),
|
|
9147
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("p", { className: "text-text-500 font-sm", children: [
|
|
8694
9148
|
"Voc\xEA acertou",
|
|
8695
9149
|
" ",
|
|
8696
9150
|
(() => {
|
|
@@ -8712,8 +9166,8 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8712
9166
|
" quest\xF5es."
|
|
8713
9167
|
] })
|
|
8714
9168
|
] }),
|
|
8715
|
-
/* @__PURE__ */ (0,
|
|
8716
|
-
/* @__PURE__ */ (0,
|
|
9169
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "px-6 flex flex-row items-center gap-2 w-full", children: [
|
|
9170
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8717
9171
|
Button_default,
|
|
8718
9172
|
{
|
|
8719
9173
|
variant: "outline",
|
|
@@ -8723,31 +9177,31 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8723
9177
|
children: "Ir para simulados"
|
|
8724
9178
|
}
|
|
8725
9179
|
),
|
|
8726
|
-
/* @__PURE__ */ (0,
|
|
9180
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Button_default, { className: "w-full", onClick: onDetailResult, children: "Detalhar resultado" })
|
|
8727
9181
|
] })
|
|
8728
9182
|
] })
|
|
8729
9183
|
}
|
|
8730
9184
|
),
|
|
8731
|
-
/* @__PURE__ */ (0,
|
|
9185
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8732
9186
|
Modal_default,
|
|
8733
9187
|
{
|
|
8734
9188
|
isOpen: modalNavigateOpen,
|
|
8735
9189
|
onClose: () => setModalNavigateOpen(false),
|
|
8736
9190
|
title: "Quest\xF5es",
|
|
8737
9191
|
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,
|
|
9192
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col w-full h-full", children: [
|
|
9193
|
+
/* @__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: [
|
|
9194
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-lg", children: "Filtrar por" }),
|
|
9195
|
+
/* @__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: [
|
|
9196
|
+
/* @__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" }) }),
|
|
9197
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(SelectContent, { children: [
|
|
9198
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "all", children: "Todas" }),
|
|
9199
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "unanswered", children: "Em branco" }),
|
|
9200
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectItem, { value: "answered", children: "Respondidas" })
|
|
8747
9201
|
] })
|
|
8748
9202
|
] }) })
|
|
8749
9203
|
] }),
|
|
8750
|
-
/* @__PURE__ */ (0,
|
|
9204
|
+
/* @__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
9205
|
QuizQuestionList,
|
|
8752
9206
|
{
|
|
8753
9207
|
filterType,
|
|
@@ -8756,29 +9210,39 @@ var QuizFooter = (0, import_react25.forwardRef)(
|
|
|
8756
9210
|
) })
|
|
8757
9211
|
] })
|
|
8758
9212
|
}
|
|
9213
|
+
),
|
|
9214
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
9215
|
+
Modal_default,
|
|
9216
|
+
{
|
|
9217
|
+
isOpen: modalResolutionOpen,
|
|
9218
|
+
onClose: () => setModalResolutionOpen(false),
|
|
9219
|
+
title: "Resolu\xE7\xE3o",
|
|
9220
|
+
size: "lg",
|
|
9221
|
+
children: currentQuestion?.answerKey
|
|
9222
|
+
}
|
|
8759
9223
|
)
|
|
8760
9224
|
] });
|
|
8761
9225
|
}
|
|
8762
9226
|
);
|
|
8763
|
-
var QuizResultHeaderTitle = (0,
|
|
9227
|
+
var QuizResultHeaderTitle = (0, import_react26.forwardRef)(({ className, ...props }, ref) => {
|
|
8764
9228
|
const { bySimulated } = useQuizStore();
|
|
8765
|
-
return /* @__PURE__ */ (0,
|
|
9229
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8766
9230
|
"div",
|
|
8767
9231
|
{
|
|
8768
9232
|
ref,
|
|
8769
9233
|
className: cn("flex flex-row pt-4 justify-between", className),
|
|
8770
9234
|
...props,
|
|
8771
9235
|
children: [
|
|
8772
|
-
/* @__PURE__ */ (0,
|
|
8773
|
-
bySimulated && /* @__PURE__ */ (0,
|
|
9236
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-text-950 font-bold text-2xl", children: "Resultado" }),
|
|
9237
|
+
bySimulated && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Badge_default, { variant: "solid", action: "info", children: bySimulated.category })
|
|
8774
9238
|
]
|
|
8775
9239
|
}
|
|
8776
9240
|
);
|
|
8777
9241
|
});
|
|
8778
|
-
var QuizResultTitle = (0,
|
|
9242
|
+
var QuizResultTitle = (0, import_react26.forwardRef)(({ className, ...props }, ref) => {
|
|
8779
9243
|
const { getQuizTitle } = useQuizStore();
|
|
8780
9244
|
const quizTitle = getQuizTitle();
|
|
8781
|
-
return /* @__PURE__ */ (0,
|
|
9245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8782
9246
|
"p",
|
|
8783
9247
|
{
|
|
8784
9248
|
className: cn("pt-6 pb-4 text-text-950 font-bold text-lg", className),
|
|
@@ -8788,12 +9252,12 @@ var QuizResultTitle = (0, import_react25.forwardRef)(({ className, ...props }, r
|
|
|
8788
9252
|
}
|
|
8789
9253
|
);
|
|
8790
9254
|
});
|
|
8791
|
-
var QuizResultPerformance = (0,
|
|
9255
|
+
var QuizResultPerformance = (0, import_react26.forwardRef)(
|
|
8792
9256
|
({ ...props }, ref) => {
|
|
8793
9257
|
const {
|
|
8794
9258
|
getTotalQuestions,
|
|
8795
9259
|
timeElapsed,
|
|
8796
|
-
formatTime,
|
|
9260
|
+
formatTime: formatTime2,
|
|
8797
9261
|
bySimulated,
|
|
8798
9262
|
byActivity,
|
|
8799
9263
|
byQuestionary,
|
|
@@ -8834,15 +9298,15 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8834
9298
|
});
|
|
8835
9299
|
}
|
|
8836
9300
|
const percentage = totalQuestions > 0 ? Math.round(correctAnswers / totalQuestions * 100) : 0;
|
|
8837
|
-
return /* @__PURE__ */ (0,
|
|
9301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
8838
9302
|
"div",
|
|
8839
9303
|
{
|
|
8840
9304
|
className: "flex flex-row gap-6 p-6 rounded-xl bg-background justify-between",
|
|
8841
9305
|
ref,
|
|
8842
9306
|
...props,
|
|
8843
9307
|
children: [
|
|
8844
|
-
/* @__PURE__ */ (0,
|
|
8845
|
-
/* @__PURE__ */ (0,
|
|
9308
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "relative", children: [
|
|
9309
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8846
9310
|
ProgressCircle_default,
|
|
8847
9311
|
{
|
|
8848
9312
|
size: "medium",
|
|
@@ -8852,21 +9316,21 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8852
9316
|
label: ""
|
|
8853
9317
|
}
|
|
8854
9318
|
),
|
|
8855
|
-
/* @__PURE__ */ (0,
|
|
8856
|
-
/* @__PURE__ */ (0,
|
|
8857
|
-
/* @__PURE__ */ (0,
|
|
8858
|
-
/* @__PURE__ */ (0,
|
|
9319
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center", children: [
|
|
9320
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-1 mb-1", children: [
|
|
9321
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.Clock, { size: 12, weight: "regular", className: "text-text-800" }),
|
|
9322
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-2xs font-medium text-text-800", children: formatTime2(timeElapsed) })
|
|
8859
9323
|
] }),
|
|
8860
|
-
/* @__PURE__ */ (0,
|
|
9324
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "text-2xl font-medium text-text-800 leading-7", children: [
|
|
8861
9325
|
correctAnswers,
|
|
8862
9326
|
" de ",
|
|
8863
9327
|
totalQuestions
|
|
8864
9328
|
] }),
|
|
8865
|
-
/* @__PURE__ */ (0,
|
|
9329
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "text-2xs font-medium text-text-600 mt-1", children: "Corretas" })
|
|
8866
9330
|
] })
|
|
8867
9331
|
] }),
|
|
8868
|
-
/* @__PURE__ */ (0,
|
|
8869
|
-
/* @__PURE__ */ (0,
|
|
9332
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-4 w-full", children: [
|
|
9333
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8870
9334
|
ProgressBar_default,
|
|
8871
9335
|
{
|
|
8872
9336
|
className: "w-full",
|
|
@@ -8880,7 +9344,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8880
9344
|
percentageClassName: "text-xs font-medium leading-[14px] text-right"
|
|
8881
9345
|
}
|
|
8882
9346
|
),
|
|
8883
|
-
/* @__PURE__ */ (0,
|
|
9347
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8884
9348
|
ProgressBar_default,
|
|
8885
9349
|
{
|
|
8886
9350
|
className: "w-full",
|
|
@@ -8894,7 +9358,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8894
9358
|
percentageClassName: "text-xs font-medium leading-[14px] text-right"
|
|
8895
9359
|
}
|
|
8896
9360
|
),
|
|
8897
|
-
/* @__PURE__ */ (0,
|
|
9361
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8898
9362
|
ProgressBar_default,
|
|
8899
9363
|
{
|
|
8900
9364
|
className: "w-full",
|
|
@@ -8914,7 +9378,7 @@ var QuizResultPerformance = (0, import_react25.forwardRef)(
|
|
|
8914
9378
|
);
|
|
8915
9379
|
}
|
|
8916
9380
|
);
|
|
8917
|
-
var QuizListResult = (0,
|
|
9381
|
+
var QuizListResult = (0, import_react26.forwardRef)(({ className, onSubjectClick, ...props }, ref) => {
|
|
8918
9382
|
const {
|
|
8919
9383
|
getQuestionsGroupedBySubject,
|
|
8920
9384
|
isQuestionAnswered,
|
|
@@ -8943,9 +9407,9 @@ var QuizListResult = (0, import_react25.forwardRef)(({ className, onSubjectClick
|
|
|
8943
9407
|
};
|
|
8944
9408
|
}
|
|
8945
9409
|
);
|
|
8946
|
-
return /* @__PURE__ */ (0,
|
|
8947
|
-
/* @__PURE__ */ (0,
|
|
8948
|
-
/* @__PURE__ */ (0,
|
|
9410
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { ref, className, ...props, children: [
|
|
9411
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "pt-6 pb-4 text-text-950 font-bold text-lg", children: "Mat\xE9rias" }),
|
|
9412
|
+
/* @__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
9413
|
CardResults,
|
|
8950
9414
|
{
|
|
8951
9415
|
onClick: () => onSubjectClick?.(subject.subject),
|
|
@@ -8953,7 +9417,7 @@ var QuizListResult = (0, import_react25.forwardRef)(({ className, onSubjectClick
|
|
|
8953
9417
|
header: subject.subject,
|
|
8954
9418
|
correct_answers: subject.correct,
|
|
8955
9419
|
incorrect_answers: subject.incorrect,
|
|
8956
|
-
icon: /* @__PURE__ */ (0,
|
|
9420
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_phosphor_react19.Book, { size: 20 }),
|
|
8957
9421
|
direction: "row"
|
|
8958
9422
|
}
|
|
8959
9423
|
) }, subject.subject)) })
|
|
@@ -8970,13 +9434,13 @@ var QuizListResultByMateria = ({
|
|
|
8970
9434
|
} = useQuizStore();
|
|
8971
9435
|
const groupedQuestions = getQuestionsGroupedBySubject();
|
|
8972
9436
|
const answeredQuestions = groupedQuestions[subject] || [];
|
|
8973
|
-
return /* @__PURE__ */ (0,
|
|
8974
|
-
/* @__PURE__ */ (0,
|
|
8975
|
-
/* @__PURE__ */ (0,
|
|
8976
|
-
/* @__PURE__ */ (0,
|
|
8977
|
-
/* @__PURE__ */ (0,
|
|
9437
|
+
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: [
|
|
9438
|
+
/* @__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 }) }),
|
|
9439
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("section", { className: "flex flex-col ", children: [
|
|
9440
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "pt-6 pb-4 text-text-950 font-bold text-lg", children: "Resultado das quest\xF5es" }),
|
|
9441
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ul", { className: "flex flex-col gap-2 pt-4", children: answeredQuestions.map((question) => {
|
|
8978
9442
|
const questionIndex = getQuestionIndex(question.id);
|
|
8979
|
-
return /* @__PURE__ */ (0,
|
|
9443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
8980
9444
|
CardStatus,
|
|
8981
9445
|
{
|
|
8982
9446
|
className: "max-w-full",
|
|
@@ -9089,6 +9553,7 @@ var QuizListResultByMateria = ({
|
|
|
9089
9553
|
TextArea,
|
|
9090
9554
|
Toast,
|
|
9091
9555
|
Toaster,
|
|
9556
|
+
VideoPlayer,
|
|
9092
9557
|
createZustandAuthAdapter,
|
|
9093
9558
|
getRootDomain,
|
|
9094
9559
|
getStatusBadge,
|