From 963d899adf7277cfb88b67e883d3fe7dbcaa0aa1 Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Fri, 30 Dec 2022 13:08:54 +0100 Subject: [PATCH] CLASSROOMIO-T-21: Course landing page + editor --- package-lock.json | 181 +++- package.json | 7 + .../components/Poll/components/Poll.svelte | 14 +- src/components/AskPage/AskPage.svelte | 4 +- src/components/AuthUI/index.svelte | 2 +- src/components/Chip/index.svelte | 5 +- .../Lesson/Exercise/DeleteConfirmation.svelte | 4 +- .../Lesson/Exercise/EditMode.svelte | 6 +- .../Lesson/Exercise/MarkExerciseModal.svelte | 2 +- .../Lesson/Exercise/ViewMode.svelte | 4 +- .../components/Lesson/Exercises/index.svelte | 6 +- .../components/Lesson/Materials/index.svelte | 31 +- .../Lesson/store/{lessons.js => lessons.ts} | 26 +- .../Course/components/Navigation/index.svelte | 2 +- .../People/DeleteConfirmation.svelte | 4 +- .../components/People/InviationModal.svelte | 6 +- .../Course/components/Settings/index.svelte | 11 +- src/components/Course/function.js | 6 +- src/components/Course/index.svelte | 2 +- src/components/Course/{store.js => store.ts} | 66 +- src/components/CourseContainer/index.svelte | 4 +- .../components/Editor/AboutUsForm.svelte | 19 - .../components/Editor/Container.svelte | 5 +- .../components/Editor/DescriptionForm.svelte | 17 +- .../components/Editor/GoalsForm.svelte | 17 + .../components/Editor/HeaderForm.svelte | 41 +- .../components/Editor/InstructorForm.svelte | 90 ++ .../components/Editor/PricingForm.svelte | 97 ++ .../components/Editor/RequirementForm.svelte | 17 +- .../components/Editor/SyllabusForm.svelte | 61 -- .../components/Editor/index.svelte | 99 +- .../components/PricingSection.svelte | 147 +++ src/components/CourseLandingPage/constants.ts | 21 +- src/components/CourseLandingPage/index.svelte | 434 +++++--- .../Courses/components/Card/index.svelte | 2 +- .../components/CopyCourseModal/index.svelte | 2 +- .../components/NewCourseModal/index.svelte | 2 +- src/components/Courses/index.svelte | 4 +- src/components/Dropdown/index.svelte | 6 +- src/components/Footer/index.svelte | 15 +- src/components/Form/TextArea.svelte | 5 +- src/components/Form/TextField.svelte | 6 +- src/components/Navigation/index.svelte | 4 +- src/components/PrimaryButton/index.svelte | 8 +- .../Question/{constants.js => constants.ts} | 0 src/components/Tailwindcss.svelte | 1 + src/components/TextEditor/index.svelte | 152 ++- src/routes/_error.svelte | 4 + src/routes/_layout.svelte | 10 +- src/routes/admin.svelte | 6 +- src/routes/ask.svelte | 34 +- src/routes/course/[slug].svelte | 32 +- src/routes/courses/[id]/attendance.svelte | 8 +- src/routes/courses/[id]/index.svelte | 4 +- src/routes/courses/[id]/landingpage.svelte | 24 +- .../lessons/[...lessonParams]/index.svelte | 15 +- src/routes/courses/[id]/lessons/index.svelte | 4 +- src/routes/courses/[id]/marks.svelte | 8 +- src/routes/courses/[id]/people.svelte | 8 +- src/routes/courses/[id]/scoreboard.svelte | 4 +- src/routes/courses/[id]/submissions.svelte | 6 +- src/routes/courses/[id]/timetable.svelte | 4 +- src/routes/forgot.svelte | 3 +- src/routes/index.svelte | 2 +- src/routes/onboarding.svelte | 2 +- src/routes/profile/[id].svelte | 6 +- src/template.html | 9 +- src/utils/constants/routes.ts | 8 +- src/utils/functions/formatYoutubeVideo.ts | 51 + src/utils/functions/{isUUID.js => isUUID.ts} | 8 +- src/utils/functions/toHtml.js | 0 .../services/courses/{index.js => index.ts} | 137 ++- src/utils/types/index.ts | 147 +-- static/css/carbon.css | 1 + static/css/quill.css | 957 ++++++++++++++++++ static/images/certificate-template.png | Bin 0 -> 8148 bytes static/images/certificate-template.svg | 29 + static/images/course-banner-image.png | Bin 0 -> 330319 bytes static/images/course-gift.png | Bin 0 -> 48072 bytes static/images/play_video.png | Bin 0 -> 1339 bytes 80 files changed, 2543 insertions(+), 653 deletions(-) rename src/components/Course/components/Lesson/store/{lessons.js => lessons.ts} (74%) rename src/components/Course/{store.js => store.ts} (57%) delete mode 100644 src/components/CourseLandingPage/components/Editor/AboutUsForm.svelte create mode 100644 src/components/CourseLandingPage/components/Editor/GoalsForm.svelte create mode 100644 src/components/CourseLandingPage/components/Editor/InstructorForm.svelte create mode 100644 src/components/CourseLandingPage/components/Editor/PricingForm.svelte delete mode 100644 src/components/CourseLandingPage/components/Editor/SyllabusForm.svelte create mode 100644 src/components/CourseLandingPage/components/PricingSection.svelte rename src/components/Question/{constants.js => constants.ts} (100%) create mode 100644 src/utils/functions/formatYoutubeVideo.ts rename src/utils/functions/{isUUID.js => isUUID.ts} (58%) create mode 100644 src/utils/functions/toHtml.js rename src/utils/services/courses/{index.js => index.ts} (75%) create mode 100644 static/css/carbon.css create mode 100644 static/css/quill.css create mode 100644 static/images/certificate-template.png create mode 100644 static/images/certificate-template.svg create mode 100644 static/images/course-banner-image.png create mode 100644 static/images/course-gift.png create mode 100644 static/images/play_video.png diff --git a/package-lock.json b/package-lock.json index 07eaf298..9d146ebf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1541,11 +1541,27 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "@types/node": { "version": "15.6.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" }, + "@types/paystack": { + "version": "2.0.1", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/@types/paystack/-/paystack-2.0.1.tgz", + "integrity": "sha512-pM5xu4ahqFSpxNFi5fm/QJtuplUuSg3PzjnMy7XjDapebUJ+Ixw1soUCV7UbqMra9No2WFXn81AcNdtPvc1niw==" + }, + "@types/pluralize": { + "version": "0.0.29", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/@types/pluralize/-/pluralize-0.0.29.tgz", + "integrity": "sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==" + }, "@types/pug": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.4.tgz", @@ -1680,6 +1696,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asap": { + "version": "2.0.6", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1874,7 +1895,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -1945,6 +1965,15 @@ "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.4.0.tgz", "integrity": "sha512-S18o4Y9PqI/uabdlT/jI3MY7XBJjNxnfapFIkjkMwpz6qNxLFZOm2b22OMf4ZYDL9lpNWI+Ih4fEMVPwO1KHFQ==" }, + "carbon-components-svelte": { + "version": "0.70.13", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/carbon-components-svelte/-/carbon-components-svelte-0.70.13.tgz", + "integrity": "sha512-p6wX8004BM6DrrLH1JJWbkR/VybU0gra+jDWlSW1V2aO8XmAz81evnDLZuTrvbHNkEXPiaC+athSjNsBOf0SjA==", + "dev": true, + "requires": { + "flatpickr": "4.6.9" + } + }, "carbon-icons-svelte": { "version": "10.45.1", "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/carbon-icons-svelte/-/carbon-icons-svelte-10.45.1.tgz", @@ -2046,6 +2075,11 @@ } } }, + "clone": { + "version": "2.1.2", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -2331,6 +2365,19 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, "deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", @@ -2347,7 +2394,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -2523,6 +2569,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -2597,6 +2648,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, "fast-glob": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", @@ -2657,6 +2713,12 @@ "pinkie-promise": "^2.0.0" } }, + "flatpickr": { + "version": "4.6.9", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2719,6 +2781,11 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -2757,7 +2824,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2895,8 +2961,15 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } }, "has-unicode": { "version": "2.0.1", @@ -3043,6 +3116,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3065,6 +3147,14 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -3126,6 +3216,15 @@ "@types/estree": "*" } }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3669,11 +3768,19 @@ "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==", "dev": true }, + "object-is": { + "version": "1.1.5", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.2", @@ -3738,6 +3845,11 @@ "no-case": "^2.2.0" } }, + "parchment": { + "version": "1.1.4", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", @@ -3818,6 +3930,15 @@ "pinkie-promise": "^2.0.0" } }, + "paystack": { + "version": "2.0.1", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/paystack/-/paystack-2.0.1.tgz", + "integrity": "sha512-reVONV7ZUMln/iWeM60n0BbogF3/zFWmUrqbKYVNzEAv+p9TcWDCHfNZ2mBGXzIXhyTsNXWwf4wNcXe28btAHw==", + "requires": { + "promise": "^7.1.1", + "request": "^2.79.0" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3846,6 +3967,11 @@ "pinkie": "^2.0.0" } }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + }, "polka": { "version": "1.0.0-next.22", "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/polka/-/polka-1.0.0-next.22.tgz", @@ -3988,6 +4114,14 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "promise": { + "version": "7.3.1", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -4044,6 +4178,29 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, + "quill": { + "version": "1.3.7", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4175,6 +4332,16 @@ "@babel/runtime": "^7.8.4" } }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, "regexparam": { "version": "1.3.0", "resolved": "https://flipplib.jfrog.io/artifactory/api/npm/flipp-npm/regexparam/-/regexparam-1.3.0.tgz", diff --git a/package.json b/package.json index 1a5d0005..17a0c9f1 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "@sentry/tracing": "^6.13.3", "@supabase/supabase-js": "^1.20.0", "@tailwindcss/forms": "^0.3.2", + "@types/paystack": "^2.0.1", + "@types/pluralize": "0.0.29", "body-parser": "^1.19.0", "canvas-confetti": "^1.4.0", "compression": "^1.7.1", @@ -27,7 +29,10 @@ "lodash": "^4.17.21", "marked": "^1.2.7", "node-sass": "^6.0.0", + "paystack": "^2.0.1", + "pluralize": "^8.0.0", "polka": "next", + "quill": "^1.3.7", "sapper-environment": "^1.0.1", "sirv": "^1.0.0", "svelte-easy-crop": "^1.0.4", @@ -47,6 +52,8 @@ "@rollup/plugin-replace": "^2.4.2", "@rollup/plugin-typescript": "^8.3.0", "@tailwindcss/typography": "^0.3.1", + "@types/lodash": "^4.14.191", + "carbon-components-svelte": "^0.70.13", "carbon-icons-svelte": "^10.21.0", "dotenv": "^10.0.0", "postcss": "^8.0.9", diff --git a/src/components/Apps/components/Poll/components/Poll.svelte b/src/components/Apps/components/Poll/components/Poll.svelte index 2060b8ea..c6c5ad2e 100644 --- a/src/components/Apps/components/Poll/components/Poll.svelte +++ b/src/components/Apps/components/Poll/components/Poll.svelte @@ -1,6 +1,6 @@ - - - - -

Description

- diff --git a/src/components/CourseLandingPage/components/Editor/Container.svelte b/src/components/CourseLandingPage/components/Editor/Container.svelte index d1b1d034..e0dd1552 100644 --- a/src/components/CourseLandingPage/components/Editor/Container.svelte +++ b/src/components/CourseLandingPage/components/Editor/Container.svelte @@ -4,14 +4,14 @@ import { isMobile } from '../../../../utils/store/useMobile'; import IconButton from '../../../IconButton/index.svelte'; - let show = true; + export let show = true;
{#if show} -
+
{/if} @@ -46,6 +46,7 @@ min-width: 300px; max-width: 300px; top: 0; + left: 0; border-right: 1px solid var(--border-color); background-color: rgb(250, 251, 252); diff --git a/src/components/CourseLandingPage/components/Editor/DescriptionForm.svelte b/src/components/CourseLandingPage/components/Editor/DescriptionForm.svelte index acf92a2a..83c03cac 100644 --- a/src/components/CourseLandingPage/components/Editor/DescriptionForm.svelte +++ b/src/components/CourseLandingPage/components/Editor/DescriptionForm.svelte @@ -1,6 +1,17 @@ - +
+ { + const _course = cloneDeep(course); + set(_course, 'metadata.description', html); + course = _course; + }} + /> +
diff --git a/src/components/CourseLandingPage/components/Editor/GoalsForm.svelte b/src/components/CourseLandingPage/components/Editor/GoalsForm.svelte new file mode 100644 index 00000000..2dfb961b --- /dev/null +++ b/src/components/CourseLandingPage/components/Editor/GoalsForm.svelte @@ -0,0 +1,17 @@ + + +
+ { + const _course = cloneDeep(course); + set(_course, 'metadata.goals', html); + course = _course; + }} + /> +
diff --git a/src/components/CourseLandingPage/components/Editor/HeaderForm.svelte b/src/components/CourseLandingPage/components/Editor/HeaderForm.svelte index f05c2444..a07cd021 100644 --- a/src/components/CourseLandingPage/components/Editor/HeaderForm.svelte +++ b/src/components/CourseLandingPage/components/Editor/HeaderForm.svelte @@ -1,38 +1,31 @@ -