diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 14f07e080..0c7d48d27 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -143,7 +143,7 @@ const docusaurusConfig = withSiteConfig().then(async (siteConfig) => { }, future: { v4: true, - experimental_faster: { + faster: { /** * no config options for swcJsLoader so far. * Instead configure it over the jsLoader in the next step @@ -156,7 +156,8 @@ const docusaurusConfig = withSiteConfig().then(async (siteConfig) => { rspackPersistentCache: process.env.NETLIFY ? false : true, mdxCrossCompilerCache: true, ssgWorkerThreads: true - } + }, + experimental_vcs: 'default-v2' }, webpack: { jsLoader: (isServer) => { diff --git a/package.json b/package.json index 7a2d327d1..e708ca102 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "private": true, "scripts": { "docusaurus": "docusaurus", - "start": "concurrently --raw --kill-others 'PACKAGE_SRC=packages PACKAGE_DEST=tdev-website/docs/packages docusaurus start' 'sleep 1s && ts-node updateSync/packageDocsSync/watch.ts --src packages --dest tdev-website/docs/packages'", - "prebuild": "ts-node updateSync/packageDocsSync/preBuild.ts --src packages --dest tdev-website/docs/packages", + "start": "concurrently --raw --kill-others 'PACKAGE_SRC=packages PACKAGE_DEST=tdev-website/docs/packages docusaurus start' 'sleep 1s && ts-node --files updateSync/packageDocsSync/watch.ts --src packages --dest tdev-website/docs/packages'", + "prebuild": "ts-node --files updateSync/packageDocsSync/preBuild.ts --src packages --dest tdev-website/docs/packages", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", @@ -21,15 +21,15 @@ "format": "prettier --write .", "format:check": "prettier --check .", "test": "vitest --coverage", - "updateTdev": "ts-node updateSync/updateTdev.ts" + "updateTdev": "ts-node --files updateSync/updateTdev.ts" }, "dependencies": { - "@docusaurus/core": "^3.9.2", - "@docusaurus/faster": "^3.9.2", - "@docusaurus/preset-classic": "^3.9.2", - "@docusaurus/theme-classic": "^3.9.2", - "@docusaurus/theme-common": "^3.9.2", - "@docusaurus/theme-mermaid": "^3.9.2", + "@docusaurus/core": "^3.10.0", + "@docusaurus/faster": "^3.10.0", + "@docusaurus/preset-classic": "^3.10.0", + "@docusaurus/theme-classic": "^3.10.0", + "@docusaurus/theme-common": "^3.10.0", + "@docusaurus/theme-mermaid": "^3.10.0", "@lexical/clipboard": "^0.35.0", "@lexical/link": "^0.35.0", "@lexical/list": "^0.35.0", @@ -41,27 +41,27 @@ "@lexical/utils": "^0.35.0", "@mdi/js": "^7.4.47", "@mdi/react": "^1.6.1", - "@mdx-js/react": "^3.0.0", - "@mdxeditor/editor": "^3.50.0", - "@mermaid-js/layout-elk": "^0.2.0", + "@mdx-js/react": "^3.1.1", + "@mdxeditor/editor": "^3.54.0", + "@mermaid-js/layout-elk": "^0.2.1", "@octokit/rest": "^21.1.0", "@sentry/react": "^9.12.0", "@sentry/webpack-plugin": "^3.3.1", - "ace-builds": "^1.41.0", - "axios": "^1.9.0", + "ace-builds": "^1.43.6", + "axios": "^1.15.0", "better-auth": "^1.4.9", "browser-image-compression": "^2.0.2", "clsx": "^2.1.1", "docusaurus-plugin-sass": "^0.2.6", - "dotenv": "^16.5.0", - "es-toolkit": "^1.39.10", + "dotenv": "^17.4.1", + "es-toolkit": "^1.45.1", "exceljs": "^4.4.0", "gray-matter": "^4.0.3", - "hashery": "^1.3.0", + "hashery": "^1.5.1", "heic2any": "^0.0.4", "idb": "^8.0.3", - "js-yaml": "^4.1.0", - "known-css-properties": "^0.36.0", + "js-yaml": "^4.1.1", + "known-css-properties": "^0.37.0", "mdast-util-gfm-footnote": "^2.1.0", "mdast-util-math": "^3.0.0", "micromark-extension-math": "^3.1.0", @@ -73,45 +73,45 @@ "qrcode.react": "^4.2.0", "quill": "^2.0.3", "raw-loader": "^4.0.2", - "rc-slider": "^11.1.8", - "react": "^19.2.0", + "rc-slider": "^11.1.9", + "react": "^19.2.4", "react-ace": "^14.0.1", "react-diff-viewer-continued": "^3.4.0", - "react-dom": "^19.2.0", + "react-dom": "^19.2.4", "react-draggable": "^4.5.0", - "react-katex": "^3.0.1", + "react-katex": "^3.1.0", "react-quilljs": "^2.0.5", - "react-select": "^5.10.1", + "react-select": "^5.10.2", "reactjs-popup": "^2.0.6", "rehype-katex": "^7.0.1", "remark-math": "^6.0.0", - "sass": "^1.93.2", - "socket.io-client": "^4.8.1", + "sass": "^1.99.0", + "socket.io-client": "^4.8.3", "uuid": "^13.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.9.2", - "@docusaurus/plugin-rsdoctor": "^3.9.2", - "@docusaurus/tsconfig": "^3.9.2", - "@docusaurus/types": "^3.9.2", - "@types/exceljs": "^1.3.0", + "@docusaurus/module-type-aliases": "^3.10.0", + "@docusaurus/plugin-rsdoctor": "^3.10.0", + "@docusaurus/tsconfig": "^3.10.0", + "@docusaurus/types": "^3.10.0", + "@types/exceljs": "^1.3.2", "@types/fs-extra": "^11.0.4", "@types/js-yaml": "^4.0.9", - "@types/micromatch": "^4.0.9", + "@types/micromatch": "^4.0.10", "@types/minimist": "^1.2.5", - "@types/react-dom": "^19.0.3", + "@types/react-dom": "^19.2.3", "@types/react-katex": "^3.0.4", - "@types/uuid": "^10.0.0", - "@types/wicg-file-system-access": "^2023.10.6", + "@types/uuid": "^11.0.0", + "@types/wicg-file-system-access": "^2023.10.7", "@vitest/coverage-v8": "^2.0.5", "concurrently": "^9.2.1", - "fs-extra": "^11.2.0", - "prettier": "^3.3.2", + "fs-extra": "^11.3.4", + "prettier": "^3.8.1", "remark": "^15.0.1", "remark-directive": "^4.0.0", "remark-frontmatter": "^5.0.0", "ts-node": "^10.9.2", - "typescript": "^5.7.2", + "typescript": "^6.0.2", "vfile": "^6.0.3", "vitest": "^2.0.5" }, diff --git a/packages/tdev/page-index/components/TaskableState/index.tsx b/packages/tdev/page-index/components/TaskableState/index.tsx index 3133b4d04..d561f0eb1 100644 --- a/packages/tdev/page-index/components/TaskableState/index.tsx +++ b/packages/tdev/page-index/components/TaskableState/index.tsx @@ -35,7 +35,14 @@ const TaskableState = observer((props: Props) => { title={`Progress: ${page.progress} / ${page.totalSteps}`} onClick={(e) => { const thisElement = e.currentTarget; - thisElement.parentElement?.querySelector('a')?.click(); + const categoryButton = thisElement.parentElement?.querySelector( + '&>li.theme-doc-sidebar-item-category>div.menu__list-item-collapsible>button' + ); + if (categoryButton) { + categoryButton.click(); + } else { + thisElement.parentElement?.querySelector('a')?.click(); + } }} > = { [K in keyof T]: 'code' extends keyof T[K] ? K : never; @@ -160,6 +176,11 @@ export interface ContainerTypeModelMapping { ['_container_placeholder_']: iDocumentContainer; // placeholder to avoid empty interface error } +export interface AssessableTypeModelMapping { + ['boolean_answer']: ChoiceAnswer; // TODO: implement BooleanAnswer model and replace this + ['choice_answer']: ChoiceAnswer; +} + export interface TaskableTypeModelMapping { ['task_state']: TaskState; ['progress_state']: ProgressState; @@ -168,12 +189,12 @@ export interface TaskableTypeModelMapping { type EnsureAllTaskable }> = T; null as unknown as EnsureAllTaskable; -export interface TypeModelMapping extends TaskableTypeModelMapping, ContainerTypeModelMapping { +export interface TypeModelMapping + extends TaskableTypeModelMapping, ContainerTypeModelMapping, AssessableTypeModelMapping { ['code']: Code; // TODO: rename to `code_version`? ['script_version']: ScriptVersion; ['string']: String; - ['choice_answer']: ChoiceAnswer; ['quill_v2']: QuillV2; ['solution']: Solution; ['dir']: Directory; @@ -192,6 +213,7 @@ export interface TypeModelMapping extends TaskableTypeModelMapping, ContainerTyp export type ContainerModelType = ContainerTypeModelMapping[ContainerType]; export type TaskableModelType = TaskableTypeModelMapping[TaskableType]; +export type AssessableModelType = AssessableTypeModelMapping[AssessableType]; export type DocumentType = keyof TypeModelMapping; export type DocumentModelType = TypeModelMapping[DocumentType]; diff --git a/src/components/DynamicValues/Input/index.tsx b/src/components/DynamicValues/Input/index.tsx index 8d5dc59f7..29f65e5ee 100644 --- a/src/components/DynamicValues/Input/index.tsx +++ b/src/components/DynamicValues/Input/index.tsx @@ -8,6 +8,7 @@ import Button from '@tdev-components/shared/Button'; import { mdiRestore, mdiSync } from '@mdi/js'; import { SIZE_S } from '@tdev-components/shared/iconSizes'; import Page from '@tdev-models/Page'; +import TextAreaInput from '@tdev-components/shared/TextAreaInput'; interface Props { name: string; @@ -16,6 +17,11 @@ interface Props { onRecalculate?: (page: Page) => string; placeholder?: string; monospace?: boolean; + /** + * multiline only works for non-derived values! + * (Current limitation of the the TextAreaInput component.) + */ + multiline?: boolean; hidden?: boolean; } @@ -24,8 +30,24 @@ const DynamicInputPlaceholder = (props: { label?: string; placeholder?: string; monospace?: boolean; + multiline?: boolean; derived?: boolean; }) => { + if (props.multiline) { +
+ {}} + label={props.label} + placeholder={props.placeholder} + className={clsx(styles.input, props.monospace && styles.monospace)} + labelClassName={clsx(styles.label, props.derived && styles.derived)} + monospace={props.monospace} + readOnly + /> +
; + } return (
{ value={defaultValue || ''} label={props.label || props.name} placeholder={props.placeholder} + multiline={props.multiline} monospace={props.monospace} derived={isDerived} /> @@ -80,19 +103,34 @@ const DynamicInput = observer((props: Props) => { const needsReset = defaultValue !== undefined && value !== defaultValue; return (
- { - current.setDynamicValue(props.name, val); - }} - defaultValue={defaultValue} - label={props.label || props.name} - title={isDerived ? 'Abgeleiteter Wert' : undefined} - labelClassName={clsx(styles.label, isDerived && styles.derived)} - className={clsx(styles.input, props.monospace && styles.monospace)} - placeholder={props.placeholder} - /> + {props.multiline && !isDerived ? ( + { + current.setDynamicValue(props.name, val); + }} + label={props.label || props.name} + title={isDerived ? 'Abgeleiteter Wert' : undefined} + labelClassName={clsx(styles.label, isDerived && styles.derived)} + className={clsx(styles.input, props.monospace && styles.monospace)} + placeholder={props.placeholder} + /> + ) : ( + { + current.setDynamicValue(props.name, val); + }} + defaultValue={defaultValue} + label={props.label || props.name} + title={isDerived ? 'Abgeleiteter Wert' : undefined} + labelClassName={clsx(styles.label, isDerived && styles.derived)} + className={clsx(styles.input, props.monospace && styles.monospace)} + placeholder={props.placeholder} + /> + )}
{needsReset && (