From 9786a013c540197f2ec6e63c2b7d1623a7ed3124 Mon Sep 17 00:00:00 2001 From: Tom Bursch Date: Mon, 1 Dec 2025 12:46:17 +0100 Subject: [PATCH] Add Website --- .github/workflows/prepare_pages.yml | 52 +++ docs/GettingStarted/Editor.md | 21 ++ docs/GettingStarted/HelloWorld.md | 3 + docs/GettingStarted/Setup.md | 27 ++ docs/GettingStarted/index.md | 17 + docs/Usage/error.md | 12 + docs/Usage/index.md | 20 ++ docs/assets/images/icon-mono.png | Bin 0 -> 4421 bytes docs/assets/images/icon.png | Bin 0 -> 5390 bytes docs/assets/images/waves.svg | 55 ++++ docs/index.md | 146 +++++++++ docs/overrides/landingpage.html | 107 +++++++ docs/overrides/main.html | 24 ++ docs/overrides/partials/tabs-item.html | 43 +++ docs/stylesheets/extra.css | 103 ++++++ docs/stylesheets/landingpage.css | 420 +++++++++++++++++++++++++ mkdocs.yml | 75 +++++ 17 files changed, 1125 insertions(+) create mode 100644 .github/workflows/prepare_pages.yml create mode 100644 docs/GettingStarted/Editor.md create mode 100644 docs/GettingStarted/HelloWorld.md create mode 100644 docs/GettingStarted/Setup.md create mode 100644 docs/GettingStarted/index.md create mode 100644 docs/Usage/error.md create mode 100644 docs/Usage/index.md create mode 100644 docs/assets/images/icon-mono.png create mode 100644 docs/assets/images/icon.png create mode 100644 docs/assets/images/waves.svg create mode 100644 docs/index.md create mode 100644 docs/overrides/landingpage.html create mode 100644 docs/overrides/main.html create mode 100644 docs/overrides/partials/tabs-item.html create mode 100644 docs/stylesheets/extra.css create mode 100644 docs/stylesheets/landingpage.css create mode 100644 mkdocs.yml diff --git a/.github/workflows/prepare_pages.yml b/.github/workflows/prepare_pages.yml new file mode 100644 index 00000000..fdedf92b --- /dev/null +++ b/.github/workflows/prepare_pages.yml @@ -0,0 +1,52 @@ +# (c) https://github.com/MontiCore/monticore + +# .github/workflows/prepare_pages.yml +name: Prepare and deploy pages + +# Preprocess the docs, build a site directory and push its contents to the gh-pages branch + +concurrency: # run this test workflow only once per branch + group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - master + paths: + - docs/** + - mkdocs.yml + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + env: + GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }} + name: Build and Push + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: Install python packages + run: | + python -m pip install --upgrade pip + pip install mkdocs mkdocs-material mike + git clone https://monticore:$GITLAB_TOKEN@git.rwth-aachen.de/se/infrastructure/monticore-pygments-highlighting.git + pip install -r ./monticore-pygments-highlighting/requirements.txt + pip install ./monticore-pygments-highlighting + + - name: Configure Git user + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + + - name: Build and deploy pages + run: mkdocs gh-deploy --force diff --git a/docs/GettingStarted/Editor.md b/docs/GettingStarted/Editor.md new file mode 100644 index 00000000..52e42d34 --- /dev/null +++ b/docs/GettingStarted/Editor.md @@ -0,0 +1,21 @@ +--- +hide: + - toc +--- + +# Tools & Editors + +You have multiple options to choose from for working with MontiArc. +You can build MontiArc models with any text editor or integrated development environment (IDE) in combination with the [CLI](./Setup.md#run-the-cli). + +Though there are some editors that provide a better experience for SysML. + + +## Visual Studio Code + +1. To install VS Code, follow their [instructions](https://code.visualstudio.com/docs/setup/setup-overview). +2. Install the MontiArc extension. + 1. [Download](https://github-registry-files.githubusercontent.com/758456656/1b847700-819d-11f0-8dad-cb32a1bfe312?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20250916%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250916T120634Z&X-Amz-Expires=300&X-Amz-Signature=8856e041f06680f48963357fe24467e82f549ab877f3902d9bbe5dc381c649c8&X-Amz-SignedHeaders=host&response-content-disposition=filename%3Dlanguage-server-7.6.1-10-vscode.vsix&response-content-type=application%2Foctet-stream) the `.vsix` extension. + 2. Start VS Code. + 3. Go to the extension tab → Click `...` → Install from VSIX → Select the previously downloaded extension. + diff --git a/docs/GettingStarted/HelloWorld.md b/docs/GettingStarted/HelloWorld.md new file mode 100644 index 00000000..9d3cf517 --- /dev/null +++ b/docs/GettingStarted/HelloWorld.md @@ -0,0 +1,3 @@ + +# Hello, World! +You're now ready to start with your first system. diff --git a/docs/GettingStarted/Setup.md b/docs/GettingStarted/Setup.md new file mode 100644 index 00000000..52c2f3f9 --- /dev/null +++ b/docs/GettingStarted/Setup.md @@ -0,0 +1,27 @@ + +# Setup SysML v2 + +SysML v2 runs on any platform. In the following tutorials, we will use the CLI. + + +#### Run the CLI + +To run the CLI manually, you need to have [Java 21](https://www.oracle.com/de/java/technologies/downloads/#java21) installed. +Next, download the [SysML v2 Tool jar](https://www.monticore.de/download/MCSysMLv2.jar). + +You can then run the tool with: + +```bash +java -jar MCSysMLv2.jar +``` + +exemplary usage: + +``` +java -jar MCSysMLv2.jar -h +java -jar MCSysMLv2.jar -i Car.sysml -pp +``` + +--- + +You can find detailed descriptions and available parameters in the [usage](../Usage/index.md) section. diff --git a/docs/GettingStarted/index.md b/docs/GettingStarted/index.md new file mode 100644 index 00000000..bce121f5 --- /dev/null +++ b/docs/GettingStarted/index.md @@ -0,0 +1,17 @@ +--- +icon: material/rocket-launch +hide: + - toc +--- + +# Getting Started + +Let's start your SysML journey! In this chapter, we will show you how to start your first Project and introduce you to the basic concepts of SysML. + + +!!! info "Tip" + Simply click on *next (Setup)* on the bottom right to go to the next step of installing our SysML tooling. + +!!! question "Found a problem with the documentation?" + If you find an error or something is not understandable, please file an [issue](../index.md#found-an-issue) for it. + This will help others reading the documentation in the future. \ No newline at end of file diff --git a/docs/Usage/error.md b/docs/Usage/error.md new file mode 100644 index 00000000..ad7c1610 --- /dev/null +++ b/docs/Usage/error.md @@ -0,0 +1,12 @@ +**Note**: These codes are preliminary for now. + +| Code | Reason | +|---------|----------------------------------------------------| +| 0x00xxx | CLI Tool | +| 0x10xxx | CoCos | +| 0xD0xxx | ST serialization | +| 0x80xxx | Type Check (CoCo) | +| 0x81xxx | Type Derivation (might happen while ST completion) | +| 0x90xxx | Refinement related | +| 0xFFxxx | Verification-specific | +| 0xA0xxx | Internal error | diff --git a/docs/Usage/index.md b/docs/Usage/index.md new file mode 100644 index 00000000..336a8d3c --- /dev/null +++ b/docs/Usage/index.md @@ -0,0 +1,20 @@ +--- +hide: + - toc +--- + + +# Usage + +`java -jar MCSysMLv2.jar [-h] -i [-path

] [-pp []] [-s []]` + +| Option | Explanation | +|--------------------------|--------------------------------------------------------------------------------------------| +| -ex,--extended | Runs additional checks assuring models are fit for semantic analysis using [MontiBelle][https://www.se-rwth.de/projects/#MontiBelle] | +| -h,--help | Prints this help dialog | +| -i,--input | Reads the source file (mandatory) and parses the contents | +| -path | Sets the artifact path for imported symbols, space separated. | +| -pp,--prettyprint | Prints the AST to stdout or the specified file (optional) | +| -r,--report

| Prints reports of the artifact to the specified directory. | +| -s,--symboltable | Serialized the Symbol table of the given artifact. | +| -v,--version | Prints version information | \ No newline at end of file diff --git a/docs/assets/images/icon-mono.png b/docs/assets/images/icon-mono.png new file mode 100644 index 0000000000000000000000000000000000000000..9e735d0978ed5459b09fc02cd25fc4e39b495bc4 GIT binary patch literal 4421 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/icon.png b/docs/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdb22a3edd4546d8c2ad2bf050ecee7e0db53a3 GIT binary patch literal 5390 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 YBE39#WGqQx{1Ifr8Jc6N(9Y5S1G!zyfdBvi literal 0 HcmV?d00001 diff --git a/docs/assets/images/waves.svg b/docs/assets/images/waves.svg new file mode 100644 index 00000000..b3eaa79d --- /dev/null +++ b/docs/assets/images/waves.svg @@ -0,0 +1,55 @@ + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..01990ede --- /dev/null +++ b/docs/index.md @@ -0,0 +1,146 @@ +--- +template: landingpage.html +title: Modeling Systems +hide: + - navigation + - toc +--- + + +

+ + SysMLv2 + +

+ +# The Systems Modeling Language v2 + +One of the interesting new capabilities is the exchange of models +between tools using a really human readable textual form of the SysML +language in the spirit of a modern programming language (even though it +has a number of special constructs that resemble modelling concepts). + +```sysmlv2 +standard library package 'Vehicles' { + import ISQ::TorqueValue; + import ScalarValues::*; + part def Automobile; + alias Car for Automobile; + alias Torque for ISQ::TorqueValue; +} +``` + +This textual form will play a major role in the exchange of models +between tools thus allowing to build toolchains, as well as in the +versioning of models, e.g., in Github, and also in the efficient +definition of models by people who prepare textual notations. + +It is therefore highly relevant to have consistent parsing mechanisms +available. The [SysML v2 +Pilot-Implementation](https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation) +contains a parser for this textual notation. + +We know from the definition of programming languages, that it is, +however, helpful to provide a second source parser, such that parsing +results can be compared and therefore compilers, linters, checkers of +context conditions and other advanced tooling, receive the level of +quality desired for industrial use. + +
+ +- :material-rocket-launch:   + __Getting Started__ + + --- + + Is this your first time using SysML? Set up a project and start modeling. + + --- + + [:octicons-arrow-right-24: Take the Tour](./GettingStarted/index.md)
+ [:octicons-arrow-right-24: Installation & Setup](./GettingStarted/Setup.md) + +- :material-tools:   + __Usage__ + + --- + + Learn how to use the tooling.

+ + --- + + [:octicons-arrow-right-24: Read more](./Usage/index.md) + +- :material-license:   + __License__ + + --- + + Learn about the license and how you can use the generated code. + + --- + + [:octicons-arrow-right-24: Read more](https://monticore.github.io/monticore/00.org/Licenses/LICENSE-MONTICORE-3-LEVEL/) + +
+ +
+
+

Get Started with SysML Today!

+Discover Component-Based Modeling + + + Take the Tour + + + + +
+
+ +## Found an issue? + +This SysML v2 tooling is actively maintained by the [Chair of Software Engineering](https://www.se-rwth.de/). +There are multiple ways in which you can improve it to help you and others who might encounter the same issues in the future. + +
+ +- :material-lightbulb-on-20:   + __Want to submit an idea?__ + + --- + + Propose a change, feature request, or suggest an improvement + + --- + + [:octicons-arrow-right-24: Request a change](https://github.com/MontiCore/sysmlv2/issues/new) + +- :material-source-pull:   + __Want to create a pull request?__ + + --- + + Open an issue first and then create a comprehensive and useful pull request + + --- + + [:octicons-arrow-right-24: Set up your development environment](https://github.com/MontiCore/sysmlv2/blob/dev/README.md)
+ [:octicons-arrow-right-24: Create a pull request](https://github.com/MontiCore/sysmlv2/pulls) +
+ +!!! info "Hint" + Before submitting an issue, make sure to: + + - Check that no similar issue already exists [here](https://github.com/MontiCore/sysmlv2/issues) + - You provided all the information needed to understand the issue + +## Further Information + +Find more information about MontiArc and other projects and publications by the Chair of Software Engineering under the following links: + +* [Setup](./GettingStarted/Setup.md) +* [Publications](https://www.se-rwth.de/publications/) +* [SysML v2](https://www.omg.org/sysml/sysmlv2/) +* [MontiArc](https://github.com/MontiCore/montiarc) +* [License](https://github.com/MontiCore/monticore/blob/HEAD/00.org/Licenses/LICENSE-MONTICORE-3-LEVEL.md) diff --git a/docs/overrides/landingpage.html b/docs/overrides/landingpage.html new file mode 100644 index 00000000..e77aec5b --- /dev/null +++ b/docs/overrides/landingpage.html @@ -0,0 +1,107 @@ +{% extends "main.html" %} + + +{% block tabs %} +{{ super() }} + + + +
+
+
+
+

+ Modeling Systems with SysML v2 +

+ +

+ A standard compliant SysML v2 parser and model checker with a strong type system and semantic + foundation. +

+ +
+
+ + + + + Model validation +
+
+ + + + + Simulation Framework +
+
+ + +
+ +
+
+
+
+ + + +
+
Door.arc
+
+
+
package elevator;
+
+component Door {
+  port in boolean shouldOpen;
+
+  automaton {
+    initial state Closed;
+    state Open;
+
+    Closed -> Open [shouldOpen == true] shouldOpen / {
+      System.out.println("Door has opened");
+    }
+    Open -> Closed [shouldOpen == false] shouldOpen / {
+      System.out.println("Door has closed");
+    }
+  }
+}
+
+
+ +
+
+
+
+
+
+
+
+ +
+{% endblock %} + +{% block footer %} + +{{ super() }} +{% endblock %} diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 00000000..11db0eec --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,24 @@ + +{% extends "base.html" %} + +{% block extrahead %} + {{ super() }} + + + +{% endblock %} + + diff --git a/docs/overrides/partials/tabs-item.html b/docs/overrides/partials/tabs-item.html new file mode 100644 index 00000000..4228f564 --- /dev/null +++ b/docs/overrides/partials/tabs-item.html @@ -0,0 +1,43 @@ + +{% macro render_content(nav_item, ref = nav_item) %} + + + + {{ ref.title }} +{% endmacro %} + + +{% macro render(nav_item, ref = nav_item) %} + + + {% set class = "md-tabs__item" %} + {% if ref.active %} + {% set class = class ~ " md-tabs__item--active" %} + {% endif %} + + + {% if nav_item.children %} + {% set first = nav_item.children | first %} + + + {% if first.children %} + {{ render(first, ref) }} + + + {% else %} +
  • + + {{ render_content(first, ref) }} + +
  • + {% endif %} + + + {% else %} +
  • + + {{ render_content(nav_item) }} + +
  • + {% endif %} +{% endmacro %} diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css new file mode 100644 index 00000000..189af426 --- /dev/null +++ b/docs/stylesheets/extra.css @@ -0,0 +1,103 @@ +html { + scroll-behavior: smooth; +} + +:root { + --rwth-blau: #00549F; + --rwth-blau-50: #8EBAE5; + --rwth-blau-10: #E8F1FA; + --rwth-magenta: #E30066; + --rwth-gelb: #FFED00; + --rwth-petrol: #006165; + --rwth-tuerkis: #0098A1; + --rwth-gruen: #57AB27; + --rwth-maigruen: #BDCD00; + --rwth-orange: #F6A800; + --rwth-rot: #CC071E; + --rwth-bordeaux: #A11035; + --rwth-violet: #612158; + --rwth-lila: #7A6FAC; + + --md-primary-fg-color: var(--rwth-blau); + --md-primary-fg-color--light: var(--rwth-blau); + --md-primary-fg-color--dark: var(--rwth-blau); + --md-accent-fg-color: var(--rwth-blau-50); + --md-accent-fg-color--transparent: #00549F25; + + --md-code-hl-color: var(--rwth-blau-50); + --md-code-hl-color--light: var(--rwth-blau-50); + --md-code-hl-number-color: var(--rwth-rot); + --md-code-hl-special-color: var(--rwth-bordeaux); + --md-code-hl-function-color: var(--rwth-violet); + --md-code-hl-constant-color: var(--rwth-lila); + --md-code-hl-keyword-color: var(--rwth-blau); + --md-code-hl-string-color: var(--rwth-gruen); +} + +.md-main { + overflow-x: hidden; +} + +.md-typeset .admonition.info, +.md-typeset details.info { + border-color: var(--md-accent-fg-color); +} + +.md-typeset .info>.admonition-title, +.md-typeset .info>summary { + background-color: var(--rwth-blau-10); +} + +.md-typeset .info>.admonition-title::before, +.md-typeset .info>summary::before { + background-color: var(--md-accent-fg-color); +} + +.md-header__topic { + height: inherit; +} + +@media screen and (min-width:60em) { + .md-search__form { + border-radius: 500px; + } +} + +.full-width { + width: 100vw; + max-width: 100vw; + left: 50%; + position: relative; + margin-left: -50vw; + margin-top: 3rem; + margin-bottom: 3rem; + padding: 1.5rem 0.8rem; +} + +.bg-primary { + background-color: var(--md-primary-fg-color); + color: #fffffff0; + --md-default-fg-color--lightest: #ffffff12; + --md-admonition-bg-color: #ffffff08; + --md-admonition-fg-color: #fffffff0; + --md-typeset-a-color: var(--rwth-orange); +} + +.section-card { + margin-left: -5%; + margin-right: -5%; + padding: 5px 5% 1em 5%; + border-radius: 20px; + background-color: var(--md-primary-fg-color); + box-shadow: 10px 10px 10px #5a5a5a22, 0px 0px 10px #5a5a5a22; + color: #fffffff0; + --md-default-fg-color--lightest: #ffffff12; + --md-admonition-bg-color: #ffffff08; + --md-admonition-fg-color: #fffffff0; + --md-typeset-a-color: var(--rwth-orange); +} + +.section-card a:hover, +.section-card a:focus { + color: var(--rwth-gelb); +} \ No newline at end of file diff --git a/docs/stylesheets/landingpage.css b/docs/stylesheets/landingpage.css new file mode 100644 index 00000000..fa47ba16 --- /dev/null +++ b/docs/stylesheets/landingpage.css @@ -0,0 +1,420 @@ +/* Root styles for proper mobile handling */ +.hero-section { + background: linear-gradient(var(--rwth-blau), var(--rwth-blau-50)); + width: 100%; + overflow-x: hidden; + display: flex; + flex-direction: column; +} + +.hero-container { + max-width: 100%; + margin: auto; + padding: 0 1rem 1rem; + box-sizing: border-box; +} + +.hero-content { + display: grid; + grid-template-columns: 4fr 3fr; + gap: 3rem; + align-items: center; + max-width: 61rem; + margin: 0 auto; + box-sizing: border-box; +} + +.hero-text { + width: 100%; + min-width: 0; + box-sizing: border-box; +} + +.hero-title { + font-size: clamp(1.75rem, 4vw, 3.5rem); + font-weight: 700; + line-height: 1.1; + color: white; + margin-bottom: 1.5rem; + word-wrap: break-word; + overflow-wrap: break-word; + hyphens: auto; +} + +.hero-title-highlight { + background: linear-gradient(45deg, var(--rwth-gelb) 0%, var(--rwth-orange) 90%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + word-wrap: break-word; +} + +.hero-subtitle { + font-size: clamp(1rem, 2.5vw, 1.25rem); + line-height: 1.6; + color: rgba(255, 255, 255, 0.9); + margin-bottom: 2rem; + word-wrap: break-word; + overflow-wrap: break-word; +} + +.hero-features { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin-bottom: 2.5rem; +} + +.hero-feature { + display: flex; + align-items: center; + gap: 0.75rem; + color: rgba(255, 255, 255, 0.9); + font-size: clamp(0.875rem, 2vw, 1rem); + word-wrap: break-word; + overflow-wrap: break-word; +} + +.hero-feature-icon { + width: 1.25rem; + height: 1.25rem; + color: var(--rwth-gelb); + flex-shrink: 0; +} + +.hero-actions { + display: flex; + flex-wrap: wrap; + gap: 1rem; +} + +.btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.875rem 1.5rem; + border-radius: 8px; + font-weight: 600; + text-decoration: none; + transition: all 0.3s ease; + border: none; + cursor: pointer; + font-size: clamp(0.875rem, 2vw, 1rem); + white-space: nowrap; + min-width: 0; +} + +.btn-primary { + background: linear-gradient(45deg, var(--rwth-gelb), var(--rwth-orange)); + color: #333 !important; +} + +.btn-primary:hover { + transform: translateY(-2px); + box-shadow: 0 10px 20px rgba(255, 215, 0, 0.3); +} + +.btn-secondary { + background: rgba(255, 255, 255, 0.1); + color: white; + border: 1px solid rgba(255, 255, 255, 0.3); + backdrop-filter: blur(10px); +} + +.btn-secondary:hover { + background: rgba(255, 255, 255, 0.2); + transform: translateY(-2px); +} + +.btn-icon { + width: 1rem; + height: 1rem; + flex-shrink: 0; +} + +.hero-stats { + display: flex; + flex-wrap: wrap; + gap: 2rem; + justify-content: center; + margin-top: 2rem; +} + +.hero-stat { + text-align: center; + min-width: 0; +} + +.hero-stat-number { + font-size: clamp(1.5rem, 3vw, 2rem); + font-weight: 700; + color: #fff; + margin-bottom: 0.25rem; +} + +.hero-stat-label { + font-size: clamp(0.75rem, 1.5vw, 0.875rem); + color: rgba(255, 255, 255, 0.8); + word-wrap: break-word; +} + +.hero-visual { + position: relative; + width: 140%; + min-width: 0; + box-sizing: border-box; + perspective: 1000px; +} + +.hero-scroll-indicator { + display: flex; + margin: 0 auto; +} + +.hero-code-sample { + background: rgba(0, 0, 0, 0.8); + border-radius: 12px; + overflow: hidden; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); + backdrop-filter: blur(10px); + width: 100%; + box-sizing: border-box; + max-width: 100%; +} + +.code-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem; + background: rgba(255, 255, 255, 0.05); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + box-sizing: border-box; +} + +.code-dots { + display: flex; + gap: 0.5rem; +} + +.code-dot { + width: 12px; + height: 12px; + border-radius: 50%; + flex-shrink: 0; +} + +.code-dot-red { + background: #ff5f56; +} + +.code-dot-yellow { + background: var(--rwth-orange); +} + +.code-dot-green { + background: var(--rwth-gruen); +} + +.code-filename { + color: rgba(255, 255, 255, 0.8); + font-size: clamp(0.75rem, 1.5vw, 0.875rem); + font-family: 'Monaco', 'Consolas', monospace; + word-wrap: break-word; +} + +.code-content { + padding: 1.5rem; + box-sizing: border-box; + overflow-x: auto; + /* Allow horizontal scrolling for code */ + overflow-y: hidden; + max-width: 100%; + --md-code-hl-keyword-color: var(--rwth-blau-50); + --md-code-hl-name-color: #bdbdbd; + --md-code-hl-variable-color: #e6e6e6; + --md-code-hl-operator-color: #e6e6e6; + --md-code-hl-punctuation-color: #e6e6e6; + --md-code-hl-function-color: var(--rwth-orange); + --md-code-hl-string-color: var(--rwth-maigruen); +} + +.code-content pre { + margin: 0; + font-family: 'Monaco', 'Consolas', monospace; + font-size: clamp(0.7rem, 1.5vw, 0.875rem); + line-height: 1.5; + white-space: pre; + /* Prevent code wrapping */ + overflow-x: visible; + min-width: max-content; + /* Ensure content doesn't compress */ +} + +.code-content code { + white-space: pre; + /* Prevent code wrapping */ + display: block; + min-width: max-content; +} + +.hero-decorations { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; +} + +.decoration { + position: absolute; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); + animation: float 6s ease-in-out infinite; +} + +.decoration-1 { + width: 60px; + height: 60px; + top: 20%; + right: 10%; + animation-delay: 0s; +} + +.decoration-2 { + width: 80px; + height: 80px; + top: 60%; + right: 20%; + animation-delay: 2s; +} + +.decoration-3 { + width: 40px; + height: 40px; + top: 40%; + right: 5%; + animation-delay: 4s; +} + +@keyframes float { + + 0%, + 100% { + transform: translateY(0px); + } + + 50% { + transform: translateY(-20px); + } +} + +/* Large Desktop breakpoint */ +@media (max-width: 1600px) { + .hero-stats { + justify-content: flex-start; + } +} + +/* Tablet breakpoint */ +@media (max-width: 1200px) { + .hero-content { + grid-template-columns: 1fr 1fr; + /* Equal columns on medium screens */ + gap: 2rem; + } +} + +/* Mobile breakpoint */ +@media (max-width: 968px) { + .hero-content { + grid-template-columns: 1fr; + /* Single column on mobile */ + gap: 2rem; + } + + .hero-container { + padding: 0 1rem 2rem; + } + + .hero-actions { + justify-content: flex-start; + } + + .hero-stats { + justify-content: center; + } + + .code-content { + padding: 1rem; + } + + .hero-visual { + width: 100%; + } +} + +/* Small mobile breakpoint */ +@media (max-width: 640px) { + .hero-section { + padding: 1.5rem 0 0; + } + + .hero-container { + padding: 0 0.75rem 2rem; + } + + .hero-content { + gap: 1.5rem; + } + + .hero-actions { + flex-direction: column; + align-items: stretch; + } + + .btn { + justify-content: center; + text-align: center; + } + + .hero-stats { + gap: 1rem; + justify-content: space-between; + } + + .hero-stat { + flex: 1; + min-width: 0; + } + + .code-content { + padding: 0.75rem; + } + + .hero-decorations { + display: none; + } +} + +/* Extra small mobile devices */ +@media (max-width: 480px) { + .hero-container { + padding: 0 0.5rem; + } + + .hero-content { + gap: 1rem; + } + + .hero-stats { + flex-direction: column; + gap: 0.75rem; + align-items: center; + } + + .hero-stat { + width: 100%; + } +} \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..9fbd13b0 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,75 @@ +site_name: SysMLv2 +theme: + pallete: + primary: custom + accent: custom + name: 'material' + custom_dir: docs/overrides + features: + - navigation.tabs + - navigation.sections + - navigation.footer + - navigation.instant + - navigation.instant.progress + - navigation.indexes + - toc.follow + - content.tabs.link + - social + - content.code.copy + - content.code.annotate + logo: assets/images/icon-mono.png + favicon: assets/images/icon.png + icon: + annotation: material/help-circle + +site_url: https://monticore.github.io/sysml/ +repo_url: https://github.com/MontiCore/sysmlv2/ + +copyright: "© https://github.com/MontiCore/monticore" + +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/MontiCore/sysmlv2 + - icon: fontawesome/solid/paper-plane + link: mailto:webmaster@se-rwth.de + +extra_css: + - stylesheets/extra.css + +markdown_extensions: + - def_list + - attr_list + - md_in_html + - admonition + - footnotes + - pymdownx.blocks.caption + - pymdownx.extra + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.highlight + - pymdownx.inlinehilite + - pymdownx.details + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + - pymdownx.snippets + - pymdownx.tabbed: + alternate_style: true + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + +nav: + - Home: 'index.md' + - Getting Started: + - Getting Started: 'GettingStarted/index.md' + - Setup: 'GettingStarted/Setup.md' + - Tools & Editors: 'GettingStarted/Editor.md' + - Hello World!: 'GettingStarted/HelloWorld.md' + - Usage: + - Usage: 'Usage/index.md' + - Errors: 'Usage/error.md' + - License: https://monticore.github.io/monticore/00.org/Licenses/LICENSE-MONTICORE-3-LEVEL/