// 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" ? (
) : (
),
)}
);
}