UNPKG

course-kit

Version:
563 lines (554 loc) 27.6 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { Course: () => Course }); module.exports = __toCommonJS(src_exports); var import_prismjs2 = __toESM(require("prismjs")); // src/components/Course.tsx var import_react4 = __toESM(require("react")); // src/components/HeaderSection.tsx var import_react = require("react"); var import_react_markdown = __toESM(require("react-markdown")); var import_rehype_raw = __toESM(require("rehype-raw")); var import_jsx_runtime = require("react/jsx-runtime"); var HeaderSection = (props) => { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "coursekit-px-2 md:coursekit-px-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "coursekit-flex coursekit-flex-col coursekit-items-center coursekit-pb-16", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "coursekit-text-5xl md:coursekit-text-6xl coursekit-font-bold coursekit-pt-32 coursekit-text-center", children: props.headline }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "coursekit-mt-4 coursekit-text-xl md:coursekit-text-2xl coursekit-text-center", children: props.subheadline }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)( "img", { className: "coursekit-pt-16 md:coursekit-max-w-7xl md:coursekit-px-8 coursekit-pb-8 coursekit-max-h-[600px]", src: props.image.startsWith("http") ? props.image : `https://hungrimind.com/${props.image}` } ), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "coursekit-w-full coursekit-max-w-4xl content-section ", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_markdown.default, { rehypePlugins: [import_rehype_raw.default], children: props.content }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "coursekit-flex coursekit-justify-center coursekit-p-2 coursekit-space-x-4", children: props.links.map((link, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)( "a", { href: link.url, target: "_blank", className: "coursekit-py-2.5 coursekit-px-5 coursekit-mt-2 coursekit-font-medium coursekit-text-center coursekit-text-white coursekit-bg-black dark:coursekit-text-black dark:coursekit-bg-white coursekit-rounded", children: (() => { switch (link.type) { case "github": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: "Course Code" }); case "discord": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: "Join Community" }); default: return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: "Error" }); } })() }, index )) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)( "p", { id: "setup", className: "coursekit-mt-16 coursekit-pb-8 coursekit-text-2xl", children: "\u2B05 Click the check button to get started" } ) ] }) }); }; var HeaderSection_default = HeaderSection; // src/components/SlideSection.tsx var import_prismjs = __toESM(require("prismjs")); var import_prism_dart = require("prismjs/components/prism-dart"); var import_prism_markdown = require("prismjs/components/prism-markdown"); var import_prism_yaml = require("prismjs/components/prism-yaml"); var import_prism_line_highlight = require("prismjs/plugins/line-highlight/prism-line-highlight"); var import_react2 = require("react"); var import_react_markdown2 = __toESM(require("react-markdown")); var import_rehype_raw2 = __toESM(require("rehype-raw")); var import_lucide_react = require("lucide-react"); var import_jsx_runtime2 = require("react/jsx-runtime"); var SlideSection = (props) => { (0, import_react2.useEffect)(() => { console.log("highlighting in package"); import_prismjs.default.highlightAll(); }); return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "coursekit-relative coursekit-flex coursekit-h-full coursekit-w-full", children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "div", { className: `${props.previewOpen ? "coursekit-backdrop-blur" : "coursekit-opacity-0 coursekit-hidden"} coursekit-transition-opacity coursekit-absolute coursekit-w-full coursekit-h-full coursekit-z-10` } ), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("section", { className: "coursekit-hidden sm:coursekit-flex coursekit-w-full", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( DesktopView, { content: props.content, previewOpen: props.previewOpen, setPreviewOpen: props.setPreviewOpen } ) }), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("section", { className: "sm:coursekit-hidden coursekit-w-full", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( MobileView, { content: props.content, previewOpen: props.previewOpen, setPreviewOpen: props.setPreviewOpen } ) }) ] }); }; var DesktopView = ({ content, previewOpen, setPreviewOpen }) => { return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "coursekit-flex coursekit-overflow-y-auto coursekit-h-full coursekit-w-full coursekit-items-center coursekit-relative", children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "content-section coursekit-w-1/2 coursekit-my-auto coursekit-py-16", children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h2", { className: "coursekit-px-4 coursekit-text-4xl coursekit-font-bold", children: content.heading }), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "coursekit-px-4", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_markdown2.default, { rehypePlugins: [import_rehype_raw2.default], children: content.content }) }) ] }), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CodeImageThing, { content }), /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)( "div", { className: `${previewOpen ? "coursekit-scale-100" : "coursekit-scale-0"} coursekit-absolute coursekit-left-0 coursekit-right-0 coursekit-bottom-0 coursekit-top-0 coursekit-flex coursekit-justify-center coursekit-items-center coursekit-z-20`, children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( import_lucide_react.X, { onClick: () => setPreviewOpen(!previewOpen), className: "coursekit-z-20 coursekit-absolute coursekit-top-4 coursekit-right-4 hover:coursekit-cursor-pointer" } ), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "img", { className: `${previewOpen ? "coursekit-scale-100" : "coursekit-scale-0"} coursekit-object-contain coursekit-shadow-2xl coursekit-mb-2 coursekit-rounded-xl coursekit-transition-transform coursekit-max-w-[90%] coursekit-max-h-[90%]`, src: content?.previewImage?.startsWith("http") ?? "" ? content?.previewImage : `../../../${content?.previewImage}`, alt: "Preview" } ) ] } ) ] }); }; var MobileView = ({ content, previewOpen, setPreviewOpen }) => { return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "content-section coursekit-overflow-hidden coursekit-p-4", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "h2", { className: ` coursekit-text-4xl coursekit-font-bold sm:coursekit-transition-opacity coursekit-duration-500`, children: content?.heading } ), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "p", { className: ` coursekit-pb-16 sm:coursekit-transition-opacity coursekit-duration-500 `, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_markdown2.default, { rehypePlugins: [import_rehype_raw2.default], children: content?.content }) } ), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "coursekit-h-16" }) ] }) }), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CodeImageThing, { content }), /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)( "div", { className: `${previewOpen ? "coursekit-scale-100" : "coursekit-scale-0"} coursekit-absolute coursekit-left-0 coursekit-right-0 coursekit-bottom-0 coursekit-top-0 coursekit-flex coursekit-justify-center coursekit-items-center coursekit-z-20`, children: [ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( import_lucide_react.X, { onClick: () => setPreviewOpen(!previewOpen), className: "coursekit-z-20 coursekit-absolute coursekit-top-4 coursekit-right-4 hover:coursekit-cursor-pointer" } ), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "img", { className: `${previewOpen ? "coursekit-scale-100" : "coursekit-scale-0"} coursekit-object-contain coursekit-shadow-2xl coursekit-mb-2 coursekit-rounded-xl coursekit-max-w-[90%] coursekit-max-h-[90%]`, src: content?.previewImage?.startsWith("http") ?? "" ? content?.previewImage : `../../../${content?.previewImage}`, alt: "Preview" } ) ] } ) ] }); }; function CodeImageThing({ content }) { function highlightTranslator(type) { if (type === "flutter") { return "language-dart"; } return `language-${type}`; } return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "coursekit-sticky coursekit-top-0 coursekit-h-full sm:coursekit-block sm:coursekit-w-1/2 coursekit-pb-16 sm:coursekit-pb-0", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "coursekit-overflow-visible coursekit-relative coursekit-h-full coursekit-rounded-xl", children: (() => { switch (content?.type) { case "image": return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "coursekit-flex coursekit-h-full coursekit-justify-center coursekit-items-center coursekit-p-4 coursekit-mb-20 ", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "img", { className: "coursekit-object-contain coursekit-max-h-full coursekit-rounded-xl", src: content.value.startsWith("http") ? content.value : `/${content.value}`, alt: "Comment" } ) }); case "text": return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "coursekit-flex coursekit-justify-start coursekit-items-center coursekit-p-4 coursekit-h-full coursekit-text-white", children: content.value }); case "md": case "yaml": case "flutter": return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "coursekit-overflow-y-auto coursekit-h-full coursekit-text-white coursekit-flex coursekit-flex-col", children: [ content?.file !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: " coursekit-text-black dark:coursekit-text-white coursekit-px-4 coursekit-py-1", children: content.file }), /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "pre", { className: "line-numbers coursekit-pl-0 coursekit-flex-1", "data-line": content.highlight ?? "", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( "code", { className: `coursekit-pl-0 ${highlightTranslator( content.type )}`, children: content.value } ) } ) ] }); default: return null; } })() }) }); } var SlideSection_default = SlideSection; // src/components/Course.tsx var import_lucide_react2 = require("lucide-react"); // src/components/MarkdownSection.tsx var import_react3 = require("react"); var import_react_markdown3 = __toESM(require("react-markdown")); var import_rehype_raw3 = __toESM(require("rehype-raw")); var import_jsx_runtime3 = require("react/jsx-runtime"); var MarkdownSection = (props) => { return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "coursekit-flex coursekit-flex-col coursekit-p-4 coursekit-pb-16 coursekit-max-w-4xl coursekit-mx-auto", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "content-section", children: [ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h1", { children: props.heading }), /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_markdown3.default, { rehypePlugins: [import_rehype_raw3.default], children: props.content }) ] }) }); }; var MarkdownSection_default = MarkdownSection; // src/components/Course.tsx var import_jsx_runtime4 = require("react/jsx-runtime"); var Course = ({ id, lessons, canExit, canScroll, menuHoverColor, menuSelectedColor, onIndexChange }) => { const [previewOpen, setPreviewOpen] = import_react4.default.useState(false); const [menuOpen, setMenuOpen] = import_react4.default.useState(false); const listItemRef = (0, import_react4.useRef)(null); const divRef = import_react4.default.useRef(null); const [cookieArray, setCookieArray] = import_react4.default.useState( void 0 ); import_react4.default.useEffect(() => { const cookie = document.cookie.split(";").find((cookie2) => cookie2.includes(`current-position-for-${id}`)); if (cookie) { const currentLessonId = cookie.split("=")[1]; console.log(lessons.findIndex((l) => l.id == currentLessonId)); setIndex(lessons.findIndex((l) => l.id == currentLessonId)); } let cookieArray2 = document.cookie.split("; ").find((row) => row.startsWith(`progress-for-${id}`))?.split("=")[1].split(","); setCookieArray(cookieArray2); }, [lessons]); const [currentIndex, setIndex] = import_react4.default.useState(0); import_react4.default.useEffect(() => { if (canScroll === false) return; if (menuOpen) { listItemRef.current.scrollIntoView({ behavior: "smooth", block: "center" }); } }, [menuOpen, listItemRef, currentIndex]); import_react4.default.useEffect(() => { if (onIndexChange) { onIndexChange(currentIndex); } if (divRef.current) { divRef.current.scrollTo({ top: 0 }); } }, [currentIndex]); return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "div", { id: "course-component", className: "coursekit-bg-white dark:coursekit-bg-neutral-950 dark:coursekit-text-white coursekit-flex coursekit-h-full coursekit-w-full coursekit-relative", children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( "div", { className: `sm:coursekit-basis-64 sm:coursekit-z-0 sm:coursekit-relative coursekit-border-r dark:coursekit-border-r-neutral-700 coursekit-overflow-y-auto coursekit-transition-opacity ${menuOpen ? "coursekit-opacity-100 coursekit-block" : "coursekit-opacity-0 coursekit-hidden"} coursekit-fixed coursekit-z-50 coursekit-h-full coursekit-w-full coursekit-bg-white dark:coursekit-bg-neutral-950 `, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "side-menu-content", children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-py-4 coursekit-pr-4 coursekit-pl-2 coursekit-sticky coursekit-top-0 coursekit-border-b dark:coursekit-border-b-neutral-700 coursekit-backdrop-blur", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "coursekit-flex coursekit-justify-between", children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { onClick: () => setMenuOpen(false), className: "btn-ghost", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.PanelLeftClose, { size: 24 }) }), canExit && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("a", { href: "/courses", className: "btn-ghost", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-text-red-400", children: "Exit Course" }) }) ] }) }), /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "coursekit-py-4 coursekit-px-4", children: lessons.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( "button", { onClick: () => { setIndex(index); document.cookie = `current-position-for-${id}=${section.id}`; setPreviewOpen(false); if (window.innerWidth < 640) { setMenuOpen(false); } }, ref: index === currentIndex ? listItemRef : void 0, className: `coursekit-block coursekit-w-full coursekit-p-2 coursekit-text-left ${menuHoverColor != null ? menuHoverColor : "hover:coursekit-bg-neutral-100 dark:hover:coursekit-bg-neutral-800"} ${index === currentIndex ? `${menuSelectedColor != null ? menuSelectedColor : "coursekit-bg-neutral-200 dark:coursekit-bg-neutral-700"} coursekit-rounded` : ""} ${cookieArray?.includes(section.id.toString()) ? "dark:coursekit-text-green-300 coursekit-text-green-600" : ""}`, children: (() => { switch (section.sectionType) { case "header": return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "Introduction" }); default: return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: section.heading }); } })() } ) }, index)) }) ] }) } ), /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "div", { className: "coursekit-relative coursekit-transition-opacity coursekit-w-full coursekit-overflow-y-auto", ref: divRef, children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( BottomNavigation, { courseId: id, currentIndex, previewOpen, setIndex, contentLength: lessons.length, setPreviewOpen, content: lessons, menuOpen, setMenuOpen, cookieArray, setCookieArray } ), (() => { switch (lessons[currentIndex].sectionType) { case "slide": return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( SlideSection_default, { content: lessons[currentIndex], previewOpen, setPreviewOpen } ); case "md": return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( MarkdownSection_default, { ...lessons[currentIndex] } ); case "header": return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( HeaderSection_default, { ...lessons[currentIndex] } ); default: return null; } })() ] } ) ] } ); }; function BottomNavigation({ courseId, currentIndex, previewOpen, contentLength, setIndex, setPreviewOpen, content, menuOpen, setMenuOpen, cookieArray, setCookieArray }) { const completeRef = import_react4.default.useRef(null); const hasPreview = content[currentIndex] !== void 0 && "previewImage" in content[currentIndex]; import_react4.default.useEffect(() => { document.addEventListener("keydown", function(event) { const keyPressed = event.key.toLowerCase(); if (keyPressed === "c" && !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) { completeKeymap(); } }); }, []); function completeKeymap() { const item = completeRef.current; if (!item) return; item.classList.add("coursekit-scale-75"); setTimeout(() => { item.classList.remove("coursekit-scale-75"); }, 100); completeRef.current?.click(); completeRef.current?.focus(); } function onClickComplete() { if (!cookieArray) { cookieArray = []; } if (!cookieArray.includes(content[currentIndex].id.toString())) { cookieArray.push(content[currentIndex].id.toString()); setCookieArray(cookieArray); } document.cookie = `progress-for-${courseId}=${cookieArray}`; if (currentIndex === contentLength - 1) { return; } if (content[currentIndex + 1].sectionType !== "slide" || content[currentIndex + 1].previewImage === void 0) { setPreviewOpen(false); } setIndex(currentIndex + 1); console.log(content[currentIndex]); document.cookie = `current-position-for-${courseId}=${content[currentIndex + 1].id}`; } return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-absolute coursekit-bottom-16 coursekit-left-8 coursekit-z-40", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-fixed", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "coursekit-flex coursekit-h-full coursekit-items-center coursekit-justify-center coursekit-space-x-4 coursekit-rounded", children: [ !menuOpen && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "button", { "data-tooltip-target": "tooltip-menu", type: "button", className: "btn-default", onClick: () => setMenuOpen(!menuOpen), children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-w-full coursekit-h-full coursekit-flex coursekit-items-center coursekit-justify-center active:coursekit-scale-75 coursekit-transition-transform", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.PanelLeftOpen, { size: 28 }) }), /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "coursekit-sr-only", children: "Menu" }) ] } ), /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "button", { "data-tooltip-target": "tooltip-complete", type: "button", className: "btn-default", onClick: onClickComplete, children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( "div", { ref: completeRef, className: "coursekit-w-full coursekit-h-full coursekit-flex coursekit-items-center coursekit-justify-center active:coursekit-scale-75 coursekit-transition-transform", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.CheckIcon, { size: 28 }) } ), /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "coursekit-sr-only", children: "Complete" }) ] } ), /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "div", { id: "tooltip-complete", role: "tooltip", className: "coursekit-absolute coursekit-z-10 coursekit-invisible coursekit-inline-block coursekit-px-3 coursekit-py-2 coursekit-text-sm coursekit-font-medium coursekit-text-white coursekit-transition-opacity coursekit-duration-300 coursekit-bg-neutral-900 coursekit-rounded-lg coursekit-shadow-sm coursekit-opacity-0 tooltip dark:coursekit-bg-neutral-700", children: [ "Complete", /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "tooltip-arrow", "data-popper-arrow": true }) ] } ), hasPreview && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "button", { onClick: () => setPreviewOpen(!previewOpen), "data-tooltip-target": "tooltip-preview", type: "button", className: "btn-default", children: [ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "coursekit-w-full coursekit-h-full coursekit-flex coursekit-items-center coursekit-justify-center active:coursekit-scale-75 coursekit-transition-transform", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.Smartphone, { size: 28 }) }), /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "coursekit-sr-only", children: "Preview" }) ] } ), /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)( "div", { id: "tooltip-preview", role: "tooltip", className: "coursekit-absolute coursekit-z-10 coursekit-invisible coursekit-inline-block coursekit-px-3 coursekit-py-2 coursekit-text-sm coursekit-font-medium coursekit-text-white coursekit-transition-opacity coursekit-duration-300 coursekit-bg-neutral-900 coursekit-rounded-lg coursekit-shadow-sm coursekit-opacity-0 tooltip dark:coursekit-bg-neutral-700", children: [ "Preview", /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "tooltip-arrow", "data-popper-arrow": true }) ] } ) ] }) ] }) }) }); } // src/index.ts import_prismjs2.default.highlightAll(); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Course });