diff --git a/.gitignore b/.gitignore index fa8187ce..854d3760 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -.idea/ \ No newline at end of file +.idea/ +yarn.lock \ No newline at end of file diff --git a/docs/Classes/EditorSettings.md b/docs/Classes/EditorSettings.md index 51f2706c..19e51c90 100644 --- a/docs/Classes/EditorSettings.md +++ b/docs/Classes/EditorSettings.md @@ -5676,7 +5676,7 @@ If ``true``, uses the characters in [text_editor/behavior/navigation/custom_word [bool](bool.md) **text_editor/behavior/navigation/use_default_word_separators** [🔗](#EditorSettings_property_text_editor/behavior/navigation/use_default_word_separators) -If ``true``, uses the characters in ```!"#$%&'()*+,-./:;<=>?@[\]^`{|}~``, the Unicode General Punctuation table, and the Unicode CJK Punctuation table as word separators for word navigation and operations. If ``false``, a subset of these characters are used and does not include the characters ``<>$~^=+|``. This is in addition to custom characters if [text_editor/behavior/navigation/use_custom_word_separators](EditorSettings.md#EditorSettings_property_text_editor/behavior/navigation/use_custom_word_separators) is also enabled. These characters are used to determine where a word stops. Word navigation and operations include double-clicking on a word or holding :kbd:`Ctrl` (:kbd:`Cmd` on macOS) while pressing :kbd:`left`, :kbd:`right`, :kbd:`backspace`, or :kbd:`delete`. +If ``true``, uses the characters in `` `!"#$%&'()*+,-./:;<=>?@[\]^`{|}~ ``, the Unicode General Punctuation table, and the Unicode CJK Punctuation table as word separators for word navigation and operations. If ``false``, a subset of these characters are used and does not include the characters ``<>$~^=+|``. This is in addition to custom characters if [text_editor/behavior/navigation/use_custom_word_separators](EditorSettings.md#EditorSettings_property_text_editor/behavior/navigation/use_custom_word_separators) is also enabled. These characters are used to determine where a word stops. Word navigation and operations include double-clicking on a word or holding :kbd:`Ctrl` (:kbd:`Cmd` on macOS) while pressing :kbd:`left`, :kbd:`right`, :kbd:`backspace`, or :kbd:`delete`.
diff --git a/docs/Classes/GDExtension.md b/docs/Classes/GDExtension.md index ba4f147d..0d0ac941 100644 --- a/docs/Classes/GDExtension.md +++ b/docs/Classes/GDExtension.md @@ -27,7 +27,7 @@ The **GDExtension** resource type represents a [shared library](https://en.wikip - [GDExtension overview](../tutorials/scripting/gdextension/what_is_gdextension.md) -- [GDExtension example in C++](../tutorials/scripting/cpp/gdextension_cpp_example.md) +- [GDExtension example in C++](../tutorials/scripting/gdextension/gdextension_cpp_example.md) diff --git a/docs/Classes/GDExtensionManager.md b/docs/Classes/GDExtensionManager.md index 30aa9918..c7b5d72d 100644 --- a/docs/Classes/GDExtensionManager.md +++ b/docs/Classes/GDExtensionManager.md @@ -27,7 +27,7 @@ The GDExtensionManager loads, initializes, and keeps track of all available [GDE - [GDExtension overview](../tutorials/scripting/gdextension/what_is_gdextension.md) -- [GDExtension example in C++](../tutorials/scripting/cpp/gdextension_cpp_example.md) +- [GDExtension example in C++](../tutorials/scripting/gdextension/gdextension_cpp_example.md) diff --git a/docs/Classes/JavaScriptBridge.md b/docs/Classes/JavaScriptBridge.md index 7ac6a354..ba623ca3 100644 --- a/docs/Classes/JavaScriptBridge.md +++ b/docs/Classes/JavaScriptBridge.md @@ -19,7 +19,7 @@ Singleton that connects the engine with the browser's JavaScript context in Web The JavaScriptBridge singleton is implemented only in the Web export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs. -\ **Note:** This singleton can be disabled at build-time to improve security. By default, the JavaScriptBridge singleton is enabled. Official export templates also have the JavaScriptBridge singleton enabled. See [Compiling for the Web](../engine_details/development/compiling/compiling_for_web.md) in the documentation for more information. +\ **Note:** This singleton can be disabled at build-time to improve security. By default, the JavaScriptBridge singleton is enabled. Official export templates also have the JavaScriptBridge singleton enabled. See [Compiling for the Web](../Contributing/Development/compiling/compiling_for_web.md) in the documentation for more information. diff --git a/docs/Classes/Node.md b/docs/Classes/Node.md index da8e1835..b1c004c3 100644 --- a/docs/Classes/Node.md +++ b/docs/Classes/Node.md @@ -47,7 +47,7 @@ Finally, when a node is freed with [Object.free()](Object.md#Object_method_free) ## Tutorials -- [Nodes and scenes](../getting_started/step_by_step/nodes_and_scenes.md) +- [Nodes and scenes](../Getting Started/step_by_step/nodes_and_scenes.md) - [All Demos](https://github.com/redot-engine/redot-demo-projects/) diff --git a/docs/Classes/Object.md b/docs/Classes/Object.md index 9a8e189a..e98dcec2 100644 --- a/docs/Classes/Object.md +++ b/docs/Classes/Object.md @@ -54,7 +54,7 @@ Lastly, every object can also contain metadata (data about data). [set_meta()](O ## Tutorials -- [Object class introduction](../engine_details/architecture/object_class.md) +- [Object class introduction](../Contributing/Development/core_and_modules/object_class.md) - [When and how to avoid using nodes for everything](../tutorials/best_practices/node_alternatives.md) diff --git a/docs/Classes/ResourceImporterTexture.md b/docs/Classes/ResourceImporterTexture.md index d54e03e0..0cdcf095 100644 --- a/docs/Classes/ResourceImporterTexture.md +++ b/docs/Classes/ResourceImporterTexture.md @@ -304,7 +304,7 @@ Changing this import option only has an effect if a texture is detected as being [bool](bool.md) **editor/convert_colors_with_editor_theme** = `false` [🔗](#ResourceImporterTexture_property_editor/convert_colors_with_editor_theme) -If ``true``, converts the imported image's colors to match [EditorSettings.interface/theme/icon_and_font_color](EditorSettings.md#EditorSettings_property_interface/theme/icon_and_font_color). This assumes the image uses the exact same colors as [Redot's own color palette for editor icons](../engine_details/editor/creating_icons.md), with the source file designed for a dark editor theme. This should be enabled for editor plugin icons and custom class icons, but should be left disabled otherwise. +If ``true``, converts the imported image's colors to match [EditorSettings.interface/theme/icon_and_font_color](EditorSettings.md#EditorSettings_property_interface/theme/icon_and_font_color). This assumes the image uses the exact same colors as [Redot's own color palette for editor icons](../Contributing/Development/editor/creating_icons.md), with the source file designed for a dark editor theme. This should be enabled for editor plugin icons and custom class icons, but should be left disabled otherwise. \ **Note:** Only available for SVG images. diff --git a/docs/Classes/Signal.md b/docs/Classes/Signal.md index 4d3393ec..3400cb87 100644 --- a/docs/Classes/Signal.md +++ b/docs/Classes/Signal.md @@ -203,7 +203,7 @@ There are notable differences when using this API with C#. See the C# difference ## Tutorials -- [Using Signals](../getting_started/step_by_step/signals.md) +- [Using Signals](../Getting%20Started/step_by_step/signals.md) - [GDScript Basics](../tutorials/scripting/gdscript/gdscript_basics.md#signals) diff --git a/docs/Classes/Variant.md b/docs/Classes/Variant.md index 1a86d649..8f859026 100644 --- a/docs/Classes/Variant.md +++ b/docs/Classes/Variant.md @@ -132,5 +132,5 @@ There are notable differences when using this API with C#. See the C# difference ## Tutorials -- [Variant class introduction](../engine_details/architecture/variant_class.md) +- [Variant class introduction](../Contributing/Development/core_and_modules/variant_class.md) diff --git a/docs/Contributing/Documentation/updating_the_class_reference.md b/docs/Contributing/Documentation/updating_the_class_reference.md index 8e55f4f6..40387d2b 100644 --- a/docs/Contributing/Documentation/updating_the_class_reference.md +++ b/docs/Contributing/Documentation/updating_the_class_reference.md @@ -35,7 +35,7 @@ In the main repository the class reference is stored in XML files, one for each class or global object. The majority of these files is located in `doc/classes/ <https://github.com/redot-engine/redot-engine/tree/master/doc/classes>`_, but some modules contain their own documentation as well. You will find it in the ``modules/<module_name>/doc_classes/`` -directory. To learn more about editing XML files refer to [doc_class_reference_primer](/docs/Classes/reference_primer.md). +directory. To learn more about editing XML files refer to [doc_class_reference_primer](class_reference_primer.md). :::info @@ -115,4 +115,4 @@ You can discard changes in other XML files using ``git checkout``, but consider if you notice unrelated files being updated. Ideally, running this command should only bring up the changes that you yourself have made. -You will then need to add descriptions to any newly generated entries. \ No newline at end of file +You will then need to add descriptions to any newly generated entries. diff --git a/docs/tutorials/platform/android/javaclasswrapper_and_andriodruntimeplugin.md b/docs/tutorials/platform/android/javaclasswrapper_and_androidruntimeplugin.md similarity index 92% rename from docs/tutorials/platform/android/javaclasswrapper_and_andriodruntimeplugin.md rename to docs/tutorials/platform/android/javaclasswrapper_and_androidruntimeplugin.md index 65626a46..68ba325e 100644 --- a/docs/tutorials/platform/android/javaclasswrapper_and_andriodruntimeplugin.md +++ b/docs/tutorials/platform/android/javaclasswrapper_and_androidruntimeplugin.md @@ -1,4 +1,4 @@ # JavaClassWrapper and AndroidRuntimePlugin ### Todo: Make article This page is a stub, referenced by the offline docs for `JavaClassWrapper`. -Please help us improve the docs by editing this page on GitHub: [Edit on GitHub](https://github.com/Redot-Engine/Redot-Docs-Site/blob/master/docs/tutorials/platform/android/javaclasswrapper_and_andriodruntimeplugin.md) \ No newline at end of file +Please help us improve the docs by editing this page on GitHub: [Edit on GitHub](https://github.com/Redot-Engine/Redot-Docs-Site/blob/master/docs/tutorials/platform/android/javaclasswrapper_and_androidruntimeplugin.md) diff --git a/docs/tutorials/ui/bbcode_in_richtextlabel.md b/docs/tutorials/ui/bbcode_in_richtextlabel.md index 81a814ee..c26c3485 100644 --- a/docs/tutorials/ui/bbcode_in_richtextlabel.md +++ b/docs/tutorials/ui/bbcode_in_richtextlabel.md @@ -176,7 +176,7 @@ There are several ways to alleviate this: avoids stuttering during gameplay. Only enable threading if it's actually needed in your project, as threading has some overhead. -## Using push_[tag]() and pop() functions instead of BBCode +## Using `push_[tag]()` and `pop()` functions instead of BBCode If you don't want to use BBCode for performance reasons, you can use functions provided by RichTextLabel to create formatting tags without writing BBCode in diff --git a/package-lock.json b/package-lock.json index 789dde8e..87ec5e9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5251,26 +5251,6 @@ "@types/ms": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -5813,16 +5793,13 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, "peerDependencies": { - "acorn": "^8.14.0" + "acorn": "^8" } }, "node_modules/acorn-jsx": { @@ -8384,9 +8361,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -18895,36 +18872,34 @@ } }, "node_modules/webpack": { - "version": "5.105.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", - "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.19.0", - "es-module-lexer": "^2.0.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", + "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.5.1", - "webpack-sources": "^3.3.3" + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" @@ -19171,6 +19146,37 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/webpack/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -19192,6 +19198,24 @@ "node": ">= 0.6" } }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpackbar": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", diff --git a/package.json b/package.json index 5a5e7bf4..675bbf5d 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,12 @@ "@docusaurus/types": "3.9.2", "typescript": "~5.6.2" }, + "overrides": { + "webpack": "5.94.0" + }, + "resolutions": { + "webpack": "5.94.0" + }, "browserslist": { "production": [ ">0.5%", diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9f71a5da..341b3191 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -1,23 +1,314 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ +.homepage { + background: + radial-gradient(circle at 10% 10%, rgba(242, 140, 56, 0.18), transparent 30rem), + linear-gradient(180deg, #111111 0%, #0e0e0e 52%, #0a0a0a 100%); + color: rgba(255, 255, 255, 0.88); +} -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; +.hero { + border-bottom: 1px solid var(--redot-border-subtle); } -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } +.heroInner { + display: grid; + grid-template-columns: minmax(420px, 0.95fr) minmax(320px, 1.05fr); + gap: 3rem; + align-items: center; + width: min(1180px, calc(100% - 3rem)); + min-height: calc(100vh - var(--ifm-navbar-height)); + margin: 0 auto; + padding: 4.5rem 0; +} + +.heroContent { + max-width: 620px; +} + +.brandLockup { + display: inline-flex; + align-items: center; + gap: 0.7rem; + margin-bottom: 1.15rem; + color: rgba(255, 255, 255, 0.86); + font-size: 1rem; + font-weight: 800; +} + +.logo { + width: 44px; + height: 44px; +} + +.heroContent h1 { + margin: 0; + max-width: 560px; + font-size: clamp(3rem, 4.3vw, 4.15rem); + line-height: 1.04; + letter-spacing: 0; +} + +.lede { + max-width: 34rem; + margin: 1.2rem 0 0; + color: rgba(255, 255, 255, 0.72); + font-size: 1.08rem; + line-height: 1.65; } -.buttons { +.heroActions { display: flex; + flex-wrap: wrap; + gap: 0.85rem; + margin-top: 2rem; +} + +.primaryAction, +.secondaryAction { + display: inline-flex; align-items: center; justify-content: center; + min-height: 46px; + padding: 0.72rem 1.15rem; + border-radius: 6px; + font-weight: 700; + text-decoration: none; +} + +.primaryAction { + background: var(--ifm-color-primary); + color: #111111; +} + +.primaryAction:hover { + color: #111111; + background: var(--ifm-color-primary-light); + text-decoration: none; +} + +.secondaryAction { + border: 1px solid rgba(255, 255, 255, 0.18); + color: rgba(255, 255, 255, 0.88); + background: rgba(255, 255, 255, 0.04); +} + +.secondaryAction:hover { + border-color: rgba(242, 140, 56, 0.45); + color: var(--ifm-color-primary-light); + text-decoration: none; +} + +.heroMedia { + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 8px; + background: #151515; + box-shadow: 0 22px 70px rgba(0, 0, 0, 0.45); +} + +.heroMedia img { + display: block; + width: 100%; + aspect-ratio: 16 / 10; + object-fit: cover; + object-position: center; +} + +.quickLinks, +.topicBand, +.referenceSection { + width: min(1180px, calc(100% - 3rem)); + margin: 0 auto; +} + +.quickLinks { + padding: 4rem 0; +} + +.sectionHeader { + display: flex; + justify-content: space-between; + gap: 2rem; + align-items: end; + margin-bottom: 1.5rem; +} + +.sectionHeader h2, +.topicBand h2, +.referenceContent h2 { + margin: 0; + font-size: clamp(1.8rem, 3vw, 2.45rem); + letter-spacing: 0; +} + +.sectionHeader p, +.topicBand p, +.referenceContent p, +.quickCard p { + color: rgba(255, 255, 255, 0.68); + line-height: 1.65; +} + +.sectionHeader p { + max-width: 420px; + margin: 0; +} + +.quickGrid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 1rem; +} + +.quickCard { + display: flex; + flex-direction: column; + min-height: 260px; + padding: 1.25rem; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 8px; + background: rgba(255, 255, 255, 0.035); +} + +.quickCard h2 { + margin: 0 0 0.75rem; + font-size: 1.2rem; + letter-spacing: 0; +} + +.quickCard p { + margin: 0; +} + +.cardLink { + margin-top: auto; + padding-top: 1.4rem; + font-weight: 700; +} + +.topicBand { + display: grid; + grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); + gap: 2rem; + align-items: center; + padding: 2rem 0; + border-top: 1px solid var(--redot-border-subtle); + border-bottom: 1px solid var(--redot-border-subtle); +} + +.topicBand p { + max-width: 520px; + margin: 0.75rem 0 0; +} + +.topicList { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.75rem; +} + +.topicList a, +.referenceActions a { + display: flex; + align-items: center; + min-height: 44px; + padding: 0.7rem 0.9rem; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 6px; + background: rgba(255, 255, 255, 0.035); + color: rgba(255, 255, 255, 0.86); + font-weight: 650; + text-decoration: none; +} + +.topicList a:hover, +.referenceActions a:hover { + border-color: rgba(242, 140, 56, 0.45); + color: var(--ifm-color-primary-light); + text-decoration: none; +} + +.referenceSection { + display: grid; + grid-template-columns: minmax(280px, 0.9fr) minmax(0, 1.1fr); + gap: 2.5rem; + align-items: center; + padding: 4rem 0 5rem; +} + +.referenceImage { + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 8px; + background: #151515; +} + +.referenceImage img { + display: block; + width: 100%; + aspect-ratio: 4 / 3; + object-fit: cover; +} + +.referenceContent p { + margin: 1rem 0 0; + max-width: 620px; +} + +.referenceActions { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.75rem; + margin-top: 1.5rem; +} + +@media (max-width: 996px) { + .heroInner, + .topicBand, + .referenceSection { + grid-template-columns: 1fr; + } + + .heroInner { + min-height: auto; + padding: 3rem 0; + } + + .quickGrid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .sectionHeader { + display: block; + } + + .sectionHeader p { + margin-top: 0.75rem; + } +} + +@media (max-width: 640px) { + .heroInner, + .quickLinks, + .topicBand, + .referenceSection { + width: min(100% - 2rem, 1180px); + } + + .heroContent h1 { + font-size: 3rem; + } + + .lede { + font-size: 1.05rem; + } + + .quickGrid, + .topicList, + .referenceActions { + grid-template-columns: 1fr; + } + + .quickCard { + min-height: 220px; + } } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2e006d15..b99ec2f0 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,43 +1,172 @@ import type {ReactNode} from 'react'; -import clsx from 'clsx'; import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; import Heading from '@theme/Heading'; import styles from './index.module.css'; -function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); +type QuickLink = { + title: string; + description: string; + to: string; + cta: string; +}; + +const quickLinks: QuickLink[] = [ + { + title: 'Start Learning', + description: 'Learn the editor, scenes, nodes, scripting, and project workflow from the beginning.', + to: '/docs/Getting Started/introduction/', + cta: 'Open the guide', + }, + { + title: 'Class Reference', + description: 'Search engine APIs, node properties, methods, signals, constants, and examples.', + to: '/docs/Classes/', + cta: 'Browse classes', + }, + { + title: 'Tutorials', + description: 'Build practical knowledge across 2D, 3D, animation, rendering, scripting, UI, and export.', + to: '/docs/category/tutorials', + cta: 'Explore tutorials', + }, + { + title: 'Contribute', + description: 'Improve the engine, docs, translations, examples, bug reports, and review workflow.', + to: '/docs/Contributing/how_to_contribute', + cta: 'Get involved', + }, +]; + +const featuredTopics = [ + { + label: 'First 2D Game', + to: '/docs/Getting Started/first_2d_game/', + }, + { + label: 'First 3D Game', + to: '/docs/Getting Started/first_3d_game/', + }, + { + label: 'GDScript', + to: '/docs/tutorials/scripting/gdscript/gdscript_basics', + }, + { + label: 'Exporting', + to: '/docs/tutorials/export/', + }, + { + label: 'Editor Plugins', + to: '/docs/tutorials/plugins/editor/', + }, + { + label: 'Engine Development', + to: '/docs/Contributing/Development/', + }, +]; + +function QuickLinkCard({title, description, to, cta}: QuickLink) { return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-
- - Docusaurus Tutorial - 5min ⏱️ - -
-
-
+
+ {title} +

{description}

+ + {cta} + +
); } export default function Home(): ReactNode { - const {siteConfig} = useDocusaurusContext(); return ( - -
- + title="Redot Documentation" + description="Official Redot Engine documentation, tutorials, class reference, and contribution guides."> +
+
+
+
+
+ + Redot Engine +
+ Documentation +

+ Learn the engine, find API details quickly, and move from first scene to shipped project with the + official Redot docs. +

+
+ + Start Reading + + + Class Reference + +
+
+ +
+ Redot editor showing a 3D workspace +
+
+
+ +
+
+ + Find The Right Entry Point + +

Jump straight to the material that matches what you are trying to do.

+
+
+ {quickLinks.map((link) => ( + + ))} +
+
+ +
+
+ + Popular Topics + +

Common routes through the documentation for building, scripting, extending, and shipping projects.

+
+
+ {featuredTopics.map((topic) => ( + + {topic.label} + + ))} +
+
+ +
+
+ Redot editor help search panel +
+
+ + Built For Fast Lookup + +

+ The docs are organized around the way Redot is used day to day: guided learning for new projects, + focused tutorials for specific systems, and a generated class reference for exact API details. +

+
+ Nodes and scenes + Scripting + Export workflow +
+
+
);