// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { useState } from "preact/hooks"; import { QscEventTarget } from "qsharp-lang"; import { Editor } from "./editor.js"; import { OutputTabs } from "./tabs.js"; import { Markdown } from "qsharp-lang/ux"; import type { CompilerState, ICompilerWorker, ILanguageServiceWorker, VSDiagnostic, } from "qsharp-lang"; import type { ExplainedSolution, Kata, Question, KataSection, } from "qsharp-lang/katas"; type Props = { kata: Kata; compiler: ICompilerWorker; compiler_worker_factory: () => ICompilerWorker; compilerState: CompilerState; onRestartCompiler: () => void; languageService: ILanguageServiceWorker; }; function ExplainedSolutionElem(props: { solution: ExplainedSolution }) { return (
{"💡 Solution"} {props.solution.items.map((item) => { switch (item.type) { case "example": case "solution": return (
                {item.code}
              
); case "text-content": return ; } })}
); } function QuestionElem(props: { question: Question }) { return ( <>

{"❓ Question:"}

{"💡 Answer"} {props.question.answer.items.map((item) => { switch (item.type) { case "example": return (
                  {item.code}
                
); case "text-content": return ; } })}
); } function LessonElem(props: Props & { section: KataSection }) { if (props.section.type !== "lesson") throw "Invalid section type"; const lesson = props.section; const [shotError, setShotError] = useState(); const [evtHandler] = useState(() => new QscEventTarget(true)); return (

{"📖 Lesson: "} {lesson.title}

{lesson.items.map((item) => { switch (item.type) { case "example": return ( <> ({})} setHir={() => ({})} setRir={() => ({})} setQir={() => ({})} activeTab="results-tab" languageService={props.languageService} > setShotError(diag)} ast="" hir="" rir={["", ""]} qir="" activeTab="results-tab" setActiveTab={() => undefined} > ); case "text-content": return ; case "question": return ; } })}
); } function ExerciseElem(props: Props & { section: KataSection }) { if (props.section.type !== "exercise") throw "Invalid section type"; const exercise = props.section; const [shotError, setShotError] = useState(); const [evtHandler] = useState(() => new QscEventTarget(true)); return (

{"⌨ Exercise: "} {exercise.title}

({})} setHir={() => ({})} setRir={() => ({})} setQir={() => ({})} activeTab="results-tab" languageService={props.languageService} > setShotError(diag)} ast="" hir="" rir={["", ""]} qir="" activeTab="results-tab" setActiveTab={() => undefined} >
); } export function Kata(props: Props) { return (
{props.kata.sections.map((section) => section.type === "lesson" ? ( ) : ( ), )}
); }