From 9c066c79be5d3c010a13887685b4168abebfaaac Mon Sep 17 00:00:00 2001 From: Adeyemi Adetunji Date: Mon, 30 Sep 2024 01:36:12 +0100 Subject: [PATCH] feat: [lw] free tools (#297) * checkpoint * checkpoint * feat: Create free tools page * responsiveness fix * rename free-tools to tools * add slug * feat: Random name picker * quick fix * PR Fixes * PR Fixes * - adjustments * update env example * remove base url * remove base url in .env.example * fix type errors * add og images * add signup cta to /tools layout * update cta * add socials avatar * add meta tags * feat: tic tac toe (#307) * Feat: tic tac toe * PR Adjustments * feat: Implement Timed Activity Tool (#316) * chore: update verification email content * chore: landing page improvements * feat: grade exercise with AI (#296) * working on the UI of the grading * working on the grading function of the radio and checkboxes * ai grading fully implemented with dummy functions for generating scores * working on the openai response * working on the openai response * finished with the ai_grading * finished with the ai_grading * creating new migration file * working on reviews * updated the translations * improvements --------- Co-authored-by: Rotimi Best * feat: selfhost tinymce * fix: logo resolution error in manifest.json * feat: move from gpt3.5 to gpt-4o * feat: customize the LMS from dashboard (#304) * Done with the customization of the LMS task * generated custom_lms migration file * updated the migration file * copy improvements * update wording * made updates based on reviews,i hope i didnt miss anything * updated the translations and migration files * refactoring * disabled improvements for apps * more improvements * more custom improvements * pr refactoring --------- Co-authored-by: Rotimi Best * fix: CustomizeLMS not found * fix: CustomizeLms wrong path * setup * docs: update short hero tagline * debug: courses not showing on vercel * more debugging * i think this fixes it * fix: phew, clean up debug cause it works * fix: move RBS into coursecontainer on marks page * chore: cleaner way to implement redirect if role permission denied * docs: update tagline * fix: delete /org/# route * checkpoint * add reusable header component * fix: empty lesson title bug (#314) * finished the lesson title bug * made chnages based on review * Update +page.svelte --------- Co-authored-by: Rotimi Best * feat: add sound cdn * remove console.log * feat: course types - self paced and live class (#309) * working on the course type * trying to mark it persist * almost done here * fixed sendig emtpy options bug * created migration file * created migration file * made updates based on PR review * merge * update course type card * add redirect logic with classroomio.com/new * make new course modal only open/close with url * feat: page active state (#315) * finished the active link state * updated the active link state based on review * simplify code --------- Co-authored-by: Rotimi Best * add type to course card --------- Co-authored-by: Rotimi Best * general improvements to free tools * fix timer and styling issues --------- Co-authored-by: Rotimi Best Co-authored-by: Em_Dev * update tagline for tools page * feat: Add Free Section to Landing Page (#332) * feat: Add Free Section to Landing Page * PR Fixes * refactor * PR Fixes * restructure * improve cursor UX --------- Co-authored-by: Rotimi Best * feat: Progress Report Tool (#329) * checkpoint * fix: corrections * finalization * improve ux of progress tool * more styling improvements * PR Fixes * PR Fixes * fix: mood bg on report * fix: generate exercise with AI bug (#331) * fix: enable lesson cascade delete (#335) * styling improvements * chore: hide course grading toggle in settings (#338) * feat: reset select in community page (#339) * Feat: Add Reset for comminity dropdown * - add translation * refactor --------- Co-authored-by: Rotimi Best * fix: prevent hypen at start or end of organzation or domain name (#340) * fix: adding hypen to start or end of org or domain name * fix: add org name validation to settings page * chore: remove unnecessary variable use * chore: remove error reset function * Update OrgSettings.svelte --------- Co-authored-by: Rotimi Best * fix: full screen * fix: pnpm version error & add top level .nvmrc (#343) * update name of tool * chore: add translations for validation messages (#345) * chore: add validation texts to locale file * feat: switch all validations from plain text to use i18n locale * feat: switch review form validations from plain text to use locale file * run translation script * chore: add translations for validation messages (#345) (#347) * chore: add translations for validation messages (#345) * chore: add validation texts to locale file * feat: switch all validations from plain text to use i18n locale * feat: switch review form validations from plain text to use locale file * run translation script --------- Co-authored-by: Iniubong Obonguko * PR Fixes * Bug fixes on mobile * Final bug fix * code improvements * PR Fixes * Merge Fix * PR Fixes * fix: width * code cleanup * feat: Promodo Tool (tracks tim spent) * feat: Pomodoro timer (without tracking feature) * fix: - change pause functionality to next - correct spelling of pomodoro * fix: pomodoro logo rename * styling improvements --------- Co-authored-by: Rotimi Best Co-authored-by: Em_Dev Co-authored-by: Iniubong Obonguko Co-authored-by: Iniubong Obonguko Co-authored-by: Aditya Deshlahre <132184385+adityadeshlahre@users.noreply.github.com> * feat: Implement Bottom menu (#341) * popup logic done * popup UI first phase done * finished the menupop up for both lms and admin * finished the menupop up for both lms and admin * done * cleanup * fixed popover position * still working on the routing * i think that is it for the day * updated the menupopup currentorgdomain * rename popup to bottomMenu * refactoring --------- Co-authored-by: Rotimi Best * remove logout * change tagline * feat: Store todolist to localStorage (#375) * feat: Save todo to localStorage * remove fly animation to todos * feat: Progress Report avatar update (#376) * feat: Reorder Avatar list * quick fix * change avatar url * more improvements * quick background fix * fix: white background * body background fix * update lock --------- Co-authored-by: Rotimi Best Co-authored-by: Em_Dev Co-authored-by: Iniubong Obonguko Co-authored-by: Iniubong Obonguko Co-authored-by: Aditya Deshlahre <132184385+adityadeshlahre@users.noreply.github.com> --- apps/classroomio-com/package.json | 3 +- apps/classroomio-com/src/app.css | 8 + apps/classroomio-com/src/app.html | 3 +- .../src/lib/Footer/Footer.svelte | 2 +- .../src/lib/Hero/ImageCompare.svelte | 193 -------- .../CoreFeatureSection.svelte} | 0 .../Body.svelte => Home/CoreFeatures.svelte} | 2 +- .../src/lib/{Faq => Home}/Faq.svelte | 0 .../src/lib/{Hero => Home}/Hero.svelte | 0 .../MoreFeatures.svelte | 42 ++ .../StudentDashboard.svelte | 0 .../{Testimonial => Home}/Testimonial.svelte | 0 .../src/lib/{Faq => Home}/faqs.js | 0 .../src/lib/Modal/Modal.svelte | 16 + .../src/lib/Navigation/Navigation.svelte | 46 +- .../src/lib/ToolsHeader/ToolsHeader.svelte | 7 + .../src/lib/utils/constants/tools.ts | 71 +++ .../classroomio-com/src/routes/+layout.svelte | 2 +- apps/classroomio-com/src/routes/+page.svelte | 14 +- .../src/routes/pricing/+page.svelte | 4 +- .../src/routes/teach/+page.svelte | 14 +- .../src/routes/tools/+layout.svelte | 40 ++ .../src/routes/tools/+layout.ts | 1 + .../src/routes/tools/+page.svelte | 80 ++++ .../src/routes/tools/name-picker/+page.svelte | 260 +++++++++++ .../src/routes/tools/pomodoro/+page.svelte | 393 ++++++++++++++++ .../src/routes/tools/progress/+page.svelte | 426 ++++++++++++++++++ .../tools/progress/components/Avatar.svelte | 88 ++++ .../progress/components/Background.svelte | 87 ++++ .../progress/components/DownloadButton.svelte | 52 +++ .../tools/progress/components/FullView.svelte | 11 + .../tools/progress/components/Mood.svelte | 100 ++++ .../tools/progress/components/Report.svelte | 142 ++++++ .../routes/tools/progress/components/store.ts | 59 +++ .../src/routes/tools/stopwatch/+page.svelte | 240 ++++++++++ .../tools/stopwatch/components/Timer.svelte | 70 +++ .../src/routes/tools/tic-tac-toe/+page.svelte | 236 ++++++++++ .../tools/tic-tac-toe/components/Board.svelte | 99 ++++ .../tic-tac-toe/components/WinningLine.svelte | 80 ++++ .../tools/tic-tac-toe/components/board.ts | 178 ++++++++ .../tools/tic-tac-toe/components/store.ts | 22 + .../static/free-tools/activity-stopwatch.svg | 9 + .../static/free-tools/jamb.svg | 9 + .../static/free-tools/name-picker.svg | 9 + .../static/free-tools/pomodoro.svg | 25 + .../static/free-tools/pomodoro/add-icon.svg | 3 + .../static/free-tools/pomodoro/done-icon.svg | 3 + .../free-tools/pomodoro/list-play-icon.svg | 3 + .../static/free-tools/pomodoro/menu-icon.svg | 12 + .../static/free-tools/pomodoro/pause-icon.svg | 3 + .../static/free-tools/pomodoro/pen-icon.svg | 11 + .../free-tools/pomodoro/restart-icon.svg | 3 + .../free-tools/pomodoro/settings-icon.svg | 3 + .../free-tools/pomodoro/timer-play-icon.svg | 4 + .../static/free-tools/progress-report.svg | 9 + .../free-tools/progress-report/close-icon.svg | 3 + .../progress-report/full-screen-icon.svg | 12 + .../free-tools/progress-report/hide-icon.svg | 12 + .../progress-report/hover-plus-icon.svg | 7 + .../progress-report/preview-icon.svg | 4 + .../progress-report/question-mark.svg | 4 + .../progress-report/smiley-face-icon.svg | 3 + .../free-tools/stopwatch/loading-timer.svg | 4 + .../free-tools/stopwatch/no-speaker-icon.svg | 11 + .../free-tools/stopwatch/pause-icon.svg | 3 + .../static/free-tools/stopwatch/play-icon.svg | 3 + .../free-tools/stopwatch/reset-icon.svg | 3 + .../free-tools/stopwatch/speaker-icon.svg | 3 + .../static/free-tools/tic-tac.svg | 9 + .../free-tools/tic-tac/computer-icon.svg | 11 + .../free-tools/tic-tac/restart-icon.svg | 3 + .../static/free-tools/tic-tac/tic-tac-bg.svg | 98 ++++ .../static/free-tools/tic-tac/tic-tac-o.svg | 3 + .../free-tools/tic-tac/tic-tac-start-icon.svg | 21 + .../static/free-tools/tic-tac/tic-tac-x.svg | 3 + .../free-tools/tic-tac/winner-star-icon.svg | 10 + .../static/free-tools/waec.svg | 9 + .../classroomio-com/static/socials-avatar.png | Bin 0 -> 5536 bytes apps/classroomio-com/static/sort-icon.svg | 10 + apps/classroomio-com/static/tools-hero-bg.svg | 28 ++ apps/classroomio-com/static/unsort-icon.svg | 10 + apps/dashboard/README.md | 2 +- .../components/Buttons/Logout/index.svelte | 30 -- .../src/lib/components/LMS/SideBar.svelte | 148 +++--- .../components/LMS/components/Profile.svelte | 2 - .../components/Org/ProfileMenu/Menu.svelte | 165 +++++++ .../components/Org/ProfileMenu/index.svelte | 31 ++ .../components/Org/Settings/Profile.svelte | 2 - .../lib/components/Org/Settings/index.svelte | 19 +- .../src/lib/components/Org/SideBar.svelte | 238 +++++----- .../lib/components/Org/{store.js => store.ts} | 8 + .../src/lib/utils/translations/de.json | 11 + .../src/lib/utils/translations/en.json | 11 + .../src/lib/utils/translations/es.json | 11 + .../src/lib/utils/translations/fr.json | 11 + .../src/lib/utils/translations/hi.json | 11 + .../src/lib/utils/translations/pt.json | 11 + .../src/lib/utils/translations/ru.json | 11 + .../src/lib/utils/translations/vi.json | 11 + .../src/routes/org/[slug]/+layout.svelte | 2 + .../src/routes/profile/[id]/+page.svelte | 2 - apps/dashboard/static/progress.svg | 9 + apps/dashboard/static/tictac.svg | 10 + apps/dashboard/static/timer.svg | 9 + apps/docs/pages/what-is-classroomio.mdx | 2 +- pnpm-lock.yaml | 5 +- 106 files changed, 3778 insertions(+), 478 deletions(-) delete mode 100644 apps/classroomio-com/src/lib/Hero/ImageCompare.svelte rename apps/classroomio-com/src/lib/{Body/Section.svelte => Home/CoreFeatureSection.svelte} (100%) rename apps/classroomio-com/src/lib/{Body/Body.svelte => Home/CoreFeatures.svelte} (98%) rename apps/classroomio-com/src/lib/{Faq => Home}/Faq.svelte (100%) rename apps/classroomio-com/src/lib/{Hero => Home}/Hero.svelte (100%) rename apps/classroomio-com/src/lib/{MoreFeatures => Home}/MoreFeatures.svelte (65%) rename apps/classroomio-com/src/lib/{StudentDashboard => Home}/StudentDashboard.svelte (100%) rename apps/classroomio-com/src/lib/{Testimonial => Home}/Testimonial.svelte (100%) rename apps/classroomio-com/src/lib/{Faq => Home}/faqs.js (100%) create mode 100644 apps/classroomio-com/src/lib/Modal/Modal.svelte create mode 100644 apps/classroomio-com/src/lib/ToolsHeader/ToolsHeader.svelte create mode 100644 apps/classroomio-com/src/lib/utils/constants/tools.ts create mode 100644 apps/classroomio-com/src/routes/tools/+layout.svelte create mode 100644 apps/classroomio-com/src/routes/tools/+layout.ts create mode 100644 apps/classroomio-com/src/routes/tools/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/name-picker/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/pomodoro/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/Avatar.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/Background.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/DownloadButton.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/FullView.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/Mood.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/Report.svelte create mode 100644 apps/classroomio-com/src/routes/tools/progress/components/store.ts create mode 100644 apps/classroomio-com/src/routes/tools/stopwatch/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/stopwatch/components/Timer.svelte create mode 100644 apps/classroomio-com/src/routes/tools/tic-tac-toe/+page.svelte create mode 100644 apps/classroomio-com/src/routes/tools/tic-tac-toe/components/Board.svelte create mode 100644 apps/classroomio-com/src/routes/tools/tic-tac-toe/components/WinningLine.svelte create mode 100644 apps/classroomio-com/src/routes/tools/tic-tac-toe/components/board.ts create mode 100644 apps/classroomio-com/src/routes/tools/tic-tac-toe/components/store.ts create mode 100644 apps/classroomio-com/static/free-tools/activity-stopwatch.svg create mode 100644 apps/classroomio-com/static/free-tools/jamb.svg create mode 100644 apps/classroomio-com/static/free-tools/name-picker.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/add-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/done-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/list-play-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/menu-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/pause-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/pen-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/restart-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/settings-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/pomodoro/timer-play-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/close-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/full-screen-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/hide-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/hover-plus-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/preview-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/question-mark.svg create mode 100644 apps/classroomio-com/static/free-tools/progress-report/smiley-face-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/loading-timer.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/no-speaker-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/pause-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/play-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/reset-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/stopwatch/speaker-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/computer-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/restart-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/tic-tac-bg.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/tic-tac-o.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/tic-tac-start-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/tic-tac-x.svg create mode 100644 apps/classroomio-com/static/free-tools/tic-tac/winner-star-icon.svg create mode 100644 apps/classroomio-com/static/free-tools/waec.svg create mode 100644 apps/classroomio-com/static/socials-avatar.png create mode 100644 apps/classroomio-com/static/sort-icon.svg create mode 100644 apps/classroomio-com/static/tools-hero-bg.svg create mode 100644 apps/classroomio-com/static/unsort-icon.svg delete mode 100644 apps/dashboard/src/lib/components/Buttons/Logout/index.svelte create mode 100644 apps/dashboard/src/lib/components/Org/ProfileMenu/Menu.svelte create mode 100644 apps/dashboard/src/lib/components/Org/ProfileMenu/index.svelte rename apps/dashboard/src/lib/components/Org/{store.js => store.ts} (55%) create mode 100644 apps/dashboard/static/progress.svg create mode 100644 apps/dashboard/static/tictac.svg create mode 100644 apps/dashboard/static/timer.svg diff --git a/apps/classroomio-com/package.json b/apps/classroomio-com/package.json index fa5bb6e8..1584acbb 100644 --- a/apps/classroomio-com/package.json +++ b/apps/classroomio-com/package.json @@ -17,7 +17,7 @@ "carbon-icons-svelte": "^12.3.0", "mdsvex": "^0.11.0", "postcss": "^8.4.29", - "svelte": "^4.0.5", + "svelte": "^4.1.2", "svelte-check": "^3.4.3", "svelte-sequential-preprocessor": "^2.0.1", "tailwindcss": "^3.3.3", @@ -26,6 +26,7 @@ }, "type": "module", "dependencies": { + "html-to-image": "^1.11.11", "just-extend": "^6.2.0", "posthog-node": "^3.1.3", "rehype-slug": "^6.0.0", diff --git a/apps/classroomio-com/src/app.css b/apps/classroomio-com/src/app.css index 4c2a94f9..faa3b2f1 100644 --- a/apps/classroomio-com/src/app.css +++ b/apps/classroomio-com/src/app.css @@ -106,6 +106,14 @@ li { background-image: url('/hero-bg.svg'); } +.tools-hero-bg { + background-image: url('/tools-hero-bg.svg'); +} +@media (min-width: 760px) { + .tools-hero-bg { + min-height: 350px; + } +} .cio-bg-blue { background: rgb(2, 51, 189); background-size: cover; diff --git a/apps/classroomio-com/src/app.html b/apps/classroomio-com/src/app.html index 8d0e8292..fe869548 100644 --- a/apps/classroomio-com/src/app.html +++ b/apps/classroomio-com/src/app.html @@ -24,8 +24,7 @@ - + diff --git a/apps/classroomio-com/src/lib/Footer/Footer.svelte b/apps/classroomio-com/src/lib/Footer/Footer.svelte index 9618e552..5752e0d6 100644 --- a/apps/classroomio-com/src/lib/Footer/Footer.svelte +++ b/apps/classroomio-com/src/lib/Footer/Footer.svelte @@ -17,7 +17,7 @@

Launch Your Online Bootcamp In Minutes
- The easiest way to launch and scale your online bootcamp + ClassroomIO is the easiest way to grow your teaching business.

+
+
+
+

+ Play With Our Free Tools +

+

+ Innovative tools to help you aid you example preparation, as well as making learning + more fun for students and educator looking for engaging resources. +

+
+ + {#each freeTools as tool} + + +
+

{tool.title}

+

+ {tool.subText} +

+
+
+ {/each} +
+ +
diff --git a/apps/classroomio-com/src/lib/StudentDashboard/StudentDashboard.svelte b/apps/classroomio-com/src/lib/Home/StudentDashboard.svelte similarity index 100% rename from apps/classroomio-com/src/lib/StudentDashboard/StudentDashboard.svelte rename to apps/classroomio-com/src/lib/Home/StudentDashboard.svelte diff --git a/apps/classroomio-com/src/lib/Testimonial/Testimonial.svelte b/apps/classroomio-com/src/lib/Home/Testimonial.svelte similarity index 100% rename from apps/classroomio-com/src/lib/Testimonial/Testimonial.svelte rename to apps/classroomio-com/src/lib/Home/Testimonial.svelte diff --git a/apps/classroomio-com/src/lib/Faq/faqs.js b/apps/classroomio-com/src/lib/Home/faqs.js similarity index 100% rename from apps/classroomio-com/src/lib/Faq/faqs.js rename to apps/classroomio-com/src/lib/Home/faqs.js diff --git a/apps/classroomio-com/src/lib/Modal/Modal.svelte b/apps/classroomio-com/src/lib/Modal/Modal.svelte new file mode 100644 index 00000000..010e751d --- /dev/null +++ b/apps/classroomio-com/src/lib/Modal/Modal.svelte @@ -0,0 +1,16 @@ + + +{#if open} +
+ +
+
+ +
+
+{/if} diff --git a/apps/classroomio-com/src/lib/Navigation/Navigation.svelte b/apps/classroomio-com/src/lib/Navigation/Navigation.svelte index accdd37e..2839f575 100644 --- a/apps/classroomio-com/src/lib/Navigation/Navigation.svelte +++ b/apps/classroomio-com/src/lib/Navigation/Navigation.svelte @@ -52,7 +52,7 @@
- + {/if} + { - handleShowNav(); - }} - href="/pricing" - class:active={activeLink.startsWith('/pricing')} + on:click={handleShowNav} + href="/tools" > -
  • Pricing
  • +
  • Free Tools
  • - { handleShowNav(); @@ -234,7 +239,7 @@ target="_blank" >
  • Docs
  • -
    + --> { @@ -245,6 +250,17 @@ >
  • Blog
  • + + { + handleShowNav(); + }} + href="/pricing" + class:active={activeLink.startsWith('/pricing')} + > +
  • Pricing
  • +
    { diff --git a/apps/classroomio-com/src/lib/ToolsHeader/ToolsHeader.svelte b/apps/classroomio-com/src/lib/ToolsHeader/ToolsHeader.svelte new file mode 100644 index 00000000..a45ffb80 --- /dev/null +++ b/apps/classroomio-com/src/lib/ToolsHeader/ToolsHeader.svelte @@ -0,0 +1,7 @@ + + +
    + +
    diff --git a/apps/classroomio-com/src/lib/utils/constants/tools.ts b/apps/classroomio-com/src/lib/utils/constants/tools.ts new file mode 100644 index 00000000..07250ab5 --- /dev/null +++ b/apps/classroomio-com/src/lib/utils/constants/tools.ts @@ -0,0 +1,71 @@ +interface Tool { + src: string; + title: string; + subText: string; + slug: string; + show: boolean; + showFeature: boolean; +} + +export const tools: Tool[] = [ + { + src: '/free-tools/progress-report.svg', + title: 'Progress Report', + subText: 'Monitor your progress with a system to check and share your progress with others', + slug: 'progress', + show: true, + showFeature: true + }, + { + src: '/free-tools/pomodoro.svg', + title: 'Pomodoro Timer', + subText: + 'Make your workday more engaging and effective with the Pomodoro timer, break work into 25-minute focused intervals called "pomodoros".', + slug: 'pomodoro', + show: true, + showFeature: false + }, + { + src: '/free-tools/name-picker.svg', + title: 'Random Name Picker', + subText: 'Effortlessly choose names for class participation or group activities', + slug: 'name-picker', + show: true, + showFeature: false + }, + { + src: '/free-tools/activity-stopwatch.svg', + title: 'Activity Stopwatch', + subText: + 'Stay on track and enhance productivity with our customizable stopwatch for timed tasks, quizzes, and study sessions', + slug: 'stopwatch', + show: true, + showFeature: true + }, + { + src: '/free-tools/tic-tac.svg', + title: 'Tic tac toe game', + subText: + "More than just a game; it's an educational tool that teaches pattern recognition, and decision-making.", + slug: 'tic-tac-toe', + show: true, + showFeature: true + }, + { + src: '/free-tools/waec.svg', + title: 'WAEC Practice tool', + subText: 'Ace your WAEC exams with comprehensive study materials, past questions', + slug: 'waec', + show: false, + showFeature: false + }, + { + src: '/free-tools/jamb.svg', + title: 'JAMB Practice tool', + subText: + 'Prepare for JAMB with past questions and instant feedback for effective exam readiness', + slug: 'jamb', + show: false, + showFeature: false + } +]; diff --git a/apps/classroomio-com/src/routes/+layout.svelte b/apps/classroomio-com/src/routes/+layout.svelte index c72af3c1..0cbfa93e 100644 --- a/apps/classroomio-com/src/routes/+layout.svelte +++ b/apps/classroomio-com/src/routes/+layout.svelte @@ -16,7 +16,7 @@ -
    +
    diff --git a/apps/classroomio-com/src/routes/+page.svelte b/apps/classroomio-com/src/routes/+page.svelte index 100abe3c..69245c22 100644 --- a/apps/classroomio-com/src/routes/+page.svelte +++ b/apps/classroomio-com/src/routes/+page.svelte @@ -1,10 +1,10 @@ - + diff --git a/apps/classroomio-com/src/routes/pricing/+page.svelte b/apps/classroomio-com/src/routes/pricing/+page.svelte index 5fc3b36d..5d2d0a20 100644 --- a/apps/classroomio-com/src/routes/pricing/+page.svelte +++ b/apps/classroomio-com/src/routes/pricing/+page.svelte @@ -186,9 +186,9 @@ diff --git a/apps/classroomio-com/src/routes/teach/+page.svelte b/apps/classroomio-com/src/routes/teach/+page.svelte index 43da5cf8..537e9a79 100644 --- a/apps/classroomio-com/src/routes/teach/+page.svelte +++ b/apps/classroomio-com/src/routes/teach/+page.svelte @@ -77,11 +77,7 @@ Teach | ClassroomIO - + @@ -99,7 +95,7 @@ name="twitter:description" content="On ClassroomIO you can make side income while doing what you love." /> - +
    @@ -113,7 +109,7 @@ Register @@ -169,7 +165,7 @@ Get Started diff --git a/apps/classroomio-com/src/routes/tools/+layout.svelte b/apps/classroomio-com/src/routes/tools/+layout.svelte new file mode 100644 index 00000000..17f18e45 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/+layout.svelte @@ -0,0 +1,40 @@ + + + + Free Tools | ClassroomIO + + + + + + + + + + + + + + diff --git a/apps/classroomio-com/src/routes/tools/+layout.ts b/apps/classroomio-com/src/routes/tools/+layout.ts new file mode 100644 index 00000000..189f71e2 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; diff --git a/apps/classroomio-com/src/routes/tools/+page.svelte b/apps/classroomio-com/src/routes/tools/+page.svelte new file mode 100644 index 00000000..0f34bc96 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/+page.svelte @@ -0,0 +1,80 @@ + + +
    + + +
    +

    + Explore our free tools +

    +

    + Innovative tools to help you aid you example preparation, as well as making learning more + fun for students and educator looking for engaging resources. +

    + +
    + + Progress Report + Activity Stopwatch logo + Name picker logo + Tic tac logo + Pomodoro Timer logo + +
    +
    +
    + +
    +

    Featured Tools

    + +
    + {#each freeTools as tool} + + +
    +

    {tool.title}

    +

    + {tool.subText} +

    +
    +
    + {/each} +
    +
    +
    diff --git a/apps/classroomio-com/src/routes/tools/name-picker/+page.svelte b/apps/classroomio-com/src/routes/tools/name-picker/+page.svelte new file mode 100644 index 00000000..913251ff --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/name-picker/+page.svelte @@ -0,0 +1,260 @@ + + + + Random Name Picker | ClassroomIO + + + + + + + + + + + +
    + + +

    Random Name Picker

    +

    + Use this online name picker to draw a random name from a list of names, or to draw several + names randomly out of a list. You can use it as a name randomizer for a class activities. +

    +
    + +
    +
    +

    List of names

    + + +
    + +
    + + +
    + + +
    + +
    + + +

    + name count: {wordCount} +

    +
    +

    Each name must be separated by a comma

    + +
    +

    Number of Names

    + +
    + + +
    +
    + + +
    + + {#if selectedNames.length > 0} +

    Selected Names

    + {/if} +
    + + + {#if selectedNames.length > 0 && !avatarUrlsFetched} +
    +

    Loading...

    +
    + {/if} + + + {#if selectedNames.length > 0 && avatarUrlsFetched} +
    +
      + {#each selectedNames as name, index} +
    • +
      + +

      + {name} +

      +
      +
    • + {/each} +
    + +
    + + +
    +
    + {/if} +
    +
    +
    diff --git a/apps/classroomio-com/src/routes/tools/pomodoro/+page.svelte b/apps/classroomio-com/src/routes/tools/pomodoro/+page.svelte new file mode 100644 index 00000000..9a1b04f8 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/pomodoro/+page.svelte @@ -0,0 +1,393 @@ + + + + Pomodoro Timer | ClassroomIO + + + + + + + + + + + +
    + + +

    Pomodoro Timer

    +

    + Make your workday more engaging and effective with the Pomodoro timer, break work into + 25-minute focused intervals called "pomodoros," followed by 5-minute breaks. take a longer + break. +

    +
    + +
    + +
    + +
    + + + +
    + + +

    {countdownDisplay}

    + + +
    + + + + + + + + +
    +
    + + +
    +

    + To do list +

    + +
    + +
    + {#each todoList as todo, i} +
    + {#if todo.isEditing} +
    setEditing(i, false)}> +

    Pomodoro name

    + +
    + + +
    +
    + {:else} +
    +
    +

    {todo.content}

    + + +
    + + + + + {#if todo.isVisible} +
      + + +
    + {/if} +
    +
    + +
    +

    + {todo.time} +

    + + +
    +
    + {/if} +
    + {/each} +
    + + + +
    +
    +
    +
    + + diff --git a/apps/classroomio-com/src/routes/tools/progress/+page.svelte b/apps/classroomio-com/src/routes/tools/progress/+page.svelte new file mode 100644 index 00000000..f3f40965 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/+page.svelte @@ -0,0 +1,426 @@ + + + + Random Name Picker | ClassroomIO + + + + + + + + + + + +
    + + +

    Progress Report

    +

    + Generate cool reports of your learning progress. Share reports with your network for + collaborative learning +

    +
    + + + + + + + +
    + + {#if showSetter} +
    + +
    + +
    + + +
    +

    Add your name

    + handleInputChange(event, 'name')} + placeholder="Enter your name here" + class="w-full border my-3 py-2 px-3 outline-none rounded-sm bg-[#F1F2F4] text-xs placeholder:text-sm placeholder:text-[#ADADAD]" + /> +
    + + +
    +

    Select your mood

    + +
    + + +
    +

    What are you learning?

    + +

    {remainingChars} characters remaining

    +
    + + +
    +

    Estimate your progress

    +
    + handleInputChange(event, 'progress')} + style="background: linear-gradient(to right, #0F62FE {$htmlBody.progress}%, #ccc {$htmlBody.progress}%);" + /> +

    {$htmlBody.progress}%

    +
    +
    + + +
    +
    +

    Choose your avatar

    + +
    + + +
    +

    Choose your background

    + +
    +
    + +
    + {/if} + + + +
    + + + {#if showReport} + +
    + +
    + + + +
    + + + +
    +

    Share on image on social media:

    + +
    + + + +
    +
    +
    + {/if} +
    +
    +
    + + diff --git a/apps/classroomio-com/src/routes/tools/progress/components/Avatar.svelte b/apps/classroomio-com/src/routes/tools/progress/components/Avatar.svelte new file mode 100644 index 00000000..53028489 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/Avatar.svelte @@ -0,0 +1,88 @@ + + + + +
    +

    Choose your Avatars

    + +
    + + +
    + {#each avatars as avatar, index} + + {/each} +
    + +
    diff --git a/apps/classroomio-com/src/routes/tools/progress/components/Background.svelte b/apps/classroomio-com/src/routes/tools/progress/components/Background.svelte new file mode 100644 index 00000000..2e68365c --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/Background.svelte @@ -0,0 +1,87 @@ + + + + +
    +

    Choose your Background

    + +
    + + +
    + {#each backgrounds as background} + + {/each} +
    + +
    diff --git a/apps/classroomio-com/src/routes/tools/progress/components/DownloadButton.svelte b/apps/classroomio-com/src/routes/tools/progress/components/DownloadButton.svelte new file mode 100644 index 00000000..0693448a --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/DownloadButton.svelte @@ -0,0 +1,52 @@ + + + diff --git a/apps/classroomio-com/src/routes/tools/progress/components/FullView.svelte b/apps/classroomio-com/src/routes/tools/progress/components/FullView.svelte new file mode 100644 index 00000000..ca5555b7 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/FullView.svelte @@ -0,0 +1,11 @@ + + + + + + + diff --git a/apps/classroomio-com/src/routes/tools/progress/components/Mood.svelte b/apps/classroomio-com/src/routes/tools/progress/components/Mood.svelte new file mode 100644 index 00000000..391cc241 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/Mood.svelte @@ -0,0 +1,100 @@ + + + + +
    +

    Choose your Mood

    + +
    + + +
    + {#each moods as mood} + + {/each} +
    + +
    diff --git a/apps/classroomio-com/src/routes/tools/progress/components/Report.svelte b/apps/classroomio-com/src/routes/tools/progress/components/Report.svelte new file mode 100644 index 00000000..7330a4df --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/Report.svelte @@ -0,0 +1,142 @@ + + +
    + + {#if $openModal.showFullscreenButton} + {#if $openModal.fullscreen} + + {:else} + + {/if} + {/if} + +
    + +
    +
    + + + + + {#if $htmlBody.name || $htmlBody.mood.text} +
    + {$htmlBody.name} + + {#if $htmlBody.mood.text} + +

    + is {$htmlBody.mood.text} +

    + {$htmlBody.mood.text} +
    + {/if} +
    + {:else} +

    + Add your name +

    + {/if} + + + + {$htmlBody.learning} + + + +
    +
    +
    +
    +

    Progress Achieved: {$htmlBody.progress}%

    +
    +
    +
    + +
    + classroomio logo +

    ClassroomIO.com

    +
    + +
    +
    + + + diff --git a/apps/classroomio-com/src/routes/tools/progress/components/store.ts b/apps/classroomio-com/src/routes/tools/progress/components/store.ts new file mode 100644 index 00000000..a2fba3a4 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/progress/components/store.ts @@ -0,0 +1,59 @@ +import { derived, writable } from 'svelte/store'; +import type { Writable } from 'svelte/store'; + +interface OpenModal { + avatar: boolean; + background: boolean; + fullscreen: boolean; + showFullscreenButton: boolean; + mood: boolean; +} + +export interface HtmlBody { + name: string; + learning: string; + progress: number; + avatar: string; + background: string; + mood: { + text: string; + iconSrc: string; + }; +} + +// store for the node binded to the report component for the component to image conversion +export const nodeStore = writable(null); + +export const openModal: Writable = writable({ + avatar: false, + background: false, + fullscreen: false, + showFullscreenButton: true, + mood: false +}); + +const placeholderLearning = 'Tell us what you are learning'; + +// report html +export const htmlBody: Writable = writable({ + name: '', + learning: placeholderLearning, + progress: 10, + avatar: '', + background: '', + mood: { + text: '', + iconSrc: '' + } +}); + +// a mini validation for the htmlBody store that ensures all fields are filled +export const isFormComplete = derived(htmlBody, ($htmlBody) => { + return !!( + $htmlBody.name.trim() && + $htmlBody.learning.trim() !== placeholderLearning && + $htmlBody.progress > 0 && + $htmlBody.mood.text.trim() && + $htmlBody.mood.iconSrc.trim() + ); +}); diff --git a/apps/classroomio-com/src/routes/tools/stopwatch/+page.svelte b/apps/classroomio-com/src/routes/tools/stopwatch/+page.svelte new file mode 100644 index 00000000..40b7f060 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/stopwatch/+page.svelte @@ -0,0 +1,240 @@ + + + + Activity Stopwatch | ClassroomIO + + + + + + + + + + + +
    + + +

    Activity Stopwatch

    +

    + Stay on track and enhance productivity with our customizable stopwatch for timed tasks, + quizzes, and study sessions. +

    +
    + +
    + + {#if !isNextStep} +
    +
    +
    +

    Name of activity

    + +
    + +
    +

    Set an Activity

    +
    +
    +
    + +

    hrs

    +
    +
    + +
    +
    + +

    mins

    +
    +
    + +
    +
    + +

    sec

    +
    +
    +
    + +
    + +
    +
    +
    +
    + {/if} + + + {#if isNextStep} + + {/if} +
    +
    diff --git a/apps/classroomio-com/src/routes/tools/stopwatch/components/Timer.svelte b/apps/classroomio-com/src/routes/tools/stopwatch/components/Timer.svelte new file mode 100644 index 00000000..2687d04e --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/stopwatch/components/Timer.svelte @@ -0,0 +1,70 @@ + + +
    +
    + + + + + +

    {displayTime}

    +
    + +
    + + + +
    +
    diff --git a/apps/classroomio-com/src/routes/tools/tic-tac-toe/+page.svelte b/apps/classroomio-com/src/routes/tools/tic-tac-toe/+page.svelte new file mode 100644 index 00000000..5100e7a9 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/tic-tac-toe/+page.svelte @@ -0,0 +1,236 @@ + + + + Tic Tac Toe | ClassroomIO + + + + + + + + + + + +
    + + Tic Tac Icon +

    Tic-Tac game

    +

    + More than just a game; it's an educational tool that teaches pattern recognition, and + decision-making. +

    +
    + +
    + + {#if message} +
    +
    + {#if message != 'Tie game!'} + Star icon + {/if} +

    {message}

    +
    + + +
    + {/if} + + + {#if startGame} +
    +
    + + +
    + + + + + +
    +
    + Player 1 + {$scores.X} +
    +
    + Draw + {$scores.draw} +
    +
    + Player 2 + {$scores.O} +
    +
    +
    + + + {:else} +
    + Tic tac toe game icon +
    + + +
    +
    + {/if} +
    +
    + + diff --git a/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/Board.svelte b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/Board.svelte new file mode 100644 index 00000000..9fd15f07 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/Board.svelte @@ -0,0 +1,99 @@ + + +
    + + + {#each game.board as row, rowIndex} + + {#each row as column, columnIndex} + + {/each} + + {/each} + +
    { + game = game.click(rowIndex, columnIndex); + }} + > + {#if column === 'X'} + X icon + {:else if column === 'O'} + O icon + {:else} + + {/if} +
    + + +
    + + diff --git a/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/WinningLine.svelte b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/WinningLine.svelte new file mode 100644 index 00000000..c7ae864c --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/WinningLine.svelte @@ -0,0 +1,80 @@ + + +{#if winner} +
    +{/if} + + diff --git a/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/board.ts b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/board.ts new file mode 100644 index 00000000..31158e2d --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/board.ts @@ -0,0 +1,178 @@ +import { scores, changeToComputer } from './store'; + +let activateComp = false; + +changeToComputer.subscribe((value) => { + if (value && value.change === true) { + activateComp = true; + } else { + activateComp = false; + } +}); + +export function TicTacToe({ onWin, onTie }: { onWin: (winner: any) => void, onTie: () => void }) { + const board = [ + ['', '', ''], + ['', '', ''], + ['', '', ''] + ]; + + let turn = 'X'; + let done = false; + + return { + board, + + click(rowIndex:number, columnIndex:number) { + if (!done && !board[rowIndex][columnIndex]) { + board[rowIndex][columnIndex] = turn; + turn = turn === 'X' ? 'O' : 'X'; + + const winner = getWinner(board); + + if (winner) { + onWin(winner); + done = true; + } else if (isBoardFull(board)) { + onTie(); + scores.update((currentScores) => { + return { ...currentScores, draw: currentScores.draw + 1 }; + }); + done = true; + } else { + if (activateComp) { + const aiMove = getBestMove(board); + if (aiMove) { + board[aiMove.row][aiMove.column] = 'O'; + turn = 'X'; + + const aiWinner = getWinner(board); + if (aiWinner) { + onWin(aiWinner); + done = true; + } else if (isBoardFull(board)) { + onTie(); + scores.update((currentScores) => { + return { ...currentScores, draw: currentScores.draw + 1 }; + }); + done = true; + } + } else { + console.error("AI could not find a valid move."); + } + } + + } + } + + return this; + } + }; +} + +function getWinner(board: string[][]) { + // check rows + for (let row = 0; row < 3; row++) { + if (board[row][0] === board[row][1] && board[row][0] === board[row][2] && board[row][0]) { + return { symbol: board[row][0], direction: 'horizontal', row }; + } + } + + // check columns + for (let column = 0; column < 3; column++) { + if ( + board[0][column] === board[1][column] && + board[0][column] === board[2][column] && + board[0][column] + ) { + return { symbol: board[0][column], direction: 'vertical', column }; + } + } + + // check diagonals + if (board[0][0] === board[1][1] && board[0][0] == board[2][2] && board[0][0]) { + return { symbol: board[0][0], direction: 'diagonal', diagonal: 'top-left-to-bottom-right' }; + } + + if (board[0][2] === board[1][1] && board[0][2] == board[2][0] && board[0][2]) { + return { symbol: board[0][2], direction: 'diagonal', diagonal: 'top-right-to-bottom-left' }; + } + + // no winner + return null; +} + +function isBoardFull(board: string[][]) { + for (let row = 0; row < 3; row++) { + for (let column = 0; column < 3; column++) { + if (!board[row][column]) { + return false; + } + } + } + + return true; +} + +function getBestMove(board: string[][]) { + let bestScore = -Infinity; + let move; + + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + // check if cell is empty + if (board[i][j] === '') { + board[i][j] = 'O'; // make the move + let score = minimax(board, 0, false); // call minimax on the new board + board[i][j] = ''; // undo the move + if (score > bestScore) { + bestScore = score; + move = { row: i, column: j }; + } + } + } + } + + return move; +} + +function minimax(board: string[][], depth: number, isMaximizing: boolean) { + const result = getWinner(board); + if (result !== null) { + if (result.symbol === 'O') { + return 10 - depth; // ai wins + } else if (result.symbol === 'X') { + return depth - 10; // player wins + } else { + return 0; // draw + } + } + + if (isMaximizing) { + let bestScore = -Infinity; + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + if (board[i][j] === '') { + board[i][j] = 'O'; + let score = minimax(board, depth + 1, false); + board[i][j] = ''; + bestScore = Math.max(score, bestScore); + } + } + } + return bestScore; + } else { + let bestScore = Infinity; + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + if (board[i][j] === '') { + board[i][j] = 'X'; + let score = minimax(board, depth + 1, true); + board[i][j] = ''; + bestScore = Math.min(score, bestScore); + } + } + } + return bestScore; + } +} diff --git a/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/store.ts b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/store.ts new file mode 100644 index 00000000..ee8dfc80 --- /dev/null +++ b/apps/classroomio-com/src/routes/tools/tic-tac-toe/components/store.ts @@ -0,0 +1,22 @@ +import { writable } from 'svelte/store'; +import type {Writable} from 'svelte/store' + +interface Scores { + X: number; + O: number; + draw: number; +} + +interface ChangeToComputer { + change: boolean; +} + +export const scores: Writable = writable({ + X: 0, + O: 0, + draw: 0 +}); + +export const changeToComputer: Writable = writable({ + change: false +}); diff --git a/apps/classroomio-com/static/free-tools/activity-stopwatch.svg b/apps/classroomio-com/static/free-tools/activity-stopwatch.svg new file mode 100644 index 00000000..9b818663 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/activity-stopwatch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/jamb.svg b/apps/classroomio-com/static/free-tools/jamb.svg new file mode 100644 index 00000000..c35cc4e7 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/jamb.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/name-picker.svg b/apps/classroomio-com/static/free-tools/name-picker.svg new file mode 100644 index 00000000..43cdc8c5 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/name-picker.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro.svg b/apps/classroomio-com/static/free-tools/pomodoro.svg new file mode 100644 index 00000000..71b8d4a7 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/add-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/add-icon.svg new file mode 100644 index 00000000..7489cf23 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/add-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/done-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/done-icon.svg new file mode 100644 index 00000000..24de8089 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/done-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/list-play-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/list-play-icon.svg new file mode 100644 index 00000000..765d99a2 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/list-play-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/menu-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/menu-icon.svg new file mode 100644 index 00000000..7a09ab13 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/menu-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/pause-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/pause-icon.svg new file mode 100644 index 00000000..33bb87d0 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/pause-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/pen-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/pen-icon.svg new file mode 100644 index 00000000..df0659f4 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/pen-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/restart-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/restart-icon.svg new file mode 100644 index 00000000..bad57703 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/restart-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/settings-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/settings-icon.svg new file mode 100644 index 00000000..d4b9759c --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/settings-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/pomodoro/timer-play-icon.svg b/apps/classroomio-com/static/free-tools/pomodoro/timer-play-icon.svg new file mode 100644 index 00000000..bb09a230 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/pomodoro/timer-play-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report.svg b/apps/classroomio-com/static/free-tools/progress-report.svg new file mode 100644 index 00000000..e118c530 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/close-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/close-icon.svg new file mode 100644 index 00000000..f012c273 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/close-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/full-screen-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/full-screen-icon.svg new file mode 100644 index 00000000..9d2bf8f1 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/full-screen-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/hide-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/hide-icon.svg new file mode 100644 index 00000000..c00d0019 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/hide-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/hover-plus-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/hover-plus-icon.svg new file mode 100644 index 00000000..7ad3d238 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/hover-plus-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/preview-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/preview-icon.svg new file mode 100644 index 00000000..d6aed764 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/preview-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/question-mark.svg b/apps/classroomio-com/static/free-tools/progress-report/question-mark.svg new file mode 100644 index 00000000..29aa3cc3 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/question-mark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/classroomio-com/static/free-tools/progress-report/smiley-face-icon.svg b/apps/classroomio-com/static/free-tools/progress-report/smiley-face-icon.svg new file mode 100644 index 00000000..ee5320df --- /dev/null +++ b/apps/classroomio-com/static/free-tools/progress-report/smiley-face-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/stopwatch/loading-timer.svg b/apps/classroomio-com/static/free-tools/stopwatch/loading-timer.svg new file mode 100644 index 00000000..c96a5f80 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/loading-timer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/apps/classroomio-com/static/free-tools/stopwatch/no-speaker-icon.svg b/apps/classroomio-com/static/free-tools/stopwatch/no-speaker-icon.svg new file mode 100644 index 00000000..fc68ae74 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/no-speaker-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/stopwatch/pause-icon.svg b/apps/classroomio-com/static/free-tools/stopwatch/pause-icon.svg new file mode 100644 index 00000000..dc472fef --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/pause-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/stopwatch/play-icon.svg b/apps/classroomio-com/static/free-tools/stopwatch/play-icon.svg new file mode 100644 index 00000000..42a412c6 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/play-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/stopwatch/reset-icon.svg b/apps/classroomio-com/static/free-tools/stopwatch/reset-icon.svg new file mode 100644 index 00000000..30cc003e --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/reset-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/stopwatch/speaker-icon.svg b/apps/classroomio-com/static/free-tools/stopwatch/speaker-icon.svg new file mode 100644 index 00000000..e9e70c1e --- /dev/null +++ b/apps/classroomio-com/static/free-tools/stopwatch/speaker-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac.svg b/apps/classroomio-com/static/free-tools/tic-tac.svg new file mode 100644 index 00000000..c1b7f004 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/computer-icon.svg b/apps/classroomio-com/static/free-tools/tic-tac/computer-icon.svg new file mode 100644 index 00000000..8702ba5c --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/computer-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/restart-icon.svg b/apps/classroomio-com/static/free-tools/tic-tac/restart-icon.svg new file mode 100644 index 00000000..63e2a968 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/restart-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-bg.svg b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-bg.svg new file mode 100644 index 00000000..52a03bd0 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-bg.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-o.svg b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-o.svg new file mode 100644 index 00000000..69374a75 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-start-icon.svg b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-start-icon.svg new file mode 100644 index 00000000..a2360c51 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-start-icon.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-x.svg b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-x.svg new file mode 100644 index 00000000..c755808a --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/tic-tac-x.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/classroomio-com/static/free-tools/tic-tac/winner-star-icon.svg b/apps/classroomio-com/static/free-tools/tic-tac/winner-star-icon.svg new file mode 100644 index 00000000..d9130f95 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/tic-tac/winner-star-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/classroomio-com/static/free-tools/waec.svg b/apps/classroomio-com/static/free-tools/waec.svg new file mode 100644 index 00000000..eedeeb15 --- /dev/null +++ b/apps/classroomio-com/static/free-tools/waec.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/classroomio-com/static/socials-avatar.png b/apps/classroomio-com/static/socials-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d2ff2edb89edcd474c5045221addef1d574f78 GIT binary patch literal 5536 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 literal 0 HcmV?d00001 diff --git a/apps/classroomio-com/static/sort-icon.svg b/apps/classroomio-com/static/sort-icon.svg new file mode 100644 index 00000000..a305fdad --- /dev/null +++ b/apps/classroomio-com/static/sort-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/classroomio-com/static/tools-hero-bg.svg b/apps/classroomio-com/static/tools-hero-bg.svg new file mode 100644 index 00000000..6d9cd38e --- /dev/null +++ b/apps/classroomio-com/static/tools-hero-bg.svg @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file diff --git a/apps/classroomio-com/static/unsort-icon.svg b/apps/classroomio-com/static/unsort-icon.svg new file mode 100644 index 00000000..308b0949 --- /dev/null +++ b/apps/classroomio-com/static/unsort-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/dashboard/README.md b/apps/dashboard/README.md index 375aaab2..8dbf9fe4 100644 --- a/apps/dashboard/README.md +++ b/apps/dashboard/README.md @@ -12,7 +12,7 @@ ## ✨ About ClassroomIO -ClassroomIO Courses page +ClassroomIO Courses page Streamline training for everyone with ClassroomIO.com. Our all-in-one platform empowers bootcamps, educators, and businesses to manage training programs easily. With our platform, anyone can run multiple classes and cohorts all from one UI. The application is mobile-first, which means that students can access your lesson materials from any device. diff --git a/apps/dashboard/src/lib/components/Buttons/Logout/index.svelte b/apps/dashboard/src/lib/components/Buttons/Logout/index.svelte deleted file mode 100644 index 597aa905..00000000 --- a/apps/dashboard/src/lib/components/Buttons/Logout/index.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/apps/dashboard/src/lib/components/LMS/SideBar.svelte b/apps/dashboard/src/lib/components/LMS/SideBar.svelte index b7255b8c..9b67fd37 100644 --- a/apps/dashboard/src/lib/components/LMS/SideBar.svelte +++ b/apps/dashboard/src/lib/components/LMS/SideBar.svelte @@ -3,16 +3,17 @@ import HelpIcon from 'carbon-icons-svelte/lib/Help.svelte'; import LicenseDraft from 'carbon-icons-svelte/lib/LicenseDraft.svelte'; import Explore from 'carbon-icons-svelte/lib/Explore.svelte'; - import Settings from 'carbon-icons-svelte/lib/Settings.svelte'; import HomeIcon from '$lib/components/Icons/HomeIcon.svelte'; import CourseIcon from '$lib/components/Icons/CourseIcon.svelte'; import CommunityIcon from '$lib/components/Icons/CommunityIcon.svelte'; import Avatar from '$lib/components/Avatar/index.svelte'; import { profile } from '$lib/utils/store/user'; import { NavClasses } from '$lib/utils/constants/reusableClass'; - import { sideBar } from '$lib/components/Org/store'; + import { profileMenu, sideBar } from '$lib/components/Org/store'; import { t } from '$lib/utils/functions/translations'; import { currentOrg } from '$lib/utils/store/org'; + import { ChevronRight } from 'carbon-icons-svelte'; + import ProfileMenu from '$lib/components/Org/ProfileMenu/index.svelte'; interface SideLinks { name: string; @@ -73,70 +74,87 @@ }; - + + + +
    diff --git a/apps/dashboard/src/lib/components/LMS/components/Profile.svelte b/apps/dashboard/src/lib/components/LMS/components/Profile.svelte index 4668376f..a8114286 100644 --- a/apps/dashboard/src/lib/components/LMS/components/Profile.svelte +++ b/apps/dashboard/src/lib/components/LMS/components/Profile.svelte @@ -7,7 +7,6 @@ import { supabase } from '$lib/utils/functions/supabase'; import { profile } from '$lib/utils/store/user'; import { snackbar } from '$lib/components/Snackbar/store'; - import LogoutButton from '$lib/components/Buttons/Logout/index.svelte'; import generateUUID from '$lib/utils/functions/generateUUID'; import { t } from '$lib/utils/functions/translations'; import LanguagePicker from '$lib/components/Org/Settings/LanguagePicker.svelte'; @@ -120,6 +119,5 @@ isDisabled={loading} onClick={handleUpdate} /> - diff --git a/apps/dashboard/src/lib/components/Org/ProfileMenu/Menu.svelte b/apps/dashboard/src/lib/components/Org/ProfileMenu/Menu.svelte new file mode 100644 index 00000000..568bd0bd --- /dev/null +++ b/apps/dashboard/src/lib/components/Org/ProfileMenu/Menu.svelte @@ -0,0 +1,165 @@ + + +
    + + {#if !$globalStore.isOrgSite} + + {/if} + + + {#if !$globalStore.isOrgSite} + + {/if} + + +
    diff --git a/apps/dashboard/src/lib/components/Org/ProfileMenu/index.svelte b/apps/dashboard/src/lib/components/Org/ProfileMenu/index.svelte new file mode 100644 index 00000000..1239b05f --- /dev/null +++ b/apps/dashboard/src/lib/components/Org/ProfileMenu/index.svelte @@ -0,0 +1,31 @@ + + +{#if $isMobile} + ($profileMenu.open = false)} + width="w-4/5" + containerClass="h-full !max-h-[70vh] pt-0 pb-2" + headerClass="py-1" + > + + +{:else} + { + console.log('on:click:outside'); + $profileMenu.open = !!$profileMenu.ref?.contains(detail.target); + }} + > + + +{/if} diff --git a/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte b/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte index 1fd4327f..2ae456df 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte @@ -8,7 +8,6 @@ import { supabase } from '$lib/utils/functions/supabase'; import { profile } from '$lib/utils/store/user'; import { snackbar } from '$lib/components/Snackbar/store'; - import LogoutButton from '$lib/components/Buttons/Logout/index.svelte'; import generateUUID from '$lib/utils/functions/generateUUID'; import { t } from '$lib/utils/functions/translations'; import LanguagePicker from './LanguagePicker.svelte'; @@ -129,6 +128,5 @@ isDisabled={loading} onClick={handleUpdate} /> - diff --git a/apps/dashboard/src/lib/components/Org/Settings/index.svelte b/apps/dashboard/src/lib/components/Org/Settings/index.svelte index 1a120aac..e9c439a3 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/index.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/index.svelte @@ -21,24 +21,21 @@ function getSelectedByTab(tabKey = '') { const tab = tabs.find((t) => t.tabKey === tabKey); - return tab ? tab.key : 0; } - function changeRouteOnTabChange(key = 0) { + + function onTabChange(e) { + const key = e.detail; const tab = tabs.find((t) => t.key === key); if (tab) { - return goto(tab.href); + goto(tab.href); } } - onMount(() => { + $: if (browser) { + query = new URLSearchParams($page.url.search); + tabKey = query.get('tab') || ''; selected = getSelectedByTab(tabKey); - }); - - $: { - if (browser) { - changeRouteOnTabChange(selected); - } } $: { @@ -82,7 +79,7 @@ } - + {#each tabs as tab} {/each} diff --git a/apps/dashboard/src/lib/components/Org/SideBar.svelte b/apps/dashboard/src/lib/components/Org/SideBar.svelte index e452331a..30fe3d5e 100644 --- a/apps/dashboard/src/lib/components/Org/SideBar.svelte +++ b/apps/dashboard/src/lib/components/Org/SideBar.svelte @@ -2,7 +2,7 @@ import { page } from '$app/stores'; import HelpIcon from 'carbon-icons-svelte/lib/Help.svelte'; import ForumIcon from 'carbon-icons-svelte/lib/Forum.svelte'; - import { SettingsAdjust } from 'carbon-icons-svelte'; + import { ChevronRight, SettingsAdjust } from 'carbon-icons-svelte'; import PrimaryButton from '$lib/components/PrimaryButton/index.svelte'; import OrgSelector from '$lib/components/OrgSelector/OrgSelector.svelte'; import HomeIcon from '$lib/components/Icons/HomeIcon.svelte'; @@ -11,13 +11,15 @@ import SiteSettingsIcon from '$lib/components/Icons/SiteSettingsIcon.svelte'; import AudienceIcon from '$lib/components/Icons/AudienceIcon.svelte'; import Avatar from '$lib/components/Avatar/index.svelte'; - import { currentOrgPath, currentOrgPlan, isFreePlan } from '$lib/utils/store/org'; + import { currentOrgPath, isFreePlan } from '$lib/utils/store/org'; + import { isOrgAdmin } from '$lib/utils/store/org'; import { profile } from '$lib/utils/store/user'; import { NavClasses } from '$lib/utils/constants/reusableClass'; - import { sideBar } from './store'; + import { sideBar, profileMenu } from './store'; import { t } from '$lib/utils/functions/translations'; import { goto } from '$app/navigation'; + import ProfileMenu from '$lib/components/Org/ProfileMenu/index.svelte'; interface menuItems { label: string; @@ -45,43 +47,6 @@ goto(window.location.pathname + '?upgrade=true'); }; - // $: { - // menuItems = [ - // { - // path: '', - // label: 'Dashboard', - // show: true - // }, - // // { - // // path: '/quiz', - // // label: 'Quizzes' - // // }, - // { - // path: '/courses', - // label: 'Courses', - // show: true - // }, - // { - // path: '/community', - // label: 'Community', - // show: true - // }, - // // { - // // path: '/site', - // // label: 'Site settings', - // // }, - // { - // path: '/audience', - // label: 'Audience', - // show: true - // }, - // { - // path: '/setup', - // label: 'Setup', - // show: $isOrgAdmin - // } - // ]; - // } $: menuItems = [ { path: '', @@ -111,99 +76,110 @@ ]; - + +
    diff --git a/apps/dashboard/src/lib/components/Org/store.js b/apps/dashboard/src/lib/components/Org/store.ts similarity index 55% rename from apps/dashboard/src/lib/components/Org/store.js rename to apps/dashboard/src/lib/components/Org/store.ts index 8671ced3..a7b0a62e 100644 --- a/apps/dashboard/src/lib/components/Org/store.js +++ b/apps/dashboard/src/lib/components/Org/store.ts @@ -7,3 +7,11 @@ export const newOrgModal = writable({ export const sideBar = writable({ hidden: true }); + +export const profileMenu = writable<{ + ref?: HTMLDivElement; + open: boolean; +}>({ + ref: undefined, + open: false +}); diff --git a/apps/dashboard/src/lib/utils/translations/de.json b/apps/dashboard/src/lib/utils/translations/de.json index be58b221..d3c82d27 100644 --- a/apps/dashboard/src/lib/utils/translations/de.json +++ b/apps/dashboard/src/lib/utils/translations/de.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Spezialisierung" }, + "profileMenu": { + "profile": "PROFIL", + "current_org": "AKTUELLE ORGANISATION", + "free_tools": "KOSTENLOSE WERKZEUGE", + "progress": "Fortschrittsbericht", + "timer": "Aktivitätstimer", + "tic_tac": "Tictac-Zehe", + "see_more": "Mehr sehen", + "whats_new": "Was ist neu", + "launch_week": "Startwoche" + }, "validations": { "invalid_type_error": "Darf nicht leer sein", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/en.json b/apps/dashboard/src/lib/utils/translations/en.json index 2e42c210..5c65813e 100644 --- a/apps/dashboard/src/lib/utils/translations/en.json +++ b/apps/dashboard/src/lib/utils/translations/en.json @@ -49,7 +49,18 @@ "forgot": "Forgot password?", "login": "Log In" }, + "profileMenu": { + "profile": "PROFILE", + "current_org": "CURRENT ORGANIZATION", + "free_tools": "FREE TOOLS", + "progress": "Progress report", + "timer": "Activity timer", + "tic_tac": "Tictac toe", + "see_more": "See more", + "whats_new": "What's new", + "launch_week": "Launch week" + }, "settings": { "heading": "Settings", "subheadings": { diff --git a/apps/dashboard/src/lib/utils/translations/es.json b/apps/dashboard/src/lib/utils/translations/es.json index 0c2f5974..1121cb92 100644 --- a/apps/dashboard/src/lib/utils/translations/es.json +++ b/apps/dashboard/src/lib/utils/translations/es.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Especialización" }, + "profileMenu": { + "profile": "PERFIL", + "current_org": "ORGANIZACIÓN ACTUAL", + "free_tools": "HERRAMIENTAS GRATUITAS", + "progress": "Informe de progreso", + "timer": "Temporizador de actividad", + "tic_tac": "dedo del pie tres en raya", + "see_more": "Ver más", + "whats_new": "Qué hay de nuevo", + "launch_week": "Semana de lanzamiento" + }, "validations": { "invalid_type_error": "No debe estar vacío", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/fr.json b/apps/dashboard/src/lib/utils/translations/fr.json index 64b6163b..ccf73079 100644 --- a/apps/dashboard/src/lib/utils/translations/fr.json +++ b/apps/dashboard/src/lib/utils/translations/fr.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Spécialisation" }, + "profileMenu": { + "profile": "PROFIL", + "current_org": "ORGANISATION ACTUELLE", + "free_tools": "OUTILS GRATUITS", + "progress": "Rapport d'étape", + "timer": "Minuterie d'activité", + "tic_tac": "Tic-tac", + "see_more": "Voir plus", + "whats_new": "Quoi de neuf", + "launch_week": "Semaine de lancement" + }, "validations": { "invalid_type_error": "Ne doit pas être vide", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/hi.json b/apps/dashboard/src/lib/utils/translations/hi.json index 9ae3539a..5aa96334 100644 --- a/apps/dashboard/src/lib/utils/translations/hi.json +++ b/apps/dashboard/src/lib/utils/translations/hi.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "विशेषज्ञता" }, + "profileMenu": { + "profile": "प्रोफ़ाइल", + "current_org": "वर्तमान संघ", + "free_tools": "मुफ़्त उपकरण", + "progress": "प्रगति रिपोर्ट", + "timer": "गतिविधि टाइमर", + "tic_tac": "टिक टीएसी को पैर की अंगुली", + "see_more": "और देखें", + "whats_new": "नया क्या है", + "launch_week": "लॉन्च सप्ताह" + }, "validations": { "invalid_type_error": "खाली नहीं होना चाहिए", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/pt.json b/apps/dashboard/src/lib/utils/translations/pt.json index a41b3ea2..3dfe7fd8 100644 --- a/apps/dashboard/src/lib/utils/translations/pt.json +++ b/apps/dashboard/src/lib/utils/translations/pt.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Especialização" }, + "profileMenu": { + "profile": "PERFIL", + "current_org": "ORGANIZAÇÃO ATUAL", + "free_tools": "FERRAMENTAS GRATUITAS", + "progress": "Relatório de progresso", + "timer": "Temporizador de atividade", + "tic_tac": "Jogo da velha", + "see_more": "Ver mais", + "whats_new": "O que há de novo", + "launch_week": "Semana de lançamento" + }, "validations": { "invalid_type_error": "Não deve estar vazio", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/ru.json b/apps/dashboard/src/lib/utils/translations/ru.json index 61a452e3..77a13a34 100644 --- a/apps/dashboard/src/lib/utils/translations/ru.json +++ b/apps/dashboard/src/lib/utils/translations/ru.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Специализация" }, + "profileMenu": { + "profile": "ПРОФИЛЬ", + "current_org": "ТЕКУЩАЯ ОРГАНИЗАЦИЯ", + "free_tools": "БЕСПЛАТНЫЕ ИНСТРУМЕНТЫ", + "progress": "Отчет о ходе работы", + "timer": "Таймер активности", + "tic_tac": "Крестики-нолики", + "see_more": "Узнать больше", + "whats_new": "Что нового", + "launch_week": "Неделя запуска" + }, "validations": { "invalid_type_error": "Не должно быть пустым", "email": { diff --git a/apps/dashboard/src/lib/utils/translations/vi.json b/apps/dashboard/src/lib/utils/translations/vi.json index 6e575a81..450ae9cf 100644 --- a/apps/dashboard/src/lib/utils/translations/vi.json +++ b/apps/dashboard/src/lib/utils/translations/vi.json @@ -1326,6 +1326,17 @@ "specialization": { "course_tag": "Chuyên môn" }, + "profileMenu": { + "profile": "HỒ SƠ", + "current_org": "TỔ CHỨC HIỆN TẠI", + "free_tools": "CÔNG CỤ MIỄN PHÍ", + "progress": "Báo cáo tiến trình", + "timer": "Hẹn giờ hoạt động", + "tic_tac": "TIC Tac Toe", + "see_more": "Xem thêm", + "whats_new": "Có gì mới", + "launch_week": "Tuần ra mắt" + }, "validations": { "invalid_type_error": "Không được để trống", "email": { diff --git a/apps/dashboard/src/routes/org/[slug]/+layout.svelte b/apps/dashboard/src/routes/org/[slug]/+layout.svelte index e4d627ef..44627243 100644 --- a/apps/dashboard/src/routes/org/[slug]/+layout.svelte +++ b/apps/dashboard/src/routes/org/[slug]/+layout.svelte @@ -10,6 +10,8 @@ export let data; + let ref = null; + $: if ($currentOrg.id && data.orgName === '*') { const newUrl = $page.url.pathname.replace('*', $currentOrg.siteName); goto(newUrl + $page.url.search); diff --git a/apps/dashboard/src/routes/profile/[id]/+page.svelte b/apps/dashboard/src/routes/profile/[id]/+page.svelte index 2b3b6ce2..67c43955 100644 --- a/apps/dashboard/src/routes/profile/[id]/+page.svelte +++ b/apps/dashboard/src/routes/profile/[id]/+page.svelte @@ -2,7 +2,6 @@ import UserAvatarIcon from 'carbon-icons-svelte/lib/UserAvatar.svelte'; import BookIcon from 'carbon-icons-svelte/lib/Book.svelte'; import TextField from '$lib/components/Form/TextField.svelte'; - import LogoutButton from '$lib/components/Buttons/Logout/index.svelte'; import PrimaryButton from '$lib/components/PrimaryButton/index.svelte'; import UploadImage from '$lib/components/UploadImage/index.svelte'; import { supabase } from '$lib/utils/functions/supabase'; @@ -193,7 +192,6 @@
    -