@burdenoff/microfe-technospam 2026.1102.2 → 2026.1102.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/generated/global-types.d.ts +307 -41
  2. package/dist/generated/global-types.d.ts.map +1 -1
  3. package/dist/generated/wspace-types.d.ts +1730 -8
  4. package/dist/generated/wspace-types.d.ts.map +1 -1
  5. package/dist/stories/fixtures/technospamFixtures.d.ts.map +1 -1
  6. package/dist/technospam/TechnoSpamRoot.d.ts.map +1 -1
  7. package/dist/technospam/TechnoSpamRoot.js +187 -178
  8. package/dist/technospam/TechnoSpamRoot.js.map +1 -1
  9. package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -1
  10. package/dist/technospam/TechnoSpamRoutes.js +32 -28
  11. package/dist/technospam/TechnoSpamRoutes.js.map +1 -1
  12. package/dist/technospam/api/assessmentApi.d.ts +183 -0
  13. package/dist/technospam/api/assessmentApi.d.ts.map +1 -0
  14. package/dist/technospam/api/assessmentApi.js +278 -0
  15. package/dist/technospam/api/assessmentApi.js.map +1 -0
  16. package/dist/technospam/api/technospamApi.js +141 -141
  17. package/dist/technospam/api/technospamApi.js.map +1 -1
  18. package/dist/technospam/components/CourseAssessments.d.ts +9 -0
  19. package/dist/technospam/components/CourseAssessments.d.ts.map +1 -0
  20. package/dist/technospam/components/CourseAssessments.js +66 -0
  21. package/dist/technospam/components/CourseAssessments.js.map +1 -0
  22. package/dist/technospam/components/MediaCover.js +2 -2
  23. package/dist/technospam/components/MediaCover.js.map +1 -1
  24. package/dist/technospam/components/MobileSectionTabs.d.ts +9 -0
  25. package/dist/technospam/components/MobileSectionTabs.d.ts.map +1 -0
  26. package/dist/technospam/components/MobileSectionTabs.js +43 -0
  27. package/dist/technospam/components/MobileSectionTabs.js.map +1 -0
  28. package/dist/technospam/components/PageLayout.d.ts +7 -1
  29. package/dist/technospam/components/PageLayout.d.ts.map +1 -1
  30. package/dist/technospam/components/PageLayout.js +40 -28
  31. package/dist/technospam/components/PageLayout.js.map +1 -1
  32. package/dist/technospam/components/StatusBadge.d.ts.map +1 -1
  33. package/dist/technospam/components/StatusBadge.js +8 -1
  34. package/dist/technospam/components/StatusBadge.js.map +1 -1
  35. package/dist/technospam/components/admin/AssessmentsAdminTab.d.ts +7 -0
  36. package/dist/technospam/components/admin/AssessmentsAdminTab.d.ts.map +1 -0
  37. package/dist/technospam/components/admin/AssessmentsAdminTab.js +421 -0
  38. package/dist/technospam/components/admin/AssessmentsAdminTab.js.map +1 -0
  39. package/dist/technospam/components/lesson/LessonKindFields.d.ts +3 -1
  40. package/dist/technospam/components/lesson/LessonKindFields.d.ts.map +1 -1
  41. package/dist/technospam/components/lesson/LessonKindFields.js +2 -2
  42. package/dist/technospam/components/lesson/LessonKindFields.js.map +1 -1
  43. package/dist/technospam/components/lesson/SaveCourseOffline.js +6 -6
  44. package/dist/technospam/hooks/useAssessmentIntegrity.d.ts +29 -0
  45. package/dist/technospam/hooks/useAssessmentIntegrity.d.ts.map +1 -0
  46. package/dist/technospam/hooks/useAssessmentIntegrity.js +57 -0
  47. package/dist/technospam/hooks/useAssessmentIntegrity.js.map +1 -0
  48. package/dist/technospam/hooks/usePhoneLayout.d.ts +18 -0
  49. package/dist/technospam/hooks/usePhoneLayout.d.ts.map +1 -0
  50. package/dist/technospam/hooks/usePhoneLayout.js +14 -0
  51. package/dist/technospam/hooks/usePhoneLayout.js.map +1 -0
  52. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -1
  53. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +365 -360
  54. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
  55. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -1
  56. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +89 -87
  57. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
  58. package/dist/technospam/pages/CoursesAssessmentPagePage.d.ts +9 -0
  59. package/dist/technospam/pages/CoursesAssessmentPagePage.d.ts.map +1 -0
  60. package/dist/technospam/pages/CoursesAssessmentPagePage.js +464 -0
  61. package/dist/technospam/pages/CoursesAssessmentPagePage.js.map +1 -0
  62. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -1
  63. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +213 -211
  64. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
  65. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -1
  66. package/dist/technospam/pages/CoursesCoursesPagePage.js +117 -81
  67. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
  68. package/dist/technospam/pages/CoursesMyLearningPagePage.js +1 -1
  69. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
  70. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  71. package/dist/technospam/pages/DashboardDashboardPagePage.js +21 -17
  72. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
  73. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +3 -3
  74. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -1
  75. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +4 -4
  76. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
  77. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -1
  78. package/dist/technospam/pages/MentorshipMentorsPagePage.js +6 -4
  79. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
  80. package/dist/technospam/pages/MentorshipSessionsPagePage.js +1 -1
  81. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
  82. package/dist/technospam/types/index.d.ts +7 -0
  83. package/dist/technospam/types/index.d.ts.map +1 -1
  84. package/dist/technospam/utils/assessment.d.ts +64 -0
  85. package/dist/technospam/utils/assessment.d.ts.map +1 -0
  86. package/dist/technospam/utils/assessment.js +122 -0
  87. package/dist/technospam/utils/assessment.js.map +1 -0
  88. package/dist/technospam/utils/mobileTabs.d.ts +45 -0
  89. package/dist/technospam/utils/mobileTabs.d.ts.map +1 -0
  90. package/dist/technospam/utils/mobileTabs.js +70 -0
  91. package/dist/technospam/utils/mobileTabs.js.map +1 -0
  92. package/dist/test/matchMedia.d.ts +6 -0
  93. package/dist/test/matchMedia.d.ts.map +1 -0
  94. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TechnoSpamRoot.js","names":[],"sources":["../../src/technospam/TechnoSpamRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n LayoutDashboard,\n Home,\n ShieldCheck,\n BarChart3,\n Code,\n BookOpen,\n Trophy,\n Users,\n Bell,\n CalendarDays,\n HeadphonesIcon,\n Settings,\n LogIn,\n UserPlus,\n KeyRound,\n ScrollText,\n Shield,\n Cookie,\n TrendingUp,\n FileText,\n Target,\n Calendar,\n Star,\n ClipboardList,\n Briefcase,\n Award,\n User,\n BellRing,\n} from 'lucide-react';\nimport { TechnoSpamProvider } from './providers/TechnoSpamProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, TechnoSpamRootProps } from './types';\nimport { TechnoSpamRoutes } from './TechnoSpamRoutes';\nimport { tWithFallback } from './utils/i18n';\nimport { joinPath } from './utils/navigation';\n\nexport const TechnoSpamRoot: FC<TechnoSpamRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => tWithFallback(t, key, fallback);\n\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItem: NavItem = {\n id: 'technospam',\n label: tr('technospam.nav.root', 'TechnoSpam'),\n path: basePath,\n icon: <Code size={20} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'technospam-home',\n label: tr('technospam.nav.home', 'Home'),\n path: joinPath(basePath, 'home'),\n icon: <Home size={16} />,\n order: 0,\n },\n {\n id: 'technospam-dashboard-section',\n label: tr('technospam.nav.dashboard.section', 'Dashboard'),\n path: joinPath(basePath, 'dashboard'),\n icon: <LayoutDashboard size={16} />,\n order: 1,\n children: [\n {\n id: 'technospam-dashboard-dashboard-page',\n label: tr('technospam.nav.dashboard.overview', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n },\n ],\n },\n {\n id: 'technospam-admin',\n label: tr('technospam.nav.admin.section', 'Admin'),\n path: joinPath(basePath, 'admin'),\n icon: <ShieldCheck size={16} />,\n order: 2,\n children: [\n {\n id: 'technospam-admin-admin-dashboard-page',\n label: tr('technospam.nav.admin.dashboard', 'Admin Dashboard'),\n path: joinPath(basePath, 'admin/admin-dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n },\n {\n id: 'technospam-admin-audit-reports-page',\n label: tr('technospam.nav.admin.auditReports', 'Audit Reports'),\n path: joinPath(basePath, 'admin/audit-reports-page'),\n icon: <ClipboardList size={16} />,\n },\n ],\n },\n {\n id: 'technospam-analytics',\n label: tr('technospam.nav.analytics.section', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={16} />,\n order: 3,\n children: [\n {\n id: 'technospam-analytics-analytics-page',\n label: tr('technospam.nav.analytics.overview', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n icon: <TrendingUp size={16} />,\n },\n {\n id: 'technospam-analytics-progress-page',\n label: tr('technospam.nav.analytics.progress', 'Progress'),\n path: joinPath(basePath, 'analytics/progress-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'technospam-analytics-achievements-page',\n label: tr('technospam.nav.analytics.achievements', 'Achievements'),\n path: joinPath(basePath, 'analytics/achievements-page'),\n icon: <Award size={16} />,\n },\n {\n id: 'technospam-analytics-reports-page',\n label: tr('technospam.nav.analytics.reports', 'Reports'),\n path: joinPath(basePath, 'analytics/reports-page'),\n icon: <FileText size={16} />,\n },\n ],\n },\n {\n id: 'technospam-applications',\n label: tr('technospam.nav.applications.section', 'Applications'),\n path: joinPath(basePath, 'applications'),\n icon: <Code size={16} />,\n order: 4,\n children: [\n {\n id: 'technospam-applications-problems-page',\n label: tr('technospam.nav.applications.problems', 'Problems'),\n path: joinPath(basePath, 'applications/problems-page'),\n icon: <Code size={16} />,\n },\n {\n id: 'technospam-applications-problem-details-page',\n label: tr('technospam.nav.applications.problemDetails', 'Problem Details'),\n path: joinPath(basePath, 'applications/problem-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-applications-solutions-page',\n label: tr('technospam.nav.applications.solutions', 'Solutions'),\n path: joinPath(basePath, 'applications/solutions-page'),\n icon: <ClipboardList size={16} />,\n },\n {\n id: 'technospam-applications-portfolio-page',\n label: tr('technospam.nav.applications.portfolio', 'Portfolio'),\n path: joinPath(basePath, 'applications/portfolio-page'),\n icon: <Briefcase size={16} />,\n },\n ],\n },\n {\n id: 'technospam-courses',\n label: tr('technospam.nav.courses.section', 'Courses'),\n path: joinPath(basePath, 'courses'),\n icon: <BookOpen size={16} />,\n order: 5,\n children: [\n {\n id: 'technospam-courses-courses-page',\n label: tr('technospam.nav.courses.browse', 'Browse Courses'),\n path: joinPath(basePath, 'courses/courses-page'),\n icon: <BookOpen size={16} />,\n },\n {\n id: 'technospam-courses-course-details-page',\n label: tr('technospam.nav.courses.courseDetails', 'Course Details'),\n path: joinPath(basePath, 'courses/course-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-courses-my-learning-page',\n label: tr('technospam.nav.courses.myLearning', 'My Learning'),\n path: joinPath(basePath, 'courses/my-learning-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'technospam-courses-instructors-page',\n label: tr('technospam.nav.courses.instructors', 'Instructors'),\n path: joinPath(basePath, 'courses/instructors-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'technospam-courses-instructor-profile-page',\n label: tr('technospam.nav.courses.instructorProfile', 'Instructor Profile'),\n path: joinPath(basePath, 'courses/instructor-profile-page'),\n icon: <User size={16} />,\n },\n ],\n },\n {\n id: 'technospam-hackathons',\n label: tr('technospam.nav.hackathons.section', 'Hackathons'),\n path: joinPath(basePath, 'hackathons'),\n icon: <Trophy size={16} />,\n order: 6,\n children: [\n {\n id: 'technospam-hackathons-hackathons-page',\n label: tr('technospam.nav.hackathons.overview', 'Hackathons'),\n path: joinPath(basePath, 'hackathons/hackathons-page'),\n icon: <Trophy size={16} />,\n },\n {\n id: 'technospam-hackathons-hackathon-details-page',\n label: tr('technospam.nav.hackathons.details', 'Hackathon Details'),\n path: joinPath(basePath, 'hackathons/hackathon-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-hackathons-events-page',\n label: tr('technospam.nav.hackathons.events', 'Events'),\n path: joinPath(basePath, 'hackathons/events-page'),\n icon: <Calendar size={16} />,\n },\n {\n id: 'technospam-hackathons-teams-page',\n label: tr('technospam.nav.hackathons.teams', 'Teams'),\n path: joinPath(basePath, 'hackathons/teams-page'),\n icon: <Users size={16} />,\n },\n ],\n },\n {\n id: 'technospam-mentorship',\n label: tr('technospam.nav.mentorship.section', 'Mentorship'),\n path: joinPath(basePath, 'mentorship'),\n icon: <Users size={16} />,\n order: 8,\n children: [\n {\n id: 'technospam-mentorship-mentorship-page',\n label: tr('technospam.nav.mentorship.overview', 'Mentorship'),\n path: joinPath(basePath, 'mentorship/mentorship-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'technospam-mentorship-mentors-page',\n label: tr('technospam.nav.mentorship.mentors', 'Mentors'),\n path: joinPath(basePath, 'mentorship/mentors-page'),\n icon: <Star size={16} />,\n },\n {\n id: 'technospam-mentorship-mentor-profile-page',\n label: tr('technospam.nav.mentorship.mentorProfile', 'Mentor Profile'),\n path: joinPath(basePath, 'mentorship/mentor-profile-page'),\n icon: <User size={16} />,\n },\n {\n id: 'technospam-mentorship-sessions-page',\n label: tr('technospam.nav.mentorship.sessions', 'Sessions'),\n path: joinPath(basePath, 'mentorship/sessions-page'),\n icon: <CalendarDays size={16} />,\n },\n {\n id: 'technospam-mentorship-bookings-page',\n label: tr('technospam.nav.mentorship.bookings', 'Bookings'),\n path: joinPath(basePath, 'mentorship/bookings-page'),\n icon: <Calendar size={16} />,\n },\n ],\n },\n {\n id: 'technospam-notifications',\n label: tr('technospam.nav.notifications.section', 'Notifications'),\n path: joinPath(basePath, 'notifications'),\n icon: <Bell size={16} />,\n order: 9,\n children: [\n {\n id: 'technospam-notifications-notifications-page',\n label: tr('technospam.nav.notifications.overview', 'Notifications'),\n path: joinPath(basePath, 'notifications/notifications-page'),\n icon: <BellRing size={16} />,\n },\n ],\n },\n /*\n * BOFF-4415: a real, deterministic (non-AI) plan generator now\n * lives at study-planner/study-planner-page — see\n * StudyPlannerStudyPlannerPagePage's honesty note. Only that one\n * child is registered; the richer standalone views the original\n * scaffolding anticipated (a separate plans list, plan details,\n * plan edit, learning paths, goals) are consolidated into that\n * single page for this pass and are not separately built, so no\n * nav item points at them.\n */\n {\n id: 'technospam-study-planner',\n label: tr('technospam.nav.studyPlanner.section', 'Study Planner'),\n path: joinPath(basePath, 'study-planner'),\n icon: <CalendarDays size={16} />,\n order: 11,\n children: [\n {\n id: 'technospam-study-planner-study-planner-page',\n label: tr('technospam.nav.studyPlanner.overview', 'Study Planner'),\n path: joinPath(basePath, 'study-planner/study-planner-page'),\n icon: <CalendarDays size={16} />,\n },\n ],\n },\n {\n id: 'technospam-support',\n label: tr('technospam.nav.support.section', 'Support'),\n path: joinPath(basePath, 'support'),\n icon: <HeadphonesIcon size={16} />,\n order: 12,\n children: [\n {\n id: 'technospam-support-support-page',\n label: tr('technospam.nav.support.overview', 'Support'),\n path: joinPath(basePath, 'support/support-page'),\n icon: <HeadphonesIcon size={16} />,\n },\n ],\n },\n {\n id: 'technospam-settings',\n label: tr('technospam.nav.settings.section', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={16} />,\n order: 13,\n children: [\n {\n id: 'technospam-settings-settings-page',\n label: tr('technospam.nav.settings.general', 'General Settings'),\n path: joinPath(basePath, 'settings/settings-page'),\n icon: <Settings size={16} />,\n },\n {\n id: 'technospam-settings-profile-settings-page',\n label: tr('technospam.nav.settings.profile', 'Profile Settings'),\n path: joinPath(basePath, 'settings/profile-settings-page'),\n icon: <User size={16} />,\n },\n {\n id: 'technospam-settings-notification-settings-page',\n label: tr('technospam.nav.settings.notifications', 'Notification Settings'),\n path: joinPath(basePath, 'settings/notification-settings-page'),\n icon: <BellRing size={16} />,\n },\n ],\n },\n {\n id: 'technospam-auth',\n label: tr('technospam.nav.auth.section', 'Auth'),\n path: joinPath(basePath, 'auth'),\n icon: <LogIn size={16} />,\n order: 14,\n children: [\n {\n id: 'technospam-auth-login-page',\n label: tr('technospam.nav.auth.login', 'Login'),\n path: joinPath(basePath, 'auth/login-page'),\n icon: <LogIn size={16} />,\n },\n {\n id: 'technospam-auth-register-page',\n label: tr('technospam.nav.auth.register', 'Register'),\n path: joinPath(basePath, 'auth/register-page'),\n icon: <UserPlus size={16} />,\n },\n {\n id: 'technospam-auth-forgot-password-page',\n label: tr('technospam.nav.auth.forgotPassword', 'Forgot Password'),\n path: joinPath(basePath, 'auth/forgot-password-page'),\n icon: <KeyRound size={16} />,\n },\n ],\n },\n {\n id: 'technospam-legal',\n label: tr('technospam.nav.legal.section', 'Legal'),\n path: joinPath(basePath, 'legal'),\n icon: <ScrollText size={16} />,\n order: 15,\n children: [\n {\n id: 'technospam-legal-terms-page',\n label: tr('technospam.nav.legal.terms', 'Terms of Service'),\n path: joinPath(basePath, 'legal/terms-page'),\n icon: <ScrollText size={16} />,\n },\n {\n id: 'technospam-legal-privacy-policy-page',\n label: tr('technospam.nav.legal.privacy', 'Privacy Policy'),\n path: joinPath(basePath, 'legal/privacy-policy-page'),\n icon: <Shield size={16} />,\n },\n {\n id: 'technospam-legal-cookies-page',\n label: tr('technospam.nav.legal.cookies', 'Cookie Policy'),\n path: joinPath(basePath, 'legal/cookies-page'),\n icon: <Cookie size={16} />,\n },\n ],\n },\n ],\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, t]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n return registerFooterItems([\n {\n id: 'technospam-status',\n label: tr('technospam.footer.ready', 'TechnoSpam Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <TechnoSpamProvider {...props}>\n <TechnoSpamRoutes />\n </TechnoSpamProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"TechnoSpamRoot.js","names":[],"sources":["../../src/technospam/TechnoSpamRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n LayoutDashboard,\n Home,\n ShieldCheck,\n BarChart3,\n Code,\n BookOpen,\n Trophy,\n Users,\n Bell,\n CalendarDays,\n HeadphonesIcon,\n Settings,\n LogIn,\n UserPlus,\n KeyRound,\n ScrollText,\n Shield,\n Cookie,\n TrendingUp,\n FileText,\n Target,\n Calendar,\n Star,\n ClipboardList,\n Briefcase,\n Award,\n User,\n BellRing,\n} from 'lucide-react';\nimport { TechnoSpamProvider } from './providers/TechnoSpamProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, TechnoSpamRootProps } from './types';\nimport { TechnoSpamRoutes } from './TechnoSpamRoutes';\nimport { useMobileTabBarVisible } from '@burdenoff/fe-libs/chrome/mobileTabBar/useMobileTabBarVisible';\nimport { tWithFallback } from './utils/i18n';\nimport { joinPath } from './utils/navigation';\nimport { withoutTabCoveredItems } from './utils/mobileTabs';\n\nexport const TechnoSpamRoot: FC<TechnoSpamRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => tWithFallback(t, key, fallback);\n // True only in the installed app (Capacitor / standalone PWA) on a phone-width\n // viewport, where the shell swaps its sidebar for the bottom tab bar.\n const nativeChrome = useMobileTabBarVisible();\n\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItem: NavItem = {\n id: 'technospam',\n label: tr('technospam.nav.root', 'TechnoSpam'),\n path: basePath,\n icon: <Code size={20} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'technospam-home',\n label: tr('technospam.nav.home', 'Home'),\n path: joinPath(basePath, 'home'),\n icon: <Home size={16} />,\n order: 0,\n },\n {\n id: 'technospam-dashboard-section',\n label: tr('technospam.nav.dashboard.section', 'Dashboard'),\n path: joinPath(basePath, 'dashboard'),\n icon: <LayoutDashboard size={16} />,\n order: 1,\n children: [\n {\n id: 'technospam-dashboard-dashboard-page',\n label: tr('technospam.nav.dashboard.overview', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n },\n ],\n },\n {\n id: 'technospam-admin',\n label: tr('technospam.nav.admin.section', 'Admin'),\n path: joinPath(basePath, 'admin'),\n icon: <ShieldCheck size={16} />,\n order: 2,\n children: [\n {\n id: 'technospam-admin-admin-dashboard-page',\n label: tr('technospam.nav.admin.dashboard', 'Admin Dashboard'),\n path: joinPath(basePath, 'admin/admin-dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n },\n {\n id: 'technospam-admin-audit-reports-page',\n label: tr('technospam.nav.admin.auditReports', 'Audit Reports'),\n path: joinPath(basePath, 'admin/audit-reports-page'),\n icon: <ClipboardList size={16} />,\n },\n ],\n },\n {\n id: 'technospam-analytics',\n label: tr('technospam.nav.analytics.section', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={16} />,\n order: 3,\n children: [\n {\n id: 'technospam-analytics-analytics-page',\n label: tr('technospam.nav.analytics.overview', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n icon: <TrendingUp size={16} />,\n },\n {\n id: 'technospam-analytics-progress-page',\n label: tr('technospam.nav.analytics.progress', 'Progress'),\n path: joinPath(basePath, 'analytics/progress-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'technospam-analytics-achievements-page',\n label: tr('technospam.nav.analytics.achievements', 'Achievements'),\n path: joinPath(basePath, 'analytics/achievements-page'),\n icon: <Award size={16} />,\n },\n {\n id: 'technospam-analytics-reports-page',\n label: tr('technospam.nav.analytics.reports', 'Reports'),\n path: joinPath(basePath, 'analytics/reports-page'),\n icon: <FileText size={16} />,\n },\n ],\n },\n {\n id: 'technospam-applications',\n label: tr('technospam.nav.applications.section', 'Applications'),\n path: joinPath(basePath, 'applications'),\n icon: <Code size={16} />,\n order: 4,\n children: [\n {\n id: 'technospam-applications-problems-page',\n label: tr('technospam.nav.applications.problems', 'Problems'),\n path: joinPath(basePath, 'applications/problems-page'),\n icon: <Code size={16} />,\n },\n {\n id: 'technospam-applications-problem-details-page',\n label: tr('technospam.nav.applications.problemDetails', 'Problem Details'),\n path: joinPath(basePath, 'applications/problem-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-applications-solutions-page',\n label: tr('technospam.nav.applications.solutions', 'Solutions'),\n path: joinPath(basePath, 'applications/solutions-page'),\n icon: <ClipboardList size={16} />,\n },\n {\n id: 'technospam-applications-portfolio-page',\n label: tr('technospam.nav.applications.portfolio', 'Portfolio'),\n path: joinPath(basePath, 'applications/portfolio-page'),\n icon: <Briefcase size={16} />,\n },\n ],\n },\n {\n id: 'technospam-courses',\n label: tr('technospam.nav.courses.section', 'Courses'),\n path: joinPath(basePath, 'courses'),\n icon: <BookOpen size={16} />,\n order: 5,\n children: [\n {\n id: 'technospam-courses-courses-page',\n label: tr('technospam.nav.courses.browse', 'Browse Courses'),\n path: joinPath(basePath, 'courses/courses-page'),\n icon: <BookOpen size={16} />,\n },\n {\n id: 'technospam-courses-course-details-page',\n label: tr('technospam.nav.courses.courseDetails', 'Course Details'),\n path: joinPath(basePath, 'courses/course-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-courses-my-learning-page',\n label: tr('technospam.nav.courses.myLearning', 'My Learning'),\n path: joinPath(basePath, 'courses/my-learning-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'technospam-courses-instructors-page',\n label: tr('technospam.nav.courses.instructors', 'Instructors'),\n path: joinPath(basePath, 'courses/instructors-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'technospam-courses-instructor-profile-page',\n label: tr('technospam.nav.courses.instructorProfile', 'Instructor Profile'),\n path: joinPath(basePath, 'courses/instructor-profile-page'),\n icon: <User size={16} />,\n },\n ],\n },\n {\n id: 'technospam-hackathons',\n label: tr('technospam.nav.hackathons.section', 'Hackathons'),\n path: joinPath(basePath, 'hackathons'),\n icon: <Trophy size={16} />,\n order: 6,\n children: [\n {\n id: 'technospam-hackathons-hackathons-page',\n label: tr('technospam.nav.hackathons.overview', 'Hackathons'),\n path: joinPath(basePath, 'hackathons/hackathons-page'),\n icon: <Trophy size={16} />,\n },\n {\n id: 'technospam-hackathons-hackathon-details-page',\n label: tr('technospam.nav.hackathons.details', 'Hackathon Details'),\n path: joinPath(basePath, 'hackathons/hackathon-details-page'),\n icon: <FileText size={16} />,\n },\n {\n id: 'technospam-hackathons-events-page',\n label: tr('technospam.nav.hackathons.events', 'Events'),\n path: joinPath(basePath, 'hackathons/events-page'),\n icon: <Calendar size={16} />,\n },\n {\n id: 'technospam-hackathons-teams-page',\n label: tr('technospam.nav.hackathons.teams', 'Teams'),\n path: joinPath(basePath, 'hackathons/teams-page'),\n icon: <Users size={16} />,\n },\n ],\n },\n {\n id: 'technospam-mentorship',\n label: tr('technospam.nav.mentorship.section', 'Mentorship'),\n path: joinPath(basePath, 'mentorship'),\n icon: <Users size={16} />,\n order: 8,\n children: [\n {\n id: 'technospam-mentorship-mentorship-page',\n label: tr('technospam.nav.mentorship.overview', 'Mentorship'),\n path: joinPath(basePath, 'mentorship/mentorship-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'technospam-mentorship-mentors-page',\n label: tr('technospam.nav.mentorship.mentors', 'Mentors'),\n path: joinPath(basePath, 'mentorship/mentors-page'),\n icon: <Star size={16} />,\n },\n {\n id: 'technospam-mentorship-mentor-profile-page',\n label: tr('technospam.nav.mentorship.mentorProfile', 'Mentor Profile'),\n path: joinPath(basePath, 'mentorship/mentor-profile-page'),\n icon: <User size={16} />,\n },\n {\n id: 'technospam-mentorship-sessions-page',\n label: tr('technospam.nav.mentorship.sessions', 'Sessions'),\n path: joinPath(basePath, 'mentorship/sessions-page'),\n icon: <CalendarDays size={16} />,\n },\n {\n id: 'technospam-mentorship-bookings-page',\n label: tr('technospam.nav.mentorship.bookings', 'Bookings'),\n path: joinPath(basePath, 'mentorship/bookings-page'),\n icon: <Calendar size={16} />,\n },\n ],\n },\n {\n id: 'technospam-notifications',\n label: tr('technospam.nav.notifications.section', 'Notifications'),\n path: joinPath(basePath, 'notifications'),\n icon: <Bell size={16} />,\n order: 9,\n children: [\n {\n id: 'technospam-notifications-notifications-page',\n label: tr('technospam.nav.notifications.overview', 'Notifications'),\n path: joinPath(basePath, 'notifications/notifications-page'),\n icon: <BellRing size={16} />,\n },\n ],\n },\n /*\n * BOFF-4415: a real, deterministic (non-AI) plan generator now\n * lives at study-planner/study-planner-page — see\n * StudyPlannerStudyPlannerPagePage's honesty note. Only that one\n * child is registered; the richer standalone views the original\n * scaffolding anticipated (a separate plans list, plan details,\n * plan edit, learning paths, goals) are consolidated into that\n * single page for this pass and are not separately built, so no\n * nav item points at them.\n */\n {\n id: 'technospam-study-planner',\n label: tr('technospam.nav.studyPlanner.section', 'Study Planner'),\n path: joinPath(basePath, 'study-planner'),\n icon: <CalendarDays size={16} />,\n order: 11,\n children: [\n {\n id: 'technospam-study-planner-study-planner-page',\n label: tr('technospam.nav.studyPlanner.overview', 'Study Planner'),\n path: joinPath(basePath, 'study-planner/study-planner-page'),\n icon: <CalendarDays size={16} />,\n },\n ],\n },\n {\n id: 'technospam-support',\n label: tr('technospam.nav.support.section', 'Support'),\n path: joinPath(basePath, 'support'),\n icon: <HeadphonesIcon size={16} />,\n order: 12,\n children: [\n {\n id: 'technospam-support-support-page',\n label: tr('technospam.nav.support.overview', 'Support'),\n path: joinPath(basePath, 'support/support-page'),\n icon: <HeadphonesIcon size={16} />,\n },\n ],\n },\n {\n id: 'technospam-settings',\n label: tr('technospam.nav.settings.section', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={16} />,\n order: 13,\n children: [\n {\n id: 'technospam-settings-settings-page',\n label: tr('technospam.nav.settings.general', 'General Settings'),\n path: joinPath(basePath, 'settings/settings-page'),\n icon: <Settings size={16} />,\n },\n {\n id: 'technospam-settings-profile-settings-page',\n label: tr('technospam.nav.settings.profile', 'Profile Settings'),\n path: joinPath(basePath, 'settings/profile-settings-page'),\n icon: <User size={16} />,\n },\n {\n id: 'technospam-settings-notification-settings-page',\n label: tr('technospam.nav.settings.notifications', 'Notification Settings'),\n path: joinPath(basePath, 'settings/notification-settings-page'),\n icon: <BellRing size={16} />,\n },\n ],\n },\n {\n id: 'technospam-auth',\n label: tr('technospam.nav.auth.section', 'Auth'),\n path: joinPath(basePath, 'auth'),\n icon: <LogIn size={16} />,\n order: 14,\n children: [\n {\n id: 'technospam-auth-login-page',\n label: tr('technospam.nav.auth.login', 'Login'),\n path: joinPath(basePath, 'auth/login-page'),\n icon: <LogIn size={16} />,\n },\n {\n id: 'technospam-auth-register-page',\n label: tr('technospam.nav.auth.register', 'Register'),\n path: joinPath(basePath, 'auth/register-page'),\n icon: <UserPlus size={16} />,\n },\n {\n id: 'technospam-auth-forgot-password-page',\n label: tr('technospam.nav.auth.forgotPassword', 'Forgot Password'),\n path: joinPath(basePath, 'auth/forgot-password-page'),\n icon: <KeyRound size={16} />,\n },\n ],\n },\n {\n id: 'technospam-legal',\n label: tr('technospam.nav.legal.section', 'Legal'),\n path: joinPath(basePath, 'legal'),\n icon: <ScrollText size={16} />,\n order: 15,\n children: [\n {\n id: 'technospam-legal-terms-page',\n label: tr('technospam.nav.legal.terms', 'Terms of Service'),\n path: joinPath(basePath, 'legal/terms-page'),\n icon: <ScrollText size={16} />,\n },\n {\n id: 'technospam-legal-privacy-policy-page',\n label: tr('technospam.nav.legal.privacy', 'Privacy Policy'),\n path: joinPath(basePath, 'legal/privacy-policy-page'),\n icon: <Shield size={16} />,\n },\n {\n id: 'technospam-legal-cookies-page',\n label: tr('technospam.nav.legal.cookies', 'Cookie Policy'),\n path: joinPath(basePath, 'legal/cookies-page'),\n icon: <Cookie size={16} />,\n },\n ],\n },\n ],\n };\n\n // In the installed app the host shell's bottom tab bar owns Dashboard,\n // Courses, Practice and Mentors (registered by technospam-app with\n // `mobilePriority`). Drop those sections from the module item (which lands\n // in the shell's \"More\" sheet) and match its own path exactly, so More\n // neither repeats them nor lights up while one of the tabs is active.\n const item: NavItem = nativeChrome\n ? { ...navItem, exact: true, children: withoutTabCoveredItems(navItem.children ?? []) }\n : navItem;\n\n return registerNavItems(item);\n }, [registerNavItems, basePath, t, nativeChrome]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n return registerFooterItems([\n {\n id: 'technospam-status',\n label: tr('technospam.footer.ready', 'TechnoSpam Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <TechnoSpamProvider {...props}>\n <TechnoSpamRoutes />\n </TechnoSpamProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechnoSpamRoutes.d.ts","sourceRoot":"","sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"names":[],"mappings":"AAwJA,wBAAgB,gBAAgB,gCAqK/B"}
1
+ {"version":3,"file":"TechnoSpamRoutes.d.ts","sourceRoot":"","sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"names":[],"mappings":"AA8JA,wBAAgB,gBAAgB,gCAyK/B"}
@@ -10,8 +10,8 @@ import { Navigate as u, Route as d, Routes as f, useLocation as p } from "react-
10
10
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
11
11
  import { FeatureGate as g } from "@burdenoff/fe-libs/shared/feature-flags";
12
12
  //#region src/technospam/TechnoSpamRoutes.tsx
13
- var _ = o(() => import("./pages/DashboardDashboardPagePage.js").then((e) => ({ default: e.DashboardDashboardPagePage }))), v = o(() => import("./pages/CoursesCoursesPagePage.js").then((e) => ({ default: e.CoursesCoursesPagePage }))), y = o(() => import("./pages/CoursesCourseDetailsPagePage.js").then((e) => ({ default: e.CoursesCourseDetailsPagePage }))), b = o(() => import("./pages/CoursesLessonPlayerPagePage.js").then((e) => ({ default: e.CoursesLessonPlayerPagePage }))), x = o(() => import("./pages/CoursesMyLearningPagePage.js").then((e) => ({ default: e.CoursesMyLearningPagePage }))), S = o(() => import("./pages/ApplicationsProblemsPagePage.js").then((e) => ({ default: e.ApplicationsProblemsPagePage }))), C = o(() => import("./pages/ApplicationsProblemDetailsPagePage.js").then((e) => ({ default: e.ApplicationsProblemDetailsPagePage }))), w = o(() => import("./pages/MentorshipMentorsPagePage.js").then((e) => ({ default: e.MentorshipMentorsPagePage }))), T = o(() => import("./pages/MentorshipMentorProfilePagePage.js").then((e) => ({ default: e.MentorshipMentorProfilePagePage }))), E = o(() => import("./pages/MentorshipSessionsPagePage.js").then((e) => ({ default: e.MentorshipSessionsPagePage }))), D = o(() => import("./pages/HackathonsHackathonsPagePage.js").then((e) => ({ default: e.HackathonsHackathonsPagePage }))), O = o(() => import("./pages/HackathonsHackathonDetailsPagePage.js").then((e) => ({ default: e.HackathonsHackathonDetailsPagePage }))), k = o(() => import("./pages/AnalyticsAnalyticsPagePage.js").then((e) => ({ default: e.AnalyticsAnalyticsPagePage }))), A = o(() => import("./pages/AdminAdminDashboardPagePage.js").then((e) => ({ default: e.AdminAdminDashboardPagePage }))), j = o(() => import("./pages/StudyPlannerStudyPlannerPagePage.js").then((e) => ({ default: e.StudyPlannerStudyPlannerPagePage }))), M = o(() => import("./pages/ApplicationsPortfolioPagePage.js").then((e) => ({ default: e.ApplicationsPortfolioPagePage })));
14
- function N() {
13
+ var _ = o(() => import("./pages/DashboardDashboardPagePage.js").then((e) => ({ default: e.DashboardDashboardPagePage }))), v = o(() => import("./pages/CoursesCoursesPagePage.js").then((e) => ({ default: e.CoursesCoursesPagePage }))), y = o(() => import("./pages/CoursesCourseDetailsPagePage.js").then((e) => ({ default: e.CoursesCourseDetailsPagePage }))), b = o(() => import("./pages/CoursesLessonPlayerPagePage.js").then((e) => ({ default: e.CoursesLessonPlayerPagePage }))), x = o(() => import("./pages/CoursesAssessmentPagePage.js").then((e) => ({ default: e.CoursesAssessmentPagePage }))), S = o(() => import("./pages/CoursesMyLearningPagePage.js").then((e) => ({ default: e.CoursesMyLearningPagePage }))), C = o(() => import("./pages/ApplicationsProblemsPagePage.js").then((e) => ({ default: e.ApplicationsProblemsPagePage }))), w = o(() => import("./pages/ApplicationsProblemDetailsPagePage.js").then((e) => ({ default: e.ApplicationsProblemDetailsPagePage }))), T = o(() => import("./pages/MentorshipMentorsPagePage.js").then((e) => ({ default: e.MentorshipMentorsPagePage }))), E = o(() => import("./pages/MentorshipMentorProfilePagePage.js").then((e) => ({ default: e.MentorshipMentorProfilePagePage }))), D = o(() => import("./pages/MentorshipSessionsPagePage.js").then((e) => ({ default: e.MentorshipSessionsPagePage }))), O = o(() => import("./pages/HackathonsHackathonsPagePage.js").then((e) => ({ default: e.HackathonsHackathonsPagePage }))), k = o(() => import("./pages/HackathonsHackathonDetailsPagePage.js").then((e) => ({ default: e.HackathonsHackathonDetailsPagePage }))), A = o(() => import("./pages/AnalyticsAnalyticsPagePage.js").then((e) => ({ default: e.AnalyticsAnalyticsPagePage }))), j = o(() => import("./pages/AdminAdminDashboardPagePage.js").then((e) => ({ default: e.AdminAdminDashboardPagePage }))), M = o(() => import("./pages/StudyPlannerStudyPlannerPagePage.js").then((e) => ({ default: e.StudyPlannerStudyPlannerPagePage }))), N = o(() => import("./pages/ApplicationsPortfolioPagePage.js").then((e) => ({ default: e.ApplicationsPortfolioPagePage })));
14
+ function P() {
15
15
  return /* @__PURE__ */ m("div", {
16
16
  className: "flex h-full min-h-[40vh] items-center justify-center",
17
17
  children: /* @__PURE__ */ m(c, {
@@ -20,7 +20,7 @@ function N() {
20
20
  })
21
21
  });
22
22
  }
23
- function P() {
23
+ function F() {
24
24
  return /* @__PURE__ */ m("div", {
25
25
  className: "flex h-full min-h-[40vh] items-center justify-center p-6",
26
26
  children: /* @__PURE__ */ m(t, {
@@ -30,45 +30,49 @@ function P() {
30
30
  })
31
31
  });
32
32
  }
33
- function F(e, t) {
33
+ function I(e, t) {
34
34
  return /* @__PURE__ */ m(g, {
35
35
  flag: e,
36
36
  defaultValue: !0,
37
- fallback: /* @__PURE__ */ m(P, {}),
37
+ fallback: /* @__PURE__ */ m(F, {}),
38
38
  children: t
39
39
  });
40
40
  }
41
- function I() {
41
+ function L() {
42
42
  let { pathname: t } = p();
43
- e(s(() => t.includes("/courses/lesson-player") ? "lesson-player" : t.includes("/courses/course-details") ? "course-details" : t.includes("/courses/my-learning") ? "my-learning" : t.includes("/courses") ? "courses" : t.includes("/applications/problem-details") ? "problem-details" : t.includes("/applications/portfolio") ? "portfolio" : t.includes("/applications") ? "problems" : t.includes("/study-planner") ? "study-planner" : t.includes("/mentorship/mentor-profile") ? "mentor-profile" : t.includes("/mentorship/sessions") ? "sessions" : t.includes("/mentorship") ? "mentors" : t.includes("/hackathons/hackathon-details") ? "hackathon-details" : t.includes("/hackathons") ? "hackathons" : t.includes("/analytics") ? "analytics" : t.includes("/admin") ? "admin" : "dashboard", [t]));
43
+ e(s(() => t.includes("/courses/lesson-player") ? "lesson-player" : t.includes("/courses/course-details") ? "course-details" : t.includes("/courses/assessment") ? "assessment" : t.includes("/courses/my-learning") ? "my-learning" : t.includes("/courses") ? "courses" : t.includes("/applications/problem-details") ? "problem-details" : t.includes("/applications/portfolio") ? "portfolio" : t.includes("/applications") ? "problems" : t.includes("/study-planner") ? "study-planner" : t.includes("/mentorship/mentor-profile") ? "mentor-profile" : t.includes("/mentorship/sessions") ? "sessions" : t.includes("/mentorship") ? "mentors" : t.includes("/hackathons/hackathon-details") ? "hackathon-details" : t.includes("/hackathons") ? "hackathons" : t.includes("/analytics") ? "analytics" : t.includes("/admin") ? "admin" : "dashboard", [t]));
44
44
  }
45
- function L() {
46
- return I(), /* @__PURE__ */ m(a, {
47
- fallback: /* @__PURE__ */ m(N, {}),
45
+ function R() {
46
+ return L(), /* @__PURE__ */ m(a, {
47
+ fallback: /* @__PURE__ */ m(P, {}),
48
48
  children: /* @__PURE__ */ h(n, { children: [/* @__PURE__ */ m(r, {}), /* @__PURE__ */ h(f, { children: [
49
49
  /* @__PURE__ */ m(d, {
50
50
  index: !0,
51
- element: F("technospam.dashboard", /* @__PURE__ */ m(i, {}))
51
+ element: I("technospam.dashboard", /* @__PURE__ */ m(i, {}))
52
52
  }),
53
53
  /* @__PURE__ */ m(d, {
54
54
  path: "dashboard/dashboard-page",
55
- element: F("technospam.dashboard", /* @__PURE__ */ m(_, {}))
55
+ element: I("technospam.dashboard", /* @__PURE__ */ m(_, {}))
56
56
  }),
57
57
  /* @__PURE__ */ m(d, {
58
58
  path: "courses/courses-page",
59
- element: F("technospam.courses", /* @__PURE__ */ m(v, {}))
59
+ element: I("technospam.courses", /* @__PURE__ */ m(v, {}))
60
60
  }),
61
61
  /* @__PURE__ */ m(d, {
62
62
  path: "courses/course-details-page",
63
- element: F("technospam.courses", /* @__PURE__ */ m(y, {}))
63
+ element: I("technospam.courses", /* @__PURE__ */ m(y, {}))
64
64
  }),
65
65
  /* @__PURE__ */ m(d, {
66
66
  path: "courses/lesson-player-page",
67
- element: F("technospam.courses", /* @__PURE__ */ m(b, {}))
67
+ element: I("technospam.courses", /* @__PURE__ */ m(b, {}))
68
+ }),
69
+ /* @__PURE__ */ m(d, {
70
+ path: "courses/assessment-page",
71
+ element: I("technospam.courses", /* @__PURE__ */ m(x, {}))
68
72
  }),
69
73
  /* @__PURE__ */ m(d, {
70
74
  path: "courses/my-learning-page",
71
- element: F("technospam.courses", /* @__PURE__ */ m(x, {}))
75
+ element: I("technospam.courses", /* @__PURE__ */ m(S, {}))
72
76
  }),
73
77
  /* @__PURE__ */ m(d, {
74
78
  path: "courses/instructors-page",
@@ -86,11 +90,11 @@ function L() {
86
90
  }),
87
91
  /* @__PURE__ */ m(d, {
88
92
  path: "applications/problems-page",
89
- element: F("technospam.problems", /* @__PURE__ */ m(S, {}))
93
+ element: I("technospam.problems", /* @__PURE__ */ m(C, {}))
90
94
  }),
91
95
  /* @__PURE__ */ m(d, {
92
96
  path: "applications/problem-details-page",
93
- element: F("technospam.problems", /* @__PURE__ */ m(C, {}))
97
+ element: I("technospam.problems", /* @__PURE__ */ m(w, {}))
94
98
  }),
95
99
  /* @__PURE__ */ m(d, {
96
100
  path: "applications/solutions-page",
@@ -101,19 +105,19 @@ function L() {
101
105
  }),
102
106
  /* @__PURE__ */ m(d, {
103
107
  path: "applications/portfolio-page",
104
- element: F("technospam.portfolio", /* @__PURE__ */ m(M, {}))
108
+ element: I("technospam.portfolio", /* @__PURE__ */ m(N, {}))
105
109
  }),
106
110
  /* @__PURE__ */ m(d, {
107
111
  path: "mentorship/mentors-page",
108
- element: F("technospam.mentorship", /* @__PURE__ */ m(w, {}))
112
+ element: I("technospam.mentorship", /* @__PURE__ */ m(T, {}))
109
113
  }),
110
114
  /* @__PURE__ */ m(d, {
111
115
  path: "mentorship/mentor-profile-page",
112
- element: F("technospam.mentorship", /* @__PURE__ */ m(T, {}))
116
+ element: I("technospam.mentorship", /* @__PURE__ */ m(E, {}))
113
117
  }),
114
118
  /* @__PURE__ */ m(d, {
115
119
  path: "mentorship/sessions-page",
116
- element: F("technospam.mentorship", /* @__PURE__ */ m(E, {}))
120
+ element: I("technospam.mentorship", /* @__PURE__ */ m(D, {}))
117
121
  }),
118
122
  /* @__PURE__ */ m(d, {
119
123
  path: "mentorship/mentorship-page",
@@ -131,11 +135,11 @@ function L() {
131
135
  }),
132
136
  /* @__PURE__ */ m(d, {
133
137
  path: "hackathons/hackathons-page",
134
- element: F("technospam.hackathons", /* @__PURE__ */ m(D, {}))
138
+ element: I("technospam.hackathons", /* @__PURE__ */ m(O, {}))
135
139
  }),
136
140
  /* @__PURE__ */ m(d, {
137
141
  path: "hackathons/hackathon-details-page",
138
- element: F("technospam.hackathons", /* @__PURE__ */ m(O, {}))
142
+ element: I("technospam.hackathons", /* @__PURE__ */ m(k, {}))
139
143
  }),
140
144
  /* @__PURE__ */ m(d, {
141
145
  path: "hackathons/events-page",
@@ -153,7 +157,7 @@ function L() {
153
157
  }),
154
158
  /* @__PURE__ */ m(d, {
155
159
  path: "analytics/analytics-page",
156
- element: F("technospam.analytics", /* @__PURE__ */ m(k, {}))
160
+ element: I("technospam.analytics", /* @__PURE__ */ m(A, {}))
157
161
  }),
158
162
  /* @__PURE__ */ m(d, {
159
163
  path: "analytics/progress-page",
@@ -178,7 +182,7 @@ function L() {
178
182
  }),
179
183
  /* @__PURE__ */ m(d, {
180
184
  path: "admin/admin-dashboard-page",
181
- element: F("technospam.admin", /* @__PURE__ */ m(A, {}))
185
+ element: I("technospam.admin", /* @__PURE__ */ m(j, {}))
182
186
  }),
183
187
  /* @__PURE__ */ m(d, {
184
188
  path: "admin/audit-reports-page",
@@ -189,7 +193,7 @@ function L() {
189
193
  }),
190
194
  /* @__PURE__ */ m(d, {
191
195
  path: "study-planner/study-planner-page",
192
- element: F("technospam.studyPlanner", /* @__PURE__ */ m(j, {}))
196
+ element: I("technospam.studyPlanner", /* @__PURE__ */ m(M, {}))
193
197
  }),
194
198
  /* @__PURE__ */ m(d, {
195
199
  path: "study-planner/*",
@@ -223,6 +227,6 @@ function L() {
223
227
  });
224
228
  }
225
229
  //#endregion
226
- export { L as TechnoSpamRoutes };
230
+ export { R as TechnoSpamRoutes };
227
231
 
228
232
  //# sourceMappingURL=TechnoSpamRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TechnoSpamRoutes.js","names":[],"sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router';\nimport { Loader2, ShieldAlert } from 'lucide-react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTechnoSpamPageView } from './hooks/useTechnoSpamPageView';\nimport { EmptyView, TechnoSpamErrorBoundary } from './components';\nimport { OfflineProgressSync } from './components/lesson/OfflineProgressSync';\n\n/**\n * TechnoSpam routes — every page is backed by the real wspace-technospam-svc\n * (Tec* fields). Modules with no backend (open source, knowledge base,\n * standalone instructors, extra analytics/admin sub-pages) were removed\n * during the backend-reconciliation rebuild; their old paths redirect to\n * the nearest live page so stale links never 404.\n *\n * study-planner (BOFF-4415) and applications/portfolio-page (BOFF-4432) are\n * real pages again as of this pass — see their page components' honesty\n * notes for exactly what is/isn't AI and what's deferred.\n */\n\nimport { DashboardDashboardPagePage as IndexPage } from './pages/DashboardDashboardPagePage';\n\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst CoursesCoursesPagePage = lazy(() =>\n import('./pages/CoursesCoursesPagePage').then((m) => ({ default: m.CoursesCoursesPagePage }))\n);\nconst CoursesCourseDetailsPagePage = lazy(() =>\n import('./pages/CoursesCourseDetailsPagePage').then((m) => ({\n default: m.CoursesCourseDetailsPagePage,\n }))\n);\nconst CoursesLessonPlayerPagePage = lazy(() =>\n import('./pages/CoursesLessonPlayerPagePage').then((m) => ({\n default: m.CoursesLessonPlayerPagePage,\n }))\n);\nconst CoursesMyLearningPagePage = lazy(() =>\n import('./pages/CoursesMyLearningPagePage').then((m) => ({\n default: m.CoursesMyLearningPagePage,\n }))\n);\nconst ApplicationsProblemsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemsPagePage').then((m) => ({\n default: m.ApplicationsProblemsPagePage,\n }))\n);\nconst ApplicationsProblemDetailsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemDetailsPagePage').then((m) => ({\n default: m.ApplicationsProblemDetailsPagePage,\n }))\n);\nconst MentorshipMentorsPagePage = lazy(() =>\n import('./pages/MentorshipMentorsPagePage').then((m) => ({\n default: m.MentorshipMentorsPagePage,\n }))\n);\nconst MentorshipMentorProfilePagePage = lazy(() =>\n import('./pages/MentorshipMentorProfilePagePage').then((m) => ({\n default: m.MentorshipMentorProfilePagePage,\n }))\n);\nconst MentorshipSessionsPagePage = lazy(() =>\n import('./pages/MentorshipSessionsPagePage').then((m) => ({\n default: m.MentorshipSessionsPagePage,\n }))\n);\nconst HackathonsHackathonsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonsPagePage').then((m) => ({\n default: m.HackathonsHackathonsPagePage,\n }))\n);\nconst HackathonsHackathonDetailsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonDetailsPagePage').then((m) => ({\n default: m.HackathonsHackathonDetailsPagePage,\n }))\n);\nconst AnalyticsAnalyticsPagePage = lazy(() =>\n import('./pages/AnalyticsAnalyticsPagePage').then((m) => ({\n default: m.AnalyticsAnalyticsPagePage,\n }))\n);\nconst AdminAdminDashboardPagePage = lazy(() =>\n import('./pages/AdminAdminDashboardPagePage').then((m) => ({\n default: m.AdminAdminDashboardPagePage,\n }))\n);\nconst StudyPlannerStudyPlannerPagePage = lazy(() =>\n import('./pages/StudyPlannerStudyPlannerPagePage').then((m) => ({\n default: m.StudyPlannerStudyPlannerPagePage,\n }))\n);\nconst ApplicationsPortfolioPagePage = lazy(() =>\n import('./pages/ApplicationsPortfolioPagePage').then((m) => ({\n default: m.ApplicationsPortfolioPagePage,\n }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center\">\n <Loader2 className=\"animate-spin text-text-muted\" size={28} />\n </div>\n );\n}\n\nfunction FeatureDisabledFallback() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center p-6\">\n <EmptyView\n icon={<ShieldAlert size={28} />}\n title=\"Feature not available\"\n description=\"This TechnoSpam feature is currently disabled for your workspace.\"\n />\n </div>\n );\n}\n\nfunction gated(flag: string, element: React.ReactNode): React.ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={true} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nfunction useTrackedPageView() {\n const { pathname } = useLocation();\n const page = useMemo(() => {\n if (pathname.includes('/courses/lesson-player')) return 'lesson-player';\n if (pathname.includes('/courses/course-details')) return 'course-details';\n if (pathname.includes('/courses/my-learning')) return 'my-learning';\n if (pathname.includes('/courses')) return 'courses';\n if (pathname.includes('/applications/problem-details')) return 'problem-details';\n if (pathname.includes('/applications/portfolio')) return 'portfolio';\n if (pathname.includes('/applications')) return 'problems';\n if (pathname.includes('/study-planner')) return 'study-planner';\n if (pathname.includes('/mentorship/mentor-profile')) return 'mentor-profile';\n if (pathname.includes('/mentorship/sessions')) return 'sessions';\n if (pathname.includes('/mentorship')) return 'mentors';\n if (pathname.includes('/hackathons/hackathon-details')) return 'hackathon-details';\n if (pathname.includes('/hackathons')) return 'hackathons';\n if (pathname.includes('/analytics')) return 'analytics';\n if (pathname.includes('/admin')) return 'admin';\n return 'dashboard';\n }, [pathname]);\n useTechnoSpamPageView(page);\n}\n\nexport function TechnoSpamRoutes() {\n useTrackedPageView();\n return (\n <Suspense fallback={<PageLoader />}>\n <TechnoSpamErrorBoundary>\n <OfflineProgressSync />\n <Routes>\n <Route index element={gated('technospam.dashboard', <IndexPage />)} />\n <Route\n path=\"dashboard/dashboard-page\"\n element={gated('technospam.dashboard', <DashboardDashboardPagePage />)}\n />\n\n {/* Courses */}\n <Route\n path=\"courses/courses-page\"\n element={gated('technospam.courses', <CoursesCoursesPagePage />)}\n />\n <Route\n path=\"courses/course-details-page\"\n element={gated('technospam.courses', <CoursesCourseDetailsPagePage />)}\n />\n <Route\n path=\"courses/lesson-player-page\"\n element={gated('technospam.courses', <CoursesLessonPlayerPagePage />)}\n />\n <Route\n path=\"courses/my-learning-page\"\n element={gated('technospam.courses', <CoursesMyLearningPagePage />)}\n />\n <Route\n path=\"courses/instructors-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n <Route\n path=\"courses/instructor-profile-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n\n {/* Practice (applications) */}\n <Route\n path=\"applications/problems-page\"\n element={gated('technospam.problems', <ApplicationsProblemsPagePage />)}\n />\n <Route\n path=\"applications/problem-details-page\"\n element={gated('technospam.problems', <ApplicationsProblemDetailsPagePage />)}\n />\n <Route\n path=\"applications/solutions-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n <Route\n path=\"applications/portfolio-page\"\n element={gated('technospam.portfolio', <ApplicationsPortfolioPagePage />)}\n />\n\n {/* Mentorship */}\n <Route\n path=\"mentorship/mentors-page\"\n element={gated('technospam.mentorship', <MentorshipMentorsPagePage />)}\n />\n <Route\n path=\"mentorship/mentor-profile-page\"\n element={gated('technospam.mentorship', <MentorshipMentorProfilePagePage />)}\n />\n <Route\n path=\"mentorship/sessions-page\"\n element={gated('technospam.mentorship', <MentorshipSessionsPagePage />)}\n />\n <Route\n path=\"mentorship/mentorship-page\"\n element={<Navigate to=\"../mentorship/mentors-page\" replace />}\n />\n <Route\n path=\"mentorship/bookings-page\"\n element={<Navigate to=\"../mentorship/sessions-page\" replace />}\n />\n\n {/* Hackathons */}\n <Route\n path=\"hackathons/hackathons-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonsPagePage />)}\n />\n <Route\n path=\"hackathons/hackathon-details-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonDetailsPagePage />)}\n />\n <Route\n path=\"hackathons/events-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n <Route\n path=\"hackathons/teams-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics/analytics-page\"\n element={gated('technospam.analytics', <AnalyticsAnalyticsPagePage />)}\n />\n <Route\n path=\"analytics/progress-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/achievements-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/reports-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n\n {/* Admin */}\n <Route\n path=\"admin/admin-dashboard-page\"\n element={gated('technospam.admin', <AdminAdminDashboardPagePage />)}\n />\n <Route\n path=\"admin/audit-reports-page\"\n element={<Navigate to=\"../admin/admin-dashboard-page\" replace />}\n />\n\n {/*\n * Study Planner (BOFF-4415): a real, deterministic (non-AI)\n * scheduler now lives at study-planner/study-planner-page — see\n * StudyPlannerStudyPlannerPagePage's honesty note. This single page\n * intentionally consolidates what the nav scaffolding originally\n * anticipated as several separate pages (plans list, plan details,\n * edit, learning paths, goals) — those richer standalone views,\n * plus true AI/adaptive re-planning (BOFF-3874/3895), remain\n * deferred. Any other study-planner/* sub-path falls back here\n * rather than to the dashboard, since the real page now exists.\n */}\n <Route\n path=\"study-planner/study-planner-page\"\n element={gated('technospam.studyPlanner', <StudyPlannerStudyPlannerPagePage />)}\n />\n <Route\n path=\"study-planner/*\"\n element={<Navigate to=\"../study-planner/study-planner-page\" replace />}\n />\n {/*\n * Removed modules → dashboard.\n *\n * open-source and knowledge-base were never shipped and have no nav\n * entries anymore (BOFF-3086) — these redirects are a defensive\n * fallback for stale bookmarks/links only.\n */}\n <Route\n path=\"open-source/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"knowledge-base/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n\n <Route path=\"*\" element={<Navigate to=\"../dashboard/dashboard-page\" replace />} />\n </Routes>\n </TechnoSpamErrorBoundary>\n </Suspense>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TechnoSpamRoutes.js","names":[],"sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router';\nimport { Loader2, ShieldAlert } from 'lucide-react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTechnoSpamPageView } from './hooks/useTechnoSpamPageView';\nimport { EmptyView, TechnoSpamErrorBoundary } from './components';\nimport { OfflineProgressSync } from './components/lesson/OfflineProgressSync';\n\n/**\n * TechnoSpam routes — every page is backed by the real wspace-technospam-svc\n * (Tec* fields). Modules with no backend (open source, knowledge base,\n * standalone instructors, extra analytics/admin sub-pages) were removed\n * during the backend-reconciliation rebuild; their old paths redirect to\n * the nearest live page so stale links never 404.\n *\n * study-planner (BOFF-4415) and applications/portfolio-page (BOFF-4432) are\n * real pages again as of this pass — see their page components' honesty\n * notes for exactly what is/isn't AI and what's deferred.\n */\n\nimport { DashboardDashboardPagePage as IndexPage } from './pages/DashboardDashboardPagePage';\n\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst CoursesCoursesPagePage = lazy(() =>\n import('./pages/CoursesCoursesPagePage').then((m) => ({ default: m.CoursesCoursesPagePage }))\n);\nconst CoursesCourseDetailsPagePage = lazy(() =>\n import('./pages/CoursesCourseDetailsPagePage').then((m) => ({\n default: m.CoursesCourseDetailsPagePage,\n }))\n);\nconst CoursesLessonPlayerPagePage = lazy(() =>\n import('./pages/CoursesLessonPlayerPagePage').then((m) => ({\n default: m.CoursesLessonPlayerPagePage,\n }))\n);\nconst CoursesAssessmentPagePage = lazy(() =>\n import('./pages/CoursesAssessmentPagePage').then((m) => ({\n default: m.CoursesAssessmentPagePage,\n }))\n);\nconst CoursesMyLearningPagePage = lazy(() =>\n import('./pages/CoursesMyLearningPagePage').then((m) => ({\n default: m.CoursesMyLearningPagePage,\n }))\n);\nconst ApplicationsProblemsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemsPagePage').then((m) => ({\n default: m.ApplicationsProblemsPagePage,\n }))\n);\nconst ApplicationsProblemDetailsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemDetailsPagePage').then((m) => ({\n default: m.ApplicationsProblemDetailsPagePage,\n }))\n);\nconst MentorshipMentorsPagePage = lazy(() =>\n import('./pages/MentorshipMentorsPagePage').then((m) => ({\n default: m.MentorshipMentorsPagePage,\n }))\n);\nconst MentorshipMentorProfilePagePage = lazy(() =>\n import('./pages/MentorshipMentorProfilePagePage').then((m) => ({\n default: m.MentorshipMentorProfilePagePage,\n }))\n);\nconst MentorshipSessionsPagePage = lazy(() =>\n import('./pages/MentorshipSessionsPagePage').then((m) => ({\n default: m.MentorshipSessionsPagePage,\n }))\n);\nconst HackathonsHackathonsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonsPagePage').then((m) => ({\n default: m.HackathonsHackathonsPagePage,\n }))\n);\nconst HackathonsHackathonDetailsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonDetailsPagePage').then((m) => ({\n default: m.HackathonsHackathonDetailsPagePage,\n }))\n);\nconst AnalyticsAnalyticsPagePage = lazy(() =>\n import('./pages/AnalyticsAnalyticsPagePage').then((m) => ({\n default: m.AnalyticsAnalyticsPagePage,\n }))\n);\nconst AdminAdminDashboardPagePage = lazy(() =>\n import('./pages/AdminAdminDashboardPagePage').then((m) => ({\n default: m.AdminAdminDashboardPagePage,\n }))\n);\nconst StudyPlannerStudyPlannerPagePage = lazy(() =>\n import('./pages/StudyPlannerStudyPlannerPagePage').then((m) => ({\n default: m.StudyPlannerStudyPlannerPagePage,\n }))\n);\nconst ApplicationsPortfolioPagePage = lazy(() =>\n import('./pages/ApplicationsPortfolioPagePage').then((m) => ({\n default: m.ApplicationsPortfolioPagePage,\n }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center\">\n <Loader2 className=\"animate-spin text-text-muted\" size={28} />\n </div>\n );\n}\n\nfunction FeatureDisabledFallback() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center p-6\">\n <EmptyView\n icon={<ShieldAlert size={28} />}\n title=\"Feature not available\"\n description=\"This TechnoSpam feature is currently disabled for your workspace.\"\n />\n </div>\n );\n}\n\nfunction gated(flag: string, element: React.ReactNode): React.ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={true} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nfunction useTrackedPageView() {\n const { pathname } = useLocation();\n const page = useMemo(() => {\n if (pathname.includes('/courses/lesson-player')) return 'lesson-player';\n if (pathname.includes('/courses/course-details')) return 'course-details';\n if (pathname.includes('/courses/assessment')) return 'assessment';\n if (pathname.includes('/courses/my-learning')) return 'my-learning';\n if (pathname.includes('/courses')) return 'courses';\n if (pathname.includes('/applications/problem-details')) return 'problem-details';\n if (pathname.includes('/applications/portfolio')) return 'portfolio';\n if (pathname.includes('/applications')) return 'problems';\n if (pathname.includes('/study-planner')) return 'study-planner';\n if (pathname.includes('/mentorship/mentor-profile')) return 'mentor-profile';\n if (pathname.includes('/mentorship/sessions')) return 'sessions';\n if (pathname.includes('/mentorship')) return 'mentors';\n if (pathname.includes('/hackathons/hackathon-details')) return 'hackathon-details';\n if (pathname.includes('/hackathons')) return 'hackathons';\n if (pathname.includes('/analytics')) return 'analytics';\n if (pathname.includes('/admin')) return 'admin';\n return 'dashboard';\n }, [pathname]);\n useTechnoSpamPageView(page);\n}\n\nexport function TechnoSpamRoutes() {\n useTrackedPageView();\n return (\n <Suspense fallback={<PageLoader />}>\n <TechnoSpamErrorBoundary>\n <OfflineProgressSync />\n <Routes>\n <Route index element={gated('technospam.dashboard', <IndexPage />)} />\n <Route\n path=\"dashboard/dashboard-page\"\n element={gated('technospam.dashboard', <DashboardDashboardPagePage />)}\n />\n\n {/* Courses */}\n <Route\n path=\"courses/courses-page\"\n element={gated('technospam.courses', <CoursesCoursesPagePage />)}\n />\n <Route\n path=\"courses/course-details-page\"\n element={gated('technospam.courses', <CoursesCourseDetailsPagePage />)}\n />\n <Route\n path=\"courses/lesson-player-page\"\n element={gated('technospam.courses', <CoursesLessonPlayerPagePage />)}\n />\n <Route\n path=\"courses/assessment-page\"\n element={gated('technospam.courses', <CoursesAssessmentPagePage />)}\n />\n <Route\n path=\"courses/my-learning-page\"\n element={gated('technospam.courses', <CoursesMyLearningPagePage />)}\n />\n <Route\n path=\"courses/instructors-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n <Route\n path=\"courses/instructor-profile-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n\n {/* Practice (applications) */}\n <Route\n path=\"applications/problems-page\"\n element={gated('technospam.problems', <ApplicationsProblemsPagePage />)}\n />\n <Route\n path=\"applications/problem-details-page\"\n element={gated('technospam.problems', <ApplicationsProblemDetailsPagePage />)}\n />\n <Route\n path=\"applications/solutions-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n <Route\n path=\"applications/portfolio-page\"\n element={gated('technospam.portfolio', <ApplicationsPortfolioPagePage />)}\n />\n\n {/* Mentorship */}\n <Route\n path=\"mentorship/mentors-page\"\n element={gated('technospam.mentorship', <MentorshipMentorsPagePage />)}\n />\n <Route\n path=\"mentorship/mentor-profile-page\"\n element={gated('technospam.mentorship', <MentorshipMentorProfilePagePage />)}\n />\n <Route\n path=\"mentorship/sessions-page\"\n element={gated('technospam.mentorship', <MentorshipSessionsPagePage />)}\n />\n <Route\n path=\"mentorship/mentorship-page\"\n element={<Navigate to=\"../mentorship/mentors-page\" replace />}\n />\n <Route\n path=\"mentorship/bookings-page\"\n element={<Navigate to=\"../mentorship/sessions-page\" replace />}\n />\n\n {/* Hackathons */}\n <Route\n path=\"hackathons/hackathons-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonsPagePage />)}\n />\n <Route\n path=\"hackathons/hackathon-details-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonDetailsPagePage />)}\n />\n <Route\n path=\"hackathons/events-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n <Route\n path=\"hackathons/teams-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics/analytics-page\"\n element={gated('technospam.analytics', <AnalyticsAnalyticsPagePage />)}\n />\n <Route\n path=\"analytics/progress-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/achievements-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/reports-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n\n {/* Admin */}\n <Route\n path=\"admin/admin-dashboard-page\"\n element={gated('technospam.admin', <AdminAdminDashboardPagePage />)}\n />\n <Route\n path=\"admin/audit-reports-page\"\n element={<Navigate to=\"../admin/admin-dashboard-page\" replace />}\n />\n\n {/*\n * Study Planner (BOFF-4415): a real, deterministic (non-AI)\n * scheduler now lives at study-planner/study-planner-page — see\n * StudyPlannerStudyPlannerPagePage's honesty note. This single page\n * intentionally consolidates what the nav scaffolding originally\n * anticipated as several separate pages (plans list, plan details,\n * edit, learning paths, goals) — those richer standalone views,\n * plus true AI/adaptive re-planning (BOFF-3874/3895), remain\n * deferred. Any other study-planner/* sub-path falls back here\n * rather than to the dashboard, since the real page now exists.\n */}\n <Route\n path=\"study-planner/study-planner-page\"\n element={gated('technospam.studyPlanner', <StudyPlannerStudyPlannerPagePage />)}\n />\n <Route\n path=\"study-planner/*\"\n element={<Navigate to=\"../study-planner/study-planner-page\" replace />}\n />\n {/*\n * Removed modules → dashboard.\n *\n * open-source and knowledge-base were never shipped and have no nav\n * entries anymore (BOFF-3086) — these redirects are a defensive\n * fallback for stale bookmarks/links only.\n */}\n <Route\n path=\"open-source/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"knowledge-base/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n\n <Route path=\"*\" element={<Navigate to=\"../dashboard/dashboard-page\" replace />} />\n </Routes>\n </TechnoSpamErrorBoundary>\n </Suspense>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { useMutation, useQuery } from '@apollo/client/react';
2
+ import { TecQuizQuestionKey } from './technospamApi';
3
+
4
+ export type TecAssessmentStatus = 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';
5
+ export type TecProctoringMode = 'NONE' | 'INTEGRITY_MONITORING' | 'REVIEW_REQUIRED';
6
+ export type TecAssessmentAttemptStatus = 'IN_PROGRESS' | 'SUBMITTED' | 'EXPIRED';
7
+ export type TecProctoringStatus = 'NOT_REQUIRED' | 'MONITORING' | 'PENDING_REVIEW' | 'VERIFIED' | 'FLAGGED' | 'REJECTED';
8
+ export type TecAssessmentSignal = 'FULLSCREEN_ENTER' | 'FULLSCREEN_EXIT' | 'VISIBILITY_HIDDEN' | 'WINDOW_BLUR' | 'COPY_ATTEMPT' | 'CUT_ATTEMPT' | 'PASTE_ATTEMPT' | 'CONTEXT_MENU';
9
+ export type TecAssessmentEventType = TecAssessmentSignal | 'STARTED' | 'SUBMITTED' | 'EXPIRED' | 'REVIEWED' | 'CERTIFICATE_ISSUED';
10
+ export type TecAssessmentReviewDecision = 'VERIFIED' | 'REJECTED';
11
+ export interface TecAssessment {
12
+ id: string;
13
+ courseId: string;
14
+ title: string;
15
+ description?: string | null;
16
+ status: TecAssessmentStatus;
17
+ timeLimitMinutes: number;
18
+ passingScore: number;
19
+ maxAttempts: number;
20
+ questionCount: number;
21
+ shuffleQuestions: boolean;
22
+ shuffleOptions: boolean;
23
+ proctoringMode: TecProctoringMode;
24
+ requireFullscreen: boolean;
25
+ blockClipboard: boolean;
26
+ maxIntegrityViolations: number;
27
+ issuesCertificate: boolean;
28
+ publishedAt?: string | null;
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ course?: {
32
+ id: string;
33
+ title: string;
34
+ } | null;
35
+ }
36
+ export interface TecAssessmentQuestion {
37
+ position: number;
38
+ prompt: string;
39
+ options: string[];
40
+ }
41
+ export interface TecAssessmentAttempt {
42
+ id: string;
43
+ assessmentId: string;
44
+ courseId: string;
45
+ learnerId: string;
46
+ attemptNumber: number;
47
+ status: TecAssessmentAttemptStatus;
48
+ startedAt: string;
49
+ deadlineAt: string;
50
+ submittedAt?: string | null;
51
+ remainingSeconds: number;
52
+ questions: TecAssessmentQuestion[];
53
+ savedAnswers: number[];
54
+ requireFullscreen: boolean;
55
+ blockClipboard: boolean;
56
+ score?: number | null;
57
+ passed?: boolean | null;
58
+ passingScore: number;
59
+ correctCount: number;
60
+ totalCount: number;
61
+ proctoringMode: TecProctoringMode;
62
+ proctoringStatus: TecProctoringStatus;
63
+ integrityViolations: number;
64
+ maxIntegrityViolations: number;
65
+ consentedAt?: string | null;
66
+ reviewedBy?: string | null;
67
+ reviewedAt?: string | null;
68
+ reviewNotes?: string | null;
69
+ certificateId?: string | null;
70
+ certificate?: {
71
+ id: string;
72
+ serial: string;
73
+ score: number;
74
+ status: string;
75
+ issuedAt: string;
76
+ } | null;
77
+ }
78
+ export interface TecAssessmentEvent {
79
+ id: string;
80
+ attemptId: string;
81
+ type: TecAssessmentEventType;
82
+ violation: boolean;
83
+ detail?: Record<string, unknown> | null;
84
+ occurredAt: string;
85
+ }
86
+ export interface TecAssessmentQuestionInput {
87
+ prompt: string;
88
+ options: string[];
89
+ correctOption: number;
90
+ explanation: string | null;
91
+ }
92
+ export interface TecAssessmentInput {
93
+ title?: string;
94
+ description?: string | null;
95
+ timeLimitMinutes?: number;
96
+ passingScore?: number;
97
+ maxAttempts?: number;
98
+ shuffleQuestions?: boolean;
99
+ shuffleOptions?: boolean;
100
+ proctoringMode?: TecProctoringMode;
101
+ requireFullscreen?: boolean;
102
+ blockClipboard?: boolean;
103
+ maxIntegrityViolations?: number;
104
+ issuesCertificate?: boolean;
105
+ questions?: TecAssessmentQuestionInput[];
106
+ }
107
+ export declare const useAssessmentsQuery: (vars: {
108
+ courseId?: string | null;
109
+ status?: TecAssessmentStatus | null;
110
+ }, skip?: boolean) => useQuery.Result<{
111
+ tecListAssessments: TecAssessment[];
112
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
113
+ export declare const useAssessmentQuery: (id: string) => useQuery.Result<{
114
+ tecAssessment: TecAssessment | null;
115
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
116
+ export declare const useAssessmentQuestionKeyQuery: (id: string | null) => useQuery.Result<{
117
+ tecAssessmentQuestionKey: TecQuizQuestionKey[];
118
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
119
+ export declare const useMyAssessmentAttemptsQuery: (assessmentId: string | null) => useQuery.Result<{
120
+ tecMyAssessmentAttempts: TecAssessmentAttempt[];
121
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
122
+ export declare const useAssessmentAttemptsQuery: (vars: {
123
+ assessmentId?: string | null;
124
+ proctoringStatus?: TecProctoringStatus | null;
125
+ }) => useQuery.Result<{
126
+ tecListAssessmentAttempts: TecAssessmentAttempt[];
127
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
128
+ export declare const useAssessmentAttemptEventsQuery: (attemptId: string | null) => useQuery.Result<{
129
+ tecAssessmentAttemptEvents: TecAssessmentEvent[];
130
+ }, import('@apollo/client').OperationVariables, "empty" | "complete" | "streaming", import('@apollo/client').OperationVariables>;
131
+ export declare const useCreateAssessment: () => useMutation.ResultTuple<{
132
+ tecCreateAssessment: TecAssessment;
133
+ }, {
134
+ [x: string]: any;
135
+ }, import('@apollo/client').ApolloCache, undefined>;
136
+ export declare const useUpdateAssessment: () => useMutation.ResultTuple<{
137
+ tecUpdateAssessment: TecAssessment;
138
+ }, {
139
+ [x: string]: any;
140
+ }, import('@apollo/client').ApolloCache, undefined>;
141
+ export declare const usePublishAssessment: () => useMutation.ResultTuple<{
142
+ tecPublishAssessment: TecAssessment;
143
+ }, {
144
+ [x: string]: any;
145
+ }, import('@apollo/client').ApolloCache, undefined>;
146
+ export declare const useArchiveAssessment: () => useMutation.ResultTuple<{
147
+ tecArchiveAssessment: TecAssessment;
148
+ }, {
149
+ [x: string]: any;
150
+ }, import('@apollo/client').ApolloCache, undefined>;
151
+ /** Errors are shown inline on the assessment page, not as toasts. */
152
+ export declare const useStartAssessment: () => useMutation.ResultTuple<{
153
+ tecStartAssessment: TecAssessmentAttempt;
154
+ }, {
155
+ [x: string]: any;
156
+ }, import('@apollo/client').ApolloCache, undefined>;
157
+ export declare const useSaveAssessmentAnswers: () => useMutation.ResultTuple<{
158
+ tecSaveAssessmentAnswers: Pick<TecAssessmentAttempt, "id" | "status" | "savedAnswers" | "remainingSeconds">;
159
+ }, {
160
+ [x: string]: any;
161
+ }, import('@apollo/client').ApolloCache, undefined>;
162
+ /** Signals are fire-and-forget: a failed report must never interrupt the exam. */
163
+ export declare const useRecordAssessmentSignal: () => useMutation.ResultTuple<{
164
+ tecRecordAssessmentSignal: Pick<TecAssessmentAttempt, "id" | "status" | "integrityViolations" | "remainingSeconds">;
165
+ }, {
166
+ [x: string]: any;
167
+ }, import('@apollo/client').ApolloCache, undefined>;
168
+ export declare const useSubmitAssessment: () => useMutation.ResultTuple<{
169
+ tecSubmitAssessment: TecAssessmentAttempt;
170
+ }, {
171
+ [x: string]: any;
172
+ }, import('@apollo/client').ApolloCache, undefined>;
173
+ export declare const useClaimAssessmentCertificate: () => useMutation.ResultTuple<{
174
+ tecClaimAssessmentCertificate: TecAssessmentAttempt;
175
+ }, {
176
+ [x: string]: any;
177
+ }, import('@apollo/client').ApolloCache, undefined>;
178
+ export declare const useReviewAssessmentAttempt: () => useMutation.ResultTuple<{
179
+ tecReviewAssessmentAttempt: TecAssessmentAttempt;
180
+ }, {
181
+ [x: string]: any;
182
+ }, import('@apollo/client').ApolloCache, undefined>;
183
+ //# sourceMappingURL=assessmentApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessmentApi.d.ts","sourceRoot":"","sources":["../../../src/technospam/api/assessmentApi.ts"],"names":[],"mappings":"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"}