diff --git a/.github/workflows/doc-gen.yml b/.github/workflows/doc-gen.yml new file mode 100644 index 0000000..457cb30 --- /dev/null +++ b/.github/workflows/doc-gen.yml @@ -0,0 +1,44 @@ +name: Deploy static documentation on Pages + +on: + push: + branches: ["*"] + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Run Doc generation script + run: doc/generate.bash + + - name: Fix permissions + run: sudo chmod -c -R +rX 'doc/docs-site/build' + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: 'doc/docs-site/build/site/' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.gitignore b/.gitignore index 2c4d9c9..8d3fedf 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,7 @@ coverage/ *.iws *.iml *.ipr + + +# Doc +doc/**/build diff --git a/README.md b/README.md index 42fbe03..de3dae8 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,47 @@ -# SysON Project (Temporary Repository) +# Eclipse SysON: Web-based SysML Modeling Tool -Welcome to the temporary repository of the Eclipse SysON project. +## Overview -🚧 **Note:** This repository is temporary and is awaiting the official creation of the repository by the Eclipse Foundation. The proposal for the project is available here: [Eclipse SysON Proposal](https://projects.eclipse.org/proposals/eclipse-syson). +The SysON project provides an open-source and interoperable tool for editing SysMLv2 models conforming to the OMG Standard, tailored for the MBSE community. It features a user-friendly web-based interface, offering a range of editors (graphical, form-based, etc.) to facilitate the creation, modification, and visualization of SysML v2 models. SysON leverages the [Sirius Web](https://eclipse.dev/sirius/sirius-web.html) platform and seamlessly integrates with other open-source solutions like Papyrus and Capella. +## Key Features -## Overview +* Web-based: Access SysON from any computer with a web browser. +* Open-source: Freely download and install SysON. +* Interoperable: Exchange models seamlessly with other SysML tools. +* User-friendly: Intuitive interface for easy model creation and editing. -The SysON project provides an open-source and interoperable tool for editing SysMLv2 models conforming to the OMG Standard, tailored for the MBSE community. It features a user-friendly web-based interface, offering a range of editors (graphical, form-based, etc.) to facilitate the creation, modification, and visualization of SysML v2 models. SysON leverages the [Sirius Web](https://eclipse.dev/sirius/sirius-web.html) platform and seamlessly integrates with other open-source solutions like Papyrus and Capella. -## License +## Examples +// TODO : Quick overview of an example based on the ones provides with the OMG reference implementation -This project is licensed under the EPLv2 - see the [LICENSE](https://github.com/ObeoNetwork/SysON/blob/main/LICENSE) file for details. +## Installation + +* Download and install the latest version of SysON from the GitHub repository. +* Launch the SysON application from your web browser. +* Start creating and editing SysML models. + +## Troubleshooting +// TODO : Link to troubleshooting documentation ---- +## Documentation: -This README is a temporary document. For official information, updates, and contributions, please refer to the upcoming official repository on the Eclipse Foundation. +* Extensive documentation covering SysON features and usage. +* Tutorials and guides for beginners and experienced users. +* FAQ section addressing common questions and issues. + +## Changelog +// TODO : Link to Changelog + +## Contributions: + +. Join the active community of SysON developers and contribute to the project. +. Submit bug reports and feature requests. +.Review and improve existing code and documentation. + +## License information + +This project is licensed under the EPLv2 - see the [LICENSE](https://github.com/ObeoNetwork/SysON/blob/main/LICENSE) file for details. +This project is maintained by Obeo and the CEA List - see the project [insights](https://github.com/eclipse-syson/syson/pulse) for details. +More information is available in the documentation: // TODO : link to the license inforamtion section in the doc -For questions or inquiries, feel free to [contact us](mailto:melanie.bats@obeosoft.com). diff --git a/doc/Dockerfile b/doc/Dockerfile new file mode 100644 index 0000000..0bdd55d --- /dev/null +++ b/doc/Dockerfile @@ -0,0 +1,42 @@ +FROM alpine:latest AS BUILD + +RUN apk add npm + +WORKDIR /usr/app + +COPY doc-ui /usr/app + +RUN npm install +RUN ./node_modules/gulp/bin/gulp.js bundle + +FROM alpine:latest AS UI + +COPY --from=BUILD /usr/app/build/ui-bundle.zip /usr/app/ui-bundle.zip + + +FROM alpine:latest + +RUN apk add git +RUN apk add npm +RUN apk add ruby + +RUN mkdir /home/antora + +WORKDIR /home/antora + +COPY docs-site/package.json . +COPY docs-site/package-lock.json . + +RUN npm install +RUN gem install asciidoctor +RUN gem install asciidoctor-pdf +RUN gem install rouge +RUN gem install kramdown-asciidoc + +ENV PATH="$PATH:/home/antora/node_modules/@antora/cli/bin/" + +COPY --from=UI /usr/app/ui-bundle.zip . + +WORKDIR /usr/app + +CMD ["antora", "--clean", "--stacktrace", "--log-level=all", "/usr/app/doc/docs-site/antora-playbook.yml"] diff --git a/doc/README b/doc/README new file mode 100644 index 0000000..daa3e19 --- /dev/null +++ b/doc/README @@ -0,0 +1,7 @@ +# Documentation best practices + +One sentence per line. +Use asciidoc attributes to reference elements of the application UI. +Use asciidoc attributes to reference URL. +For reference to menus, key on the keyboard... use `backticks`. +Use + on new line in table to force a new line \ No newline at end of file diff --git a/doc/content/antora.yml b/doc/content/antora.yml new file mode 100644 index 0000000..d9db410 --- /dev/null +++ b/doc/content/antora.yml @@ -0,0 +1,36 @@ +name: syson +title: SysON +version: true +nav: + - modules/ROOT/nav.adoc + +asciidoc: + attributes: + bug-url: "https://github.com/eclipse-syson/syson/issues" + changelog-url: "https://github.com/eclipse-syson/syson/blob/main/CHANGELOG.adoc" + details: "Details" + diag-toolbar: "Contextual Toolbar" + editor: "Project Editor" + explorer-filter-bar: "Project Explorer Filter Bar" + explorer-menu: "Element Options Menu" + explorer: "Project Explorer" + forum-url: "https://github.com/eclipse-syson/syson/discussions" + fromsyson: "Included in Community version" + fromocp: "Included in Enterprise version" + gv: "General View" + homepage: "Projects Browser" + ocp: "Obeo Cloud Platform" + packages-url: "https://github.com/eclipse-syson/syson/packages" + product: "SysON" + product-jar: "syson-application.jar" + projects-list: "Projects List" + projects-list-menu: "Project Options Menu" + related-elements: "Related Elements" + representations-view: "Representations" + source-code-url: "https://github.com/eclipse-syson/syson" + status-exp: "Status: Experimental" + status-stable: "Status: Stable" + sysmlv1: "SysML v1" + sysmlv2: "SysML v2" + validation: "Validation" + website-url: "https://eclipse.dev/syson/" diff --git a/doc/content/modules/ROOT/README b/doc/content/modules/ROOT/README new file mode 100644 index 0000000..e6384ec --- /dev/null +++ b/doc/content/modules/ROOT/README @@ -0,0 +1,6 @@ +Recommended; Reserved + +Directory that contains the ROOT module. +This special directory does not appear in the output path. +Instead, it becomes the parent folder of any additional, named modules that you create in a component. +The directory name must be written in all uppercase letters. diff --git a/doc/content/modules/ROOT/assets/README b/doc/content/modules/ROOT/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/ROOT/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/ROOT/assets/attachments/README b/doc/content/modules/ROOT/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/ROOT/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/ROOT/assets/images/README b/doc/content/modules/ROOT/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/ROOT/assets/images/account_tree.svg b/doc/content/modules/ROOT/assets/images/account_tree.svg new file mode 100644 index 0000000..80312fa --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/account_tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/developer_guide.svg b/doc/content/modules/ROOT/assets/images/developer_guide.svg new file mode 100644 index 0000000..00dd634 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/developer_guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/diversity.svg b/doc/content/modules/ROOT/assets/images/diversity.svg new file mode 100644 index 0000000..5f20891 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/diversity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/editor_choice.svg b/doc/content/modules/ROOT/assets/images/editor_choice.svg new file mode 100644 index 0000000..c3d4001 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/editor_choice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/explore.svg b/doc/content/modules/ROOT/assets/images/explore.svg new file mode 100644 index 0000000..1ea4981 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/explore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/folder.svg b/doc/content/modules/ROOT/assets/images/folder.svg new file mode 100644 index 0000000..b4f4787 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/footprint.svg b/doc/content/modules/ROOT/assets/images/footprint.svg new file mode 100644 index 0000000..49b871e --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/footprint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/forum.svg b/doc/content/modules/ROOT/assets/images/forum.svg new file mode 100644 index 0000000..5dc864f --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/forum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/globe.svg b/doc/content/modules/ROOT/assets/images/globe.svg new file mode 100644 index 0000000..dd55c5b --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/hub.svg b/doc/content/modules/ROOT/assets/images/hub.svg new file mode 100644 index 0000000..4bac17c --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/hub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/icon_syson_black.svg b/doc/content/modules/ROOT/assets/images/icon_syson_black.svg new file mode 100644 index 0000000..c9192c4 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/icon_syson_black.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/doc/content/modules/ROOT/assets/images/overview.svg b/doc/content/modules/ROOT/assets/images/overview.svg new file mode 100644 index 0000000..186c692 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/overview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/person_play.svg b/doc/content/modules/ROOT/assets/images/person_play.svg new file mode 100644 index 0000000..4ffb0a1 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/person_play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/settings_heart.svg b/doc/content/modules/ROOT/assets/images/settings_heart.svg new file mode 100644 index 0000000..ccb73b3 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/settings_heart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/support_agent.svg b/doc/content/modules/ROOT/assets/images/support_agent.svg new file mode 100644 index 0000000..e075012 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/support_agent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/touch_app.svg b/doc/content/modules/ROOT/assets/images/touch_app.svg new file mode 100644 index 0000000..f9e04e8 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/touch_app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/travel_explore.svg b/doc/content/modules/ROOT/assets/images/travel_explore.svg new file mode 100644 index 0000000..9127a93 --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/travel_explore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/assets/images/volunteer_activism.svg b/doc/content/modules/ROOT/assets/images/volunteer_activism.svg new file mode 100644 index 0000000..f2e3b8a --- /dev/null +++ b/doc/content/modules/ROOT/assets/images/volunteer_activism.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/ROOT/examples/README b/doc/content/modules/ROOT/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/ROOT/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/ROOT/nav.adoc b/doc/content/modules/ROOT/nav.adoc new file mode 100644 index 0000000..86f9742 --- /dev/null +++ b/doc/content/modules/ROOT/nav.adoc @@ -0,0 +1,9 @@ +// Optional; Reserved +// +// A navigation file contains one or more AsciiDoc lists. +// Each navigation file must be declared in the component descriptor if you want it to be displayed in the component’s navigation menu. +* xref:index.adoc[] +include::user-manual:partial$nav.adoc[] +include::installation-guide:partial$nav.adoc[] +include::developer-guide:partial$nav.adoc[] +* xref:product-legal:index.adoc[] \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/README b/doc/content/modules/ROOT/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/ROOT/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/ROOT/pages/authors.adoc b/doc/content/modules/ROOT/pages/authors.adoc new file mode 100644 index 0000000..a90a0e3 --- /dev/null +++ b/doc/content/modules/ROOT/pages/authors.adoc @@ -0,0 +1,3 @@ += Authors + +Discover the individuals who contribute to the {product} project: https://projects.eclipse.org/projects/modeling.syson/who \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/expand-knowledge.adoc b/doc/content/modules/ROOT/pages/expand-knowledge.adoc new file mode 100644 index 0000000..546aedc --- /dev/null +++ b/doc/content/modules/ROOT/pages/expand-knowledge.adoc @@ -0,0 +1,14 @@ += Expand your knowledge + +[cols="1*^", %noheader, frame=none, grid=none] +|=== +a|image::travel_explore.svg[xref=user-manual:features/features.adoc] + +*{product} features* + +Explore the {product} features in details. + +xref:user-manual:features/features.adoc[Explore ...] +|=== + +Or dive in all our xref:user-manual:hands-on/hands-on.adoc[step-by-step guides] and get some hands-on experience thanks to our xref:user-manual:hands-on/tutorials/tutorials.adoc[tutorials]. \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/general-information.adoc b/doc/content/modules/ROOT/pages/general-information.adoc new file mode 100644 index 0000000..867c94b --- /dev/null +++ b/doc/content/modules/ROOT/pages/general-information.adoc @@ -0,0 +1,20 @@ += {product} Snapshot + +{product} project provides an open-source and interoperable tool for editing SysMLv2 models conforming to the OMG Standard, for the MBSE community. +This software will showcase structured editors: graphical, form-based and tables, effectively utilizing the capabilities of the https://eclipse.dev/sirius/sirius-web.html[Eclipse Sirius Web] modeling platform. +Additionally, the project will ensure seamless integration with Open-Source solutions like https://eclipse.dev/papyrus/[Papyrus] and https://mbse-capella.org/[Capella], further enhancing the usability and versatility of the tool. + +== Source code + +* License: xref:product-legal:index.adoc[EPL v2] +* GitHub: {source-code-url} +* xref:authors.adoc[Authors] + +== Tracker + +* Issue tracker: {bug-url} + +== Communication + +* Website: {website-url} +* Forum: {forum-url} \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/help.adoc b/doc/content/modules/ROOT/pages/help.adoc new file mode 100644 index 0000000..aa17917 --- /dev/null +++ b/doc/content/modules/ROOT/pages/help.adoc @@ -0,0 +1,7 @@ += Couldn't find what you needed? + +Don't worry, we've got more options for you. + +include::general-information.adoc[leveloffset=+1] + +include::user-manual:help.adoc[leveloffset=+1] \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/index.adoc b/doc/content/modules/ROOT/pages/index.adoc new file mode 100644 index 0000000..5dcb9dc --- /dev/null +++ b/doc/content/modules/ROOT/pages/index.adoc @@ -0,0 +1,11 @@ += Welcome to {product} + +Start your learning journey with {product}. + +include::overview.adoc[leveloffset=+1] + +include::user-manual:get-started.adoc[leveloffset=+1] + +include::expand-knowledge.adoc[leveloffset=+1] + +include::ROOT:help.adoc[leveloffset=+1] \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/overview.adoc b/doc/content/modules/ROOT/pages/overview.adoc new file mode 100644 index 0000000..1704268 --- /dev/null +++ b/doc/content/modules/ROOT/pages/overview.adoc @@ -0,0 +1,48 @@ += Overview of {product} + +Get to know the basics of {product} with these tours. + +[cols="2*^", %noheader, frame=none, grid=none] +|=== +a|image::icon_syson_black.svg[xref=user-manual:what-is.adoc] + +**What is {product}?** + +{product}'s mission to make {sysmlv2} models accessible to everyone. + +xref:user-manual:what-is.adoc[Learn more...] a|image::overview.svg[xref=user-manual:sysmlv2-overview.adoc] + +**Overview of {sysmlv2}** + +Delve into the foundational concepts of {sysmlv2}. + +xref:user-manual:sysmlv2-overview.adoc[Learn more...] + +a| image::developer_guide.svg[xref=user-manual:key-features.adoc] + +**Key features in {product}?** + +Explore {product} key features and benefits. + +xref:user-manual:key-features.adoc[Learn more...] a|image::globe.svg[xref=user-manual:features/capella.adoc] + +**MBSE, Capella and {product}?** + +Integration between {product}, the MBSE ecosystem and Capella. + +xref:user-manual:features/capella.adoc[Learn more...] + +a| image::hub.svg[xref=user-manual:features/interoperability.adoc] + +**Interoperability** + +Commitment to interoperability and standard APIs support for seamless connections. + +xref:user-manual:features/interoperability.adoc[Learn more...] a|image::diversity.svg[xref=user-manual:help.adoc] + +**Community** + +Get help about {product}. + +xref:user-manual:help.adoc[Learn more...] +|=== \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/reference.adoc b/doc/content/modules/ROOT/pages/reference.adoc new file mode 100644 index 0000000..95502ad --- /dev/null +++ b/doc/content/modules/ROOT/pages/reference.adoc @@ -0,0 +1,3 @@ += Reference documentations + +xref:user-manual:index.adoc diff --git a/doc/content/modules/ROOT/pages/role-in-mbse.adoc b/doc/content/modules/ROOT/pages/role-in-mbse.adoc new file mode 100644 index 0000000..bc8e50b --- /dev/null +++ b/doc/content/modules/ROOT/pages/role-in-mbse.adoc @@ -0,0 +1,24 @@ += {product}'s role in MBSE + +Within {product}, the application of {sysmlv2} extends beyond the conventional boundaries of a modeling tool, assuming a pivotal role as a catalyst for effective Model-Based Systems Engineering (MBSE). +This distinction is particularly pronounced in {product}'s commitment to being an open-source tool, fostering an environment of interoperability that holds profound importance in the realm of MBSE. + +== Interoperability in MBSE +The interoperability inherent in an open-source tool like {product} is a cornerstone for collaborative design of complex systems. +In the context of MBSE, where diverse teams contribute to different facets of a project, having an open-source tool becomes a unifying force. +It allows seamless collaboration and information exchange among stakeholders, regardless of their preferred tools or methodologies. + +== Seamless Transition Between Representations +{product} empowers users to seamlessly transition between graphical and textual representations, accommodating diverse modeling preferences and the specific demands of the systems under analysis. +This flexibility is crucial in MBSE, where the ability to articulate and refine models in different modalities is instrumental in capturing the complexity inherent in modern system designs. + +== Tailoring to Domain-Specific Requirements +The extensibility of {sysmlv2} within {product} is a key aspect that reinforces its adaptability to diverse industries and complex project landscapes. +In MBSE, where each domain may have unique requirements and specifications, having a tool that can be tailored to meet these specific needs is invaluable. +{product}'s extensibility ensures that it remains a dynamic and adaptable resource for system engineers working across various domains. + +== Evolution Guided by {sysmlv2} Principles +As {product} evolves, guided by the principles of {sysmlv2}, it positions itself as more than just a tool; it evolves into a comprehensive and standardized environment for MBSE endeavors. +The commitment to open source and interoperability serves as a cornerstone for future developments, ensuring that {product} continues to meet the evolving needs of the MBSE community. + +In essence, {product} stands as an open-source enabler, promoting collaboration, flexibility, and adaptability—fundamental principles in the ever-evolving landscape of MBSE. \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/scaling.adoc b/doc/content/modules/ROOT/pages/scaling.adoc new file mode 100644 index 0000000..c14fa4f --- /dev/null +++ b/doc/content/modules/ROOT/pages/scaling.adoc @@ -0,0 +1,3 @@ += Scaling {product} + +// TODO \ No newline at end of file diff --git a/doc/content/modules/ROOT/pages/security-policy.adoc b/doc/content/modules/ROOT/pages/security-policy.adoc new file mode 100644 index 0000000..4b9639c --- /dev/null +++ b/doc/content/modules/ROOT/pages/security-policy.adoc @@ -0,0 +1,17 @@ += Security policy + +== Supported versions + +The versions of the project that are currently supported with security updates. + +[] +|=== +|Version | Supported + +|2023.12 +| icon:check +|=== + +== Reporting a vulnerability + +You can report a vulnerability by contacting us via our xref:user-manual:support.adoc[support] page. \ No newline at end of file diff --git a/doc/content/modules/ROOT/partials/README b/doc/content/modules/ROOT/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/ROOT/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/developer-guide/README b/doc/content/modules/developer-guide/README new file mode 100644 index 0000000..c73843b --- /dev/null +++ b/doc/content/modules/developer-guide/README @@ -0,0 +1 @@ +This folder contains documentation about how to install the product. diff --git a/doc/content/modules/developer-guide/assets/README b/doc/content/modules/developer-guide/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/developer-guide/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/developer-guide/assets/attachments/README b/doc/content/modules/developer-guide/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/developer-guide/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/developer-guide/assets/images/README b/doc/content/modules/developer-guide/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/developer-guide/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/developer-guide/examples/README b/doc/content/modules/developer-guide/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/developer-guide/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/developer-guide/pages/README b/doc/content/modules/developer-guide/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/developer-guide/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/developer-guide/pages/index.adoc b/doc/content/modules/developer-guide/pages/index.adoc new file mode 100644 index 0000000..d42c177 --- /dev/null +++ b/doc/content/modules/developer-guide/pages/index.adoc @@ -0,0 +1,27 @@ += Developer guide + +This developer guide provides step-by-step instructions on how to set up your developer environment, contribute to the codebase, and enhance the functionality of {product}. + +== Retrieving the Source Code + +{product} is built upon the https://eclipse.dev/sirius/sirius-web.html[Eclipse Sirius Web] project. +{product} is licensed under the xref:product-legal:index.adoc[(EPL v2)] Open Source license +The source code is openly accessible on GitHub:{source-code-url} + +To get the source code, clone the repository using either SSH: + +[source, bash] +---- +git clone git@github.com:eclipse-syson/syson.git +---- + +or HTTPS: + +[source, bash] +---- +git clone https://github.com/eclipse-syson/syson.git +---- + +== Setting Up your Development Environment + +//TODO \ No newline at end of file diff --git a/doc/content/modules/developer-guide/partials/README b/doc/content/modules/developer-guide/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/developer-guide/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/developer-guide/partials/nav.adoc b/doc/content/modules/developer-guide/partials/nav.adoc new file mode 100644 index 0000000..5874c8b --- /dev/null +++ b/doc/content/modules/developer-guide/partials/nav.adoc @@ -0,0 +1,5 @@ +// Optional; Reserved +// +// A navigation file contains one or more AsciiDoc lists. +// Each navigation file must be declared in the component descriptor if you want it to be displayed in the component’s navigation menu. +* xref:developer-guide:index.adoc[] \ No newline at end of file diff --git a/doc/content/modules/installation-guide/README b/doc/content/modules/installation-guide/README new file mode 100644 index 0000000..c73843b --- /dev/null +++ b/doc/content/modules/installation-guide/README @@ -0,0 +1 @@ +This folder contains documentation about how to install the product. diff --git a/doc/content/modules/installation-guide/assets/README b/doc/content/modules/installation-guide/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/installation-guide/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/installation-guide/assets/attachments/README b/doc/content/modules/installation-guide/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/installation-guide/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/installation-guide/assets/images/README b/doc/content/modules/installation-guide/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/installation-guide/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/installation-guide/assets/images/syson-installation-architecture.drawio.svg b/doc/content/modules/installation-guide/assets/images/syson-installation-architecture.drawio.svg new file mode 100644 index 0000000..5b0cefd --- /dev/null +++ b/doc/content/modules/installation-guide/assets/images/syson-installation-architecture.drawio.svg @@ -0,0 +1,92 @@ + + + + + + + +
+
+
+ Client Computer +
+
+
+
+ + Client Computer + +
+
+ + + + + + +
+
+
+ HTTP / HTTPS +
+
+
+
+ + HTTP / HTTPS + +
+
+ + + + + + + +
+
+
+ SysON Client +
+
+
+
+ + SysON Client + +
+
+ + + + +
+
+
+ Server Computer +
+
+
+
+ + Server Computer + +
+
+ + + + SysON Server + + +
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/doc/content/modules/installation-guide/examples/README b/doc/content/modules/installation-guide/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/installation-guide/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/installation-guide/pages/README b/doc/content/modules/installation-guide/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/installation-guide/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/installation-guide/pages/anti-virus.adoc b/doc/content/modules/installation-guide/pages/anti-virus.adoc new file mode 100644 index 0000000..42b620e --- /dev/null +++ b/doc/content/modules/installation-guide/pages/anti-virus.adoc @@ -0,0 +1,22 @@ += Configure Anti-virus software for use with {product} server + +While we cannot directly recommend specific antivirus software for use with {product} applications, we would like to advise our customers that if you are experiencing slowness with your {product} application, try running it with virus checking disabled. + +Due to the high volume of temporary files generated by {product} applications, antivirus software can significantly impact performance by causing excessive disk I/O and resource contention. +In some cases, even disabling antivirus software might not be sufficient to resolve performance issues. +In such situations, you may need to restart the server or completely uninstall the antivirus software. + +Here are some specific recommendations for configuring antivirus software for use with {product} server: + +* *Exclude {product} Application Folders from Scanning*: Identify the installation directory of your {product} application and exclude it from regular antivirus scans. +This will minimize the impact of antivirus scanning on {product} performance. +* *Schedule Scanning Times*: If possible, schedule antivirus scans during off-peak hours when {product} usage is minimal. +This will reduce the likelihood of performance degradation during active usage periods. +* *Configure Real-time Scanning*: Adjust real-time scanning settings to minimize the impact on {product} performance. +Consider disabling real-time scanning for specific {product} processes or files that are known to cause performance issues. +* *Monitor Resource Utilization*: Continuously monitor resource utilization, especially CPU and disk I/O, to identify any potential bottlenecks caused by antivirus software. +Adjust scanning settings or consider uninstalling the antivirus software if it significantly impacts {product} performance. +* *Consult with Antivirus Vendor*: If you continue to experience performance issues despite optimizing antivirus settings, consider contacting the antivirus vendor for specific guidance on configuring their software for optimal compatibility with {product} applications. + +Remember, the goal is to achieve a balance between comprehensive antivirus protection and minimizing its impact on {product} performance. +By carefully configuring antivirus settings and monitoring resource utilization, you can ensure that your {product} server operates smoothly while maintaining a robust security posture. \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/architecture.adoc b/doc/content/modules/installation-guide/pages/architecture.adoc new file mode 100644 index 0000000..03aec2e --- /dev/null +++ b/doc/content/modules/installation-guide/pages/architecture.adoc @@ -0,0 +1,13 @@ += Installation Architecture + +Before diving into the installation process, it's crucial to understand the underlying architecture of {product}. +This section provides a detailed overview of the system's components, their interactions, and the overall design principles. + +{product} is a _web application_, meaning it runs centrally on a server, and users interact with it through web browsers from any computer on the same network. + +There is one primary method for installing {product}, following the classical client-server model: + +* The server computer runs the {product} Server, +* N client computers run the {product} Clients. + +image::syson-installation-architecture.drawio.svg[{product} Installation Architecture] \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/how-tos/executables.adoc b/doc/content/modules/installation-guide/pages/how-tos/executables.adoc new file mode 100644 index 0000000..05051e9 --- /dev/null +++ b/doc/content/modules/installation-guide/pages/how-tos/executables.adoc @@ -0,0 +1,14 @@ += Get {product} + +Before you begin the installation process, you'll need to visit our {packages-url}[download] page to find the latest version of {product}. + +{product} is distributed as a single _executable Java Archive_ (JAR) which contains the complete {product} application along with all its dependencies. +This distribution simplifies the setup process, allowing for easy exploration of {product}'s features. + +To download the latest pre-built JAR for {product}, follow these steps: + +. Navigate to the `Packages` tab of the GitHub project: {packages-url} +. Identify the latest JAR available for download. +. Download the JAR file named {product-jar} to your local machine. + +This process ensures that you obtain the most recent version of the {product} application in the form of a pre-built JAR file. \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/how-tos/install.adoc b/doc/content/modules/installation-guide/pages/how-tos/install.adoc new file mode 100644 index 0000000..8d38704 --- /dev/null +++ b/doc/content/modules/installation-guide/pages/how-tos/install.adoc @@ -0,0 +1,55 @@ += Installing {product} application + +This section delves into the detailed step-by-step instructions for installing {product}. +Each step is clearly explained to guide you through the process. + +[INFO] +==== +Before you proceed with the installation, please ensure you have the following xref:requirements.adoc[prerequisites]: + +* xref:requirements.adoc[Java supported version] +* https://www.docker.com/[Docker] installed, or an existing xref:requirements.adoc[supported database] installation with a user that has administrator privileges. +==== + +*1. Start the database instance* + +{product} uses PostgreSQL as its database. + +TIP: For development or local testing, the simplest approach is to initiate a PostgreSQL instance using Docker. + +[source, bash] +---- +docker run -p 5434:5432 --name syson-postgres \ + -e POSTGRES_USER=dbuser \ + -e POSTGRES_PASSWORD=dbpwd \ + -e POSTGRES_DB=syson-db \ + -d postgres +---- + +NOTE: This may take a while the first time you run this as Docker will first pull the PostgreSQL image. + +If you don't have Docker or prefer to utilize an existing PostgreSQL installation, modify the following command-line parameters and ensure the `POSTGRES_USER` possesses administrative rights on the database. +These rights are necessary for the automatic creation of the database schema. + +*2. Start the application* + +To run the application, you'll need to use the Java Runtime Environment (JRE) to execute the pre-build JAR ({product-jar}) you xref:how-tos/executables.adoc[downloaded] earlier. + +[source, bash] +---- +java -jar syson-application.jar \ + --spring.datasource.url=jdbc:postgresql://localhost:5434/syson-db \ + --spring.datasource.username=dbuser \ + --spring.datasource.password=dbpwd \ + --spring.liquibase.change-log=classpath:db/changelog/syson.db.changelog.xml +---- + +*3. Open your web browser and navigate to http://localhost:8080 to experience {product}* + +[TIP] +==== +To end your local testing session, ensure you stop the running PostgreSQL Docker container using the command `docker kill syson-postgres`. +Please note that this will erase all the data you have generated during testing. +==== + +If you encounter any issues during the installation process, please refer to the xref:troubleshooting.adoc[troubleshooting guide] for detailed solutions. \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/index.adoc b/doc/content/modules/installation-guide/pages/index.adoc new file mode 100644 index 0000000..90b1b7b --- /dev/null +++ b/doc/content/modules/installation-guide/pages/index.adoc @@ -0,0 +1,6 @@ += Installation guide + +This installation guide provides step-by-step instructions on how to install, configure, and manage {product} on your system. +Whether you are a new user or an experienced administrator, this guide will walk you through the process of setting up {product} for optimal performance and compatibility. + +include::installation-guide:partial$nav.adoc[] \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/migration-process.adoc b/doc/content/modules/installation-guide/pages/migration-process.adoc new file mode 100644 index 0000000..89e57ef --- /dev/null +++ b/doc/content/modules/installation-guide/pages/migration-process.adoc @@ -0,0 +1,8 @@ += Migration process + +If you're upgrading from an older version of {product} to the latest release, this section provides step-by-step guidance on migrating your existing data and settings to the new version. + +== 2023.12.0 + +As this marks the first release of our product, there is no migration process required at this time. +Users can confidently adopt this release without any specific steps for migrating from previous versions \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/requirements.adoc b/doc/content/modules/installation-guide/pages/requirements.adoc new file mode 100644 index 0000000..12db174 --- /dev/null +++ b/doc/content/modules/installation-guide/pages/requirements.adoc @@ -0,0 +1,121 @@ += Prerequisites + +To ensure a smooth and successful installation, your system must meet the minimum hardware and software requirements specified in this section. +This section outlines the recommended hardware specifications, operating systems, and other essential prerequisites for running {product} effectively. + +Before installing {product}, make sure you have the right software and infrastructure to run it. +These system prerequisites lay the foundation for optimal performance and functionality, guaranteeing that {product} operates efficiently on your environment. +Take a moment to review and align your system with the recommended specifications outlined below to ensure a smooth installation and a robust user experience. + +NOTE: If a platform and version is not listed on this page, it means we don't test it, fix bugs or provide assistance for it. + +[#server-req] +== Server-side installation requirements + +To set up the {product} Server, it's crucial to meet the specific prerequisites that lay the groundwork for a stable and reliable server environment. + +[%noheader] +|=== +|*Hardware* +a|* For a small number of projects (less or equal to 10) and about 10-30 users, 100k semantic elements and 1000 representations in total: a recent server featuring a multicore CPU clocked at 2 GHz and equipped with 4 GB of available RAM, along with a reasonably fast hard drive (7200 rpm or faster) should cater for your needs. +** Minimum RAM: 4 GB +** Recommended RAM *8 GB* or more +** Minimum CPU: Dual-core processor +** Recommended CPU: *Quad-core* processor or higher +** Disk space: *10 GB* for installation +** *Additional disk* space for application data + +* To enhance performance further, it is advisable to monitor {product} memory usage and allocate additional memory as needed. +In scenarios where your system anticipates a substantial volume of concurrent requests, deploying {product} applications on a multicore CPU machine becomes advantageous. +This strategy increases the concurrency of processing requests, ultimately leading to improved response times for your users. +Adjusting memory allocation and leveraging multicore capabilities contribute to optimizing the overall system responsiveness. +For more information, you can also refer to xref:user-manual:scaling-limits.adoc[Scaling {product}]. + +|*Operating System* +a|{product} is a pure Java-based application and should run on any supported operating system, provided that the JDK / JRE requirements are satisfied. + +* Linux (64-bit), preferable distributions include Ubuntu, CentOS, or Red Hat Enterprise Linux. +* Windows Server (64-bit), recommended versions include Windows Server 2016 or later : xref:anti-virus.adoc[Read Anti-Virus] in {product} applications. +|*Database* +a|To connect your {product} instance to an enterprise database, you must install and configure one of the following supported databases: + +* *PostgreSQL 15* + +Ensure that the server has a dedicated PostgreSQL database with admin rights. +|*Java Runtime Environment (JRE)* +a|You need to install and configure a separate JRE to run {product}, you have to install a supported version of the Java runtime: + +* *Java 17* is essential for running the {product} Server. + +We recommend utilizing the Java runtime provided by the https://adoptium.net/fr/temurin/releases/[Eclipse Temurin] project. + +|*Network Connectivity* +|Stable internet connection for updates and communication with {product} Clients. +|=== + +[#client-req] +== Client-side installation requirements + +{product} is browser-based software, which means it can be run on all full desktop operating systems (MacOS, Windows, Linux, etc), as well as Chrome OS. + +=== Supported Browsers + +[%noheader] +|=== +|*Browsers* +a|*Desktop browsers:* + +* *Chrome* (latest stable version) +* *Mozilla Firefox* (latest stable version) +a|*Mobile browsers:* + +Please note that {product} is currently not supported on mobile devices. +|=== + +WARNING: {product} does not support Internet Explorer. + +NOTE: We support a minimum screen resolution of 1024 x 768 (when browsers are maximized). + +=== Supported operating system + +The minimum operating system (OS) requirements are: + +* Windows 10 or later +* Apple macOS 13.x (Ventura) and later +* Any Linux OS that supports the browsers mentioned above +* Any Chrome OS that supports the browsers mentioned above + +NOTE: You can find out what browser and operating system version you’re using via https://www.whatsmybrowser.org/[What’s my Browser]. + +[CAUTION] +==== +If you are encountering speed, upload, download, or various interface problem with {product} it could be caused by a plugin, add-on, or extension that you have installed in your browser. +To see if this is the case you can try disabling all plugins, add-ons, or extensions within your browser. +==== + +== Deployment recommendations + +=== Latency: Client and Server + +It is recommended to provide a network with the lowest possible latency between the client and the server. + +=== Latency: Server and Database + +To ensure optimal performance, we strongly recommend hosting both the server and database on the same physical server to minimize latency between the two components. + +=== Network stability + +VPN are not recommended (it is a latency factor) as well as other network elements that could drop connections which are more or less inactive. +As such wireless connection are also not recommended as any loss of connectivity might lead to instability in the product and loss of data. +However, if a network element of this kind is mandatory, an SSH tunnel could be used as a workaround to avoid client/server disconnections. + +=== Server isolation + +{product} should be the only way to edit the information stored in the database. + +== Disclaimer + +Notwithstanding what was stated previously, {product} is not warranted to run without any error or interruption. +Obeo does not make any warranty regarding the statements that are under the section <>, this section is provided for information purposes. + +You acknowledge and accept the risks involved in using these products which could include without limitation, down time, loss of connectivity or data, system crashes, bad performances or performance degradation. \ No newline at end of file diff --git a/doc/content/modules/installation-guide/pages/troubleshooting.adoc b/doc/content/modules/installation-guide/pages/troubleshooting.adoc new file mode 100644 index 0000000..c1474c9 --- /dev/null +++ b/doc/content/modules/installation-guide/pages/troubleshooting.adoc @@ -0,0 +1,6 @@ += Troubleshooting + +Even the most straightforward installation process can encounter unforeseen issues. +This section offers comprehensive troubleshooting tips and solutions to common problems encountered during installation. + +//TODO \ No newline at end of file diff --git a/doc/content/modules/installation-guide/partials/README b/doc/content/modules/installation-guide/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/installation-guide/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/installation-guide/partials/nav.adoc b/doc/content/modules/installation-guide/partials/nav.adoc new file mode 100644 index 0000000..281d74b --- /dev/null +++ b/doc/content/modules/installation-guide/partials/nav.adoc @@ -0,0 +1,11 @@ +// Optional; Reserved +// +// A navigation file contains one or more AsciiDoc lists. +// Each navigation file must be declared in the component descriptor if you want it to be displayed in the component’s navigation menu. +* xref:installation-guide:index.adoc[] +** xref:installation-guide:architecture.adoc[] +** xref:installation-guide:requirements.adoc[] +** xref:installation-guide:how-tos/executables.adoc[] +** xref:installation-guide:how-tos/install.adoc[] +** xref:installation-guide:troubleshooting.adoc[] +** xref:installation-guide:migration-process.adoc[] \ No newline at end of file diff --git a/doc/content/modules/product-legal/README b/doc/content/modules/product-legal/README new file mode 100644 index 0000000..421108f --- /dev/null +++ b/doc/content/modules/product-legal/README @@ -0,0 +1,2 @@ +This folder contains documentation about legal public information. +This documentation can be shared **publicly**. diff --git a/doc/content/modules/product-legal/assets/README b/doc/content/modules/product-legal/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/product-legal/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/product-legal/assets/attachments/README b/doc/content/modules/product-legal/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/product-legal/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/product-legal/assets/images/README b/doc/content/modules/product-legal/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/product-legal/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/product-legal/examples/README b/doc/content/modules/product-legal/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/product-legal/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/product-legal/examples/eplv2-license.txt b/doc/content/modules/product-legal/examples/eplv2-license.txt new file mode 100644 index 0000000..5986151 --- /dev/null +++ b/doc/content/modules/product-legal/examples/eplv2-license.txt @@ -0,0 +1,87 @@ +Eclipse Public License version 2.0 +SPDX short identifier: EPL-2.0 + +Further resources on the Eclipse Public License version 2.0 + + +Eclipse Public License - v 2.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS +“Contribution” means: + +a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and +b) in the case of each subsequent Contributor: +i) changes to the Program, and +ii) additions to the Program; +where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works. +“Contributor” means any person or entity that Distributes the Program. + +“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. + +“Program” means the Contributions Distributed in accordance with this Agreement. + +“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors. + +“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. + +“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof. + +“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy. + +“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files. + +“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor. + +2. GRANT OF RIGHTS +a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works. +b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. +c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. +d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. +e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3). +3. REQUIREMENTS +3.1 If a Contributor Distributes the Program in any form, then: + +a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and +b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license: +i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; +ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; +iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and +iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3. +3.2 When the Program is Distributed as Source Code: + +a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and +b) a copy of this Agreement must be included with each copy of the Program. +3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION +Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Contributor”) hereby agrees to defend and indemnify every other Contributor (“Indemnified Contributor”) against any losses, damages and costs (collectively “Losses”) arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. + +5. NO WARRANTY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL +If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement. + +Exhibit A – Form of Secondary Licenses Notice +“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.” + +Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses. + +If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/doc/content/modules/product-legal/pages/README b/doc/content/modules/product-legal/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/product-legal/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/product-legal/pages/index.adoc b/doc/content/modules/product-legal/pages/index.adoc new file mode 100644 index 0000000..3e1b19b --- /dev/null +++ b/doc/content/modules/product-legal/pages/index.adoc @@ -0,0 +1,9 @@ += Legal Information + +== License +{product} is under the EPL v2 license. + +[,java] +---- +include::product-legal:example$eplv2-license.txt[] +---- diff --git a/doc/content/modules/product-legal/partials/README b/doc/content/modules/product-legal/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/product-legal/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/sirius-web/README b/doc/content/modules/sirius-web/README new file mode 100644 index 0000000..421108f --- /dev/null +++ b/doc/content/modules/sirius-web/README @@ -0,0 +1,2 @@ +This folder contains documentation about legal public information. +This documentation can be shared **publicly**. diff --git a/doc/content/modules/sirius-web/assets/README b/doc/content/modules/sirius-web/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/sirius-web/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/sirius-web/assets/attachments/README b/doc/content/modules/sirius-web/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/sirius-web/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/sirius-web/assets/images/README b/doc/content/modules/sirius-web/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/sirius-web/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/sirius-web/examples/README b/doc/content/modules/sirius-web/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/sirius-web/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/sirius-web/examples/eplv2-license.txt b/doc/content/modules/sirius-web/examples/eplv2-license.txt new file mode 100644 index 0000000..5986151 --- /dev/null +++ b/doc/content/modules/sirius-web/examples/eplv2-license.txt @@ -0,0 +1,87 @@ +Eclipse Public License version 2.0 +SPDX short identifier: EPL-2.0 + +Further resources on the Eclipse Public License version 2.0 + + +Eclipse Public License - v 2.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS +“Contribution” means: + +a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and +b) in the case of each subsequent Contributor: +i) changes to the Program, and +ii) additions to the Program; +where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works. +“Contributor” means any person or entity that Distributes the Program. + +“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. + +“Program” means the Contributions Distributed in accordance with this Agreement. + +“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors. + +“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. + +“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof. + +“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy. + +“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files. + +“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor. + +2. GRANT OF RIGHTS +a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works. +b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. +c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. +d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. +e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3). +3. REQUIREMENTS +3.1 If a Contributor Distributes the Program in any form, then: + +a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and +b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license: +i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; +ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; +iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and +iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3. +3.2 When the Program is Distributed as Source Code: + +a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and +b) a copy of this Agreement must be included with each copy of the Program. +3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION +Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Contributor”) hereby agrees to defend and indemnify every other Contributor (“Indemnified Contributor”) against any losses, damages and costs (collectively “Losses”) arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. + +5. NO WARRANTY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL +If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement. + +Exhibit A – Form of Secondary Licenses Notice +“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.” + +Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses. + +If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/doc/content/modules/sirius-web/pages/README b/doc/content/modules/sirius-web/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/sirius-web/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/sirius-web/pages/index.adoc b/doc/content/modules/sirius-web/pages/index.adoc new file mode 100644 index 0000000..5bd2938 --- /dev/null +++ b/doc/content/modules/sirius-web/pages/index.adoc @@ -0,0 +1,2 @@ +// TODO to delete + diff --git a/doc/content/modules/sirius-web/partials/README b/doc/content/modules/sirius-web/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/sirius-web/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/user-manual/README b/doc/content/modules/user-manual/README new file mode 100644 index 0000000..1828fb6 --- /dev/null +++ b/doc/content/modules/user-manual/README @@ -0,0 +1,2 @@ +This folder contains documentation about user manual. +This documentation can be shared **publicly**. diff --git a/doc/content/modules/user-manual/assets/README b/doc/content/modules/user-manual/assets/README new file mode 100644 index 0000000..1fee311 --- /dev/null +++ b/doc/content/modules/user-manual/assets/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory where multimedia and supplemental files are organized by content type. diff --git a/doc/content/modules/user-manual/assets/attachments/README b/doc/content/modules/user-manual/assets/attachments/README new file mode 100644 index 0000000..65b6253 --- /dev/null +++ b/doc/content/modules/user-manual/assets/attachments/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains supplemental materials, such as PDFs or ZIP files, that readers can download via a link created in a page using the AsciiDoc link macro. diff --git a/doc/content/modules/user-manual/assets/images/README b/doc/content/modules/user-manual/assets/images/README new file mode 100644 index 0000000..3657f44 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains pictures, screenshots, diagrams, and other graphics files that are displayed in a page using the AsciiDoc image macro. diff --git a/doc/content/modules/user-manual/assets/images/developer_guide.svg b/doc/content/modules/user-manual/assets/images/developer_guide.svg new file mode 100644 index 0000000..00dd634 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/developer_guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/editor-editor.svg b/doc/content/modules/user-manual/assets/images/editor-editor.svg new file mode 100644 index 0000000..58c0187 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-editor.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-left-sidebar-explorer.svg b/doc/content/modules/user-manual/assets/images/editor-left-sidebar-explorer.svg new file mode 100644 index 0000000..52bcf2a --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-left-sidebar-explorer.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-left-sidebar-validation.svg b/doc/content/modules/user-manual/assets/images/editor-left-sidebar-validation.svg new file mode 100644 index 0000000..70fee17 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-left-sidebar-validation.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-right-sidebar-details.svg b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-details.svg new file mode 100644 index 0000000..b4e7ff3 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-details.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-right-sidebar-related-elements.svg b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-related-elements.svg new file mode 100644 index 0000000..9a3425a --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-related-elements.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-right-sidebar-representations.svg b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-representations.svg new file mode 100644 index 0000000..3965a35 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-right-sidebar-representations.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor-toolbar.svg b/doc/content/modules/user-manual/assets/images/editor-toolbar.svg new file mode 100644 index 0000000..d3c9960 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor-toolbar.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor.svg b/doc/content/modules/user-manual/assets/images/editor.svg new file mode 100644 index 0000000..ec50e1e --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/editor_choice.svg b/doc/content/modules/user-manual/assets/images/editor_choice.svg new file mode 100644 index 0000000..c3d4001 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/editor_choice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/explore.svg b/doc/content/modules/user-manual/assets/images/explore.svg new file mode 100644 index 0000000..1ea4981 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/explore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/footprint.svg b/doc/content/modules/user-manual/assets/images/footprint.svg new file mode 100644 index 0000000..49b871e --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/footprint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/forum.svg b/doc/content/modules/user-manual/assets/images/forum.svg new file mode 100644 index 0000000..5dc864f --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/forum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/homepage-existing-projects.svg b/doc/content/modules/user-manual/assets/images/homepage-existing-projects.svg new file mode 100644 index 0000000..25df80c --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/homepage-existing-projects.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/homepage-new-project.svg b/doc/content/modules/user-manual/assets/images/homepage-new-project.svg new file mode 100644 index 0000000..3fa5017 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/homepage-new-project.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/homepage-toolbar.svg b/doc/content/modules/user-manual/assets/images/homepage-toolbar.svg new file mode 100644 index 0000000..da4e1be --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/homepage-toolbar.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/homepage.svg b/doc/content/modules/user-manual/assets/images/homepage.svg new file mode 100644 index 0000000..63add7a --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/homepage.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/content/modules/user-manual/assets/images/settings_heart.svg b/doc/content/modules/user-manual/assets/images/settings_heart.svg new file mode 100644 index 0000000..ccb73b3 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/settings_heart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/support_agent.svg b/doc/content/modules/user-manual/assets/images/support_agent.svg new file mode 100644 index 0000000..e075012 --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/support_agent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/assets/images/volunteer_activism.svg b/doc/content/modules/user-manual/assets/images/volunteer_activism.svg new file mode 100644 index 0000000..f2e3b8a --- /dev/null +++ b/doc/content/modules/user-manual/assets/images/volunteer_activism.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/content/modules/user-manual/examples/README b/doc/content/modules/user-manual/examples/README new file mode 100644 index 0000000..817b0a0 --- /dev/null +++ b/doc/content/modules/user-manual/examples/README @@ -0,0 +1,3 @@ +Optional; Reserved + +Directory that contains non-AsciiDoc file types, such as source code or data values. These files are often inserted into listing blocks using the AsciiDoc include directive. diff --git a/doc/content/modules/user-manual/pages/README b/doc/content/modules/user-manual/pages/README new file mode 100644 index 0000000..1a9c445 --- /dev/null +++ b/doc/content/modules/user-manual/pages/README @@ -0,0 +1,4 @@ +Required; Reserved + +Directory that contains all of a module’s AsciiDoc files. +These files are automatically enlisted by Antora and converted to standalone HTML pages. diff --git a/doc/content/modules/user-manual/pages/best-practices.adoc b/doc/content/modules/user-manual/pages/best-practices.adoc new file mode 100644 index 0000000..b8f120b --- /dev/null +++ b/doc/content/modules/user-manual/pages/best-practices.adoc @@ -0,0 +1,13 @@ += {product} Best Practices + +Explore in depth or quickly grasp best Practices and tips. + +== Best practices + +A compilation of in-depth guides to help you make the most of {product}. + +// TODO contribute best practices + +== Tips and tricks + +// TODO contribute tips and tricks \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/concepts.adoc b/doc/content/modules/user-manual/pages/concepts.adoc new file mode 100644 index 0000000..9749342 --- /dev/null +++ b/doc/content/modules/user-manual/pages/concepts.adoc @@ -0,0 +1,38 @@ += {product} key concepts and terminology + +This section provides a comprehensive exploration of the fundamental principles that shape the functionality of {product} offering essential insights into its core foundations. + +== Project + +In {product}, a *Project* serves as a high-level container that organizes <>. +You can utilize projects to group models, providing a structured and efficient way to manage your content. + +NOTE: It is important to note that creating sub-projects within a project is not supported. + +NOTE: All models exist at the same level within a project. + +This design ensures simplicity and clarity in organizing and accessing your models, fostering a straightforward and intuitive project management experience. + +[IMPORTANT] +==== +In {product}, projects are _public_. +Public projects are visible by everyone. +==== + +== Model + +In {product}, a model represents a comprehensive and structured representation of a system, capturing its various aspects, components, and relationships. +These models serve as fundamental building blocks for organizing and articulating the design, behavior, and structure of a system. +Notably, all models within {product} adhere to the {sysmlv2} language metamodel, ensuring compliance with standardized specifications. +This adherence to the {sysmlv2} metamodel enhances interoperability, consistency, and compatibility across the modeling landscape, making models integral components for effective system engineering and collaborative project development. + +xref:user-manual:sysmlv2-overview.adoc[Discover the {sysmlv2} language...] + +== Representation + +In the context of {product}, a representation serves as a visual depiction or interpretation of a system, capturing specific aspects and viewpoints. +Essentially, it is one of the possible views within the {sysmlv2} framework. +Representations provide a means to illustrate and communicate diverse facets of a system, aiding in the comprehensive understanding of its structure, behavior, and relationships. These visual depictions play a pivotal role in model-based systems engineering, offering a nuanced and graphical approach to convey complex information in a more accessible manner. +Each representation within {sysmlv2} contributes to building a holistic understanding of a system's architecture and design. + +xref:features/features.adoc[Explore features...] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/contribute.adoc b/doc/content/modules/user-manual/pages/contribute.adoc new file mode 100644 index 0000000..ff0b8df --- /dev/null +++ b/doc/content/modules/user-manual/pages/contribute.adoc @@ -0,0 +1,55 @@ += Contribute + +== Make a Difference! + +{product} is an open source project and, we encourage everyone to participate and contribute to its development! +There are numerous ways to contribute, including: + +* Joining our active community forum, +* Identifying and reporting bugs, +* Proposing new features, +* Enhancing the documentation, +* Writing comprehensive tests, +* Fixing existing issues. + +== Get involved + +=== Joining the Forum + +For any questions or inquiries, don't hesitate to participate in our xref:user-manual:forum.adoc[forum] on GitHub. + +=== Sharing your Feedback + +Your feedback is crucial to the continuous improvement of {product}. +If you believe something is missing, encounter strange behavior, or simply want to express your satisfaction with the current state, feel free to share your thoughts. + +[#reporting-issues] +=== Reporting issues + +Bug reports are essential, so please report any issues you encounter. +When reporting bugs, provide detailed descriptions, reproducible tests, example code, or any other relevant information that can aid in resolving the issue. + +Our issue tracker is hosted on GitHub: {bug-url}. + +To submit a new issue, you'll need a GitHub account. +For guidance on searching for issues, refer to GitHub's help page. + +=== Enriching the Documentation + +Have you found errors or inconsistencies in our documentation? +We welcome your contributions! + +{product}’s documentation resides on GitHub: {source-code-url}/tree/main/doc. + +Clone our repository, update the documentation, and trigger a pull request. +Our documentation is written in Asciidoc syntax, making it straightforward to contribute. +Refer to the developer guide's Documentation section for insights into our documentation building process. + +== Contributing to the Code + +{product}'s code is hosted on GitHub, making it simple to retrieve and build from source. +Simply clone our repository, make your modifications, align them with our requirements, and initiate a pull request. + +Follow the xref:developer-guide:index.adoc[developer guide] to gain insights into setting up your development environment and get started with contributing to the {product} codebase. + +Embark on your {product} contribution journey today! \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/faq/faq.adoc b/doc/content/modules/user-manual/pages/faq/faq.adoc new file mode 100644 index 0000000..ffd0d0b --- /dev/null +++ b/doc/content/modules/user-manual/pages/faq/faq.adoc @@ -0,0 +1,88 @@ += Frequently Asked Questions + +Here are answers to questions we are frequently asked. +If you have a question not addressed here, please xref:user-manual:help.adoc[contact us]. + +== General Questions + +.What is {product}? +[%collapsible] +==== +To understand the intent of {product}, refer to the xref:user-manual:what-is.adoc[What is?] section in the user manual. +==== + +.What are the key features of {product}? +[%collapsible] +==== +To discover the {product} features, refer to the xref:user-manual:key-features.adoc[Key features] section in the user manual. +==== + +.What are the supported {sysmlv2} modeling elements? +[%collapsible] +==== +To explore the supported {sysmlv2} elements, refer to the xref:user-manual:features/features.adoc[Features] section in the user manual. +==== + +.What are the supported diagram types? +[%collapsible] +==== +To explore the supported {sysmlv2} views, refer to the xref:user-manual:features/features.adoc[Features] section in the user manual. +==== + +.How do I create a new model? +[%collapsible] +==== +To create a new model, refer to the xref:user-manual:hands-on/how-tos/create-model.adoc[[Create a new model] section in the user manual. +==== + +.How do I import and export models? +[%collapsible] +==== +To import /export models, refer to the xref:user-manual:features/interoperability.adoc[Interoperability] section in the user manual. +==== + +* xref:user-manual:features/collaboration.adoc[How do I collaborate with others on models?] +* xref:user-manual:what-is.adoc[What is the difference between {product} and other SysML modeling tools?] + +== Troubleshooting + +* xref:installation-guide:requirements.adoc[What are the recommended system requirements for {product}?] +* xref:user-manual:contribute.adoc#reporting-issues[How do I report bugs or submit feature requests?] + +== Advanced Questions + +.How do I customize the user interface of {product}? +[%collapsible] +==== +{product} is an open-source product, providing users with the flexibility to customize the user interface based on their specific needs. Users can directly modify the source code by forking the project and following the instructions in the developer guide to build their customized version. For users seeking professional assistance or customization services, Obeo offers support and can provide tailored solutions. Feel free to contact Obeo for personalized assistance with your customization requirements. +==== + + +How do I extend {product} with custom add-ons or extensions? +How do I integrate {product} with other tools or systems? +What are the best practices for modeling complex systems with {product}? +How do I learn more about {sysmlv2} modeling and best practices? +Is there a mobile version of {product} available? +How does version control work in {product}? +How do I access professional support for {product}? +Is there a limit to the number of projects or models I can create in {product}? +How do I import/export models in {product}? +What collaboration features are available in {product}? + +Does {product} provides a method? + +Model 2 Doc ? + +== Additional Resources + +* xref:ROOT:index.adoc[{product} documentation] +* xref:ROOT:help.adoc[Community forums and support channels] +* xref:user-manual:hands-on/hands-on.adoc[Tutorials and training resources] + + +* xref:faq/ocp.adoc[What is {ocp} vs {product}?] +* xref:user-manual:features/capella.adoc[How to integrate {product} with Capella?] +* xref:faq/support.adoc[] +* xref:faq/install.adoc[] + +//TODO \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/faq/ocp.adoc b/doc/content/modules/user-manual/pages/faq/ocp.adoc new file mode 100644 index 0000000..2544ff6 --- /dev/null +++ b/doc/content/modules/user-manual/pages/faq/ocp.adoc @@ -0,0 +1,27 @@ += What is {ocp} vs {product}? + +== {product}: An Open Source Project + +{product} stands proudly as an open-source project, embodying a commitment to transparency, collaboration, and community-driven development. +As an open-source initiative, {product} invites contributions, feedback, and participation from a diverse community of users and developers, fostering an environment of shared innovation and continuous improvement. + +== {ocp}: An Enterprise Ready Product + +The https://www.obeosoft.com/en/products/obeo-cloud-platform[{ocp}] product follows an open-core product model, where the core of the product is available as open source (under the {product} project), inviting collaboration and community engagement. +Beyond the open-source foundation, Obeo offers an extended version enriched with Enterprise features. +This extended build product encompasses a spectrum of Enterprise features, catering to the advanced needs of organizations operating in dynamic and diverse IT landscapes. +These features are curated to enhance the platform's capabilities, providing robust solutions for deployment scenarios ranging from public and private clouds to on-premise environments. + +== Support and Upgrade Guarantees + +Recognizing the importance of reliability and continuous improvement, {ocp} includes comprehensive support and upgrade guarantees. +This ensures that organizations leveraging {ocp} can benefit from a secure, well-supported, and evolving platform. +The commitment to support and upgrades underscores {ocp}'s dedication to providing a stable and dependable solution for its users. + +xref:user-manual:support.adoc[Contact us!] + +== Early Adopter Program + +Become part of the https://www.obeosoft.com/en/early-adopters-program[Early Adopter Program]. +Joining the program provides you with the opportunity to explore new features, provide feedback, and actively contribute to the development of {product}. +Your insights and engagement are valued as we shape the future of {product} together. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/admin.adoc b/doc/content/modules/user-manual/pages/features/admin.adoc new file mode 100644 index 0000000..e1ad69c --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/admin.adoc @@ -0,0 +1,2 @@ += Administration + diff --git a/doc/content/modules/user-manual/pages/features/capella.adoc b/doc/content/modules/user-manual/pages/features/capella.adoc new file mode 100644 index 0000000..b6b8f52 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/capella.adoc @@ -0,0 +1,13 @@ += Integrating with Capella + +As we look to the future, exploring the potential integration between {product} and the Capella open-source modeling tool emerges as a promising avenue for enhancing the collaborative environment in MBSE projects. +The envisioned integration aims to establish a seamless connection between {product} and Capella, allowing system engineers to consider both platforms as complementary tools for their {sysmlv2} modeling endeavors. + +In this envisioned scenario, {product} could potentially serve as a core component for {sysmlv2} model editing within the Capella environment. +The goal is to facilitate synchronization and co-design of {sysmlv2} models alongside Capella projects, fostering a cohesive and interoperable approach to system engineering. + +Structured editors within {product}, encompassing graphical, form-based, and table editors, could harmonize with Capella's modeling environment, offering engineers a flexible and versatile toolkit. +While this integration remains a vision for future work, the potential benefits include an improved efficiency in MBSE projects through a unified solution that capitalizes on the strengths of both {product} and Capella. + +This conceptual integration underlines {product}'s commitment to evolving in tandem with emerging needs in the MBSE landscape. +As we explore these possibilities, {product} envisions contributing to a more interconnected and interoperable ecosystem for system engineers, paving the way for a collaborative future in {sysmlv2} modeling. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/collaboration.adoc b/doc/content/modules/user-manual/pages/features/collaboration.adoc new file mode 100644 index 0000000..66bcd95 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/collaboration.adoc @@ -0,0 +1,8 @@ += Collaboration + +There are various solutions available for collaborating with {product}. +Explore different collaboration methods to enhance your teamwork and communication within {product}. + +* *Share Projects, Models, Diagrams*: Collaborating in {product} is a breeze with the ability to xref:hands-on/how-tos/share-project.adoc[share projects], models, and xref:hands-on/how-tos/share-representation.adoc[diagrams] using straightforward methods. +Sharing projects and models is as simple as providing a link, similar to the process of sharing diagrams. +* xref:features/interoperability.adoc[*Exchange* Projects or Models]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/details.adoc b/doc/content/modules/user-manual/pages/features/details.adoc new file mode 100644 index 0000000..ee1118b --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/details.adoc @@ -0,0 +1,7 @@ += {details} + +The {details} view provides a comprehensive overview of the selected element, presenting distinct _Property_ sections for each _characteristic_ of the semantic object. + +image::editor-right-sidebar-details.svg[{details}] + +CAUTION : It's important to note that any changes made in the {details} view have a direct and immediate effect on the underlying model, making these modifications instantly available to everyone accessing the model. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/editor.adoc b/doc/content/modules/user-manual/pages/features/editor.adoc new file mode 100644 index 0000000..3f03391 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/editor.adoc @@ -0,0 +1,81 @@ += {editor} + +.Before you Start +[caption=] +==== +// Edition +include::user-manual:partial$feature-edition-os.adoc[] + +// Status +include::user-manual:partial$feature-status-experimental.adoc[] + +// Usage +include::user-manual:partial$feature-usage-all.adoc[] +==== + +== What is the {editor} ? + +The **{editor}** page serves as the primary workspace for editing project content. + +== Find your way around + +For those new to {product}, the initial experience with the application may feel a bit challenging. +To help you navigate seamlessly and kickstart collaboration with your team, we provide a guided tour for you to familiarize yourself with the platform. + +The {editor} features four distinct regions: a <>, a <>, a main <>, and a <>. +The layout has been simplified to ensure a clear understanding of the content within each section. + +image::editor.svg[{editor}] + +=== Toolbar +The toolbar houses a selection of actions categorized into three groups: ': _Homepage_, _Project Actions_ and _Help_. + +image::editor-toolbar.svg[{editor} Toolbar] + +include::partial$homepage-action.adoc[leveloffset=+2] + +[#project-actions] +==== Projects Actions + +Access project-level actions like _xref:hands-on/how-tos/rename-project.adoc[rename]_, _xref:hands-on/how-tos/download-project.adoc[download]_, access project _xref:hands-on/how-tos/project-settings.adoc[settings]_, _xref:hands-on/how-tos/delete-project.adoc[delete]_. + +For further actions, refer to: xref:hands-on/hands-on.adoc[] + +include::partial$help-action.adoc[leveloffset=+2] + +=== Left Sidebar + +The left sidebar contains different views like the xref:features/explorer.adoc[{explorer}] and the xref:features/validation.adoc[{validation}] to assist you working on your project. + +NOTE: The left sidebar provides information related to the project. + +[%noheader] +|=== +a|image::editor-left-sidebar-explorer.svg[{editor} Left sidebar Explorer] a|image::editor-left-sidebar-explorer.svg[{editor} Left sidebar Validation] +|=== + +xref:hands-on/how-tos/switch-left-sidebar.adoc[Explore the left sidebar...] + +=== Editor + +The main area to edit your models and representations. +You can open as many editors as you like. +The {editor} area contains one or more editors. + +image::editor-editor.svg[{editor} Main Editor] + +Discover the diverse range of representation options available and find the most suitable ones for your specific modeling needs. +xref:features/features.adoc#sysmlv2-views[Explore various types of representations...] + +=== Right Sidebar + +The right sidebar contains different views like the xref:features/details.adoc[{details}], the xref:features/representations-view.adoc[{representations-view}] and the xref:features/related-elements.adoc[{related-elements}] views to ... + +NOTE: The content of the right sidebar depends on the current selection. + +[%noheader] +|=== +a|image::editor-right-sidebar-details.svg[{editor} Right sidebar Details] a|image::editor-right-sidebar-representations.svg[{editor} Right sidebar Representations] a|image::editor-right-sidebar-related-elements.svg[{editor} Right sidebar Related Elements] +|=== + +xref:hands-on/how-tos/switch-right-sidebar.adoc[Explore the right sidebar...] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/explorer.adoc b/doc/content/modules/user-manual/pages/features/explorer.adoc new file mode 100644 index 0000000..ccb3ac5 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/explorer.adoc @@ -0,0 +1,64 @@ += {explorer} + +.Before you Start +[caption=] +==== +// Edition +include::user-manual:partial$feature-edition-os.adoc[] + +// Status +include::user-manual:partial$feature-status-experimental.adoc[] + +// Usage +include::user-manual:partial$feature-usage-all.adoc[] +==== + +The {explorer} presents a hierarchical view of all models and their contents within the project, displayed as a tree structure with expandable and collapsible items. + +image::editor-left-sidebar-explorer.svg[{editor} Left sidebar Explorer] + +* *Models*: Represented by the models existing in the specific project. +* *Semantic Elements*: Located within the models, these are instances of your business domain concepts, each with its own set of children. +* *Representations*: If a particular semantic element has an associated representation, such as a diagram, it will appear as a child of the semantic element. + +== {explorer} Toolbar + +At the top of the {explorer}, a toolbar provides quick access to essential actions: + +* xref:hands-on/how-tos/create-model.adoc[Add a Model]: Enables the creation of a new model within the project. +* xref:hands-on/how-tos/upload-model.adoc[Upload a Model]: Allows users to upload and integrate an external model into the project. +* xref:hands-on/how-tos/sync-editor.adoc[Synchronize Editor] with Explorer: Ensures alignment between the explorer view and the editor, providing a seamless and up-to-date navigation experience. + +== Selection + +Users can select any item in the {explorer}: + +* Selecting a *Semantic Element*: Displays its properties in the xref:features/details.adoc[Details] view. +If the element is represented on an open representation, the corresponding element (node or edge if it is a diagram) is also selected, and the chosen element is selected in the editor. +* Selecting a *Representation*: Opens it in a new tab or focuses on an existing tab where it was already open. + +== {explorer-menu} + +The *{explorer-menu}* (three-dots More menu) offers a set of relevant actions depending on the nature of the selected item. +This menu provides functionalities based on the selected item: + +* For Models (Root Elements), users can: +** xref:hands-on/how-tos/create-model.adoc[Create a new model]. +** xref:hands-on/how-tos/create-element.adoc[Create a new child element]. +** xref:hands-on/how-tos/download-model.adoc[Download the model]. +** xref:hands-on/how-tos/expand-all.adoc[Expand all the model]. +** xref:hands-on/how-tos/rename-model.adoc[Rename the model]. +** xref:hands-on/how-tos/delete-model.adoc[Delete the model]. +* For Semantic Elements, users can: +** xref:hands-on/how-tos/create-element.adoc[Create a new child element]. +** xref:hands-on/how-tos/create-representation.adoc[Create a new representation]. +** xref:hands-on/how-tos/expand-all.adoc[Expand all the children]. +** xref:hands-on/how-tos/rename-element.adoc[Rename the element]. +** xref:hands-on/how-tos/delete-element.adoc[Delete the element]. +* For Representations, users can: +** xref:hands-on/how-tos/rename-representation.adoc[Rename the representation]. +** xref:hands-on/how-tos/delete-representation.adoc[Delete the representation]. + +== {explorer-filter-bar} + +The *{explorer-filter-bar}* in the {explorer} view provides the capability to highlight and xref:hands-on/how-tos/filter-explorer.adoc[filter tree items]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/features.adoc b/doc/content/modules/user-manual/pages/features/features.adoc new file mode 100644 index 0000000..abd1f78 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/features.adoc @@ -0,0 +1,3 @@ += {product} Features + +include::user-manual:partial$nav-features.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/general-view.adoc b/doc/content/modules/user-manual/pages/features/general-view.adoc new file mode 100644 index 0000000..1920ed5 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/general-view.adoc @@ -0,0 +1,62 @@ += {gv} + +The {gv} is employed to display any members of exposed model elements. +It is the most general view, enabling presentation of any model element. + +// Unsynchronized +include::user-manual:partial$view-unsynchronized.adoc[] + +The following elements can be displayed in the {gv}: + +* Attribute Definition +* Attribute Usage +* Enumeration Definition +* Interface Definition +* Interface Usage +* Item Definition +* Item Usage +* Metadata Definition +* Package +* Part Definition +* Part Usage +* Port Definition +* Port Usage + +Compartments +* Definition +** Attributes +** Items +** Ports +* Usage +** Attributes +** Ports +* Enumeration +** Items + +Relationship +* + + +== Manage elements + +=== Create element + +=== Delete element + +== Manage features + +== Manage relationships + +=== Create relationship + +=== Reconnect relationship + +=== Delete relationship + +== Manage existing elements + +== Add related elements + +== Edit labels + + diff --git a/doc/content/modules/user-manual/pages/features/homepage.adoc b/doc/content/modules/user-manual/pages/features/homepage.adoc new file mode 100644 index 0000000..f4eec6e --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/homepage.adoc @@ -0,0 +1,62 @@ +:homepage: Projects Browser += {homepage} + +.Before you Start +[caption=] +==== +// Edition +include::user-manual:partial$feature-edition-os.adoc[] + +// Status +include::user-manual:partial$feature-status-experimental.adoc[] + +// Usage +include::user-manual:partial$feature-usage-all.adoc[] +==== + +== What is the {homepage} ? + +The **{homepage}** page serves as the pivotal starting point for your modeling endeavors and is the homepage of the {product} application, offering a central hub where users can seamlessly initiate new projects or manage existing ones. + +== Find your way around + +For newcomers to {product}, the initial experience of opening the application may seem a bit overwhelming. +To assist you in navigating effectively and initiating collaboration with your team, we offer a guided tour to help you acclimate to the platform. + +The homepage features three distinct regions: a <>, a <> section, and an <> section. +We've streamlined the layout to provide a clear understanding of the content housed in each location. + +image::homepage.svg[{homepage}] + +=== Toolbar + +The toolbar consists of two groups, each featuring a single action: _Homepage_ and _Help_. + +image::homepage-toolbar.svg[{homepage} Toolbar] + +include:partials$homepage-action.adoc[leveloffset=+2] +include:partials$help-action.adoc[leveloffset=+2] + +=== Create a New Project + +The _Create New Project_ section is designed to allow users to easily initiate the creation of a new project. + +image::homepage-new-project.svg[Create a New Project] + +Within the platform, initiating a new project is a user-friendly process that accommodates various preferences: + +* **Create a Blank Project**: Users can start their modeling journey with a clean slate, building a project from the ground up. +* **Create a Project from Existing Templates**: For efficiency and consistency, users can select from predefined templates that streamline project initiation, aligning with common modeling scenarios. +* **Upload a Previously Exported Project**: Facilitating collaboration and workflow continuity, users can effortlessly upload a project previously exported, ensuring seamless transitions and flexibility in collaboration. + +NOTE: Every project you create will have its own xref:features/editor.adoc[Project Editor]. + +Explore further by referring to the following how-tos for xref:hands-on/how-tos/create-blank-project.adoc[creating blank projects], generating xref:hands-on/how-tos/create-template-project.adoc[projects from templates], or xref:hands-on/how-tos/upload-project.adoc[uploading] existing ones. + +=== Existing Projects + +The _Existing Projects_ section streamlines project navigation, allowing users to effortlessly browse through their available projects. + +image::homepage-existing-projects.svg[Existing Projects] + +It facilitates the opening of pre-existing projects and provides essential actions for project management, including options to _xref:hands-on/how-tos/rename-project.adoc[rename]_, _xref:hands-on/how-tos/download-project.adoc[download]_, and _xref:hands-on/how-tos/delete-project.adoc[delete]_ projects. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/interconnection-view.adoc b/doc/content/modules/user-manual/pages/features/interconnection-view.adoc new file mode 100644 index 0000000..3367070 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/interconnection-view.adoc @@ -0,0 +1,3 @@ += Interconnection View + +//TODO \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/interoperability.adoc b/doc/content/modules/user-manual/pages/features/interoperability.adoc new file mode 100644 index 0000000..655ffdb --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/interoperability.adoc @@ -0,0 +1,33 @@ += Interoperability and Standard API + +== Import / Export + +=== JSON format + +{product} extends its utility by introducing the capability to import and export projects in JSON format. +This feature enhances interoperability, allowing users to seamlessly exchange project data and collaborate with external tools or platforms. + +WARNING: {product} does not currently support the {sysmlv2} Standard JSON format for import/export. + +For detailed instructions on xref:hands-on/how-tos/download-project.adoc[downloading projects], xref:hands-on/how-tos/download-model.adoc[downloading models], xref:hands-on/how-tos/upload-project.adoc[uploading projects], and xref:hands-on/how-tos/upload-model.adoc[uploading models], please refer to the respective sections in the documentation. +These sections provide step-by-step guidance on how to perform these actions within the {product} environment. + +=== {sysmlv2} textual format + +Additionally, {product} envisions forthcoming support for {sysmlv2} textual specifications as an exchange format, anticipating a future where smooth transitions between tools will be facilitated. +This intent reflects {product}'s dedication to staying aligned with evolving industry standards. + +An experimental add-on is under development to enable import/export functionality to and from {sysmlv2} textual syntax. +This feature will provide users with additional flexibility in their modeling workflows. +Stay tuned for updates on its availability in the project. + +== {sysmlv2} Standard API + +NOTE: Currently, the SysML v2 API is unavailable. For interoperability with SysON, utilize the provided file exchange format. + +{product}'s vision includes a dedicated commitment to interoperability, with a future-oriented perspective on supporting standard APIs for seamless connections with a diverse array of modeling resources. +While the implementation of standard APIs is an aspect under consideration for future development, {product} aims to provide a foundation for fluid collaboration between different tools within the Model-Based Systems Engineering (MBSE) landscape. + +As {product} progresses, these future developments in interoperability will further solidify its role as a collaborative platform, fostering an interconnected environment for MBSE practitioners. + +The ongoing commitment to incorporating standard APIs and {sysmlv2} textual specifications underscores {product}'s dedication to providing users with a versatile and interoperable modeling solution. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/keyboard-shortcuts.adoc b/doc/content/modules/user-manual/pages/features/keyboard-shortcuts.adoc new file mode 100644 index 0000000..43544dd --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/keyboard-shortcuts.adoc @@ -0,0 +1,11 @@ += Keyboard shortcuts + +== General + +== Basic editing + +== Selection + +== Search + +//TODO \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/related-elements.adoc b/doc/content/modules/user-manual/pages/features/related-elements.adoc new file mode 100644 index 0000000..928a153 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/related-elements.adoc @@ -0,0 +1,11 @@ += {related-elements} + +For a more focused exploration, delve into the {related-elements} view. + +image::editor-right-sidebar-related-elements.svg[{related-elements}] + +This feature offers a contextual perspective on the currently selected element. + +* The view showcases elements that reference (point to) the selection in the `Incoming` category. +* Conversely, it reveals elements to which the selection refers in the `Outgoing` category. +* Additionally, the `Current` category provides insights into the selection's position within the model hierarchy, highlighting its parents and children. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/representations-view.adoc b/doc/content/modules/user-manual/pages/features/representations-view.adoc new file mode 100644 index 0000000..e19d687 --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/representations-view.adoc @@ -0,0 +1,7 @@ += {representations-view} + +Explore the {representations-view} view to gain insights into the available representations associated with the currently selected element. + +image::editor-right-sidebar-representations.svg[{representations-view} view] + +This view provides a comprehensive list of all existing representations, offering a convenient overview of the various ways the element is visually represented within the project. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/features/sysmlv2-elements.adoc b/doc/content/modules/user-manual/pages/features/sysmlv2-elements.adoc new file mode 100644 index 0000000..e69de29 diff --git a/doc/content/modules/user-manual/pages/features/validation.adoc b/doc/content/modules/user-manual/pages/features/validation.adoc new file mode 100644 index 0000000..4b28b2e --- /dev/null +++ b/doc/content/modules/user-manual/pages/features/validation.adoc @@ -0,0 +1,4 @@ += {validation} + +The {validation} view displays diagnostics for the entire project, organized by their kind (such as `ERROR`, `WARNING`, or `INFO`). +Users can conveniently toggle the visibility of diagnostics using an accordion widget. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/forum.adoc b/doc/content/modules/user-manual/pages/forum.adoc new file mode 100644 index 0000000..21adc5c --- /dev/null +++ b/doc/content/modules/user-manual/pages/forum.adoc @@ -0,0 +1,10 @@ += Forum + +Find relevant posts/answers. +No solution yet to your concern? +Come and ask your question. + +Connect with the {product} community by participating in our forum: {forum-url} + +Share insights, seek help, and engage in discussions with fellow users. +Join the forum to be a part of our growing community and stay informed about the latest updates and best practices. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/get-started.adoc b/doc/content/modules/user-manual/pages/get-started.adoc new file mode 100644 index 0000000..8bf5f3c --- /dev/null +++ b/doc/content/modules/user-manual/pages/get-started.adoc @@ -0,0 +1,42 @@ += Getting started with {product} + +In this section, you will discover essential entry points for installation procedures, providing a seamless onboarding experience. +Additionally, find a quick tour designed to swiftly familiarize you with the core functionalities of the product, ensuring a smooth and efficient introduction to its capabilities. + +== How to install {product} ? + +The installation guide covers installation of {product}, a modeling tool to edit {sysmlv2} graphical models : xref:installation-guide:index.adoc[Install {product} now!] + +== Discover {product} + +Uncover the capabilities of {product} through an exploration of its key features, foundational concepts, and practical how-tos: + +[cols="2*^", %noheader, frame=none, grid=none] +|=== +a|image::explore.svg[xref:user-manual:tour.adoc] + +*Tour the interface* + +Embark on a comprehensive exploration of {product}'s interface as we guide you through the key features and functionalities + +xref:user-manual:tour.adoc[Explore now...] a|image::footprint.svg[xref:user-manual:hands-on/hands-on.adoc] + +*How-Tos and Tutorials* + +Step-by-step guides, ensuring users can adeptly navigate essential tasks and leverage the potential of {product} + +xref:user-manual:hands-on/hands-on.adoc[Dive in...] +a|image::developer_guide.svg[xref:user-manual:key-features.adoc] + +*Key Features* + +An in-depth showcase of functionalities. + +xref:user-manual:key-features.adoc[Discover more...] a|image::settings_heart.svg[xref:user-manual:concepts.adoc] + +*Key Concepts* + +Addressing pivotal inquiries and offering a comprehensive understanding of the platform's fundamentals + +xref:user-manual:concepts.adoc[Learn essentials...] +|=== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/hands-on.adoc b/doc/content/modules/user-manual/pages/hands-on/hands-on.adoc new file mode 100644 index 0000000..47fb752 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/hands-on.adoc @@ -0,0 +1,10 @@ += How-Tos and Tutorials + +Explore a variety of how-tos to enhance your experience with {product}. +Whether you are a new user or looking to expand your skills, these step-by-step guides cover essential tasks such as creating blank projects, utilizing project templates, uploading existing projects, and more. +Each how-to is designed to provide clear instructions, making it easy for users to navigate through various features and functionalities within the platform. + + +include::user-manual:partial$nav-howtos.adoc[leveloffset=+1] + +include::user-manual:partial$nav-tuto.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-blank-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-blank-project.adoc new file mode 100644 index 0000000..5e3dc71 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-blank-project.adoc @@ -0,0 +1,4 @@ += Create a Blank Project + +You will be redirected to the newly created project, which will be initially empty. +Refer to the xref:features/editor.adoc[{editor} page] to understand how to use it for xref:hands-on/how-tos/create-model.adoc[creating your own models] and xref:hands-on/how-tos/create-representation.adoc[representations]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-diag-from-sysml.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-diag-from-sysml.adoc new file mode 100644 index 0000000..0b3dc5a --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-diag-from-sysml.adoc @@ -0,0 +1,3 @@ += Creating diagrams from an existing {sysmlv2} file + +//TODO \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-element.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-element.adoc new file mode 100644 index 0000000..90b2f24 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-element.adoc @@ -0,0 +1,10 @@ += Create a New Element + +The process to create a new element in a model involves the following steps: + +. Open the {explorer-menu} next to the parent element. +. Click on `New object`. +. Select the desired type of object to create. +. Click on `Create`. + +Upon completion, the newly created element is automatically selected in the {explorer}. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-model.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-model.adoc new file mode 100644 index 0000000..2f9396d --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-model.adoc @@ -0,0 +1,22 @@ += Create a New Model + +To create a model, follow these steps: + +== From the project toolbar + +. Open the Project Editor. +. Open the {explorer-menu} next to the project name in the toolbar. +. Select the `New model` action. +. Fill in the model name. +. Choose the model type. +. Click the `Create` button. + +== From the explorer toolbar + +. Open the Project Editor. +. Click on the `New model` action in the explorer toolbar. +. Fill in the model name. +. Choose the model type. +. Click the `Create` button. + +Once completed, the newly created model will be listed in the {explorer}. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-representation.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-representation.adoc new file mode 100644 index 0000000..97a49ae --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-representation.adoc @@ -0,0 +1,12 @@ += Create a New Representation + +To create a representation, follow these steps: + +. Open the Project Editor. +. Open the {explorer-menu} next to an element in the explorer. +. Select the `New representation` action. +. Fill in the representation name. +. Choose the representation type. +. Click the `Create` button. + +Once completed, the newly created representation will be open automatically and listed in the {explorer} under the element. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/create-template-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-template-project.adoc new file mode 100644 index 0000000..a81e138 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/create-template-project.adoc @@ -0,0 +1,14 @@ += Create a Project based on a Template + +To create a new project from a `Template`: + +. Simply click on the corresponding template card at the top of the page. +. The new project will be automatically created and opened. +Depending on the template, an initial representation (e.g., a diagram) may also be automatically opened. + +NOTE: The newly created project will have the same name as the template, so it is a good practice to xref:hands-on/how-tos/rename-project.adoc[rename] it to avoid confusion. + +Only the first three templates are directly visible in the {homepage} top region. +If more templates are available, you can click on the `Show all templates` card to open a dialog displaying all the available templates (possibly on multiple pages). + +Refer to the xref:features/editor.adoc[{editor} page] to understand how to use it for xref:hands-on/how-tos/create-model.adoc[creating your own models] and xref:hands-on/how-tos/create-representation.adoc[representations]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-element.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-element.adoc new file mode 100644 index 0000000..89c507e --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-element.adoc @@ -0,0 +1,24 @@ += Delete an Element + +[WARNING] +==== +There is no confirmation dialog to delete an element. +This operation is irreversible, once done there is no mean to get the element back. +The element and its children - semantic element and representations - will be deleted. +==== + +NOTE: The deletion will affect everyone. + +To delete an element, follow these steps: + +== From the {explorer} + +. Open the {explorer-menu} next to the element. +. Click on `Delete`. + +== From a representation + +. Select the element in the representation. +. Click on the `Delete` tool in the {diag-toolbar} or press the `DEL` key on your keyboard. + +CAUTION: Use the `DEL` key cautiously, as it is a direct shortcut for the delete operation. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-model.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-model.adoc new file mode 100644 index 0000000..db17894 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-model.adoc @@ -0,0 +1,17 @@ += Delete a Model + +[WARNING] +==== +There is no confirmation dialog to delete a model. +Deleting a model and its content is a significant action, and it's important to note that the entire model, along with its contents, will be permanently removed. +This includes all associated semantic elements, representations, and any other data within the model. +Exercise caution when performing this operation, as it cannot be reversed. +==== + +NOTE: The deletion will affect everyone. + +To delete a model, follow these steps: + +. Select the model in the {explorer}. +. Open the {explorer-menu} next to the model. +. Click on `Delete`. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-project.adoc new file mode 100644 index 0000000..9d2b2b6 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-project.adoc @@ -0,0 +1,27 @@ += Delete a Project + +It is possible to delete a project either from the {homepage} or the {editor}. + +[WARNING] +==== +When you delete a project, you will lose all the data. +Deleting a project and its content is a significant action, and it's important to note that the entire project, along with its contents, will be permanently removed. +This includes all associated models, representations, and any other data within the project. +Exercise caution when performing this operation, as it cannot be reversed. +==== + +== From the {homepage} + +You can delete a project from the {homepage}: + +. Click on the {projects-list-menu} next to the project in the {projects-list}. +. Select the `Delete` option. +. Confirm the deletion by clicking on the `Delete` button in the modal. + +== From the {editor} + +You can delete a project from the {editor}: + +. Click on the {projects-list-menu} next to the project name in the project toolbar. +. Select the `Delete` option. +. Confirm the deletion by clicking on the `Delete` button in the modal. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-representation.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-representation.adoc new file mode 100644 index 0000000..e3d0ee6 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/delete-representation.adoc @@ -0,0 +1,26 @@ += Delete a Representation + +It is possible to delete a representation either from the {explorer} or the {representations-view}. + +[WARNING] +==== +There is no confirmation dialog to delete a representation. +This operation is irreversible, once done there is no mean to get the representation back. +==== + +NOTE: The semantic elements visible in a representation will not be deleted. + +== From the {explorer} + +You can delete a representation from the {explorer}: + +. Open the {explorer-menu} next to the representation. +. Click on `Delete`. + +== From the {representations-view} + +You can delete a representation from the {representations-view}: + +. Open the {representations-view}. +. Select the representation you want to delete. +. Click on the `Delete` button. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/direct-edit.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/direct-edit.adoc new file mode 100644 index 0000000..fab8da9 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/direct-edit.adoc @@ -0,0 +1,21 @@ += Direct Edit Tool and Shortcuts + +The {product} supports a subset of the {sysmlv2} textual syntax, which allows you to update multiple elements simultaneously. This makes it more efficient to edit models. + +In general, you can edit the label of a shape in a diagram, and the diagram editor will try to interpret your input and update the corresponding element properties. + +WARNING: If an element has a complex name like `someElementName[x]:someTypeName:>someElement`, when editing, you must retain all the written parts; otherwise, you risk unsetting some values. + +Here are some shortcuts for efficiently editing {product} models: + +* Typing `someName` will update the name of the selected element. +* Typing `:SomeTypeName`, will set the type of the selected element to _SomeTypeName_. +If _SomeTypeName_ does not exist, it will be created as an appropriate type element (e.g., Item Definition, Part Definition, etc.) within the same parent container as the selected element. +* Typing `[x]` on an element or a relationship will set its cardinality to _x_. +* Typing `[1..x]` on an element or a relationship will set its cardinality to _1..x_. +* Typing `[x..*]` on an element or a relationship will set its cardinality to _x..*_. +* Typing `someElement:>otherElement` on a element will set _someElement_ as a `subsetting` of the _otherElement_ if both element are of the same type. +Otherwise, it will create a `specialization` relationship between _someElement_ and _otherElement_. +* Typing `someElement:>>otherElement` on a element will set _someElement_ as a `redefinition` of _otherElement_. + +These shortcuts provide a convenient way to update model elements quickly and efficiently. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/download-model.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/download-model.adoc new file mode 100644 index 0000000..1e28618 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/download-model.adoc @@ -0,0 +1,12 @@ += Download a Model + +You can download a model from the {explorer}: + +. Click on the {explorer-menu} next to the model in the {explorer}. +. Select the `Download` option. + +[NOTE] +==== +The model will be downloaded in JSON format. +The JSON format used by {product} is specific to the tool. +==== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/download-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/download-project.adoc new file mode 100644 index 0000000..ad05868 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/download-project.adoc @@ -0,0 +1,23 @@ += Download a Project + +It is possible to download a project either from the {homepage} or the {editor}. + +[NOTE] +==== +The project will be downloaded as an archive containing models and representations in JSON format. +The JSON format used by {product} is specific to the tool. +==== + +== From the {homepage} + +You can download a project from the {homepage}: + +. Click on the {projects-list-menu} next to the project in the {projects-list}. +. Select the `Download` option. + +== From the {editor} + +You can download a project from the {editor}: + +. Click on the {projects-list-menu} next to the project name in the project toolbar. +. Select the `Download` option. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/expand-all.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/expand-all.adoc new file mode 100644 index 0000000..1ec56f4 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/expand-all.adoc @@ -0,0 +1,14 @@ += Expand all + +[WARNING] +==== +This operation may take a considerable amount of time for projects with a massive hierarchy and a high number of children. +Exercise caution when performing this action in such scenarios. +==== + +Explore the hierarchy of children for any element in the {explorer}: + +. Open the {explorer-menu} of any element with children. +. Click on `Expand all`. + +This action expands the selected element and all its children recursively, offering a detailed view of the hierarchical structure. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/filter-explorer.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/filter-explorer.adoc new file mode 100644 index 0000000..ff9038a --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/filter-explorer.adoc @@ -0,0 +1,16 @@ += Filter elements in the {explorer} + +To filter elements in the {explorer} using the filter bar: + +. Choose a tree item in the {explorer}. +. Press `Ctrl+f` (Windows/Linux) or `Cmd+f` (MacOS) to enable the filter bar. +. Enter a value in the filter bar. +. All visible tree items containing the typed value will be highlighted. +. Use the filter button inside the filter bar to hide all visible tree items that do not contain the entered value. + +This functionality allows for precise filtering and highlighting of elements based on specified criteria. + +[NOTE] +==== +The filter bar can only highlight items in the expanded state; it does not search within unexpanded children. Ensure the desired tree items are expanded to effectively use the filter and highlight functionality. +==== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/navigate-representations.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/navigate-representations.adoc new file mode 100644 index 0000000..9ffe038 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/navigate-representations.adoc @@ -0,0 +1,11 @@ += Navigate thanks to the {representations-view} view + +. Open the {representations-view} view from the right sidebar. +. In the view, you'll find a comprehensive list of all existing representations associated with the selected semantic object. +. To access a representation, simply click on the respective entry in the list. + +[NOTE] +==== +Efficiently manage your representations by deleting them directly from the list. +Click the Delete icon next to the representation name to remove it. +==== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/project-settings.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/project-settings.adoc new file mode 100644 index 0000000..44840a9 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/project-settings.adoc @@ -0,0 +1,6 @@ += Manage Project Settings + +The purpose of this page is to present the various settings manageable by the administrator of a project. +Currently, there are limited capabilities, such as uploading images, but additional features for project management will be introduced in future updates. +This page will be revisited in future updates, bringing new features and enhanced capabilities for project management. +Stay tuned for the next version to explore additional functionalities and improvements. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/read-element.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/read-element.adoc new file mode 100644 index 0000000..0ec9ed1 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/read-element.adoc @@ -0,0 +1,6 @@ += Read an Element + +. To navigate through the details of a semantic element, utilize the {explorer} to navigate through the model and locate the desired element. +. Select the element in the {explorer}. +. On the left sidebar, access the {details} view. +This view presents all the available properties for the selected element, providing a comprehensive overview of its characteristics. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-element.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-element.adoc new file mode 100644 index 0000000..430769c --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-element.adoc @@ -0,0 +1,32 @@ += Rename an Element + +It is possible to rename an element either from the {explorer}, the {details} view or a representation. + +== From the {explorer} + +You can update the element name from the {explorer}: + +. Click on the {explorer-menu} next to the element in the {explorer}. +. Select the `Rename` option. +. Update the name in the editable field. +. Click on `Rename`. + +== From the {details} view + +You can update the element properties from the {details} view: + +. Select the property in the {details} view. +. Update the value in the editable field. +. Validate the changes by pressing the `RETURN` key or clicking anywhere. +.. Alternatively, cancel the operation by pressing the `ESC` key. + +== From a representation + +You can update the element name from a representation (diagram...): + +. Select the element in the representation. +. Select the `Edit` tool in the {diag-toolbar}. +. Validate the changes by pressing the `RETURN` key or clicking anywhere. +.. Alternatively, cancel the operation by pressing the `ESC` key. + +NOTE: Instead of using the tool in the toolbar, you can press `F2` key or start typing the new value directly to efficiently update the element name. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-model.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-model.adoc new file mode 100644 index 0000000..39590bc --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-model.adoc @@ -0,0 +1,8 @@ += Rename a Model + +You can update the model name from the {explorer}: + +. Click on the {explorer-menu} next to the model in the {explorer}. +. Select the `Rename` option. +. Update the name in the editable field. +. Click on `Rename`. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-project.adoc new file mode 100644 index 0000000..6bcd85d --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-project.adoc @@ -0,0 +1,24 @@ += Rename a Project + +It is possible to rename a project either from the {homepage} or the {editor}. + +NOTE: Project names don't need to be unique, although unique names do facilitate finding the correct project more easily. +NOTE: The name must contain between 3 and 1024 characters. + +== From the {homepage} + +You can update the project name from the {homepage}: + +. Click on the {projects-list-menu} next to the project in the {projects-list}. +. Select the `Rename` option. +. Update the name in the editable field. +. Click on `Rename`. + +== From the {editor} + +You can update the project name from the {editor}: + +. Click on the {projects-list-menu} next to the project name in the toolbar. +. Select the `Rename` option. +. Update the name in the editable field. +. Click on `Rename`. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-representation.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-representation.adoc new file mode 100644 index 0000000..21f0d0e --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/rename-representation.adoc @@ -0,0 +1,8 @@ += Rename a Representation + +You can update the representation name from the {explorer}: + +. Click on the {explorer-menu} next to the representation in the {explorer}. +. Select the `Rename` option. +. Update the name in the editable field. +. Click on `Rename`. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/share-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/share-project.adoc new file mode 100644 index 0000000..fec23bd --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/share-project.adoc @@ -0,0 +1,5 @@ += Share a Project + +Sharing a project is as straightforward as providing the project URL to someone because everything within {product} is public. +Once the project URL is shared, the recipient can access and view the project directly. +This simplicity in sharing allows for seamless collaboration and easy communication of project details without the need for complex sharing processes. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/share-representation.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/share-representation.adoc new file mode 100644 index 0000000..f835123 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/share-representation.adoc @@ -0,0 +1,16 @@ += Share a Representation + +Facilitating collaboration through representation sharing within {product} is a straightforward process. +Users can effortlessly share a representation by providing its URL to collaborators. +Given that everything within {product} is inherently public, recipients can seamlessly access and view the representation once the URL is shared. +This simplicity in sharing promotes efficient collaboration and simplifies the communication of representation details, eliminating the need for complex sharing procedures. + +== From the {editor} + +To share a representation in {product}, follow these steps: + +. Open the a representation from the explorer. +. Click the `Share` button in the general toolbar at the top of the representation area. +. Copy the link to your clipboard. + +Anyone can use the shared link to directly access this specific representation. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-left-sidebar.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-left-sidebar.adoc new file mode 100644 index 0000000..c73c4dc --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-left-sidebar.adoc @@ -0,0 +1,11 @@ += Access {explorer} / {validation} views from the left sidebar + +To seamlessly switch between the Explorer view and the Validation view in the left sidebar of {product}, use the following steps: + +. Locate the vertical bar with icons on the left side of the interface. +. Identify the icons corresponding to the `Explorer` and `Validation` views. +. Click on the `Explorer` icon to switch to the Explorer view or click on the `Validation` icon to switch to the Validation view. + +NOTE: By clicking on the respective icons, you can easily toggle between the Explorer and Validation views, allowing you to navigate through project elements and examine validation results with convenience. + +NOTE: The sidebar can be toggled by clicking on the icon of the active view. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-right-sidebar.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-right-sidebar.adoc new file mode 100644 index 0000000..32f840e --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/switch-right-sidebar.adoc @@ -0,0 +1,11 @@ += Access {details} / {representations-view} / {related-elements} views from the right sidebar + +To seamlessly switch between the Details, the Representations and the Related Elements views in the right sidebar of {product}, use the following steps: + +. Locate the vertical bar with icons on the right side of the interface. +. Identify the icons corresponding to the desired view. +. Click on the icon to switch to the view. + +NOTE: By clicking on the respective icons, you can easily toggle between the views, allowing you to navigate through element properties, representations attached to the element or related semantic elements with convenience. + +NOTE: The sidebar can be toggled by clicking on the icon of the active view. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/sync-editor.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/sync-editor.adoc new file mode 100644 index 0000000..96ad71a --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/sync-editor.adoc @@ -0,0 +1,11 @@ += Synchronize {explorer} / {editor} + +It is possible to disable (and of course re-enable) the synchronization between the {explorer} and the current selection in the {editor}. + +When synchronization is enabled, if you selects an element inside a representation, the {explorer} view will ensure that the corresponding semantic element is visible and selected. +This can require expanding new tree items which were previously not visible or scrolling the {explorer}’s view. + +When moving between elements in a representation, this can quickly result in an {explorer} view with many tree items expanded, which can be confusing. + +The `Synchronize` toggle button in the {explorer} can be used to disable this synchronization. +When synchronization is disabled, tree items that are already expanded in the {explorer} will still be selected, but no new tree items will be automatically expanded. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/update-element.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/update-element.adoc new file mode 100644 index 0000000..e284ce4 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/update-element.adoc @@ -0,0 +1,27 @@ += Update an Element + +It is possible to update element properties either from the {details} view or a representation. + +[#details] +== From the {details} view + +You can update the element properties from the {details} view: + +. Select the property in the {details} view. +. Update the value in the editable field. +. Validate the changes by pressing the `RETURN` key or clicking anywhere. +.. Alternatively, cancel the operation by pressing the `ESC` key. + +[#representation] +== From a representation + +You can update the element name from a representation (diagram...): + +. Select the element in the representation. +. Select the `Edit` tool in the {diag-toolbar}. +. Validate the changes by pressing the `RETURN` key or clicking anywhere. +.. Alternatively, cancel the operation by pressing the `ESC` key. + +TIP: Instead of using the tool in the toolbar, you can press `F2` key or start typing the new value directly to efficiently update the element name. + +TIP: A powerful syntax exists for editing element properties directly through the direct edit tool; refer to xref:hands-on/how-tos/direct-edit.adoc[Direct Edit Tool and Shortcuts] for details. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-model.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-model.adoc new file mode 100644 index 0000000..2830154 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-model.adoc @@ -0,0 +1,16 @@ += Upload a Model + +[NOTE] +==== +Only models exported in the specific JSON format recognized by {product} can be re-uploaded using the upload action. +Ensure that your models are exported using the xref:hands-on/how-tos/download-model.adoc[Download Model] action to enable successful re-uploading to {product}. +==== + +To upload a model from a file previously exported, follow these steps: + +. Go to the {editor}. +. Open the {explorer} view. +. Click on the `Upload` button at the top of the {explorer} in the toolbar. +. It will open the `Upload Model` modal. +. Select a model from your file system. +. The uploaded model will be automatically created and opened. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-project.adoc b/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-project.adoc new file mode 100644 index 0000000..10b3479 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/how-tos/upload-project.adoc @@ -0,0 +1,17 @@ += Upload a Project + +[NOTE] +==== +Only projects exported in the specific JSON format recognized by {product} can be re-uploaded using the upload action. +Ensure that your projects are exported using the xref:hands-on/how-tos/download-project.adoc[Download Project] action to enable successful re-uploading to {product}. +==== + +To upload a project from an archive previously exported, follow these steps: + +. Go to the {homepage}. +. Click on the _Upload Project_ card. +. It will open the _Upload Project_ page. +. Select a zip from your file system. +. The uploaded project will be automatically created and opened. + +Refer to the xref:features/editor.adoc[{editor} page] to understand how to use it for xref:hands-on/how-tos/create-model.adoc[creating your own models] and xref:hands-on/how-tos/create-representation.adoc[representations]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/tutorials/batmobile.adoc b/doc/content/modules/user-manual/pages/hands-on/tutorials/batmobile.adoc new file mode 100644 index 0000000..743ac33 --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/tutorials/batmobile.adoc @@ -0,0 +1,71 @@ += Create Your First Model + +This tutorial provides a beginner-friendly guide on creating your first {sysmlv2} model with {product}, adapted from the example in the https://github.com/MBSE4U/dont-panic-batmobile[Don't Panic - The Absolute Beginner's Guide to SysML v2] book by Tim Weilkiens and Christian Muggeo. +The focus is on representing the Batmobile system, the iconic car of Batman. + +== Step 1: Create a Project + +. Open the {homepage} and xref:hands-on/how-tos/create-template-project.adoc[create a new {sysmlv2} project] by clicking on the {sysmlv2} card. +. The {editor} automatically opens, creating a new project named `{sysmlv2}` with a package `Package1`. +A default `{gv}` representation associated with the package is opened in the main editor area. +. From the project toolbar, xref:hands-on/how-tos/rename-project.adoc[rename the project] to `Batmobile`. +. From the {explorer}, xref:hands-on/how-tos/rename-model.adoc[rename the model] to `Batmobile` and the xref:hands-on/how-tos/rename-element.adoc[package] to `User Model`. + +== Step 2: Create Elements from a Diagram + +=== Using the {diag-toolbar} + +. In the main editor area, click on the diagram background to open the {diag-toolbar}. +. Click on the `New Part Definition` tool to create a new part definition. +NOTE: The new elements created from the {diag-toolbar} are visible either from the {explorer} or the {editor} main central area. +. Rename the part definition to `Vehicle` using the xref:hands-on/how-tos/update-element.adoc#representation[direct-edit action] or the xref:hands-on/how-tos/update-element.adoc#details[{details} view]. +. Select the `Vehicle` part definition and click on the `Nested Item Usage` tool to create an item usage. +. Rename the item usage to `driver`. +. Select the `Vehicle` part definition and click on the `Nested Part Usage` tool to create a new part usage. +. Rename the part usage to `engine`. + +=== Setting Multiplicity + +. Select the `Vehicle` part definition and click on the `Nested Part Usage` tool in the {diag-toolbar} to create a new part usage +. Rename the part usage to `wheels`. +. Select the relationship between `Vehicle` and `wheels`, set the multiplicity label to `[4]`. + +=== Using Drag and Drop + +. Select the `wheels` part usage, rename it `wheels[4]:Wheel`. +. A new `Wheel` part definition is created in the model. +. Drag and drop the `Wheel` element from the {explorer} onto the diagram background. +. The `Wheel` part definition appears on the diagram within the `Typed By` relationship between the `Wheel` and the `wheels` part usage. + +== Step 3: Edit the Model Elements + +=== Adding Attributes + +. Select the `attributes` compartment in the `Vehicle` part definition and click on the `New Attribute Usage` tool in the {diag-toolbar}. +. A new attribute usage is created. +. Select the attribute and use the direct-edit tool to rename it to `actualSpeed : SpeedUnit` +. A new attribute definition named `SpeedUnit` is created automatically +. The attribute usage `actualSpeed` is typed with the new attribute definition. + +=== Creating Specialization + +. Click on the diagram background and click on the `New Part Definition` tool. +. A new part definition is created. +. Rename it `Batmobile:> Vehicle`. +. A new `specialization` relationship is created between the `Batmobile` part definition and the `Vehicle` part definition. + +=== Creating Subsetting + +. Click on the diagram background and select the `New Part Usage` tool. +. A new part usage is created. +. Rename it to `frontRightWheel :> wheels`. +. A new `subsetting` relationship appears between the two parts usages `frontRightWheel` and `wheels`. + +=== Creating Redefinition + +. Click on the diagram background and click on the `New Part Definition` tool. +. A new part definition is created. +. Rename it to `bulletProofWheels[4]:>>wheels`. +. A new `redefines` relationship appears between the `bulletProofWheels` part definition and the`wheels` part usage. + +NOTE: To explore a more complete Batmobile example, use the Batmobile template available on the {homepage}. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/hands-on/tutorials/tutorials.adoc b/doc/content/modules/user-manual/pages/hands-on/tutorials/tutorials.adoc new file mode 100644 index 0000000..6b9724d --- /dev/null +++ b/doc/content/modules/user-manual/pages/hands-on/tutorials/tutorials.adoc @@ -0,0 +1,6 @@ += Hands-On Starter Guides + +New to {product}? +These starter guides are the perfect way to get some hands-on experience in the editor. + +* xref:hands-on/tutorials/batmobile.adoc[Create Your First Model] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/help.adoc b/doc/content/modules/user-manual/pages/help.adoc new file mode 100644 index 0000000..7e501e4 --- /dev/null +++ b/doc/content/modules/user-manual/pages/help.adoc @@ -0,0 +1,32 @@ += Connect, Learn and Get Assistance + +[cols="2*^", %noheader, frame=none, grid=none] +|=== +a|image::forum.svg[xref=user-manual:forum.adoc] + +**Forum** + +Meet the {product} community. + +xref:user-manual:forum.adoc[Join the forum...] a|image::volunteer_activism.svg[xref=user-manual:contribute.adoc] + +**Contribute** + +Report bugs or submit feature requests? + +xref:user-manual:contribute.adoc[Contribute to {product}...] + +a|image::editor_choice.svg[xref=user-manual:best-practices.adoc] + +**Best practices guides** + +Make the most out of {sysmlv2}. + +xref:user-manual:best-practices.adoc[Learn more...] a|image::support_agent.svg[xref=user-manual:support.adoc] + +**Contact support** + +Our support team is ready to assist. + +xref:user-manual:support.adoc[Read the guide...] +|=== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/index.adoc b/doc/content/modules/user-manual/pages/index.adoc new file mode 100644 index 0000000..2e1b616 --- /dev/null +++ b/doc/content/modules/user-manual/pages/index.adoc @@ -0,0 +1,8 @@ += User Manual + +Welcome to the user manual for {product}. + +This guide is meticulously crafted to provide users, regardless of expertise levels, with detailed instructions and valuable insights to maximize the capabilities of {product}. +Whether you are a novice exploring the functionalities or an advanced user seeking in-depth knowledge, this manual serves as an authoritative resource for enhancing your proficiency with {product}. + +include::user-manual:partial$nav.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/key-features.adoc b/doc/content/modules/user-manual/pages/key-features.adoc new file mode 100644 index 0000000..6eed2c5 --- /dev/null +++ b/doc/content/modules/user-manual/pages/key-features.adoc @@ -0,0 +1,140 @@ += Key features in {product} + +{product} encompasses a set of key features aimed at enhancing the modeling experience within the {sysmlv2} framework. +The primary functionalities of {product} are currently centered around project management and model creation, aligning with the classical views recommended by the {sysmlv2} standard. + +[NOTE] +==== +In {product}, features are categorized into two distinct levels of maturity: + +* **Experimental**: Features in the early stages of development or testing, subject to potential changes and improvements based on user feedback. +* **Stable**: Features that have completed rigorous testing, are deemed reliable, and are ready for production use with a high level of confidence in their stability and functionality. + +This dual categorization allows users to choose features based on their comfort level with the maturity of each, providing flexibility and transparency in the utilization of our product. +==== + +== Features Overview + +[cols="4*^",width="100%"] +|=== +| Feature| {sysmlv2} Standard| Open source ({product})|Enterprise Add-ons ({ocp}) + +4+h|Projects Management + +|xref:features/homepage.adoc[Projects Browser] +a|icon:times[role=red] +a|icon:check[role=green] +a| + +|xref:features/editor.adoc[Project Editor] +a|icon:times[role=red] +a|icon:check[role=green] +a| + +|xref:features/editor.adoc#project-actions[Manage Project] +a|icon:times[role=red] +a|icon:check[role=green] +a| + +|xref:user-manual:support.adoc[Teams] +a|icon:times[role=red] +a|icon:times[role=red] +a|icon:check[role=green] + +4+h|{sysmlv2} Views +|xref:user-manual:features/general-view.adoc[{gv}] +a|icon:check[role=green] +a|icon:check[role=gray] partial +a| + +|xref:user-manual:features/interconnection-view.adoc[Interconnection View] +a|icon:check[role=green] +a|icon:check[role=gray] partial +a| + +|xref:user-manual:sysmlv2-overview.adoc[Action Flow View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +|xref:user-manual:sysmlv2-overview.adoc[State Transition View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +|xref:user-manual:sysmlv2-overview.adoc[Sequence View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +|xref:user-manual:sysmlv2-overview.adoc[Geometry View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +|xref:user-manual:sysmlv2-overview.adoc[Grid View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +|xref:user-manual:sysmlv2-overview.adoc[Browser View] +a|icon:check[role=green] +a|icon:times[role=red] +a| + +4+h|Collaboration & Interoperability + +|xref:features/collaboration.adoc[Share Projects] +a|icon:times[role=red] +a|icon:times[role=gray] (All the projects are Public) +a| + +|xref:features/collaboration.adoc[Share Diagram] +a|icon:times[role=red] +a|icon:check[role=green] +a| + +|xref:features/interoperability.adoc[Download / Upload JSON format] +a|icon:times[role=red] +a|icon:check[role=green] +a| + +|xref:features/interoperability.adoc[Download / Upload Standard {sysmlv2} JSON format] +a|icon:times[role=green] +a|icon:times[role=red] +a| + +|xref:features/interoperability.adoc[Download / Upload {sysmlv2} textual format] +a|icon:times[role=green] +a|icon:check[role=gray] Experimental +a| + +|xref:user-manual:support.adoc[Live Collaboration] +a|icon:times[role=red] +a|icon:times[role=red] +a|icon:check[role=green] + +4+h|Advanced + +|xref:user-manual:support.adoc[Authentication (SSO, LDAP, AD)] +a|icon:times[role=red] +a|icon:times[role=red] +a|icon:check[role=green] + +|xref:user-manual:support.adoc[Accounts Administration] +a|icon:times[role=red] +a|icon:times[role=red] +a|icon:check[role=green] + +|=== + +A comprehensive list of all {product} features is available in the xref:features/features.adoc[Features] section. + +== Ongoing Development + +{product} is continually evolving, with a commitment to expanding its repertoire of views in alignment with the {sysmlv2} standard. +Future releases will introduce additional features, ensuring {product} remains a comprehensive and adaptable tool for system engineering. + +== Enterprise Add-ons + +For enterprise-specific add-ons and tailored solutions, please reach out to Obeo and explore the options available for xref:user-manual:support.adoc[professional support]. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/release-notes.adoc b/doc/content/modules/user-manual/pages/release-notes.adoc new file mode 100644 index 0000000..e51ee46 --- /dev/null +++ b/doc/content/modules/user-manual/pages/release-notes.adoc @@ -0,0 +1,27 @@ += Release notes + +== 2023.12.0 + +icon:trophy[] Initial release! + +=== Dependencies update + +{product} is based on: + +* https://github.com/eclipse-sirius/sirius-web/releases/tag/v2023.12.4[Sirius Web v2023.12.4] +* https://github.com/Systems-Modeling/SysML-v2-Release/blob/2023-11/doc/2a-OMG_Systems_Modeling_Language.pdf[OMG {sysmlv2} Language Specification Preliminary Revision 2023-11] + +=== New and improved + +* *Key features*: Basic {sysmlv2} views ({gv}, Interconnection View), see the xref:user-manual:key-features.adoc[Key features] section. +* *Installation Instructions*: Detailed xref:installation-guide:index.adoc[installation guideline] is provided in the project's documentation, guiding users through the setup process. +* *Documentation*: Comprehensive xref:ROOT:index.adoc[documentation] is readily available, covering installation and usage of {product}. +* *Contributing Guidelines*: Guidelines are outlined for xref:user-manual:contribute.adoc[contributing] to the project, including xref:user-manual:help.adoc[submitting bug reports and feature requests]. +* *Contact us*: The project's GitHub repository, issue tracker, and discussion serve as primary channels for communication and xref:user-manual:help.adoc[support]. + +We warmly invite users to explore {product}, experiment with its features, and provide valuable feedback to assist us in its continuous improvement. + +=== Know issues + +You can find a list of the known issues (with workaround where relevant) being investigated by our engineering team on the {bug-url}[{product} Issue Tracker]. +A detailed list of all project changes is available at: {changelog-url}. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/scaling-limits.adoc b/doc/content/modules/user-manual/pages/scaling-limits.adoc new file mode 100644 index 0000000..28c6f79 --- /dev/null +++ b/doc/content/modules/user-manual/pages/scaling-limits.adoc @@ -0,0 +1,3 @@ += Scaling limits + +//TODO \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/support.adoc b/doc/content/modules/user-manual/pages/support.adoc new file mode 100644 index 0000000..0031770 --- /dev/null +++ b/doc/content/modules/user-manual/pages/support.adoc @@ -0,0 +1,5 @@ += Professional support + +https://www.obeosoft.com/en/[Obeo], co-leader of {product}, provides training, expertise, custom development, enterprise add-ons and support plans. + +https://www.obeosoft.com/en/contact[Contact Us!] \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/sysmlv2-overview.adoc b/doc/content/modules/user-manual/pages/sysmlv2-overview.adoc new file mode 100644 index 0000000..18de404 --- /dev/null +++ b/doc/content/modules/user-manual/pages/sysmlv2-overview.adoc @@ -0,0 +1,67 @@ += Overview of {sysmlv2} + +Building upon the understanding of {product}, it is imperative to delve into the foundational concepts of {sysmlv2}, the modeling language that {product} operates within. + +== What is {sysmlv2}? + +{sysmlv2} is an industry-standard modeling language designed for the specification, analysis, design, verification, and validation of complex systems. +Developed by the OMG, {sysmlv2} builds upon its predecessor, {sysmlv1}, aiming to address the evolving needs of the Model-Based Systems Engineering (MBSE) community. + +== Key Aspects of {sysmlv2} + +* **Enhanced Flexibility**: {sysmlv2} offers enhanced flexibility in representing complex systems through refined constructs and improved semantics, accommodating a wide array of system engineering scenarios. +* **KerML as the Foundation**: {sysmlv2} is uniquely based on the Kernel Modeling Language (KerML), further emphasizing its status as a DSL (Domain Specific Language) tailored for systems engineering. +KerML serves as the foundational layer, providing core modeling constructs and principles. +* **Graphical and Textual Syntax**: {sysmlv2} combines both graphical and textual syntax, allowing system engineers to choose the representation that best suits their modeling preferences and the intricacies of the system being analyzed. +* **Extensibility and Modularity**: The language is designed to be extensible, enabling the incorporation of domain-specific modeling elements and the creation of modular representations that align with the structure of complex systems. + +== {sysmlv2} in Practice + +{sysmlv2} serves as the foundation for {product}, empowering system engineers with a standardized and versatile language to articulate and analyze complex systems. +Within {product}, users can leverage {sysmlv2} constructs to create, edit, and visualize models, aligning with the industry-standard specifications set by OMG. + +{sysmlv2} introduces a structured approach to system modeling through a variety of views, each tailored to capture specific aspects of complex systems. +These views collectively form a comprehensive framework for MBSE, facilitating a holistic understanding of system architecture, design, and behavior. + +=== {gv} + +Serving as the foundational representation, the {gv} allows system engineers to define essential elements and the overall structure of the system. +It provides a high-level perspective, laying the groundwork for more detailed analyses within specialized views. + +xref:user-manual:features/general-view.adoc[Explore the {product} {gv}...] + +=== Interconnection View + +The Interconnection view focuses on articulating the relationships and connections between system components. +It provides a visual representation of how different elements within the system interact, fostering clarity in understanding the intricate dependencies within a complex system. + +xref:user-manual:features/interconnection-view.adoc[Explore the {product} Interconnection View...] + +=== Action Flow View + +The Action Flow view provides a specialized representation focused on illustrating the connections between different actions within a system. +This view is instrumental in capturing and visualizing the flow of actions, showcasing the sequence and relationships between various steps or processes within a system's behavior. + +=== State Transition View + +The State and Transition View provides a concise representation of the different states a system can occupy and the transitions between these states. +This view offers a visual depiction of the system's behavioral aspects, illustrating how it evolves and responds to various stimuli. + +=== Sequence View + +The Sequence View presents the chronological order of event occurrences on lifelines, offering a clear temporal representation of system dynamics. + +=== Geometry View + +The Geometry View is designed to present a visualization of exposed spatial items in two or three dimensions. +This view is particularly tailored for system engineers and designers working on systems that involve spatial components, allowing them to gain insights into the spatial relationships, configurations, and layouts of elements within a model. + +=== Grid View + +The Grid View is designed to present exposed model elements and their relationships in a structured and intuitive manner, arranged within a rectangular grid. +This view acts as the generalization of specialized views : the Tabular View, Data Value Tabular View, and Relationship Matrix View. + +=== Browser View + +The Browser View is designed to present the hierarchical membership structure of model elements, starting from an exposed root element. +This view provides a systematic and organized representation of the relationships between various model elements, offering a navigational tool for system engineers to explore and understand the composition of their models. \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/tour.adoc b/doc/content/modules/user-manual/pages/tour.adoc new file mode 100644 index 0000000..0088a1f --- /dev/null +++ b/doc/content/modules/user-manual/pages/tour.adoc @@ -0,0 +1,25 @@ += Tour the interface + +Embark on a comprehensive exploration of {product}'s interface as we guide you through the key features and functionalities. + +//TODO Navigate the models in the left sidebar +//TODO Explore the details view in the right side bar +//TODO Explore the diagram +//TODO Access modeling tools from the toolbar + +[cols="2*^", %noheader, frame=none, grid=none] +|=== +a|image::homepage.svg[xref=user-manual:features/homepage.adoc] + +**{homepage}** + +Manage projects. + +xref:user-manual:features/homepage.adoc[Explore the {homepage}...] a|image::editor.svg[xref=user-manual:features/editor.adoc] + +**{editor}** + +Edit models. + +xref:user-manual:features/editor.adoc[Explore the {editor}...] +|=== \ No newline at end of file diff --git a/doc/content/modules/user-manual/pages/what-is.adoc b/doc/content/modules/user-manual/pages/what-is.adoc new file mode 100644 index 0000000..cf75673 --- /dev/null +++ b/doc/content/modules/user-manual/pages/what-is.adoc @@ -0,0 +1,6 @@ += What is {product}? + +{product} represents an open-source, web-based tool expressly crafted for the purpose of facilitating the editing of {sysmlv2} models in accordance with the established OMG Standard. +This platform has been developed with a focus on providing the Model-Based Systems Engineering (MBSE) community with a sophisticated set of features, addressing the nuanced requirements of system engineers. +This section serves to elucidate the foundational elements of {product}, elucidating its core functionalities, its overarching objective of fostering collaboration within the MBSE domain, and its dedication to seamless interoperability with other open-source solutions. +Navigate through this section to gain a comprehensive understanding of {product}, its intricacies, and its role in advancing the discipline of {sysmlv2} modeling. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/README b/doc/content/modules/user-manual/partials/README new file mode 100644 index 0000000..559a114 --- /dev/null +++ b/doc/content/modules/user-manual/partials/README @@ -0,0 +1,5 @@ +Optional; Reserved + +Directory that contains AsciiDoc files that can be inserted into the files stored in pages. +These files aren’t converted to HTML by Antora directly. +Instead, they must be referenced by an include directive in a page in the pages directory. diff --git a/doc/content/modules/user-manual/partials/feature-edition-enterprise.adoc b/doc/content/modules/user-manual/partials/feature-edition-enterprise.adoc new file mode 100644 index 0000000..9851dc8 --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-edition-enterprise.adoc @@ -0,0 +1,3 @@ +icon:circle-info[] This feature is included in the Enterprise Edition. + +icon:times[] test \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/feature-edition-os.adoc b/doc/content/modules/user-manual/partials/feature-edition-os.adoc new file mode 100644 index 0000000..46ab516 --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-edition-os.adoc @@ -0,0 +1 @@ +icon:circle-info[] This feature is included in the Open Source Edition. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/feature-status-experimental.adoc b/doc/content/modules/user-manual/partials/feature-status-experimental.adoc new file mode 100644 index 0000000..6591e35 --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-status-experimental.adoc @@ -0,0 +1,2 @@ +icon:fire[] This feature is considered experimental at the moment. +We encourage users to try it out and give us feedback by reporting bugs and feature requests/ideas, but this should not be used in production. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/feature-status-stable.adoc b/doc/content/modules/user-manual/partials/feature-status-stable.adoc new file mode 100644 index 0000000..f5195b3 --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-status-stable.adoc @@ -0,0 +1,2 @@ +icon:circle-info[] This feature is considered stable for production use. +For any feedback or issues, please use bug reports and feature requests. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/feature-usage-admin.adoc b/doc/content/modules/user-manual/partials/feature-usage-admin.adoc new file mode 100644 index 0000000..a2e19bb --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-usage-admin.adoc @@ -0,0 +1 @@ +icon:circle-info[] Access to this feature is restricted to admin users. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/feature-usage-all.adoc b/doc/content/modules/user-manual/partials/feature-usage-all.adoc new file mode 100644 index 0000000..f9dafe4 --- /dev/null +++ b/doc/content/modules/user-manual/partials/feature-usage-all.adoc @@ -0,0 +1 @@ +icon:circle-info[] This feature is accessible to all users. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/help-action.adoc b/doc/content/modules/user-manual/partials/help-action.adoc new file mode 100644 index 0000000..38dd13e --- /dev/null +++ b/doc/content/modules/user-manual/partials/help-action.adoc @@ -0,0 +1,3 @@ += Help + +The _Help_ action, accessible on every page of the application, offers a convenient pathway to navigate to the online help resources for {product}. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/homepage-action.adoc b/doc/content/modules/user-manual/partials/homepage-action.adoc new file mode 100644 index 0000000..0cbe756 --- /dev/null +++ b/doc/content/modules/user-manual/partials/homepage-action.adoc @@ -0,0 +1,3 @@ += Homepage + +The _Homepage_ action, visible on all pages of the application, provides a convenient way to navigate back to the {homepage}, serving as the application's main homepage. \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/nav-features.adoc b/doc/content/modules/user-manual/partials/nav-features.adoc new file mode 100644 index 0000000..73d7588 --- /dev/null +++ b/doc/content/modules/user-manual/partials/nav-features.adoc @@ -0,0 +1,19 @@ +// Reference all the files defined in the features folder +* Projects Management +** xref:user-manual:features/homepage.adoc[] +* Editor +** xref:user-manual:features/editor.adoc[] +** xref:user-manual:features/details.adoc[] +** xref:user-manual:features/related-elements.adoc[] +** xref:user-manual:features/representations-view.adoc[] +** xref:user-manual:features/validation.adoc[] +** xref:user-manual:features/keyboard-shortcuts.adoc[] +* {sysmlv2} Views +** xref:user-manual:features/general-view.adoc[] +** xref:user-manual:features/interconnection-view.adoc[] +* Collaboration & Interoperability +** xref:user-manual:features/collaboration.adoc[] +** xref:user-manual:features/interoperability.adoc[] +** xref:user-manual:features/capella.adoc[] +* Advanced +** xref:user-manual:features/admin.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/nav-howtos.adoc b/doc/content/modules/user-manual/partials/nav-howtos.adoc new file mode 100644 index 0000000..6661439 --- /dev/null +++ b/doc/content/modules/user-manual/partials/nav-howtos.adoc @@ -0,0 +1,37 @@ +// Reference all the files defined in the how-tos folder +* How-Tos +** Project Management +*** xref:user-manual:hands-on/how-tos/create-blank-project.adoc[] +*** xref:user-manual:hands-on/how-tos/create-template-project.adoc[] +*** xref:user-manual:hands-on/how-tos/upload-project.adoc[] +*** xref:user-manual:hands-on/how-tos/delete-project.adoc[] +*** xref:user-manual:hands-on/how-tos/rename-project.adoc[] +*** xref:user-manual:hands-on/how-tos/download-project.adoc[] +*** xref:user-manual:hands-on/how-tos/share-project.adoc[] +*** xref:user-manual:hands-on/how-tos/project-settings.adoc[] +** Model Management +*** xref:user-manual:hands-on/how-tos/create-model.adoc[] +*** xref:user-manual:hands-on/how-tos/upload-model.adoc[] +*** xref:user-manual:hands-on/how-tos/rename-model.adoc[] +*** xref:user-manual:hands-on/how-tos/delete-model.adoc[] +*** xref:user-manual:hands-on/how-tos/download-model.adoc[] +*** xref:user-manual:hands-on/how-tos/create-element.adoc[] +*** xref:user-manual:hands-on/how-tos/read-element.adoc[] +*** xref:user-manual:hands-on/how-tos/rename-element.adoc[] +*** xref:user-manual:hands-on/how-tos/update-element.adoc[] +*** xref:user-manual:hands-on/how-tos/delete-element.adoc[] +*** xref:user-manual:hands-on/how-tos/direct-edit.adoc[] +** Representation Operations +*** xref:user-manual:hands-on/how-tos/create-representation.adoc[] +*** xref:user-manual:hands-on/how-tos/delete-representation.adoc[] +*** xref:user-manual:hands-on/how-tos/rename-representation.adoc[] +*** xref:user-manual:hands-on/how-tos/share-representation.adoc[] +** User Interface Navigation +*** xref:user-manual:hands-on/how-tos/switch-left-sidebar.adoc[] +*** xref:user-manual:hands-on/how-tos/switch-right-sidebar.adoc[] +** {explorer} +*** xref:user-manual:hands-on/how-tos/sync-editor.adoc[] +*** xref:user-manual:hands-on/how-tos/expand-all.adoc[] +*** xref:user-manual:hands-on/how-tos/filter-explorer.adoc[] +** {representations-view} +*** xref:user-manual:hands-on/how-tos/navigate-representations.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/nav-tuto.adoc b/doc/content/modules/user-manual/partials/nav-tuto.adoc new file mode 100644 index 0000000..bc1c084 --- /dev/null +++ b/doc/content/modules/user-manual/partials/nav-tuto.adoc @@ -0,0 +1,3 @@ +// Reference all the files defined in the tutorials folder +* Tutorials +** xref:user-manual:hands-on/tutorials/batmobile.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/nav.adoc b/doc/content/modules/user-manual/partials/nav.adoc new file mode 100644 index 0000000..f23af32 --- /dev/null +++ b/doc/content/modules/user-manual/partials/nav.adoc @@ -0,0 +1,35 @@ +* xref:user-manual:index.adoc[] +** xref:user-manual:what-is.adoc[] +** xref:user-manual:sysmlv2-overview.adoc[] +** xref:user-manual:key-features.adoc[] +** Get Started +*** xref:user-manual:get-started.adoc[] +*** xref:user-manual:tour.adoc[] +** xref:user-manual:concepts.adoc[] +** xref:user-manual:features/features.adoc[] ++ +-- +include::user-manual:partial$nav-features.adoc[] +-- ++ +** xref:user-manual:scaling-limits.adoc[] +** xref:user-manual:hands-on/hands-on.adoc[] ++ +-- +include::user-manual:partial$nav-howtos.adoc[] +-- ++ + ++ +-- +include::user-manual:partial$nav-tuto.adoc[] +-- ++ +** Help and Support +*** xref:user-manual:help.adoc[] +**** xref:user-manual:forum.adoc[] +**** xref:user-manual:contribute.adoc[] +**** xref:user-manual:best-practices.adoc[] +**** xref:user-manual:support.adoc[] +*** xref:user-manual:faq/faq.adoc[] +** xref:user-manual:release-notes.adoc[] \ No newline at end of file diff --git a/doc/content/modules/user-manual/partials/view-unsynchronized.adoc b/doc/content/modules/user-manual/partials/view-unsynchronized.adoc new file mode 100644 index 0000000..02cfbbb --- /dev/null +++ b/doc/content/modules/user-manual/partials/view-unsynchronized.adoc @@ -0,0 +1,6 @@ +[TIP] +==== +This view in {product} is implemented as an *unsynchronized* diagram. +This means that users need to manually add existing elements to the diagram to visualize them. +It does not display all the information stored in the model by default. +==== \ No newline at end of file diff --git a/doc/doc-ui/.editorconfig b/doc/doc-ui/.editorconfig new file mode 100644 index 0000000..c6c8b36 --- /dev/null +++ b/doc/doc-ui/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/doc/doc-ui/.eslintrc b/doc/doc-ui/.eslintrc new file mode 100644 index 0000000..fc50489 --- /dev/null +++ b/doc/doc-ui/.eslintrc @@ -0,0 +1,14 @@ +{ + "extends": "standard", + "rules": { + "arrow-parens": ["error", "always"], + "comma-dangle": ["error", { + "arrays": "always-multiline", + "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline" + }], + "max-len": [1, 120, 2], + "spaced-comment": "off" + } +} diff --git a/doc/doc-ui/.gitignore b/doc/doc-ui/.gitignore new file mode 100644 index 0000000..57834a1 --- /dev/null +++ b/doc/doc-ui/.gitignore @@ -0,0 +1,3 @@ +/build/ +/node_modules/ +/public/ diff --git a/doc/doc-ui/.gulp.json b/doc/doc-ui/.gulp.json new file mode 100644 index 0000000..2da9b16 --- /dev/null +++ b/doc/doc-ui/.gulp.json @@ -0,0 +1,4 @@ +{ + "description": "Build tasks for the Antora default UI project", + "flags.tasksDepth": 1 +} diff --git a/doc/doc-ui/.nvmrc b/doc/doc-ui/.nvmrc new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/doc/doc-ui/.nvmrc @@ -0,0 +1 @@ +10 diff --git a/doc/doc-ui/.stylelintrc b/doc/doc-ui/.stylelintrc new file mode 100644 index 0000000..344318f --- /dev/null +++ b/doc/doc-ui/.stylelintrc @@ -0,0 +1,7 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "comment-empty-line-before": null, + "no-descending-specificity": null, + } +} diff --git a/doc/doc-ui/docs/antora.yml b/doc/doc-ui/docs/antora.yml new file mode 100644 index 0000000..55876df --- /dev/null +++ b/doc/doc-ui/docs/antora.yml @@ -0,0 +1,5 @@ +name: antora-ui-default +title: Antora Default UI +version: ~ +nav: +- modules/ROOT/nav.adoc diff --git a/doc/doc-ui/docs/modules/ROOT/nav.adoc b/doc/doc-ui/docs/modules/ROOT/nav.adoc new file mode 100644 index 0000000..1af8968 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/nav.adoc @@ -0,0 +1,16 @@ +* xref:prerequisites.adoc[] +* xref:set-up-project.adoc[] +* xref:build-preview-ui.adoc[] +* xref:development-workflow.adoc[] +* xref:templates.adoc[] + ** xref:create-helper.adoc[] +* xref:add-static-files.adoc[] +* xref:stylesheets.adoc[] + ** xref:add-fonts.adoc[] +* xref:copy-to-clipboard.adoc[] +* xref:style-guide.adoc[] + ** xref:inline-text-styles.adoc[] + ** xref:admonition-styles.adoc[] + ** xref:list-styles.adoc[] + ** xref:sidebar-styles.adoc[] + ** xref:ui-macro-styles.adoc[] diff --git a/doc/doc-ui/docs/modules/ROOT/pages/add-fonts.adoc b/doc/doc-ui/docs/modules/ROOT/pages/add-fonts.adoc new file mode 100644 index 0000000..e4d2848 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/add-fonts.adoc @@ -0,0 +1,123 @@ += Add Fonts + +This page explains how to add new fonts to your UI. +These instructions assume you've forked the default UI and are able to customize it. + +There are three steps involved: + +. Add the font to your UI project +. Add a font-face declaration to your stylesheet +. Use the new font in your stylesheet + +How you reference the font file in the font-face declaration depends on how you decide to manage it. +You can manage the font with npm or download it manually and add it directly to your UI project. +The following sections describe each approach in turn. + +== npm managed + +You can use npm (or Yarn) to manage the font. +This approach saves you from having to store the font file directly in your UI project. +Here are the steps involved. + +. Use npm (or Yarn) to install the font files from a package (e.g., https://www.npmjs.com/package/typeface-open-sans[typeface-open-sans]) + + $ npm install --save typeface-open-sans + +. In [.path]_src/css_, add a corresponding CSS file (e.g., [.path]_typeface-open-sans.css_) +. In that file, declare the font face: ++ +[source,css] +---- +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 400; + src: + local("Open Sans"), + local("Open Sans-Regular"), + url(~typeface-open-sans/files/open-sans-latin-400.woff) format("woff") +} +---- ++ +The Gulp build recognizes the `~` URL prefix and copies the font from the npm package to the build folder (and hence bundle). ++ +You must define one @font-face for each font weight and style combination (e.g., `font-weight: 500` + `font-style: italic`) from the font that you want to use in your stylesheet. + +. Import the typeface CSS file you just created into the main stylesheet, [.path]_src/css/site.css_ (adjacent to the other typeface imports): ++ +[source,css] +---- +@import "typeface-open-sans.css"; +---- + +. Repeat the previous steps for each font style and weight you want to use from that package. +. Change the CSS to use your newly imported font: ++ +[source,css] +---- +html { + font-family: "Open Sans", sans; +} +---- ++ +TIP: If you're building on the default UI, you may instead want to define or update the font family using a variable defined in [.path]_src/css/vars.css_. + +. Test the new font by previewing your UI: + + $ gulp preview + +If you see the new font, you've now successfully added it to your UI. +If you aren't sure, look for the https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts[All fonts on page] section in your browser's developer tools to see whether the font was loaded. + +== Manual + +A simpler approach to adding fonts is to store them directly in your project. +Here are the steps involved. + +. Download the font files and add them to the [.path]_src/font_ folder. +Create this folder if it does not exist. +. In [.path]_src/css_, add a corresponding CSS file (e.g., [.path]_typeface-open-sans.css_) +. In that file, declare the font face: ++ +[source,css] +---- +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 400; + src: + local("Open Sans"), + local("Open Sans-Regular"), + url(../font/open-sans-latin-400.woff) format("woff") +} +---- ++ +Note that the path is a relative path starting from the [.path]_src/css_ folder to the [.path]_src/font_ folder. ++ +You must define one @font-face for each font weight and style combination (e.g., `font-weight: 500` + `font-style: italic`) from the font that you want to use in your stylesheet. + +. Import the typeface CSS file you just created into the main stylesheet, [.path]_src/css/site.css_ (adjacent to the other typeface imports): ++ +[source,css] +---- +@import "typeface-open-sans.css"; +---- + +. Repeat the previous steps for each font style and weight you want to use. +. Change the CSS to use your newly imported font: ++ +[source,css] +---- +html { + font-family: "Open Sans", sans; +} +---- ++ +TIP: If you're building on the default UI, you may instead want to define or update the font family using a variable defined in [.path]_src/css/vars.css_. + +. Test the new font by previewing your UI: + + $ gulp preview + +If you see the new font, you've now successfully added it to your UI. +If you aren't sure, look for the https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts[All fonts on page] section in your browser's developer tools to see whether the font was loaded. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/add-static-files.adoc b/doc/doc-ui/docs/modules/ROOT/pages/add-static-files.adoc new file mode 100644 index 0000000..a5ddb79 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/add-static-files.adoc @@ -0,0 +1,99 @@ += Add Static Files + +A static UI file is any file provided by the UI that is added directly to your site. +A common example of a static file is a favicon image. +One way to add static files is by using the xref:antora:playbook:ui-supplemental-files.adoc[supplemental UI], which is defined in your Antora playbook. +This document explains how to add static files using a UI bundle instead. + +== Set up the static files folder + +You'll first need a place to store the static files in the UI project. +Let's create a folder under [.path]_src_ named [.path]_static_ for this purpose. + + $ mkdir src/static + +You can add static files, such as a favicon image (e.g., [.path]_favicon.ico_), to this folder. +The UI build will add files in this folder to the root of the UI bundle, dropping the [.path]_static_ folder prefix from the path. + +Antora automatically passes through static files in the bundle to the UI output folder (`+_+` by default), ignoring any hidden files (i.e., files that begin with a dot). +A static file is any file that's not designated as a layout, partial, or helper. +That means our favicon image file will end up at the path [.path]_++_/favicon.ico++_. + +.Contents of site +.... +_/ + favicon.ico + css/ + site.css + ... +sitemap.xml +... +.... + +If that's where you want the file to go, there's nothing else you have to do. +Otherwise, you have the option of promoting select static files to the site root. + +== Promote static files + +If you want to promote certain static files out of the UI output folder, you need to identify them. +Antora looks for a file named [.path]_ui.yml_, the UI descriptor, in the UI bundle to configure the behavior of the UI. + +Start by creating the file [.path]_src/ui.yml_ in your UI project. +The UI build copies this file, if present, to the root of the UI bundle. + +This file does not have any required keys. +The key we're interested in is `static_files`. +This key identifies files by relative path in the UI bundle that should be promoted from the UI output folder to the site root. +The files must be specified as an array, where each entry is either a relative paths or a path glob. +Unlike other static files, promoted static files can begin with a dot. + +Here's how to configure the UI descriptor to promote the favicon image file to the site root. + +.src/ui.yml +[,yaml] +---- +static_files: +- favicon.ico +---- + +If you have multiple favicon files with different file extensions, you can match all of them using a glob. + +.src/ui.yml +[,yaml] +---- +static_files: +- favicon* +---- + +With this configuration in place, Antora will read the favicon image from the UI bundle and copy it to the root of the site. + +.Contents of site +.... +_/ + css/ + site.css + ... +favicon.ico +sitemap.xml +... +.... + +Let's now look at how to put the static files to use. + +== Use the static files + +Often when you add static files to your site, you need to reference them somewhere. +In the case of a favicon image, it must be referenced in the `` of the HTML page. +If you are referencing a promoted static file, you'll use the prefix `+{{{siteRootPath}}}+`. +Otherwise, you'll use the prefix `+{{{uiRootPath}}}+`. + +Let's update the [.path]_src/partials/head-icons.hbs_ partial to reference the favicon image at the root of the site. + +.src/partials/head-icons.hbs +[,yaml] +---- + +---- + +Rebuild the UI with `gulp bundle`. +You should now see that your site has a favicon image that's provided by the UI bundle. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/admonition-styles.adoc b/doc/doc-ui/docs/modules/ROOT/pages/admonition-styles.adoc new file mode 100644 index 0000000..28bef0d --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/admonition-styles.adoc @@ -0,0 +1,39 @@ += Admonition Styles +:navtitle: Admonitions + +An xref:antora:asciidoc:admonitions.adoc[admonition], also known as a notice, helps draw attention to content with a special label or icon. + +== Admonition blocks + +An admonition block is a table. +The table title element is specified by the block class: tip, note, important, warning, or caution. +Here's an AsciiDoc source example that produces an admonition with the table title warning: + +[source,asciidoc] +---- +WARNING: Watch out! +---- + +If font-based icons are enabled (`icons=font`), the table title text is replaced by the associated icon. + +[source,html] +---- +
+ + + + + +
+ + +
+

Watch out!

+
+
+
+---- + +Here's how it might appear when the title is displayed as text: + +WARNING: Watch out! diff --git a/doc/doc-ui/docs/modules/ROOT/pages/build-preview-ui.adoc b/doc/doc-ui/docs/modules/ROOT/pages/build-preview-ui.adoc new file mode 100644 index 0000000..f55cdd7 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/build-preview-ui.adoc @@ -0,0 +1,67 @@ += Build a UI Project for Local Preview +:navtitle: Build and Preview the UI + +== Build Preview Site + +Once you've modified the site UI, the first thing you'll want to do is check out how it looks. +That's what the files in the [.path]_preview-src/_ folder are for. +This folder contains HTML file fragments that provide a representative sample of content from the site. +The preview saves you from having to generate the whole site just to test the UI. +These files should give you an idea of how the UI will look when applied to the actual site. + +The pages in the preview site are assembled using the Handlebars templates and link to the pre-compiled asset files (emulating the behavior of the site generator). +Thus, to look at them, you need to run them through the UI build. + +There are two preview modes available. +You can run the build once and examine the result or you can run the build continuously so you can see changes as you make them. +The next two sections explain how to use these modes. + +=== Build Once + +To build the UI once for preview, then stop, execute the following command: + + $ gulp preview:build + +This task pre-compiles the UI files into the [.path]_public_ directory. +To view the preview pages, navigate to the HTML pages in the [.path]_public_ directory using your browser (e.g., [.path]_public/index.html_). + +=== Build Continuously + +To avoid the need to run the `preview:build` task over and over while developing, you can use the `preview` command instead to have it run continuously. +This task also launches a local HTTP server so updates get synchronized with the browser (i.e., "`live reload`"). + +To launch the preview server, execute the following command: + + $ gulp preview + +You'll see a URL listed in the output of this command: + +.... +[12:59:28] Starting 'preview:serve'... +[12:59:28] Starting server... +[12:59:28] Server started http://localhost:5252 +[12:59:28] Running server +.... + +Navigate to the URL to view the preview site. +While this command is running, any changes you make to the source files will be instantly reflected in the browser. +This works by monitoring the project for changes, running the `preview:build` task if a change is detected, and sending the updates to the browser. + +Press kbd:[Ctrl+C] to stop the preview server and end the continuous build. + +== Package for Previewing + +If you need to bundle the UI in order to preview the UI on the real site in local development, run the following command: + + $ gulp bundle + +The `bundle` command also invokes the `lint` command to check that the CSS and JavaScript follow the coding standards. + +The UI bundle will be available at [.path]_build/ui-bundle.zip_. +You can then point Antora at this bundle using the `--ui-bundle-url` command-line option. + +If you have the preview running, and you want to bundle without causing the preview to be clobbered, use: + + $ gulp bundle:pack + +The UI bundle will again be available at [.path]_build/ui-bundle.zip_. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc b/doc/doc-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc new file mode 100644 index 0000000..0eaf058 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc @@ -0,0 +1,48 @@ += Copy to clipboard + +This page describes the copy to clipboard feature added to source blocks when using the default UI. + +== Source blocks + +The default UI provides JavaScript that adds a clipboard button to all source blocks. +The clipboard button shows up next to the language label when the mouse is hovered over the block. +When the user clicks the clipboard button, the contents of the source block will be copied to the user's clipboard. + +You can try this behavior below: + +[,ruby] +---- +puts 'Take me to your clipboard!' +---- + +IMPORTANT: Copy to clipboard only works for a local site or if the site is hosted over https (SSL). +The copy to clipboard does not work on an insecure site (http) since the clipboard API is not available in that environment. +In that case, the behavior gracefully degrades so the user will not see the clipboard button or an error. + +== Console blocks + +The default UI also adds a clipboard button to all console blocks. +A console block is either a literal paragraph that begins with a `$` or a source block with the language `console`. + +The script provided by the default UI will automatically strip the `$` prompt at the beginning of each line and join the lines with `&&`. +In <>, since the language is `console` and each line begins with a `$`, the console copy-paste logic is triggered. + +.Copy to clipboard for a multi-line console command +[#ex-console-copy-paste] +------ +[,console] +---- +$ mkdir example +$ cd example +---- +------ + +When a user uses the copy-to-clipboard button, they will copy the combined command `mkdir example && cd example` instead of the literal text shown. +This can be useful for tutorial examples that a user is expected to copy-paste to run. +You can try this behavior below: + +[,console] +---- +$ mkdir example +$ cd example +---- diff --git a/doc/doc-ui/docs/modules/ROOT/pages/create-helper.adoc b/doc/doc-ui/docs/modules/ROOT/pages/create-helper.adoc new file mode 100644 index 0000000..dfdb142 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/create-helper.adoc @@ -0,0 +1,177 @@ += Create a UI Helper + +This page explains how to create a UI helper for use in a page template (layout or partial). +A helper is a JavaScript function that's invoked by Handlebars when it comes across a helper call in a template. + +== Helper anatomy + +A helper must be defined as a JavaScript file in the [.path]_helpers_ directory of the UI bundle. +The basename of the file without the file extension will be used as the function name. +For example, if the helper is located at [.path]_helpers/join.js_, the name of the function will be `join`. + +You don't have to register the helper as Antora does that for you automatically. +This automatic behavior replaces this Handlebars API call (which you *don't* have to do): + +[,js] +---- +Handlebars.registerHelper('join', function () { ... }) +---- + +The helper file should export exactly one default function. +The name of the function in the file does not matter. + +Here's a template of a helper function you can use as a starting point: + +.new-helper.js +[,js] +---- +'use strict' + +module.exports = () => { + return true +} +---- + +The return value of the function will be used in the logic in the template. +If the helper is used in a conditional, it should return a boolean value (as in the previous example). +If the helper is used to create output, it should return a string. +If the helper is used in an iteration loop, it should return a collection. + +We can now use our conditional helper in a template as follows: + +[,hbs] +---- +{{#if (new-helper)}} +always true! +{{/if}} +---- + +The round brackets are always required around a helper function call (except in cases when they're implied by Handlebars). + +The helper can access top-level variables in the template by accepting the template context as the final parameter. +The top-level variables are stored in in the `data.root` property of this object. + +.new-helper.js +[,js] +---- +'use strict' + +module.exports = ({ data: { root } }) => { + return root.site.url === 'https://docs.example.org' +} +---- + +Now our condition will change: + +[,hbs] +---- +{{#if (new-helper)}} +Only true if the site URL is https://docs.example.org. +{{/if}} +---- + +A helper can also accept input parameters. +These parameters get inserted in the parameter list before the context object. +Handlebars only calls the function with the input parameters passed by the template, so it's important to use a fixed number of them. +Otherwise, the position of the context object will jump around. + +.new-helper.js +[,js] +---- +'use strict' + +module.exports = (urlToCheck, { data: { root } }) => { + return root.site.url === urlToCheck +} +---- + +Now we can accept the URL to check as an input parameter: + +[,hbs] +---- +{{#if (new-helper 'https://docs.example.org')}} +Only true if the site URL matches the one specified. +{{/if}} +---- + +You can consult the https://handlebarsjs.com/guide/[Handlebars language guide] for more information about creating helpers. + +== Use the content catalog in a helper + +You can work directly with Antora's content catalog in a helper to work with other pages and resources. +Let's define a helper that assembles a collection of pages that have a given tag defined in the `page-tags` attribute. +The helper call will look something like this: + +[,hbs] +---- +{{#each (pages-with-tag 'tutorial')}} +---- + +We'll start by defining the helper in a file named [.path]_pages-with-tag.js_. +In this first iteration, we'll have it return a collection of raw virtual file objects from Antora's content catalog. +Populate the file with the following contents: + +.pages-with-tag.js +[,js] +---- +'use strict' + +module.exports = (tag, { data }) => { + const { contentCatalog } = data.root + return contentCatalog.getPages(({ asciidoc, out }) => { + if (!out || !asciidoc) return + const pageTags = asciidoc.attributes['page-tags'] + return pageTags && pageTags.split(', ').includes(tag) + }) +} +---- + +Here we're obtaining a reference to the content catalog, then filtering the pages by our criteria using the `getPage()` method. +It's always good to check for the presence of the `out` property to ensure the page is publishable. + +Here's how this helper is used in the template: + +[,hbs] +---- +{{#each (pages-with-tag 'tutorial')}} +{{{./asciidoc.doctitle}}} +{{/each}} +---- + +You'll notice that the page objects in the collection differ from the typical page UI model. +We can convert each page to a page UI model before returning the collection. +Let's write the extension again, this time running each page through Antora's `buildPageUiModel` function: + +.pages-with-tag.js +[,js] +---- +'use strict' + +module.exports = (tag, { data }) => { + const { contentCatalog, site } = data.root + const pages = contentCatalog.getPages(({ asciidoc, out }) => { + if (!out || !asciidoc) return + const pageTags = asciidoc.attributes['page-tags'] + return pageTags && pageTags.split(', ').includes(tag) + }) + const { buildPageUiModel } = require.main.require('@antora/page-composer/build-ui-model') + return pages.map((page) => buildPageUiModel(site, page, contentCatalog)) +} +---- + +In this case, the usage of the item object is simpler and more familiar: + +[,hbs] +---- +{{#each (pages-with-tag 'tutorial')}} +{{{./doctitle}}} +{{/each}} +---- + +Using this helper as a foundation, you can implement a variety of customizations and custom collections. + +CAUTION: Keep in mind that any helper you will use will be called for each page that uses the template. +This can impact performance. +If it's called on every page in your site, be sure that the operation is efficient to avoid slowing down site generation. + +As an alternative to using a helper, you may want to consider whether writing an Antora extension is a better option. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/development-workflow.adoc b/doc/doc-ui/docs/modules/ROOT/pages/development-workflow.adoc new file mode 100644 index 0000000..7296c4f --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/development-workflow.adoc @@ -0,0 +1,31 @@ += UI Development Workflow + +// This section provides information about some of the UI files you'll be modifying and how to prepare and submit those changes. + +All changes pushed to a UI project's default branch can trigger a new release (not described here). +Therefore, you want to make your changes to a development branch and submit it as a pull request (PR) to be approved. +(Even better would be to issue the PR from a fork). +Only when the PR is approved and merged will the new release be triggered. + +== git steps + +Use the following command to create a local development branch named `name-me`: + + $ git checkout -b name-me -t origin/HEAD + +You'll then apply your changes to the UI files. +Once you're done making changes, commit those changes to the local branch: + + $ git commit -a -m "describe your change" + +Then, push your branch to the remote repository: + + $ git push origin name-me + +Finally, navigate to your UI project in your browser and create a new pull request from this branch. + +The maintainer of the UI should review the changes. +If the changes are acceptable, the maintainer will merge the pull request. +As soon as the pull request is merged into the default branch, an automated process will take over to publish a new release for the site generator to use. + +Now that you've got the process down, let's review some of the files you'll be working with in more detail. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/index.adoc b/doc/doc-ui/docs/modules/ROOT/pages/index.adoc new file mode 100644 index 0000000..1d97ef3 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/index.adoc @@ -0,0 +1,224 @@ += Antora Default UI +// Settings: +:hide-uri-scheme: +// URLs: +:url-antora: https://antora.org +:url-repo: https://gitlab.com/antora/antora-ui-default +:url-preview: https://antora.gitlab.io/antora-ui-default +:url-hbs: https://handlebarsjs.com +:url-gulp: https://gulpjs.com +:url-npm: https://npmjs.com +:url-node: https://nodejs.org +:url-nvm: https://github.com/creationix/nvm +:url-nvm-install: {url-nvm}#installation +:url-git: https://git-scm.com +:url-git-dl: {url-git}/downloads + +This project produces the {url-preview}[default UI bundle] for documentation sites generated with {url-antora}[Antora]. +It contains the UI assets (page templates, CSS, JavaScript, images, etc.) and a Gulp build script. +The build can be used to preview the UI locally (featuring live updates), or to package it for consumption by the Antora site generator. + +This documentation explains how to use this project to set up, customize and manage a UI for a documentation site generated with Antora. +After reading it, you'll be able to: + +* [x] Understand how an Antora UI project is structured. +* [x] Set up your environment to work on the UI project. +* [x] Launch a preview server to visually inspect the UI. +* [x] Adopt a development workflow to share and accept changes to the UI. +* [x] Package a UI for your documentation site that Antora can use. + +== File type and technology overview + +The Antora UI consists of the following file types that are used to structure and style the documentation site pages generated by Antora. + +* Handlebars "`page`" templates (layouts, partials, and helpers) +* CSS (enhanced using PostCSS) +* JavaScript (UI scripts) +* Images / Graphics (specific to the UI) +* Fonts +* Sample content for previewing the UI (HTML and UI model) + +To understand how the UI works, let's begin by surveying the primary technologies used by the UI. + +Handlebars (file extension: `.hbs`):: +{url-hbs}[Handlebars] is a "`logic-less`" templating engine used to create HTML from template files. +Templates contain placeholders (i.e., mustache expressions like `+{{{page.title}}}+`) into which content is injected from a model. +They also accommodate simple logic expressions for repeating content or including it conditionally (e.g., `+{{#each navigation}}+`) as well as partials (e.g., `+{{> header}}+`). + +Gulp (script file: [.path]_gulpfile.js/index.js_):: +{url-gulp}[Gulp] is a build tool for JavaScript projects. +It configures a collection of tasks that can be used to perform automated tasks such as compiling files, running a preview server, or publishing a release. + +npm (command: `npm`):: +npm manages software packages (i.e., software dependencies) that it downloads from {url-npm}. +Software this project uses includes libraries that handle compilation as well as shared assets such as font files that are distributed as npm packages. +npm is part of Node.js. + +package.json::: +This file keeps track of the dependencies (described using fuzzy versions) that npm (or Yarn) should fetch. + +package-lock.json::: +This file contains a report of which dependencies npm resolved. +This information ensures that dependency resolution is reproducible. + +node_modules/::: +A local cache of resolved dependencies that npm (or Yarn) fetches. + +PostCSS:: +This project does not use a CSS preprocessor such as Sass or LESS. +Instead, it relies on normal CSS which is enhanced by a series of postprocessors. +The most common postprocessor backports newer CSS features to older browsers by adding properties with vendor prefixes. + +== UI project versus UI bundle + +The [.term]*UI project*, which is comprised of the source files in the git repository, provides the recipe and raw materials for creating an Antora UI bundle. +It includes a build, source files, project files, and dependency information. +This is your development workspace. + +The [.term]*UI bundle*, a distributable archive, provides pre-compiled (interpreted, consolidated, and/or minimized) files that are ready to be used by Antora. + +=== UI project repository structure (default branch) + +You should think of the UI project's default branch as your UI workspace. +It contains the recipe and raw materials for creating a UI, including a build, source files, project files, and dependency information. + +Here's how the files are structured in the UI project: + +[.output] +.... +README.adoc +gulpfile.js/ + index.js + lib/ + tasks/ +package.json +package-lock.json +src/ + css/ + base.css + breadcrumbs.css + ... + helpers/ + and.js + eq.js + ... + img/ + back.svg + caret.svg + ... + layouts/ + 404.hbs + default.hbs + partials/ + article.hbs + breadcrumbs.hbs + ... + js/ + 01-navigation.js + 02-fragment-jumper.js + ... + vendor/ + highlight.js +preview-src/ + index.html + ui-model.yml +.... + +A Gulp build is used to compile and assemble the UI project files into a UI bundle. + +=== UI bundle structure (releases) + +The UI bundle--a distributable archive--provides files which are ready to be used by Antora. + +When the UI project files are built by Gulp, they are assembled under the [.path]_public_ directory. +Since the [.path]_public_ directory is generated, it's safe to remove. + +The contents of the UI bundle resembles the UI project's default branch contents, except the bundle doesn't contain any files other than the ones that make up the UI. +This is the content that is used by Antora. + +[.output] +.... +css/ + site.css +font/ + ... +helpers/ + and.js + eq.js + ... +img/ + back.svg + caret.svg + ... +layouts/ + 404.hbs + default.hbs +partials/ + article.hbs + breadcrumbs.hbs + ... +js/ + site.js + vendor/ + highlight.js +.... + +Some of these files have been compiled or aggregated, such as the stylesheets and JavaScript. +The benefit of building the UI files is that the files can be optimized for static inclusion in the site without that optimization getting in the way of UI development. +For example, the UI build can optimize SVGs or add vendor prefixes to the CSS. +Since these optimizations are only applied to the pre-compiled files, they don't interfere with the web developer's workflow. + +== UI compilation and generator consumption overview + +The purpose of an Antora UI project is to assemble the UI files into a reusable distribution that Antora can use to compose the HTML pages and the assets they require. + +The only required file in the UI bundle is the default Handlebars layout for pages (i.e., [.path]_layouts/default.hbs_). +If the 404 page is enabled, the Handlebars layout for the 404 page is also required (i.e., [.path]_layouts/404.hbs_). + +The layout files must be located in the [.path]_layouts_ folder in the UI bundle. +The name of the layout is the stem of the file, which is the file's basename with a file extension (e.g., [.path]_layouts/default.hbs_ becomes `default`). + +[.output] +.... +layouts/ + 404.hbs + default.hbs +.... + +There are no other required files in a UI bundle. +Any additional files are only required because they are referenced by a layout, either when generating the HTML (partial or helper) or assets referenced by the HTML (CSS or JavaScript) that are served to the browser. +Antora does not copy layouts, partials, or helpers to the generated site. + +If the layout looks for a partial, that partial must be located in the [.path]_partials_ directory. +The name of the partial is the stem of the file (e.g,. [.path]_partials/body.hbs_] becomes `body` and used as `> body`). +If the partial is inside a folder, the name of that folder is not used in the partial's name. +Additionally, any JavaScript files found in the [.path]_helpers_ directory are automatically registered as template helpers. +The name of the helper function matches the stem of the file (e.g., [.path]_helpers/concat.js_ becomes `concat`). + +Here's how a UI would be structured if it had layouts, partials, and helpers: + +[.output] +.... +helpers/ + concat.js +layouts/ + 404.hbs + default.hbs +partials/ + body.hbs +.... + +The UI is served statically in a production site, but the UI's assets live in a source form in a UI project to accommodate development and simplify maintenance. +When handed off to the Antora pipeline, the UI is in an interim, pre-compiled state. +Specifically, the default branch of the git repository contains the files in source form while releases are used to distribute the files in pre-compiled form. + +The responsibility of compiling the UI is shared between a UI project and Antora. +The UI project uses a local build to pre-compile (i.e., interpret, consolidate, and/or minimize) the files. +The pre-compiled files are agnostic to Antora's content model, relieving the generator from having to deal with this part. +It also allows the UI to be reused. + +The UI project build then packages the UI into a bundle, which the UI Loader in Antora consumes. +Antora grabs the bundle, extracts it into a UI catalog, and takes compilation to completion by weaving the Antora's content model into the Handlebars templates to make the pages and auxiliary data files. +Antora then copies the remaining UI assets to the site output. + +Now that you have an overview of the files that make up the UI and how it gets assembled, let's go over how to set up the project, build the UI, and preview it. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/inline-text-styles.adoc b/doc/doc-ui/docs/modules/ROOT/pages/inline-text-styles.adoc new file mode 100644 index 0000000..61bddc8 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/inline-text-styles.adoc @@ -0,0 +1,86 @@ += Inline Text Styles +:navtitle: Inline Text +:example-caption!: + +//// +When creating a UI theme for Antora, there are certain elements in the UI that require support from the CSS to work correctly. +This list includes elements in the shell (i.e., frame) and in the document content. +This document identifies these UI elements. +//// + +This page describes how to style text in the contents of the page which is visually emphasized. + +[#bold] +== Bold text () + +How xref:antora:asciidoc:bold.adoc[text marked as bold] appears on your site depends on the fonts loaded by the UI and the CSS styles the UI applies to the `` HTML tag. + +[source,html] +---- +A bold word, or a bold phrase of text. +---- + +Since `` is a semantic HTML element, it automatically inherits default styling (`font-weight: bold`) from the browser. +If you want to override the browser styles, you'll need to define properties on the `strong` selector in the stylesheet for your UI. + +In the default UI, the `` element is styled in the 500 font weight of the current typeface (Roboto). +For example: + +[example] +A bold *word*, or a bold *phrase of text*. + +[#italic] +== Italic text () + +How xref:antora:asciidoc:italic.adoc[italicized text] appears on your site depends on the fonts loaded by the UI and the CSS styles the UI applies to the `` HTML tag. + +[source,html] +---- +An italic word, or an italic phrase of text. +---- + +Since `` is a semantic HTML element, it automatically inherits default styling (`font-style: italic`) from the browser. +If you want to override the browser styles, you'll need to define properties on the `em` selector in the stylesheet for your UI. + +In the default UI, the `em` element is styled in the italic font variant of the current typeface (Roboto). +For example: + +[example] +An italic _word_, or an italic _phrase of text_. + +[#monospace] +== Monospace text () + +How xref:antora:asciidoc:monospace.adoc[inline monospace text] is displayed depends on the fixed-width font loaded by your UI and the CSS styles it applies to the `` HTML tag. + +[source,html] +---- +A monospace word, or a monospace phrase of text. +---- + +Since `` is a semantic HTML element, it automatically inherits default styling (`font-family: monospace`) from the browser. +If you want to override the browser styles, you'll need to define properties on the `code` selector in the stylesheet for your UI. + +In the default UI, the `code` element is styled using the fixed-width font loaded by the stylesheet (Roboto Mono). +For example: + +[example] +A monospace `word`, or a monospace `phrase of text`. + +[#highlight] +== Highlighted text () + +How xref:antora:asciidoc:highlight.adoc[highlighted (or marked) text] appears on your site depends on the CSS styles the UI applies to the `` HTML tag. + +[source,html] +---- +Let’s add some highlight to it. +---- + +Since `` is a semantic HTML element, it automatically inherits default styling (`background-color: yellow`) from the browser. +Here's an example: + +[example] +Let's add some #highlight# to it. + +If you want to override the browser styles, you'll need to define properties on the `mark` selector in the stylesheet for your UI. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/list-styles.adoc b/doc/doc-ui/docs/modules/ROOT/pages/list-styles.adoc new file mode 100644 index 0000000..414bb7a --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/list-styles.adoc @@ -0,0 +1,81 @@ += List Styles +:navtitle: Lists + +== Ordered list numeration + +The browser automatically numbers xref:antora:asciidoc:ordered-and-unordered-lists.adoc[ordered lists] and selects a numeration style by list depth in the following order: decimal, lower-alpha, lower-roman, upper-alpha, upper-roman. + +AsciiDoc allows the author to override the numeration style for an ordered list. +Here's an example of that output: + +[source,html] +---- +
+
    +
  1. a

  2. +
  3. b

  4. +
  5. c

  6. +
+
+---- + +In order to support this customization, you must assign the list-style-type property to the following classes on the `
    ` element in your stylesheet. + +|=== +|
      class |list-style-type property value + +|arabic +|decimal + +|decimal +|decimal-leading-zero + +|loweralpha +|lower-alpha + +|lowergreek +|lower-greek + +|lowerroman +|lower-roman + +|upperalpha +|upper-alpha + +|upperroman +|upper-roman +|=== + +== Checklist + +A xref:antora:asciidoc:checklists.adoc[checklist] is an unordered list with items that are prefixed with a checkbox marker (checked or unchecked). +Here's an AsciiDoc source example that produces a checklist: + +[source,asciidoc] +---- +* [ ] todo +* [x] done! +---- + +If font-based icons are enabled (`icons=font`), the checkbox gets inserted as the first element of the paragraph element that contains the list item text. + +[source,html] +---- +
      +
        +
      • +

        todo

        +
      • +
      • +

        done!

        +
      • +
      +
      +---- + +The recommended approach is to hide the list markers (`list-style: none`), then add a checkbox glyph on the icon element using either a background image or a `before` pseudo element. + +Here's how it might appear: + +* [ ] todo +* [*] done! diff --git a/doc/doc-ui/docs/modules/ROOT/pages/prerequisites.adoc b/doc/doc-ui/docs/modules/ROOT/pages/prerequisites.adoc new file mode 100644 index 0000000..0b6571b --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/prerequisites.adoc @@ -0,0 +1,56 @@ += UI Development Prerequisites +// URLs: +:url-nvm: https://github.com/creationix/nvm +:url-node: https://nodejs.org +:url-gulp: http://gulpjs.com +:url-git: https://git-scm.com +:url-git-dl: {url-git}/downloads +:url-node-releases: https://nodejs.org/en/about/releases/ +// These prerequisite instructions are less detailed than Antora's prerequisite instructions, I don't know if this is a concern or not. + +An Antora UI project is based on tools built atop Node.js, namely: + +* {url-node}[Node.js] (commands: `node` and `npm`) + ** {url-nvm}[nvm] (optional, but strongly recommended) +* {url-gulp}[Gulp CLI] (command: `gulp`) + +You also need {url-git}[git] (command: `git`) to pull down the project and push updates to it. + +== git + +First, make sure you have git installed. + + $ git --version + +If not, {url-git-dl}[download and install] the git package for your system. + +== Node.js + +You need Node.js installed on your machine to use Antora, including the default UI. +Antora follows the Node.js release schedule, so we advise that you choose an active long term support (LTS) release of Node.js. +We recommend using the latest active Node.js LTS version. +While you can use other versions of Node.js, Antora is only tested against LTS releases. + +To check whether you have Node.js installed, and which version, open a terminal and type: + + $ node --version + +You should see a version string, such as: + + v10.15.3 + +If the command fails with an error, it means you don't have Node.js installed. +The best way to install Node.js is to use nvm (Node Version Manager). +Refer to xref:antora:install:linux-requirements.adoc#install-nvm[Install nvm and Node.js (Linux)], xref:antora:install:macos-requirements.adoc#install-nvm[Install nvm and Node.js (macOS)], or xref:antora:install:windows-requirements.adoc#install-nvm[Install nvm and Node.js (Windows)] for instructions. + +Once you have Node.js installed, you can proceed with installing the Gulp CLI. + +== Gulp CLI + +Next, you'll need the Gulp CLI (aka wrapper). +This package provides the `gulp` command which executes the version of Gulp declared by the project. +You should install the Gulp CLI globally (which resolves to a location in your user directory if you're using nvm) using the following command: + + $ npm install -g gulp-cli + +Now that you have Node.js and Gulp installed, you're ready to set up the project. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/set-up-project.adoc b/doc/doc-ui/docs/modules/ROOT/pages/set-up-project.adoc new file mode 100644 index 0000000..03b7ed1 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/set-up-project.adoc @@ -0,0 +1,60 @@ += Set up a UI Project +:url-project: https://gitlab.com/antora/antora-ui-default.git + +Before you can start working on the UI, you need to grab the sources and initialize the project. +The sources can be {url-project}[Antora's default UI] or an existing UI project structured to work with Antora. + +== Fetch the Default UI project + +To start, clone the default UI project using git: + +[subs=attributes+] + $ git clone {url-project} + $ cd "`basename ${_%.git}`" + +The example above clones Antora's default UI project and then switches to the project folder on your filesystem. +Stay in this project folder in order to initialize the project using npm. + +== Install dependencies + +Next, you'll need to initialize the project. +Initializing the project essentially means downloading and installing the dependencies into the project. +That's the job of npm. + +In your terminal, execute the following command (while inside the project folder): + + $ npm install + +This command installs the dependencies listed in [.path]_package.json_ into the [.path]_node_modules/_ folder inside the project. +This folder does not get included in the UI bundle. +The folder is safe to delete, though npm does a great job of managing it. + +You'll notice another file which seems to be relevant here, [.path]_package-lock.json_. +npm uses this file to determine which concrete version of a dependency to use, since versions in [.path]_package.json_ are typically just a range. +The information in this file makes the build reproducible across different machines and runs. + +If a new dependency must be resolved that isn't yet listed in [.path]_package-lock.json_, npm will update this file with the new information when you run `npm install`. +Therefore, you're advised to commit the [.path]_package-lock.json_ file into the repository whenever it changes. + +== Supported build tasks + +Now that the dependencies are installed, you should be able to run the `gulp` command to find out what tasks the build supports: + + $ gulp --tasks-simple + +You should see: + +[.output] +.... +default +clean +lint +format +build +bundle +bundle:pack +preview +preview:build +.... + +We'll explain what each of these tasks are for and when to use them. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/sidebar-styles.adoc b/doc/doc-ui/docs/modules/ROOT/pages/sidebar-styles.adoc new file mode 100644 index 0000000..7a16d43 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/sidebar-styles.adoc @@ -0,0 +1,30 @@ += Sidebar Styles +:navtitle: Sidebars + +This page describes the in-page sidebar block styles, not the styles for the navigation sidebar. + +== Sidebar blocks + +xref:antora:asciidoc:sidebar.adoc[Sidebars] can contain any type of content. +The sidebar title is specified by the block class title. +Here's an AsciiDoc source example that produces a sidebar with a title: + +[source,asciidoc] +---- +.Optional Title +**** +This is a paragraph in a sidebar. +**** +---- + +[source,html] +---- +
      +
      +
      Optional Title
      +
      +

      This is a paragraph in a sidebar.

      +
      +
      +
      +---- diff --git a/doc/doc-ui/docs/modules/ROOT/pages/style-guide.adoc b/doc/doc-ui/docs/modules/ROOT/pages/style-guide.adoc new file mode 100644 index 0000000..ac32da0 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/style-guide.adoc @@ -0,0 +1,23 @@ += UI Element Style Guide +:navtitle: UI Element Styles + +When creating a UI theme for Antora, there are certain elements in the UI that require support from the CSS to work correctly. +This list includes elements in the shell (i.e., frame) and in the document content. +This document identifies these UI elements. + +//== UI Shell + +// TODO : + +== Document Content + +The HTML in the main content area is generated from AsciiDoc using Asciidoctor. +AsciiDoc has numerous content elements that require assistance from CSS to render properly. + +These elements include: + +* xref:inline-text-styles.adoc[Inline text emphasis] +* xref:admonition-styles.adoc[Admonitions] +* xref:list-styles.adoc[Lists] +* xref:sidebar-styles.adoc[Sidebars] +* xref:ui-macro-styles.adoc[Button, keybinding, and menu UI macros] diff --git a/doc/doc-ui/docs/modules/ROOT/pages/stylesheets.adoc b/doc/doc-ui/docs/modules/ROOT/pages/stylesheets.adoc new file mode 100644 index 0000000..aff5316 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/stylesheets.adoc @@ -0,0 +1,29 @@ += Work with the CSS Stylesheets + +The stylesheets are written in CSS. +These stylesheets utilize CSS variables to keep the CSS DRY and easy to customize. + +== Stylesheet organization and processing + +Within the default UI project, the stylesheet files are separated into modules to help organize the rules and make them easier to find. +The UI build combines and minifies these files into a single file named [.path]_site.css_. +During the build, the CSS is enhanced using PostCSS in much the same way as a CSS preprocessor works, only the modifications are made to the CSS directly. +The modifications mostly center around injecting vendor prefixes for compatibility or backporting new features to more broadly supported syntax. + +== Add a new CSS rule + +Let's consider the case when you want to modify the font size of a section title. + +First, make sure you have set up the project and created a development branch. +Next, open the file [.path]_src/css/doc.css_ and modify the rule for the section title. + +[source,css] +---- +.doc h1 { + font-size: 2.5rem; + margin-bottom: 1rem; + margin-top: 2rem +} +---- + +Save the file, commit it to git, push the branch, and allow the approval workflow to play out. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/templates.adoc b/doc/doc-ui/docs/modules/ROOT/pages/templates.adoc new file mode 100644 index 0000000..5cb9257 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/templates.adoc @@ -0,0 +1,222 @@ += Work with the Handlebars Templates + +Antora combines the Handlebars templates with the converted AsciiDoc content and other UI model data to make the pages in the site. +These "`logic-less`" templates are mostly HTML with some special mustache tags sprinkled in where content should be inserted. + +== What do the templates do? + +The layout templates, which are stored in [.path]_src/layouts/_, provide the main page structure. +The partial templates, in [.path]_src/partials/_, fill in different regions of a page, such as the navigation and footer. + +The templates read from a model that's populated by Antora. +The model can be accessed by enclosing path expressions in mustaches, which are `{{` and `}}` or `{{{` and `}}}` (e.g., `+{{{page.title}}}+`). +The double mustaches escape the value for HTML, whereas triple mustaches insert the value as is. + +WARNING: If the mustaches are preceded by a backslash (e.g, `\{{`), the expression will be disabled. +This often comes up when constructing URLs. +To avoid this problem, you should use forward slashes in URLs instead of backslashes. + +When `{{` is immediately followed by `>`, that invokes a partial (from the partials directory) and inserts the result (e.g., `+{{> head}}+`. +In other words, that's not a model reference like the other mustache expressions. + +=== Template variables + +CAUTION: This model is not final. +Variable names and purposes may change. + +Here's an overview of the available UI model: + +.Variables available to the Handlebars templates (top-level variables in bold) +[#template-variables-ref,cols="1m,2"] +|=== +| Name | Description + +s| [[site]]site +| Information about the site. + +| site.url +| The base URL of the site, if specified in the playbook. +If a site start page is defined, the visitor will be redirected from this location to the start page. + +| site.path +| The pathname (i.e., subpath) of the site.url under which the site is hosted (e.g., /docs). +This value is empty if site.url is not defined, has no path segment, or matches /. +Can be dropped from the site.url value using a helper (e.g., `deleteSuffix site.url site.path`) +Can be prepended to `page.url` to create a root-relative URL for a page (e.g., `+{{{site.path}}}{{{page.url}}}+`). +(since Antora 2.1) + +| site.title +| The title of the site. + +| site.homeUrl +| The URL that points directly to the start (aka home) page of the site. + +| site.components +| A map of all the components in the site, keyed by component name. +Properties of each component include name, title, url, latest, and versions. +Properties of each version include name (since 2.3), version, displayVersion, prerelease (if set), title, url, asciidoc (since 2.3), and navigation. +The navigation property on each version provides access to the navigation menu for that component version. + +| site.ui +| Information about the site UI. + +| site.ui.defaultLayout +| The default page layout used for this site. + +| site.ui.url +| The absolute base URL of the UI. + +s| [[page]]page +| Information about the current page. + +| page.title +| The page title in HTML format (often used as the primary heading). +This value may include inline HTML elements and XML character references. + +| page.contents +| The main article content in HTML format. +Sourced from AsciiDoc and converted to HTML by the Asciidoctor processor. + +| page.attributes +| Any AsciiDoc document attribute prefixed with `page-`. +The `page-` prefix is dropped from the name used in this model. +For example, the value of the document attribute named `page-support-phone` can be accessed via the UI model using `page.attributes.support-phone`. +Page attributes can be defined per page in the AsciiDoc document header (e.g., `:page-support-phone: +1 212-555-1234`) or globally in the playbook under the key `asciidoc.attributes`. +The `page-` prefix is used to isolate page-related attributes from the numerous other document attributes in AsciiDoc. + +| page.author +| The first author of the document, if one or more authors are specified in the AsciiDoc header. + +| page.description +| The text of the description attribute in the AsciiDoc header, if specified. + +| page.keywords +| A comma-separated list of keywords defined in the AsciiDoc header, if specified. + +| page.component +| Information about the component for the current page. +Properties include name, title, url, latest, and versions. + +| page.componentVersion +| Information about the component version for the current page. +Properties include name (since 2.3), version, displayVersion, prerelease (if set), title, url, and asciidoc (since 2.3). + +| page.module +| The name of the module for the current page. + +| page.relativeSrcPath +| The path of the current page relative to the pages directory in the current module (since 2.3). + +| page.version +| The name of the version for the current page. + +| page.displayVersion +| The name of the display version for the current page. + +| page.versions +| All versions of the current page, including the current page. +Each entry has the properties url, string, and missing. + +| page.latest +| The entry from `page.versions` that corresponds to the latest version available of this page. +The latest page may not come from the latest version of the component (if the page is missing in that version). +This property is not set if this page is in a versionless component. + +| page.breadcrumbs +| An array of breadcrumb items that represent the current selection in the navigation tree. +Includes text-only and external items. + +| page.navigation +| The hierarchical navigation menu for the component version of the current page. +Each navigation item contains the property `content` as well as the optional properties `url` and (child) `items`. + +| page.url +| The URL for the current page. +This value is a root-relative path. +It's often used as the base URL to generate relative URLs from this page. + +| page.canonicalUrl +| The canonical URL for the current page. +The canonicalUrl is only set if site.url is set to an absolute URL and the page's component has at least one non-prerelease version. +If there are multiple versions of the component, the canonical URL is the qualified URL of the most recent, non-prerelease version of the page. +If there's only a single version of the component, the canonical URL is the qualified URL of the current page. + +| page.editUrl +| The URL to edit the current page (i.e., activates the web-based editor on the git host). +This value is derived automatically for the hosts github.com, gitlab.com, pagure.io, and bitbucket.org, even if the repository is private. +If the host is not recognized, or you want to customize the value, you can use the `edit_url` key on the content source in the playbook. + +The default UI shows an "Edit this Page" link that points to this URL unless the repository is private (i.e., `page.origin.private` is truthy) or `page.fileUri` is set. +You can force this link to be shown by setting the environment variable `FORCE_SHOW_EDIT_PAGE_LINK` (e.g., `FORCE_SHOW_EDIT_PAGE_LINK=true`) or by customizing the logic in the UI template. + +| page.fileUri +| The local file:// URI to edit the current page if the page originates from the local filesystem (i.e., the worktree). + +If this property is set, the default UI shows an "Edit this Page" link that points to this URI (instead of the `page.editUrl` value) unless the `CI` environment variable is set (e.g., `CI=true`). +When the `CI` environment variable is set, the default UI ignores this property (since linking to a local file:// URI in a published site doesn't make any sense). + +| page.origin +| Information about the content source from which the current page was taken. +Properties include url, reftype (since 3.1), refname, branch, tag, refhash (since 2.3), startPath, worktree, webUrl, fileUriPattern, editUrlPattern, private. + +| page.origin.private +| This value will be `auth-required` if the git server requests authentication credentials, otherwise `auth-embedded` if credentials are embedded in the content source URL in the playbook, otherwise unset. +In the default UI, if this value is truthy, the "Edit this Page" link is not shown. +A quick way to force this property to be truthy (even if the repository is public) is to begin the content source URL in the playbook with empty credentials, as in `\https://@`. +Then, the "Edit the Page" link will not appear. + +| page.home +| Indicates whether the current page is the start (aka home) page of the site. + +| page.layout +| The page layout for the current page. + +| page.next +| The next reachable page in the navigation tree (skips past text-only and external items). + +| page.previous +| The previous reachable page in the navigation tree (skips past text-only and external items). + +| page.parent +| The parent page in the navigation tree (skips past text-only and external items). + +s| env +| The map of environment variables (sourced from `process.env`). + +s| siteRootPath +| The relative path to the root of the published site. +If a site start page is defined, the visitor will be redirected from this location to the start page. +Can be used as a fallback when a site URL is not set. +This value is _root-relative_ in the 404 page template, which is required for the 404 page to work correctly when served by the web server. + +s| uiRootPath +| The relative path to the root directory of the UI. +This value is _root-relative_ in the 404 page template, which is required for the 404 page to work correctly when served by the web server. + +s| antoraVersion +| The version of Antora used to build the site (specifically the version of the @antora/page-composer package). + +s| contentCatalog +| A proxy object around Antora's virtual content catalog, which provides access to components, component versions, pages, and resource files. +Exposes the following methods: `findBy`, `getById`, `getComponent`, `getComponentVersion`, `getComponents`, `getComponentsSortedBy`, `getFiles`, `getPages`, `getSiteStartPage`, `resolvePage`, and `resolveResource`. +*This object should only be used from a UI helper.* +|=== + +This model is likely to grow over time. + +== Modify a template + +Let's consider the case when you want to add a new meta tag inside the HTML head. + +First, make sure you have set up the project and created a development branch. +Next, open the file [.path]_templates/partials/head.hbs_ and add your tag. + +[source,html] +---- + +---- + +Each template file has access to the template model, which exposes information about the current page through variable names. +The variables currently available are listed in <>. + +Save the file, commit it to git, push the branch, and allow the approval workflow to play out. diff --git a/doc/doc-ui/docs/modules/ROOT/pages/ui-macro-styles.adoc b/doc/doc-ui/docs/modules/ROOT/pages/ui-macro-styles.adoc new file mode 100644 index 0000000..eaa4e17 --- /dev/null +++ b/doc/doc-ui/docs/modules/ROOT/pages/ui-macro-styles.adoc @@ -0,0 +1,62 @@ += UI Macro Styles +:navtitle: UI Macros + +Asciidoctor supports xref:antora:asciidoc:ui-macros.adoc[three UI element representations] out of the box, which are made from corresponding inline UI macros. + +* button (btn macro) +* keybinding (kbd macro) +* menu (menu macro) + +The UI elements are output using semantic HTML elements, so they inherit some default styling from the browser. +However, to look proper, they require some additional styling. + +== Button + +A xref:antora:asciidoc:ui-macros.adoc#button[button] is meant to represent an on-screen button (`+btn:[Save]+`). +However, it should not appear like an actual button as that could confuse the reader into thinking it's interactive. +Therefore, a button is rendered as a bold text by default: + +[source,html] +---- +Save +---- + +Traditionally, a button reference is styled by surrounding the text with square brackets, as shown here: + +btn:[Save] + +== Keybinding + +A xref:antora:asciidoc:ui-macros.adoc#keybinding[keybinding] can be a single key (`+kbd:[F11]+`) or a sequence of keys (`+kbd:[Ctrl+F]`). +Here's the HTML that's generated for these two forms. + +[source,html] +---- +F11 +Ctrl+F +---- + +Here's how these might appear: + +[%hardbreaks] +kbd:[F11] +kbd:[Ctrl+F] + +== Menu + +A xref:antora:asciidoc:ui-macros.adoc#menu[menu] can be a top-level menu reference (`+menu:File[]+`) or a nested selection (`+menu:File[Save]+`). +Here's the HTML that's generated for these two forms. + +[source,html] +---- +File +File  Save +---- + +This might be rendered as: + +menu:File[] + +menu:File[Save] + +The default styling applied to a menu reference is usually sufficient. diff --git a/doc/doc-ui/gulp.d/lib/create-task.js b/doc/doc-ui/gulp.d/lib/create-task.js new file mode 100644 index 0000000..8c90062 --- /dev/null +++ b/doc/doc-ui/gulp.d/lib/create-task.js @@ -0,0 +1,24 @@ +'use strict' + +const metadata = require('undertaker/lib/helpers/metadata') +const { watch } = require('gulp') + +module.exports = ({ name, desc, opts, call: fn, loop }) => { + if (name) { + const displayName = fn.displayName + if (displayName === '' || displayName === '') { + metadata.get(fn).tree.label = `${displayName} ${name}` + } + fn.displayName = name + } + if (loop) { + const delegate = fn + name = delegate.displayName + delegate.displayName = `${name}:loop` + fn = () => watch(loop, { ignoreInitial: false }, delegate) + fn.displayName = name + } + if (desc) fn.description = desc + if (opts) fn.flags = opts + return fn +} diff --git a/doc/doc-ui/gulp.d/lib/export-tasks.js b/doc/doc-ui/gulp.d/lib/export-tasks.js new file mode 100644 index 0000000..7c9de48 --- /dev/null +++ b/doc/doc-ui/gulp.d/lib/export-tasks.js @@ -0,0 +1,14 @@ +'use strict' + +module.exports = (...tasks) => { + const seed = {} + if (tasks.length) { + if (tasks.lastIndexOf(tasks[0]) > 0) { + const task1 = tasks.shift() + seed.default = Object.assign(task1.bind(null), { description: `=> ${task1.displayName}`, displayName: 'default' }) + } + return tasks.reduce((acc, it) => (acc[it.displayName || it.name] = it) && acc, seed) + } else { + return seed + } +} diff --git a/doc/doc-ui/gulp.d/lib/gulp-prettier-eslint.js b/doc/doc-ui/gulp.d/lib/gulp-prettier-eslint.js new file mode 100644 index 0000000..fe674da --- /dev/null +++ b/doc/doc-ui/gulp.d/lib/gulp-prettier-eslint.js @@ -0,0 +1,44 @@ +'use strict' + +const log = require('fancy-log') +const PluginError = require('plugin-error') +const prettierEslint = require('prettier-eslint') +const { Transform } = require('stream') +const map = (transform) => new Transform({ objectMode: true, transform }) + +module.exports = () => { + const report = { changed: 0, unchanged: 0 } + return map(format).on('finish', () => { + if (report.changed > 0) { + const changed = 'formatted ' + .concat(report.changed) + .concat(' file') + .concat(report.changed === 1 ? '' : 's') + const unchanged = 'left ' + .concat(report.unchanged) + .concat(' file') + .concat(report.unchanged === 1 ? '' : 's') + .concat(' unchanged') + log(`prettier-eslint: ${changed}; ${unchanged}`) + } else { + log(`prettier-eslint: left ${report.unchanged} file${report.unchanged === 1 ? '' : 's'} unchanged`) + } + }) + + function format (file, enc, next) { + if (file.isNull()) return next() + if (file.isStream()) return next(new PluginError('gulp-prettier-eslint', 'Streaming not supported')) + + const input = file.contents.toString() + const output = prettierEslint({ text: input, filePath: file.path }) + + if (input === output) { + report.unchanged += 1 + } else { + report.changed += 1 + file.contents = Buffer.from(output) + } + + next(null, file) + } +} diff --git a/doc/doc-ui/gulp.d/tasks/build-preview-pages.js b/doc/doc-ui/gulp.d/tasks/build-preview-pages.js new file mode 100644 index 0000000..364f561 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/build-preview-pages.js @@ -0,0 +1,148 @@ +'use strict' + +const Asciidoctor = require('@asciidoctor/core')() +const fs = require('fs-extra') +const handlebars = require('handlebars') +const merge = require('merge-stream') +const ospath = require('path') +const path = ospath.posix +const requireFromString = require('require-from-string') +const { Transform } = require('stream') +const map = (transform = () => {}, flush = undefined) => new Transform({ objectMode: true, transform, flush }) +const vfs = require('vinyl-fs') +const yaml = require('js-yaml') + +const ASCIIDOC_ATTRIBUTES = { experimental: '', icons: 'font', sectanchors: '', 'source-highlighter': 'highlight.js' } + +module.exports = (src, previewSrc, previewDest, sink = () => map()) => (done) => + Promise.all([ + loadSampleUiModel(previewSrc), + toPromise( + merge(compileLayouts(src), registerPartials(src), registerHelpers(src), copyImages(previewSrc, previewDest)) + ), + ]) + .then(([baseUiModel, { layouts }]) => { + const extensions = ((baseUiModel.asciidoc || {}).extensions || []).map((request) => { + ASCIIDOC_ATTRIBUTES[request.replace(/^@|\.js$/, '').replace(/[/]/g, '-') + '-loaded'] = '' + const extension = require(request) + extension.register.call(Asciidoctor.Extensions) + return extension + }) + const asciidoc = { extensions } + for (const component of baseUiModel.site.components) { + for (const version of component.versions || []) version.asciidoc = asciidoc + } + baseUiModel = { ...baseUiModel, env: process.env } + delete baseUiModel.asciidoc + return [baseUiModel, layouts] + }) + .then(([baseUiModel, layouts]) => + vfs + .src('**/*.adoc', { base: previewSrc, cwd: previewSrc }) + .pipe( + map((file, enc, next) => { + const siteRootPath = path.relative(ospath.dirname(file.path), ospath.resolve(previewSrc)) + const uiModel = { ...baseUiModel } + uiModel.page = { ...uiModel.page } + uiModel.siteRootPath = siteRootPath + uiModel.uiRootPath = path.join(siteRootPath, '_') + if (file.stem === '404') { + uiModel.page = { layout: '404', title: 'Page Not Found' } + } else { + const doc = Asciidoctor.load(file.contents, { safe: 'safe', attributes: ASCIIDOC_ATTRIBUTES }) + uiModel.page.attributes = Object.entries(doc.getAttributes()) + .filter(([name, val]) => name.startsWith('page-')) + .reduce((accum, [name, val]) => { + accum[name.substr(5)] = val + return accum + }, {}) + uiModel.page.layout = doc.getAttribute('page-layout', 'default') + uiModel.page.title = doc.getDocumentTitle() + uiModel.page.contents = Buffer.from(doc.convert()) + } + file.extname = '.html' + try { + file.contents = Buffer.from(layouts.get(uiModel.page.layout)(uiModel)) + next(null, file) + } catch (e) { + next(transformHandlebarsError(e, uiModel.page.layout)) + } + }) + ) + .pipe(vfs.dest(previewDest)) + .on('error', done) + .pipe(sink()) + ) + +function loadSampleUiModel (src) { + return fs.readFile(ospath.join(src, 'ui-model.yml'), 'utf8').then((contents) => yaml.safeLoad(contents)) +} + +function registerPartials (src) { + return vfs.src('partials/*.hbs', { base: src, cwd: src }).pipe( + map((file, enc, next) => { + handlebars.registerPartial(file.stem, file.contents.toString()) + next() + }) + ) +} + +function registerHelpers (src) { + handlebars.registerHelper('resolvePage', resolvePage) + handlebars.registerHelper('resolvePageURL', resolvePageURL) + return vfs.src('helpers/*.js', { base: src, cwd: src }).pipe( + map((file, enc, next) => { + handlebars.registerHelper(file.stem, requireFromString(file.contents.toString())) + next() + }) + ) +} + +function compileLayouts (src) { + const layouts = new Map() + return vfs.src('layouts/*.hbs', { base: src, cwd: src }).pipe( + map( + (file, enc, next) => { + const srcName = path.join(src, file.relative) + layouts.set(file.stem, handlebars.compile(file.contents.toString(), { preventIndent: true, srcName })) + next() + }, + function (done) { + this.push({ layouts }) + done() + } + ) + ) +} + +function copyImages (src, dest) { + return vfs + .src('**/*.{png,svg}', { base: src, cwd: src }) + .pipe(vfs.dest(dest)) + .pipe(map((file, enc, next) => next())) +} + +function resolvePage (spec, context = {}) { + if (spec) return { pub: { url: resolvePageURL(spec) } } +} + +function resolvePageURL (spec, context = {}) { + if (spec) return '/' + (spec = spec.split(':').pop()).slice(0, spec.lastIndexOf('.')) + '.html' +} + +function transformHandlebarsError ({ message, stack }, layout) { + const m = stack.match(/^ *at Object\.ret \[as (.+?)\]/m) + const templatePath = `src/${m ? 'partials/' + m[1] : 'layouts/' + layout}.hbs` + const err = new Error(`${message}${~message.indexOf('\n') ? '\n^ ' : ' '}in UI template ${templatePath}`) + err.stack = [err.toString()].concat(stack.substr(message.length + 8)).join('\n') + return err +} + +function toPromise (stream) { + return new Promise((resolve, reject, data = {}) => + stream + .on('error', reject) + .on('data', (chunk) => chunk.constructor === Object && Object.assign(data, chunk)) + .on('finish', () => resolve(data)) + ) +} diff --git a/doc/doc-ui/gulp.d/tasks/build.js b/doc/doc-ui/gulp.d/tasks/build.js new file mode 100644 index 0000000..dab295b --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/build.js @@ -0,0 +1,136 @@ +'use strict' + +const autoprefixer = require('autoprefixer') +const browserify = require('browserify') +const concat = require('gulp-concat') +const cssnano = require('cssnano') +const fs = require('fs-extra') +const imagemin = require('gulp-imagemin') +const merge = require('merge-stream') +const ospath = require('path') +const path = ospath.posix +const postcss = require('gulp-postcss') +const postcssCalc = require('postcss-calc') +const postcssImport = require('postcss-import') +const postcssUrl = require('postcss-url') +const postcssVar = require('postcss-custom-properties') +const { Transform } = require('stream') +const map = (transform) => new Transform({ objectMode: true, transform }) +const through = () => map((file, enc, next) => next(null, file)) +const uglify = require('gulp-uglify') +const vfs = require('vinyl-fs') + +module.exports = (src, dest, preview) => () => { + const opts = { base: src, cwd: src } + const sourcemaps = preview || process.env.SOURCEMAPS === 'true' + const postcssPlugins = [ + postcssImport, + (css, { messages, opts: { file } }) => + Promise.all( + messages + .reduce((accum, { file: depPath, type }) => (type === 'dependency' ? accum.concat(depPath) : accum), []) + .map((importedPath) => fs.stat(importedPath).then(({ mtime }) => mtime)) + ).then((mtimes) => { + const newestMtime = mtimes.reduce((max, curr) => (!max || curr > max ? curr : max), file.stat.mtime) + if (newestMtime > file.stat.mtime) file.stat.mtimeMs = +(file.stat.mtime = newestMtime) + }), + postcssUrl([ + { + filter: (asset) => new RegExp('^[~][^/]*(?:font|typeface)[^/]*/.*/files/.+[.](?:ttf|woff2?)$').test(asset.url), + url: (asset) => { + const relpath = asset.pathname.substr(1) + const abspath = require.resolve(relpath) + const basename = ospath.basename(abspath) + const destpath = ospath.join(dest, 'font', basename) + if (!fs.pathExistsSync(destpath)) fs.copySync(abspath, destpath) + return path.join('..', 'font', basename) + }, + }, + ]), + postcssVar({ preserve: preview }), + // NOTE to make vars.css available to all top-level stylesheets, use the next line in place of the previous one + //postcssVar({ importFrom: path.join(src, 'css', 'vars.css'), preserve: preview }), + preview ? postcssCalc : () => {}, // cssnano already applies postcssCalc + autoprefixer, + preview + ? () => {} + : (css, result) => cssnano({ preset: 'default' })(css, result).then(() => postcssPseudoElementFixer(css, result)), + ] + + return merge( + vfs.src('ui.yml', { ...opts, allowEmpty: true }), + vfs + .src('js/+([0-9])-*.js', { ...opts, read: false, sourcemaps }) + .pipe(bundle(opts)) + .pipe(uglify({ output: { comments: /^! / } })) + // NOTE concat already uses stat from newest combined file + .pipe(concat('js/site.js')), + vfs + .src('js/vendor/*([^.])?(.bundle).js', { ...opts, read: false }) + .pipe(bundle(opts)) + .pipe(uglify({ output: { comments: /^! / } })), + vfs + .src('js/vendor/*.min.js', opts) + .pipe(map((file, enc, next) => next(null, Object.assign(file, { extname: '' }, { extname: '.js' })))), + // NOTE use the next line to bundle a JavaScript library that cannot be browserified, like jQuery + //vfs.src(require.resolve(''), opts).pipe(concat('js/vendor/.js')), + vfs + .src(['css/site.css', 'css/vendor/*.css'], { ...opts, sourcemaps }) + .pipe(postcss((file) => ({ plugins: postcssPlugins, options: { file } }))), + vfs.src('font/*.{ttf,woff*(2)}', opts), + vfs.src('img/**/*.{gif,ico,jpg,png,svg}', opts).pipe( + preview + ? through() + : imagemin( + [ + imagemin.gifsicle(), + imagemin.jpegtran(), + imagemin.optipng(), + imagemin.svgo({ + plugins: [ + { cleanupIDs: { preservePrefixes: ['icon-', 'view-'] } }, + { removeViewBox: false }, + { removeDesc: false }, + ], + }), + ].reduce((accum, it) => (it ? accum.concat(it) : accum), []) + ) + ), + vfs.src('helpers/*.js', opts), + vfs.src('layouts/*.hbs', opts), + vfs.src('partials/*.hbs', opts), + vfs.src('static/**/*[!~]', { ...opts, base: ospath.join(src, 'static'), dot: true }) + ).pipe(vfs.dest(dest, { sourcemaps: sourcemaps && '.' })) +} + +function bundle ({ base: basedir, ext: bundleExt = '.bundle.js' }) { + return map((file, enc, next) => { + if (bundleExt && file.relative.endsWith(bundleExt)) { + const mtimePromises = [] + const bundlePath = file.path + browserify(file.relative, { basedir, detectGlobals: false }) + .plugin('browser-pack-flat/plugin') + .on('file', (bundledPath) => { + if (bundledPath !== bundlePath) mtimePromises.push(fs.stat(bundledPath).then(({ mtime }) => mtime)) + }) + .bundle((bundleError, bundleBuffer) => + Promise.all(mtimePromises).then((mtimes) => { + const newestMtime = mtimes.reduce((max, curr) => (curr > max ? curr : max), file.stat.mtime) + if (newestMtime > file.stat.mtime) file.stat.mtimeMs = +(file.stat.mtime = newestMtime) + if (bundleBuffer !== undefined) file.contents = bundleBuffer + next(bundleError, Object.assign(file, { path: file.path.slice(0, file.path.length - 10) + '.js' })) + }) + ) + return + } + fs.readFile(file.path, 'UTF-8').then((contents) => { + next(null, Object.assign(file, { contents: Buffer.from(contents) })) + }) + }) +} + +function postcssPseudoElementFixer (css, result) { + css.walkRules(/(?:^|[^:]):(?:before|after)/, (rule) => { + rule.selector = rule.selectors.map((it) => it.replace(/(^|[^:]):(before|after)$/, '$1::$2')).join(',') + }) +} diff --git a/doc/doc-ui/gulp.d/tasks/format.js b/doc/doc-ui/gulp.d/tasks/format.js new file mode 100644 index 0000000..2d50496 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/format.js @@ -0,0 +1,10 @@ +'use strict' + +const prettier = require('../lib/gulp-prettier-eslint') +const vfs = require('vinyl-fs') + +module.exports = (files) => () => + vfs + .src(files) + .pipe(prettier()) + .pipe(vfs.dest((file) => file.base)) diff --git a/doc/doc-ui/gulp.d/tasks/index.js b/doc/doc-ui/gulp.d/tasks/index.js new file mode 100644 index 0000000..a5795fc --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/index.js @@ -0,0 +1,5 @@ +'use strict' + +const camelCase = (name) => name.replace(/[-]./g, (m) => m.substr(1).toUpperCase()) + +module.exports = require('require-directory')(module, __dirname, { recurse: false, rename: camelCase }) diff --git a/doc/doc-ui/gulp.d/tasks/lint-css.js b/doc/doc-ui/gulp.d/tasks/lint-css.js new file mode 100644 index 0000000..d684014 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/lint-css.js @@ -0,0 +1,10 @@ +'use strict' + +const stylelint = require('gulp-stylelint') +const vfs = require('vinyl-fs') + +module.exports = (files) => (done) => + vfs + .src(files) + .pipe(stylelint({ reporters: [{ formatter: 'string', console: true }], failAfterError: true })) + .on('error', done) diff --git a/doc/doc-ui/gulp.d/tasks/lint-js.js b/doc/doc-ui/gulp.d/tasks/lint-js.js new file mode 100644 index 0000000..ef4f3c9 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/lint-js.js @@ -0,0 +1,12 @@ +'use strict' + +const eslint = require('gulp-eslint') +const vfs = require('vinyl-fs') + +module.exports = (files) => (done) => + vfs + .src(files) + .pipe(eslint()) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()) + .on('error', done) diff --git a/doc/doc-ui/gulp.d/tasks/pack.js b/doc/doc-ui/gulp.d/tasks/pack.js new file mode 100644 index 0000000..a792e72 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/pack.js @@ -0,0 +1,11 @@ +'use strict' + +const vfs = require('vinyl-fs') +const zip = require('gulp-vinyl-zip') +const path = require('path') + +module.exports = (src, dest, bundleName, onFinish) => () => + vfs + .src('**/*', { base: src, cwd: src }) + .pipe(zip.dest(path.join(dest, `${bundleName}-bundle.zip`))) + .on('finish', () => onFinish && onFinish(path.resolve(dest, `${bundleName}-bundle.zip`))) diff --git a/doc/doc-ui/gulp.d/tasks/remove.js b/doc/doc-ui/gulp.d/tasks/remove.js new file mode 100644 index 0000000..71a8dac --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/remove.js @@ -0,0 +1,9 @@ +'use strict' + +const fs = require('fs-extra') +const { Transform } = require('stream') +const map = (transform) => new Transform({ objectMode: true, transform }) +const vfs = require('vinyl-fs') + +module.exports = (files) => () => + vfs.src(files, { allowEmpty: true }).pipe(map((file, enc, next) => fs.remove(file.path, next))) diff --git a/doc/doc-ui/gulp.d/tasks/serve.js b/doc/doc-ui/gulp.d/tasks/serve.js new file mode 100644 index 0000000..942c673 --- /dev/null +++ b/doc/doc-ui/gulp.d/tasks/serve.js @@ -0,0 +1,36 @@ +'use strict' + +const connect = require('gulp-connect') +const os = require('os') + +const ANY_HOST = '0.0.0.0' +const URL_RX = /(https?):\/\/(?:[^/: ]+)(:\d+)?/ + +module.exports = (root, opts = {}, watch = undefined) => (done) => { + connect.server({ ...opts, middleware: opts.host === ANY_HOST ? decorateLog : undefined, root }, function () { + this.server.on('close', done) + if (watch) watch() + }) +} + +function decorateLog (_, app) { + const _log = app.log + app.log = (msg) => { + if (msg.startsWith('Server started ')) { + const localIp = getLocalIp() + const replacement = '$1://localhost$2' + (localIp ? ` and $1://${localIp}$2` : '') + msg = msg.replace(URL_RX, replacement) + } + _log(msg) + } + return [] +} + +function getLocalIp () { + for (const records of Object.values(os.networkInterfaces())) { + for (const record of records) { + if (!record.internal && record.family === 'IPv4') return record.address + } + } + return 'localhost' +} diff --git a/doc/doc-ui/gulpfile.js b/doc/doc-ui/gulpfile.js new file mode 100644 index 0000000..25ce769 --- /dev/null +++ b/doc/doc-ui/gulpfile.js @@ -0,0 +1,125 @@ +'use strict' + +const { parallel, series, watch } = require('gulp') +const createTask = require('./gulp.d/lib/create-task') +const exportTasks = require('./gulp.d/lib/export-tasks') +const log = require('fancy-log') + +const bundleName = 'ui' +const buildDir = 'build' +const previewSrcDir = 'preview-src' +const previewDestDir = 'public' +const srcDir = 'src' +const destDir = `${previewDestDir}/_` +const { reload: livereload } = process.env.LIVERELOAD === 'true' ? require('gulp-connect') : {} +const serverConfig = { host: '0.0.0.0', port: 5252, livereload } + +const task = require('./gulp.d/tasks') +const glob = { + all: [srcDir, previewSrcDir], + css: `${srcDir}/css/**/*.css`, + js: ['gulpfile.js', 'gulp.d/**/*.js', `${srcDir}/{helpers,js}/**/*.js`], +} + +const cleanTask = createTask({ + name: 'clean', + desc: 'Clean files and folders generated by build', + call: task.remove(['build', 'public']), +}) + +const lintCssTask = createTask({ + name: 'lint:css', + desc: 'Lint the CSS source files using stylelint (standard config)', + call: task.lintCss(glob.css), +}) + +const lintJsTask = createTask({ + name: 'lint:js', + desc: 'Lint the JavaScript source files using eslint (JavaScript Standard Style)', + call: task.lintJs(glob.js), +}) + +const lintTask = createTask({ + name: 'lint', + desc: 'Lint the CSS and JavaScript source files', + call: parallel(lintCssTask, lintJsTask), +}) + +const formatTask = createTask({ + name: 'format', + desc: 'Format the JavaScript source files using prettify (JavaScript Standard Style)', + call: task.format(glob.js), +}) + +const buildTask = createTask({ + name: 'build', + desc: 'Build and stage the UI assets for bundling', + call: task.build( + srcDir, + destDir, + process.argv.slice(2).some((name) => name.startsWith('preview')) + ), +}) + +const bundleBuildTask = createTask({ + name: 'bundle:build', + call: series(cleanTask, lintTask, buildTask), +}) + +const bundlePackTask = createTask({ + name: 'bundle:pack', + desc: 'Create a bundle of the staged UI assets for publishing', + call: task.pack( + destDir, + buildDir, + bundleName, + (bundlePath) => !process.env.CI && log(`Antora option: --ui-bundle-url=${bundlePath}`) + ), +}) + +const bundleTask = createTask({ + name: 'bundle', + desc: 'Clean, lint, build, and bundle the UI for publishing', + call: series(bundleBuildTask, bundlePackTask), +}) + +const packTask = createTask({ + name: 'pack', + desc: '(deprecated; use bundle instead)', + call: series(bundleTask), +}) + +const buildPreviewPagesTask = createTask({ + name: 'preview:build-pages', + call: task.buildPreviewPages(srcDir, previewSrcDir, previewDestDir, livereload), +}) + +const previewBuildTask = createTask({ + name: 'preview:build', + desc: 'Process and stage the UI assets and generate pages for the preview', + call: parallel(buildTask, buildPreviewPagesTask), +}) + +const previewServeTask = createTask({ + name: 'preview:serve', + call: task.serve(previewDestDir, serverConfig, () => watch(glob.all, previewBuildTask)), +}) + +const previewTask = createTask({ + name: 'preview', + desc: 'Generate a preview site and launch a server to view it', + call: series(previewBuildTask, previewServeTask), +}) + +module.exports = exportTasks( + bundleTask, + cleanTask, + lintTask, + formatTask, + buildTask, + bundleTask, + bundlePackTask, + previewTask, + previewBuildTask, + packTask +) diff --git a/doc/doc-ui/index.js b/doc/doc-ui/index.js new file mode 100644 index 0000000..5e8208e --- /dev/null +++ b/doc/doc-ui/index.js @@ -0,0 +1,4 @@ +'use strict' + +// This placeholder script allows this package to be discovered using require.resolve. +// It may be used in the future to export information about the files in this UI. diff --git a/doc/doc-ui/package.json b/doc/doc-ui/package.json new file mode 100644 index 0000000..7c16817 --- /dev/null +++ b/doc/doc-ui/package.json @@ -0,0 +1,49 @@ +{ + "name": "SysOn doc ui", + "description": "SysOn doc ui fork of https://gitlab.com/antora/antora-ui-default", + "devDependencies": { + "@asciidoctor/core": "~2.2", + "@fontsource/roboto": "~4.5", + "@fontsource/roboto-mono": "~4.5", + "@fortawesome/fontawesome-free": "~5.15", + "autoprefixer": "~9.7", + "browser-pack-flat": "~3.4", + "browserify": "~16.5", + "cssnano": "~4.1", + "eslint": "~6.8", + "eslint-config-standard": "~14.1", + "eslint-plugin-import": "~2.20", + "eslint-plugin-node": "~11.1", + "eslint-plugin-promise": "~4.2", + "eslint-plugin-standard": "~4.0", + "fancy-log": "~1.3", + "fs-extra": "~8.1", + "gulp": "~4.0", + "gulp-concat": "~2.6", + "gulp-connect": "~5.7", + "gulp-eslint": "~6.0", + "gulp-imagemin": "~6.2", + "gulp-postcss": "~8.0", + "gulp-stylelint": "~13.0", + "gulp-uglify": "~3.0", + "gulp-vinyl-zip": "~2.2", + "handlebars": "~4.7", + "highlight.js": "9.18.3", + "js-yaml": "~3.13", + "merge-stream": "~2.0", + "postcss-calc": "~7.0", + "postcss-custom-properties": "~9.1", + "postcss-import": "~12.0", + "postcss-url": "~8.0", + "prettier-eslint": "~9.0", + "require-directory": "~2.1", + "require-from-string": "~2.0", + "stylelint": "~13.3", + "stylelint-config-standard": "~20.0", + "vinyl-fs": "~3.0" + }, + "dependencies": { + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1" + } +} diff --git a/doc/doc-ui/preview-src/404.adoc b/doc/doc-ui/preview-src/404.adoc new file mode 100644 index 0000000..e69de29 diff --git a/doc/doc-ui/preview-src/index.adoc b/doc/doc-ui/preview-src/index.adoc new file mode 100644 index 0000000..62a869f --- /dev/null +++ b/doc/doc-ui/preview-src/index.adoc @@ -0,0 +1,337 @@ += Hardware and Software Requirements +Author Name +:idprefix: +:idseparator: - +:!example-caption: +:!table-caption: +:page-pagination: + +[.float-group] +-- +image:multirepo-ssg.svg[Multirepo SSG,180,135,float=right,role=float-gap] +Platonem complectitur mediocritatem ea eos. +Ei nonumy deseruisse ius. +Mel id omnes verear. +Vis no velit audiam, sonet <> eum ne. +*Prompta eripuit* nec ad. +Integer diam enim, dignissim eget eros et, ultricies mattis odio. +-- + +Vestibulum consectetur nec urna a luctus. +Quisque pharetra tristique arcu fringilla dapibus. +https://example.org[Curabitur,role=unresolved] ut massa aliquam, cursus enim et, accumsan lectus. +Mauris eget leo nunc, nec tempus mi? Curabitur id nisl mi, ut vulputate urna. + +== Cu solet + +Nominavi luptatum eos, an vim hinc philosophia intellegebat. +Lorem pertinacia `expetenda` et nec, [.underline]#wisi# illud [.line-through]#sonet# qui ea. +H~2~0. +E = mc^2^. +Eum an doctus <>. +Eu mea inani iriure.footnote:[Quisque porta facilisis tortor, vitae bibendum velit fringilla vitae! Lorem ipsum dolor sit amet, consectetur adipiscing elit.] + +[,json] +---- +{ + "name": "module-name", + "version": "10.0.1", + "description": "An example module to illustrate the usage of package.json", + "author": "Author Name ", + "scripts": { + "test": "mocha", + "lint": "eslint" + } +} +---- + +.Example paragraph syntax +[,asciidoc] +---- +.Optional title +[example] +This is an example paragraph. +---- + +.Optional title +[example] +This is an example paragraph. + +.Summary *Spoiler Alert!* +[%collapsible] +==== +Details. + +Loads of details. +==== + +[,asciidoc] +---- +Voila! +---- + +.Result +[%collapsible.result] +==== +Voila! +==== + +=== Some Code + +How about some code? + +[,js] +---- +vfs + .src('js/vendor/*.js', { cwd: 'src', cwdbase: true, read: false }) + .pipe(tap((file) => { // <.> + file.contents = browserify(file.relative, { basedir: 'src', detectGlobals: false }).bundle() + })) + .pipe(buffer()) // <.> + .pipe(uglify()) + .pipe(gulp.dest('build')) +---- +<.> The `tap` function is used to wiretap the data in the pipe. +<.> Wrap each streaming file in a buffer so the files can be processed by uglify. +Uglify can only work with buffers, not streams. + +Execute these commands to validate and build your site: + + $ podman run -v $PWD:/antora:Z --rm -t antora/antora \ + version + 3.0.0 + $ podman run -v $PWD:/antora:Z --rm -it antora/antora \ + --clean \ + antora-playbook.yml + +Cum dicat #putant# ne. +Est in <> homero principes, meis deleniti mediocrem ad has. +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. + +.... +pom.xml +src/ + main/ + java/ + HelloWorld.java + test/ + java/ + HelloWorldTest.java +.... + +Eu mea munere vituperata constituam. + +[%autowidth] +|=== +|Input | Output | Example + +m|"foo\nbar" +l|foo +bar +a| +[,ruby] +---- +puts "foo\nbar" +---- +|=== + +Here we just have some plain text. + +[source] +---- +plain text +---- + +[.rolename] +=== Liber recusabo + +Select menu:File[Open Project] to open the project in your IDE. +Per ea btn:[Cancel] inimicus. +Ferri kbd:[F11] tacimates constituam sed ex, eu mea munere vituperata kbd:[Ctrl,T] constituam. + +.Sidebar Title +**** +Platonem complectitur mediocritatem ea eos. +Ei nonumy deseruisse ius. +Mel id omnes verear. + +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. +**** + +No sea, at invenire voluptaria mnesarchum has. +Ex nam suas nemore dignissim, vel apeirian democritum et. +At ornatus splendide sed, phaedrum omittantur usu an, vix an noster voluptatibus. + +--- + +.Ordered list with customized numeration +[upperalpha] +. potenti donec cubilia tincidunt +. etiam pulvinar inceptos velit quisque aptent himenaeos +. lacus volutpat semper porttitor aliquet ornare primis nulla enim + +Natum facilisis theophrastus an duo. +No sea, at invenire voluptaria mnesarchum has. + +.Unordered list with customized marker +[square] +* ultricies sociosqu tristique integer +* lacus volutpat semper porttitor aliquet ornare primis nulla enim +* etiam pulvinar inceptos velit quisque aptent himenaeos + +Eu sed antiopam gloriatur. +Ea mea agam graeci philosophia. + +[circle] +* circles +** circles +*** and more circles! + +At ornatus splendide sed, phaedrum omittantur usu an, vix an noster voluptatibus. + +* [ ] todo +* [x] done! + +Vis veri graeci legimus ad. + +sed:: +splendide sed + +mea:: +agam graeci + +Let's look at that another way. + +[horizontal] +sed:: +splendide sed + +mea:: +agam graeci + +At ornatus splendide sed. + +.Library dependencies +[#dependencies%autowidth%footer,stripes=hover] +|=== +|Library |Version + +|eslint +|^1.7.3 + +|eslint-config-gulp +|^2.0.0 + +|expect +|^1.20.2 + +|istanbul +|^0.4.3 + +|istanbul-coveralls +|^1.0.3 + +|jscs +|^2.3.5 + +h|Total +|6 +|=== + +Cum dicat putant ne. +Est in reque homero principes, meis deleniti mediocrem ad has. +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. + +[TIP] +This oughta do it! + +Cum dicat putant ne. +Est in reque homero principes, meis deleniti mediocrem ad has. +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. + +[NOTE] +==== +You've been down _this_ road before. +==== + +Cum dicat putant ne. +Est in reque homero principes, meis deleniti mediocrem ad has. +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. + +[WARNING] +==== +Watch out! +==== + +[CAUTION] +==== +[#inline]#I wouldn't try that if I were you.# +==== + +[IMPORTANT] +==== +Don't forget this step! +==== + +.Key Points to Remember +[TIP] +==== +If you installed the CLI and the default site generator globally, you can upgrade both of them with the same command. + + $ npm i -g @antora/cli @antora/site-generator + +Or you can install the metapackage to upgrade both packages at once. + + $ npm i -g antora +==== + +Nominavi luptatum eos, an vim hinc philosophia intellegebat. +Eu mea inani iriure. + +[discrete] +== Voluptua singulis + +Cum dicat putant ne. +Est in reque homero principes, meis deleniti mediocrem ad has. +Ex nam suas nemore dignissim, vel apeirian democritum et. + +.Antora is a multi-repo documentation site generator +image::multirepo-ssg.svg[Multirepo SSG,3000,opts=interactive] + +Make the switch today! + +.Full Circle with Jake Blauvelt +video::300817511[vimeo,640,360,align=left] + +[#english+中文] +== English + 中文 + +Altera atomorum his ex, has cu elitr melius propriae. +Eos suscipit scaevola at. + +[,'Famous Person. Cum dicat putant ne.','Cum dicat putant ne. https://example.com[Famous Person Website]'] +____ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Mauris eget leo nunc, nec tempus mi? Curabitur id nisl mi, ut vulputate urna. +Quisque porta facilisis tortor, vitae bibendum velit fringilla vitae! +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Mauris eget leo nunc, nec tempus mi? Curabitur id nisl mi, ut vulputate urna. +Quisque porta facilisis tortor, vitae bibendum velit fringilla vitae! +____ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +[verse] +____ +The fog comes +on little cat feet. +____ + +== Fin + +That's all, folks! diff --git a/doc/doc-ui/preview-src/multirepo-ssg.svg b/doc/doc-ui/preview-src/multirepo-ssg.svg new file mode 100644 index 0000000..e3b4429 --- /dev/null +++ b/doc/doc-ui/preview-src/multirepo-ssg.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/doc-ui/preview-src/ui-model.yml b/doc/doc-ui/preview-src/ui-model.yml new file mode 100644 index 0000000..9fa2e1a --- /dev/null +++ b/doc/doc-ui/preview-src/ui-model.yml @@ -0,0 +1,126 @@ +antoraVersion: '1.0.0' +site: + url: http://localhost:5252 + title: Brand Docs + homeUrl: &home_url /xyz/5.2/index.html + components: + - name: abc + title: Project ABC + url: '#' + versions: + - &latest_version_abc + url: '#' + version: '1.1' + displayVersion: '1.1' + - url: '#' + version: '1.0' + displayVersion: '1.0' + latestVersion: *latest_version_abc + - &component + name: xyz + title: &component_title Project XYZ + url: /xyz/6.0/index.html + versions: + - &latest_version_xyz + url: /xyz/6.0/index.html + version: '6.0' + displayVersion: '6.0' + - &component_version + title: *component_title + url: '#' + version: '5.2' + displayVersion: '5.2' + - url: '#' + version: '5.1' + displayVersion: '5.1' + - url: '#' + version: '5.0' + displayVersion: '5.0' + latestVersion: *latest_version_xyz + - name: '123' + title: Project 123 + url: '#' + versions: + - &latest_version_123 + url: '#' + version: '2.2' + displayVersion: '2.2' + - url: '#' + version: '2.1' + displayVersion: '2.1' + - url: '#' + version: '2.0' + displayVersion: '2.0' + latestVersion: *latest_version_123 +page: + url: *home_url + home: true + title: Brand’s Hardware & Software Requirements + component: *component + componentVersion: *component_version + version: '5.2' + displayVersion: '5.2' + module: ROOT + relativeSrcPath: index.adoc + editUrl: http://example.com/project-xyz/blob/main/index.adoc + origin: + private: false + previous: + content: Quickstart + url: '#' + urlType: 'internal' + next: + content: Liber Recusabo + url: '#' + urlType: 'internal' + breadcrumbs: + - content: Quickstart + url: '#' + urlType: fragment + - content: Brand’s Hardware & Software Requirements + url: /xyz/5.2/index.html + urlType: internal + versions: + - version: '6.0' + displayVersion: '6.0' + url: '#' + - version: '5.2' + displayVersion: '5.2' + url: '#' + - version: '5.1' + displayVersion: '5.1' + url: '#' + - version: '5.0' + displayVersion: '5.0' + missing: true + url: '#' + navigation: + - root: true + items: + - content: Quickstart + url: '#' + urlType: fragment + items: + - content: Brand’s Hardware & Software Requirements + url: /xyz/5.2/index.html + urlType: internal + - content: Cu Solet + url: '/xyz/5.2/index.html#cu-solet' + urlType: internal + - content: English + 中文 + url: '/xyz/5.2/index.html#english+中文' + urlType: internal + - content: Liber Recusabo + url: '#liber-recusabo' + urlType: fragment + - content: Reference + items: + - content: Keyboard Shortcuts + url: '#' + urlType: fragment + - content: Importing and Exporting + url: '#' + urlType: fragment + - content: Some Code + url: '/xyz/5.2/index.html#some-code' + urlType: internal diff --git a/doc/doc-ui/src/css/base.css b/doc/doc-ui/src/css/base.css new file mode 100644 index 0000000..cb25a92 --- /dev/null +++ b/doc/doc-ui/src/css/base.css @@ -0,0 +1,149 @@ +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: var(--body-font-size); + height: 100%; + scroll-behavior: smooth; +} + +@media screen and (min-width: 1024px) { + html { + font-size: var(--body-font-size--desktop); + } +} + +body { + background: var(--body-background); + color: var(--body-font-color); + font-family: var(--body-font-family); + line-height: var(--body-line-height); + margin: 0; + tab-size: 4; + word-wrap: anywhere; /* aka overflow-wrap; used when hyphens are disabled or aren't sufficient */ +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:active { + background-color: none; +} + +code, +kbd, +pre { + font-family: var(--monospace-font-family); +} + +b, +dt, +strong, +th { + font-weight: var(--body-font-weight-bold); +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +em em { /* stylelint-disable-line */ + font-style: normal; +} + +strong strong { /* stylelint-disable-line */ + font-weight: normal; +} + +button { + cursor: pointer; + font-family: inherit; + font-size: 1em; + line-height: var(--body-line-height); + margin: 0; +} + +button::-moz-focus-inner { + border: none; + padding: 0; +} + +summary { + cursor: pointer; + -webkit-tap-highlight-color: transparent; + outline: none; +} + +table { + border-collapse: collapse; + word-wrap: normal; /* table widths aren't computed as expected when word-wrap is enabled */ +} + +object[type="image/svg+xml"]:not([width]) { + width: fit-content; +} + +::placeholder { + opacity: 0.5; +} + +@media (pointer: fine) { + @supports (scrollbar-width: thin) { + html { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-track-color); + } + + body * { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) transparent; + } + } + + html::-webkit-scrollbar { + background-color: var(--scrollbar-track-color); + height: 12px; + width: 12px; + } + + body ::-webkit-scrollbar { + height: 6px; + width: 6px; + } + + ::-webkit-scrollbar-thumb { + background-clip: padding-box; + background-color: var(--scrollbar-thumb-color); + border: 3px solid transparent; + border-radius: 12px; + } + + body ::-webkit-scrollbar-thumb { + border-width: 1.75px; + border-radius: 6px; + } + + ::-webkit-scrollbar-thumb:hover { + background-color: var(--scrollbar_hover-thumb-color); + } +} diff --git a/doc/doc-ui/src/css/body.css b/doc/doc-ui/src/css/body.css new file mode 100644 index 0000000..1d4db3d --- /dev/null +++ b/doc/doc-ui/src/css/body.css @@ -0,0 +1,5 @@ +@media screen and (min-width: 1024px) { + .body { + display: flex; + } +} diff --git a/doc/doc-ui/src/css/breadcrumbs.css b/doc/doc-ui/src/css/breadcrumbs.css new file mode 100644 index 0000000..be11140 --- /dev/null +++ b/doc/doc-ui/src/css/breadcrumbs.css @@ -0,0 +1,38 @@ +.breadcrumbs { + display: none; + flex: 1 1; + padding: 0 0.5rem 0 0.75rem; + line-height: var(--nav-line-height); +} + +@media screen and (min-width: 1024px) { + .breadcrumbs { + display: block; + } +} + +a + .breadcrumbs { + padding-left: 0.05rem; +} + +.breadcrumbs ul { + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0; + list-style: none; +} + +.breadcrumbs li { + display: inline; + margin: 0; +} + +.breadcrumbs li::after { + content: "/"; + padding: 0 0.5rem; +} + +.breadcrumbs li:last-of-type::after { + content: none; +} diff --git a/doc/doc-ui/src/css/comment.css b/doc/doc-ui/src/css/comment.css new file mode 100644 index 0000000..5b02e25 --- /dev/null +++ b/doc/doc-ui/src/css/comment.css @@ -0,0 +1,6 @@ +.sidebar .comment { + border-left: 2px solid var(--toc-border-color); + padding-right: 0.75rem; + padding-left: 0.75rem; + margin-top: 1rem; +} diff --git a/doc/doc-ui/src/css/doc.css b/doc/doc-ui/src/css/doc.css new file mode 100644 index 0000000..c286f07 --- /dev/null +++ b/doc/doc-ui/src/css/doc.css @@ -0,0 +1,1027 @@ +.doc { + color: var(--doc-font-color); + font-size: var(--doc-font-size); + hyphens: auto; + line-height: var(--doc-line-height); + margin: var(--doc-margin); + max-width: var(--doc-max-width); + padding: 0 1rem 4rem; +} + +@media screen and (min-width: 1024px) { + .doc { + flex: auto; + font-size: var(--doc-font-size--desktop); + margin: var(--doc-margin--desktop); + max-width: var(--doc-max-width--desktop); + min-width: 0; + } +} + +.doc h1, +.doc h2, +.doc h3, +.doc h4, +.doc h5, +.doc h6 { + color: var(--heading-font-color); + font-weight: var(--heading-font-weight); + hyphens: none; + line-height: 1.3; + margin: 1rem 0 0; +} + +.doc > h1.page:first-child { + font-size: calc(36 / var(--rem-base) * 1rem); + margin: 1.5rem 0; +} + +@media screen and (min-width: 769px) { + .doc > h1.page:first-child { + margin-top: 2.5rem; + } +} + +.doc > h1.page + aside.embedded { + margin-top: -0.5rem; +} + +.doc > h2#name + .sectionbody { + margin-top: 1rem; +} + +#preamble + .sect1, +.doc .sect1 + .sect1 { + margin-top: 2rem; +} + +.doc h1.sect0 { + background: var(--abstract-background); + font-size: 1.8em; + margin: 1.5rem -1rem 0; + padding: 0.5rem 1rem; +} + +.doc h2:not(.discrete) { + border-bottom: 1px solid var(--section-divider-color); + margin-left: -1rem; + margin-right: -1rem; + padding: 0.4rem 1rem 0.1rem; +} + +.doc h3:not(.discrete), +.doc h4:not(.discrete) { + font-weight: var(--alt-heading-font-weight); +} + +.doc h1 .anchor, +.doc h2 .anchor, +.doc h3 .anchor, +.doc h4 .anchor, +.doc h5 .anchor, +.doc h6 .anchor { + position: absolute; + text-decoration: none; + width: 1.75ex; + margin-left: -1.5ex; + visibility: hidden; + font-size: 0.8em; + font-weight: normal; + padding-top: 0.05em; +} + +.doc h1 .anchor::before, +.doc h2 .anchor::before, +.doc h3 .anchor::before, +.doc h4 .anchor::before, +.doc h5 .anchor::before, +.doc h6 .anchor::before { + content: "\00a7"; +} + +.doc h1:hover .anchor, +.doc h2:hover .anchor, +.doc h3:hover .anchor, +.doc h4:hover .anchor, +.doc h5:hover .anchor, +.doc h6:hover .anchor { + visibility: visible; +} + +.doc p, +.doc dl { + margin: 0; +} + +.doc a { + color: var(--link-font-color); +} + +.doc a:hover { + color: var(--link_hover-font-color); +} + +.doc a.bare { + hyphens: none; +} + +.doc a.unresolved { + color: var(--link_unresolved-font-color); +} + +.doc i.fa { + hyphens: none; + font-style: normal; +} + +.doc p code, +.doc thead code, +.doc .colist > table code { + color: var(--code-font-color); + background: var(--code-background); + border-radius: 0.25em; + font-size: 0.95em; + padding: 0.125em 0.25em; +} + +.doc code, +.doc pre { + hyphens: none; +} + +.doc pre { + font-size: calc(16 / var(--rem-base) * 1rem); + line-height: 1.5; + margin: 0; +} + +.doc blockquote { + margin: 0; +} + +.doc .paragraph.lead > p { + font-size: calc(18 / var(--rem-base) * 1rem); +} + +.doc .right { + float: right; +} + +.doc .left { + float: left; +} + +.doc .float-gap.right { + margin: 0 1rem 1rem 0; +} + +.doc .float-gap.left { + margin: 0 0 1rem 1rem; +} + +.doc .float-group::after { + content: ""; + display: table; + clear: both; +} + +.doc .stretch { + width: 100%; +} + +.doc .underline { + text-decoration: underline; +} + +.doc .line-through { + text-decoration: line-through; +} + +.doc .paragraph, +.doc .dlist, +.doc .hdlist, +.doc .olist, +.doc .ulist, +.doc .exampleblock, +.doc .imageblock, +.doc .listingblock, +.doc .literalblock, +.doc .tabs, +.doc .sidebarblock, +.doc .verseblock, +.doc .videoblock, +.doc .quoteblock, +.doc .partintro, +.doc details, +.doc hr { + margin: 1rem 0 0; +} + +.doc table.tableblock { + font-size: calc(15 / var(--rem-base) * 1rem); +} + +.doc .tablecontainer, +.doc .tablecontainer + *, +.doc :not(.tablecontainer) > table.tableblock, +.doc :not(.tablecontainer) > table.tableblock + * { + margin-top: 1.5rem; +} + +.doc p.tableblock + p.tableblock { + margin-top: 0.5rem; +} + +.doc td.tableblock > .content > :first-child { + margin-top: 0; +} + +.doc table.tableblock th, +.doc table.tableblock td { + padding: 0.5rem; +} + +.doc table.tableblock, +.doc table.tableblock > * > tr > * { + border: 0 solid var(--table-border-color); +} + +.doc table.grid-all > * > tr > * { + border-width: 1px; +} + +.doc table.grid-cols > * > tr > * { + border-width: 0 1px; +} + +.doc table.grid-rows > * > tr > * { + border-width: 1px 0; +} + +.doc table.grid-all > thead th, +.doc table.grid-rows > thead th { + border-bottom-width: 2.5px; +} + +.doc table.frame-all { + border-width: 1px; +} + +.doc table.frame-ends { + border-width: 1px 0; +} + +.doc table.frame-sides { + border-width: 0 1px; +} + +.doc table.frame-none > colgroup + * > :first-child > *, +.doc table.frame-sides > colgroup + * > :first-child > * { + border-top-width: 0; +} + +/* NOTE let the grid win in case of frame-none */ +.doc table.frame-sides > :last-child > :last-child > * { + border-bottom-width: 0; +} + +.doc table.frame-none > * > tr > :first-child, +.doc table.frame-ends > * > tr > :first-child { + border-left-width: 0; +} + +.doc table.frame-none > * > tr > :last-child, +.doc table.frame-ends > * > tr > :last-child { + border-right-width: 0; +} + +.doc table.stripes-all > tbody > tr, +.doc table.stripes-odd > tbody > tr:nth-of-type(odd), +.doc table.stripes-even > tbody > tr:nth-of-type(even), +.doc table.stripes-hover > tbody > tr:hover { + background: var(--table-stripe-background); +} + +.doc table.tableblock > tfoot { + background: var(--table-footer-background); +} + +.doc .halign-left { + text-align: left; +} + +.doc .halign-right { + text-align: right; +} + +.doc .halign-center { + text-align: center; +} + +.doc .valign-top { + vertical-align: top; +} + +.doc .valign-bottom { + vertical-align: bottom; +} + +.doc .valign-middle { + vertical-align: middle; +} + +.doc .admonitionblock { + margin: 1.4rem 0 0; +} + +.doc .admonitionblock p, +.doc .admonitionblock td.content { + font-size: calc(16 / var(--rem-base) * 1rem); +} + +.doc .admonitionblock td.content > :not(.title):first-child, +.doc .admonitionblock td.content > .title + * { + margin-top: 0; +} + +.doc .admonitionblock pre { + font-size: calc(15 / var(--rem-base) * 1rem); +} + +.doc .admonitionblock > table { + table-layout: fixed; + position: relative; + width: 100%; +} + +.doc .admonitionblock td.content { + padding: 1rem 1rem 0.75rem; + background: var(--admonition-background); + width: 100%; + word-wrap: anywhere; +} + +.doc .admonitionblock .icon { + position: absolute; + top: 0; + left: 0; + font-size: calc(15 / var(--rem-base) * 1rem); + padding: 0 0.5rem; + height: 1.25rem; + line-height: 1; + font-weight: var(--admonition-label-font-weight); + text-transform: uppercase; + border-radius: 0.45rem; + transform: translate(-0.5rem, -50%); +} + +.doc .admonitionblock.caution .icon { + background-color: var(--caution-color); + color: var(--caution-on-color); +} + +.doc .admonitionblock.important .icon { + background-color: var(--important-color); + color: var(--important-on-color); +} + +.doc .admonitionblock.note .icon { + background-color: var(--note-color); + color: var(--note-on-color); +} + +.doc .admonitionblock.tip .icon { + background-color: var(--tip-color); + color: var(--tip-on-color); +} + +.doc .admonitionblock.warning .icon { + background-color: var(--warning-color); + color: var(--warning-on-color); +} + +.doc .admonitionblock .icon i { + display: inline-flex; + align-items: center; + height: 100%; +} + +.doc .admonitionblock .icon i::after { + content: attr(title); +} + +.doc .imageblock, +.doc .videoblock { + display: flex; + flex-direction: column; + align-items: center; +} + +.doc .imageblock.text-left, +.doc .videoblock.text-left { + align-items: flex-start; +} + +.doc .imageblock.text-right, +.doc .videoblock.text-right { + align-items: flex-end; +} + +.doc .imageblock img, +.doc .imageblock object, +.doc .imageblock svg, +.doc .image > img, +.doc .image > object, +.doc .image > svg { + display: inline-block; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.doc .image:not(.left):not(.right) > img { + margin-top: -0.2em; +} + +.doc .videoblock iframe { + max-width: 100%; + vertical-align: middle; +} + +#preamble .abstract blockquote { + background: var(--abstract-background); + border-left: 5px solid var(--abstract-border-color); + color: var(--abstract-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + padding: 0.75em 1em; +} + +.doc .quoteblock, +.doc .verseblock { + background: var(--quote-background); + border-left: 5px solid var(--quote-border-color); + color: var(--quote-font-color); +} + +.doc .quoteblock { + padding: 0.25rem 2rem 1.25rem; +} + +.doc .quoteblock .attribution { + color: var(--quote-attribution-font-color); + font-size: calc(15 / var(--rem-base) * 1rem); + margin-top: 0.75rem; +} + +.doc .quoteblock blockquote { + margin-top: 1rem; +} + +.doc .quoteblock .paragraph { + font-style: italic; +} + +.doc .quoteblock cite { + padding-left: 1em; +} + +.doc .verseblock { + font-size: 1.15em; + padding: 1rem 2rem; +} + +.doc .verseblock pre { + font-family: inherit; + font-size: inherit; +} + +.doc ol, +.doc ul { + margin: 0; + padding: 0 0 0 2rem; +} + +.doc ul.checklist, +.doc ul.none, +.doc ol.none, +.doc ul.no-bullet, +.doc ol.unnumbered, +.doc ul.unstyled, +.doc ol.unstyled { + list-style-type: none; +} + +.doc ul.no-bullet, +.doc ol.unnumbered { + padding-left: 1.25rem; +} + +.doc ul.unstyled, +.doc ol.unstyled { + padding-left: 0; +} + +.doc ul.circle { + list-style-type: circle; +} + +.doc ul.disc { + list-style-type: disc; +} + +.doc ul.square { + list-style-type: square; +} + +.doc ul.circle ul:not([class]), +.doc ul.disc ul:not([class]), +.doc ul.square ul:not([class]) { + list-style: inherit; +} + +.doc ol.arabic { + list-style-type: decimal; +} + +.doc ol.decimal { + list-style-type: decimal-leading-zero; +} + +.doc ol.loweralpha { + list-style-type: lower-alpha; +} + +.doc ol.upperalpha { + list-style-type: upper-alpha; +} + +.doc ol.lowerroman { + list-style-type: lower-roman; +} + +.doc ol.upperroman { + list-style-type: upper-roman; +} + +.doc ol.lowergreek { + list-style-type: lower-greek; +} + +.doc ul.checklist { + padding-left: 1.75rem; +} + +.doc ul.checklist p > i.fa-check-square-o:first-child, +.doc ul.checklist p > i.fa-square-o:first-child { + display: inline-flex; + justify-content: center; + width: 1.25rem; + margin-left: -1.25rem; +} + +.doc ul.checklist i.fa-check-square-o::before { + content: "\2713"; +} + +.doc ul.checklist i.fa-square-o::before { + content: "\274f"; +} + +.doc .dlist .dlist, +.doc .dlist .olist, +.doc .dlist .ulist, +.doc .olist .dlist, +.doc .olist .olist, +.doc .olist .ulist, +.doc .ulist .dlist, +.doc .ulist .olist, +.doc .ulist .ulist { + margin-top: 0.5rem; +} + +.doc .olist li + li, +.doc .ulist li + li { + margin-top: 0.5rem; +} + +.doc .ulist .listingblock, +.doc .olist .listingblock, +.doc .admonitionblock .listingblock { + padding: 0; +} + +.doc .admonitionblock .title, +.doc .exampleblock .title, +.doc .imageblock .title, +.doc .literalblock .title, +.doc .listingblock .title, +.doc .openblock .title, +.doc .videoblock .title, +.doc .tableblock caption { + color: var(--caption-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + font-style: var(--caption-font-style); + font-weight: var(--caption-font-weight); + hyphens: none; + letter-spacing: 0.01em; + padding-bottom: 0.075rem; +} + +.doc .tableblock caption { + text-align: left; +} + +.doc .ulist .title, +.doc .olist .title { + font-style: var(--caption-font-style); + font-weight: var(--caption-font-weight); + margin-bottom: 0.25rem; +} + +.doc .imageblock .title { + margin-top: 0.5rem; + padding-bottom: 0; +} + +.doc details { + margin-left: 1rem; +} + +.doc details > summary { + display: block; + position: relative; + line-height: var(--doc-line-height); + margin-bottom: 0.5rem; +} + +.doc details > summary::-webkit-details-marker { + display: none; +} + +.doc details > summary::before { + content: ""; + border: solid transparent; + border-left-color: currentColor; + border-width: 0.3em 0 0.3em 0.5em; + position: absolute; + top: calc((var(--doc-line-height) * 0.5 - 0.3) * 1em); + left: -1rem; + transform: translateX(15%); +} + +.doc details[open] > summary::before { + border-color: currentColor transparent transparent; + border-width: 0.5rem 0.3rem 0; + transform: translateY(15%); +} + +.doc details > summary::after { + content: ""; + width: 1rem; + height: 1em; + position: absolute; + top: calc((var(--doc-line-height) * 0.5 - 0.5) * 1em); + left: -1rem; +} + +.doc details.result { + margin-top: 0.25rem; +} + +.doc details.result > summary { + color: var(--caption-font-color); + font-style: italic; + margin-bottom: 0; +} + +.doc details.result > .content { + margin-left: -1rem; +} + +.doc .exampleblock > .content, +.doc details.result > .content { + background: var(--example-background); + border: 0.25rem solid var(--example-border-color); + border-radius: 0.5rem; + padding: 0.75rem; +} + +.doc .exampleblock > .content::after, +.doc details.result > .content::after { + content: ""; + display: table; + clear: both; +} + +.doc .exampleblock > .content > :first-child, +.doc details > .content > :first-child { + margin-top: 0; +} + +.doc .sidebarblock { + background: var(--sidebar-background); + border-radius: 0.75rem; + padding: 0.75rem 1.5rem; +} + +.doc .sidebarblock > .content > .title { + font-size: calc(22.5 / var(--rem-base) * 1rem); + font-weight: var(--alt-heading-font-weight); + line-height: 1.3; + margin-bottom: -0.3em; + text-align: center; +} + +.doc .sidebarblock > .content > :not(.title):first-child { + margin-top: 0; +} + +/* NEEDS REVIEW prevent pre in table from causing article to exceed bounds */ +.doc .tableblock pre, +.doc .listingblock.wrap pre { + white-space: pre-wrap; +} + +.doc pre.highlight code, +.doc .listingblock pre:not(.highlight), +.doc .literalblock pre { + background: var(--pre-background); + box-shadow: inset 0 0 1.75px var(--pre-border-color); + display: block; + overflow-x: auto; + padding: 0.875em; +} + +.doc .listingblock > .content { + position: relative; +} + +.doc .source-toolbox { + display: flex; + visibility: hidden; + position: absolute; + top: 0.25rem; + right: 0.5rem; + color: var(--pre-annotation-font-color); + font-family: var(--body-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + line-height: 1; + white-space: nowrap; + z-index: 1; +} + +.doc .listingblock:hover .source-toolbox { + visibility: visible; +} + +.doc .source-toolbox .source-lang { + text-transform: uppercase; + letter-spacing: 0.075em; +} + +.doc .source-toolbox > :not(:last-child)::after { + content: "|"; + letter-spacing: 0; + padding: 0 1ch; +} + +.doc .source-toolbox .copy-button { + display: flex; + flex-direction: column; + align-items: center; + background: none; + border: none; + color: inherit; + outline: none; + padding: 0; + font-size: inherit; + line-height: inherit; + width: 1em; + height: 1em; +} + +.doc .source-toolbox .copy-icon { + flex: none; + width: inherit; + height: inherit; +} + +.doc .source-toolbox img.copy-icon { + filter: invert(50.2%); +} + +.doc .source-toolbox svg.copy-icon { + fill: currentColor; +} + +.doc .source-toolbox .copy-toast { + flex: none; + position: relative; + display: inline-flex; + justify-content: center; + margin-top: 1em; + background-color: var(--doc-font-color); + border-radius: 0.25em; + padding: 0.5em; + color: var(--color-white); + cursor: auto; + opacity: 0; + transition: opacity 0.5s ease 0.5s; +} + +.doc .source-toolbox .copy-toast::after { + content: ""; + position: absolute; + top: 0; + width: 1em; + height: 1em; + border: 0.55em solid transparent; + border-left-color: var(--doc-font-color); + transform: rotate(-90deg) translateX(50%) translateY(50%); + transform-origin: left; +} + +.doc .source-toolbox .copy-button.clicked .copy-toast { + opacity: 1; + transition: none; +} + +.doc .language-console .hljs-meta { + user-select: none; +} + +.doc .dlist dt { + font-style: italic; +} + +.doc .dlist dd { + margin: 0 0 0.25rem 1.5rem; +} + +.doc .dlist dd:last-of-type { + margin-bottom: 0; +} + +.doc td.hdlist1, +.doc td.hdlist2 { + padding: 0.5rem 0 0; + vertical-align: top; +} + +.doc tr:first-child > .hdlist1, +.doc tr:first-child > .hdlist2 { + padding-top: 0; +} + +.doc td.hdlist1 { + font-weight: var(--body-font-weight-bold); + padding-right: 0.25rem; +} + +.doc td.hdlist2 { + padding-left: 0.25rem; +} + +.doc .colist { + font-size: calc(16 / var(--rem-base) * 1rem); + margin: 0.25rem 0 -0.25rem; +} + +.doc .colist > table > tr > :first-child, +.doc .colist > table > tbody > tr > :first-child { + padding: 0.25em 0.5rem 0; + vertical-align: top; +} + +.doc .colist > table > tr > :last-child, +.doc .colist > table > tbody > tr > :last-child { + padding: 0.25rem 0; +} + +.doc .conum[data-value] { + border: 1px solid currentColor; + border-radius: 100%; + display: inline-block; + font-family: var(--body-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-style: normal; + line-height: 1.2; + text-align: center; + width: 1.25em; + height: 1.25em; + letter-spacing: -0.25ex; + text-indent: -0.25ex; +} + +.doc .conum[data-value]::after { + content: attr(data-value); +} + +.doc .conum[data-value] + b { + display: none; +} + +.doc hr { + border: solid var(--section-divider-color); + border-width: 2px 0 0; + height: 0; +} + +.doc b.button { + white-space: nowrap; /* effectively ignores hyphens setting */ +} + +.doc b.button::before { + content: "["; + padding-right: 0.25em; +} + +.doc b.button::after { + content: "]"; + padding-left: 0.25em; +} + +.doc kbd { + display: inline-block; + font-size: calc(12 / var(--rem-base) * 1rem); + background: var(--kbd-background); + border: 1px solid var(--kbd-border-color); + border-radius: 0.25em; + box-shadow: 0 1px 0 var(--kbd-border-color), 0 0 0 0.1em var(--body-background) inset; + padding: 0.25em 0.5em; + vertical-align: text-bottom; + white-space: nowrap; /* effectively ignores hyphens setting */ +} + +.doc kbd, +.doc .keyseq { + line-height: 1; +} + +.doc .keyseq { + font-size: calc(16 / var(--rem-base) * 1rem); +} + +.doc .keyseq kbd { + margin: 0 0.125em; +} + +.doc .keyseq kbd:first-child { + margin-left: 0; +} + +.doc .keyseq kbd:last-child { + margin-right: 0; +} + +.doc .menuseq, +.doc .path { + hyphens: none; +} + +.doc .menuseq i.caret::before { + content: "\203a"; + font-size: 1.1em; + font-weight: var(--body-font-weight-bold); + line-height: calc(1 / 1.1); +} + +.doc :not(pre).nowrap { + white-space: nowrap; +} + +.doc .nobreak { + hyphens: none; + word-wrap: normal; +} + +#footnotes { + font-size: 0.85em; + line-height: 1.5; + margin: 2rem -0.5rem 0; +} + +.doc td.tableblock > .content #footnotes { + margin: 2rem 0 0; +} + +#footnotes hr { + border-top-width: 1px; + margin-top: 0; + width: 20%; +} + +#footnotes .footnote { + margin: 0.5em 0 0 1em; +} + +#footnotes .footnote + .footnote { + margin-top: 0.25em; +} + +#footnotes .footnote > a:first-of-type { + display: inline-block; + margin-left: -2em; + text-align: right; + width: 1.5em; +} diff --git a/doc/doc-ui/src/css/footer.css b/doc/doc-ui/src/css/footer.css new file mode 100644 index 0000000..6521947 --- /dev/null +++ b/doc/doc-ui/src/css/footer.css @@ -0,0 +1,15 @@ +footer.footer { + background-color: var(--footer-background); + color: var(--footer-font-color); + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: var(--footer-line-height); + padding: 1.5rem; +} + +.footer p { + margin: 0.5rem 0; +} + +.footer a { + color: var(--footer-link-font-color); +} diff --git a/doc/doc-ui/src/css/header.css b/doc/doc-ui/src/css/header.css new file mode 100644 index 0000000..278abbe --- /dev/null +++ b/doc/doc-ui/src/css/header.css @@ -0,0 +1,325 @@ +html.is-clipped--navbar { + overflow-y: hidden; +} + +body { + padding-top: var(--navbar-height); +} + +.navbar { + background: var(--navbar-background); + color: var(--navbar-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + height: var(--navbar-height); + position: fixed; + top: 0; + width: 100%; + z-index: var(--z-index-navbar); +} + +.navbar a { + text-decoration: none; +} + +.navbar-brand { + display: flex; + flex: auto; + padding-left: 1rem; +} + +.navbar-brand .navbar-item { + color: var(--navbar-font-color); +} + +.navbar-brand .navbar-item:first-child { + align-self: center; + padding: 0; + font-size: calc(22 / var(--rem-base) * 1rem); + flex-wrap: wrap; + line-height: 1; +} + +.navbar-brand .navbar-item:first-child a { + color: inherit; + word-wrap: normal; +} + +.navbar-brand .navbar-item:first-child :not(:last-child) { + padding-right: 0.375rem; +} + +.navbar-brand .navbar-item.search { + flex: auto; + justify-content: flex-end; +} + +#search-input { + color: #333; + font-family: inherit; + font-size: 0.95rem; + width: 150px; + border: 1px solid #dbdbdb; + border-radius: 0.1em; + line-height: 1.5; + padding: 0 0.25em; +} + +#search-input:disabled { + background-color: #dbdbdb; + /* disable cursor */ + cursor: not-allowed; + pointer-events: all !important; +} + +#search-input:disabled::placeholder { + color: #4c4c4c; +} + +#search-input:focus { + outline: none; +} + +.navbar-burger { + background: none; + border: none; + outline: none; + line-height: 1; + position: relative; + width: 3rem; + padding: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-left: auto; + min-width: 0; +} + +.navbar-burger span { + background-color: var(--navbar-font-color); + height: 1.5px; + width: 1rem; +} + +.navbar-burger:not(.is-active) span { + transition: transform ease-out 0.25s, opacity 0s 0.25s, margin-top ease-out 0.25s 0.25s; +} + +.navbar-burger span + span { + margin-top: 0.25rem; +} + +.navbar-burger.is-active span + span { + margin-top: -1.5px; +} + +.navbar-burger.is-active span:nth-child(1) { + transform: rotate(45deg); +} + +.navbar-burger.is-active span:nth-child(2) { + opacity: 0; +} + +.navbar-burger.is-active span:nth-child(3) { + transform: rotate(-45deg); +} + +.navbar-item, +.navbar-link { + color: var(--navbar-menu-font-color); + display: block; + line-height: var(--doc-line-height); + padding: 0.5rem 1rem; +} + +.navbar-item.has-dropdown { + padding: 0; +} + +.navbar-item .icon { + width: 1.25rem; + height: 1.25rem; + display: block; +} + +.navbar-item .icon img, +.navbar-item .icon svg { + fill: currentColor; + width: inherit; + height: inherit; +} + +.navbar-link { + padding-right: 2.5em; +} + +.navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.navbar-dropdown .navbar-item.has-label { + display: flex; + justify-content: space-between; +} + +.navbar-dropdown .navbar-item small { + color: var(--toolbar-muted-color); + font-size: calc(12 / var(--rem-base) * 1rem); +} + +.navbar-divider { + background-color: var(--navbar-menu-border-color); + border: none; + height: 1px; + margin: 0.25rem 0; +} + +.navbar .button { + display: inline-flex; + align-items: center; + background: var(--navbar-button-background); + border: 1px solid var(--navbar-button-border-color); + border-radius: 0.15rem; + height: 1.75rem; + color: var(--navbar-button-font-color); + padding: 0 0.75em; + white-space: nowrap; +} + +@media screen and (max-width: 768.5px) { + .navbar-brand .navbar-item.search { + padding-left: 0; + padding-right: 0; + } +} + +@media screen and (min-width: 769px) { + #search-input { + width: 200px; + } +} + +@media screen and (max-width: 1023.5px) { + .navbar-brand { + height: inherit; + } + + .navbar-brand .navbar-item { + align-items: center; + display: flex; + } + + .navbar-menu { + background: var(--navbar-menu-background); + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + max-height: var(--body-min-height); + overflow-y: auto; + overscroll-behavior: none; + padding: 0.5rem 0; + } + + .navbar-menu:not(.is-active) { + display: none; + } + + .navbar-menu a.navbar-item:hover, + .navbar-menu .navbar-link:hover { + background: var(--navbar-menu_hover-background); + } +} + +@media screen and (min-width: 1024px) { + .navbar-burger { + display: none; + } + + .navbar, + .navbar-menu, + .navbar-end { + display: flex; + } + + .navbar-item, + .navbar-link { + display: flex; + position: relative; + flex: none; + } + + .navbar-item:not(.has-dropdown), + .navbar-link { + align-items: center; + } + + .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; + } + + .navbar-link::after { + border-width: 0 0 1px 1px; + border-style: solid; + content: ""; + display: block; + height: 0.5em; + pointer-events: none; + position: absolute; + transform: rotate(-45deg); + width: 0.5em; + margin-top: -0.375em; + right: 1.125em; + top: 50%; + } + + .navbar-end > .navbar-item, + .navbar-end .navbar-link { + color: var(--navbar-font-color); + } + + .navbar-end > a.navbar-item:hover, + .navbar-end .navbar-link:hover, + .navbar-end .navbar-item.has-dropdown:hover .navbar-link { + background: var(--navbar_hover-background); + color: var(--navbar-font-color); + } + + .navbar-end .navbar-link::after { + border-color: currentColor; + } + + .navbar-dropdown { + background: var(--navbar-menu-background); + border: 1px solid var(--navbar-menu-border-color); + border-top: none; + border-radius: 0 0 0.25rem 0.25rem; + display: none; + top: 100%; + left: 0; + min-width: 100%; + position: absolute; + } + + .navbar-dropdown .navbar-item { + padding: 0.5rem 3rem 0.5rem 1rem; + white-space: nowrap; + } + + .navbar-dropdown .navbar-item small { + position: relative; + right: -2rem; + } + + .navbar-dropdown .navbar-item:last-child { + border-radius: inherit; + } + + .navbar-dropdown.is-right { + left: auto; + right: 0; + } + + .navbar-dropdown a.navbar-item:hover { + background: var(--navbar-menu_hover-background); + } +} diff --git a/doc/doc-ui/src/css/highlight.css b/doc/doc-ui/src/css/highlight.css new file mode 100644 index 0000000..9788ec0 --- /dev/null +++ b/doc/doc-ui/src/css/highlight.css @@ -0,0 +1,86 @@ +/*! Adapted from the GitHub style by Vasily Polovnyov */ +.hljs-comment, +.hljs-quote { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: #008080; +} + +.hljs-string, +.hljs-doctag { + color: #d14; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #900; + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: #458; + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: #009926; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: var(--monospace-font-weight-bold); +} diff --git a/doc/doc-ui/src/css/main.css b/doc/doc-ui/src/css/main.css new file mode 100644 index 0000000..6cc5b4f --- /dev/null +++ b/doc/doc-ui/src/css/main.css @@ -0,0 +1,40 @@ +@media screen and (max-width: 1023.5px) { + aside.sidebar { + display: none; + } + + main > .content { + overflow-x: auto; + } +} + +@media screen and (min-width: 1024px) { + main { + flex: auto; + min-width: 0; /* min-width: 0 required for flexbox to constrain overflowing elements */ + } + + main > .content { + display: flex; + } + + .content .spacer { + flex: 1 0 auto; + order: 1; + } + + aside.embedded { + display: none; + } + + aside.sidebar { + flex: 0 0 var(--sidebar-width); + order: 2; + } +} + +@media screen and (min-width: 1216px) { + aside.sidebar { + flex-basis: var(--sidebar-width--widescreen); + } +} diff --git a/doc/doc-ui/src/css/nav.css b/doc/doc-ui/src/css/nav.css new file mode 100644 index 0000000..6f277b1 --- /dev/null +++ b/doc/doc-ui/src/css/nav.css @@ -0,0 +1,258 @@ +.nav-container { + position: fixed; + top: var(--navbar-height); + left: 0; + width: 100%; + font-size: calc(17 / var(--rem-base) * 1rem); + z-index: var(--z-index-nav); + visibility: hidden; +} + +@media screen and (min-width: 769px) { + .nav-container { + width: var(--nav-width); + } +} + +@media screen and (min-width: 1024px) { + .nav-container { + font-size: calc(15.5 / var(--rem-base) * 1rem); + flex: none; + position: static; + top: 0; + visibility: visible; + } +} + +.nav-container.is-active { + visibility: visible; +} + +.nav { + background: var(--nav-background); + position: relative; + top: var(--toolbar-height); + height: var(--nav-height); +} + +@media screen and (min-width: 769px) { + .nav { + box-shadow: 0.5px 0 3px var(--nav-border-color); + } +} + +@media screen and (min-width: 1024px) { + .nav { + top: var(--navbar-height); + box-shadow: none; + position: sticky; + height: var(--nav-height--desktop); + } +} + +.nav a { + color: inherit; +} + +.nav .panels { + display: flex; + flex-direction: column; + height: inherit; +} + +html.is-clipped--nav { + overflow-y: hidden; +} + +.nav-panel-menu { + overflow-y: scroll; + overscroll-behavior: none; + height: var(--nav-panel-menu-height); +} + +.nav-panel-menu:not(.is-active) .nav-menu { + opacity: 0.75; +} + +.nav-panel-menu:not(.is-active)::after { + content: ""; + background: rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.nav-menu { + min-height: 100%; + padding: 0.5rem 0.75rem; + line-height: var(--nav-line-height); + position: relative; +} + +.nav-menu h3.title { + color: var(--nav-heading-font-color); + font-size: inherit; + font-weight: var(--body-font-weight-bold); + margin: 0; + padding: 0.25em 0 0.125em; +} + +.nav-list { + list-style: none; + margin: 0 0 0 0.75rem; + padding: 0; +} + +.nav-menu > .nav-list + .nav-list { + margin-top: 0.5rem; +} + +.nav-item { + margin-top: 0.5em; +} + +/* adds some breathing room below a nested list */ +.nav-item-toggle ~ .nav-list { + padding-bottom: 0.125rem; +} + +/* matches list without a title */ +.nav-item[data-depth="0"] > .nav-list:first-child { + display: block; + margin: 0; +} + +.nav-item:not(.is-active) > .nav-list { + display: none; +} + +.nav-item-toggle { + background: transparent url(../img/caret.svg) no-repeat center / 50%; + border: none; + outline: none; + line-height: inherit; + padding: 0; + position: absolute; + height: calc(var(--nav-line-height) * 1em); + width: calc(var(--nav-line-height) * 1em); + margin-top: -0.05em; + margin-left: calc(var(--nav-line-height) * -1em); +} + +.nav-item.is-active > .nav-item-toggle { + transform: rotate(90deg); +} + +.is-current-page > .nav-link, +.is-current-page > .nav-text { + font-weight: var(--body-font-weight-bold); +} + +.nav-panel-explore { + background: var(--nav-background); + display: flex; + flex-direction: column; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.nav-panel-explore:not(:first-child) { + top: auto; + max-height: var(--nav-panel-explore-height); +} + +.nav-panel-explore .context { + font-size: calc(15 / var(--rem-base) * 1rem); + flex-shrink: 0; + color: var(--nav-muted-color); + box-shadow: 0 -1px 0 var(--nav-panel-divider-color); + padding: 0 0.5rem; + display: flex; + align-items: center; + justify-content: space-between; + line-height: 1; + height: var(--drawer-height); +} + +.nav-panel-explore:not(:first-child) .context { + cursor: pointer; +} + +.nav-panel-explore .context .version { + display: flex; + align-items: inherit; +} + +.nav-panel-explore .context .version::after { + content: ""; + background: url(../img/chevron.svg) no-repeat center right / auto 100%; + width: 1.25em; + height: 0.75em; +} + +.nav-panel-explore .components { + line-height: var(--doc-line-height); + flex-grow: 1; + box-shadow: inset 0 1px 5px var(--nav-panel-divider-color); + background: var(--nav-secondary-background); + padding: 0.5rem 0.75rem 0 0.75rem; + margin: 0; + overflow-y: scroll; + overscroll-behavior: none; + max-height: 100%; + display: block; +} + +.nav-panel-explore:not(.is-active) .components { + display: none; +} + +.nav-panel-explore .component { + display: block; +} + +.nav-panel-explore .component + .component { + margin-top: 0.5rem; +} + +.nav-panel-explore .component:last-child { + margin-bottom: 0.75rem; +} + +.nav-panel-explore .component .title { + font-weight: var(--body-font-weight-bold); +} + +.nav-panel-explore .versions { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-top: -0.25rem; + line-height: 1; + list-style: none; +} + +.nav-panel-explore .component .version { + margin: 0.375rem 0.375rem 0 0; +} + +.nav-panel-explore .component .version a { + border: 1px solid var(--nav-border-color); + border-radius: 0.25rem; + opacity: 0.75; + white-space: nowrap; + padding: 0.125em 0.25em; + display: inherit; +} + +.nav-panel-explore .component .is-current a { + border-color: currentColor; + opacity: 0.9; + font-weight: var(--body-font-weight-bold); +} diff --git a/doc/doc-ui/src/css/page-versions.css b/doc/doc-ui/src/css/page-versions.css new file mode 100644 index 0000000..5658aae --- /dev/null +++ b/doc/doc-ui/src/css/page-versions.css @@ -0,0 +1,56 @@ +.page-versions { + margin: 0 0.2rem 0 auto; + position: relative; + line-height: 1; +} + +@media screen and (min-width: 1024px) { + .page-versions { + margin-right: 0.7rem; + } +} + +.page-versions .version-menu-toggle { + color: inherit; + background: url(../img/chevron.svg) no-repeat; + background-position: right 0.5rem top 50%; + background-size: auto 0.75em; + border: none; + outline: none; + line-height: inherit; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; + position: relative; + z-index: var(--z-index-page-version-menu); +} + +.page-versions .version-menu { + display: flex; + min-width: 100%; + flex-direction: column; + align-items: flex-end; + background: linear-gradient(to bottom, var(--page-version-menu-background) 0%, var(--page-version-menu-background) 100%) no-repeat; + padding: 1.375rem 1.5rem 0.5rem 0.5rem; + position: absolute; + top: 0; + right: 0; + white-space: nowrap; +} + +.page-versions:not(.is-active) .version-menu { + display: none; +} + +.page-versions .version { + display: block; + padding-top: 0.5rem; +} + +.page-versions .version.is-current { + display: none; +} + +.page-versions .version.is-missing { + color: var(--page-version-missing-font-color); + font-style: italic; + text-decoration: none; +} diff --git a/doc/doc-ui/src/css/pagination.css b/doc/doc-ui/src/css/pagination.css new file mode 100644 index 0000000..e3f2d49 --- /dev/null +++ b/doc/doc-ui/src/css/pagination.css @@ -0,0 +1,63 @@ +nav.pagination { + display: flex; + border-top: 1px solid var(--toolbar-border-color); + line-height: 1; + margin: 2rem -1rem -1rem; + padding: 0.75rem 1rem 0; +} + +nav.pagination span { + display: flex; + flex: 50%; + flex-direction: column; +} + +nav.pagination .prev { + padding-right: 0.5rem; +} + +nav.pagination .next { + margin-left: auto; + padding-left: 0.5rem; + text-align: right; +} + +nav.pagination span::before { + color: var(--toolbar-muted-color); + font-size: 0.75em; + padding-bottom: 0.1em; +} + +nav.pagination .prev::before { + content: "Prev"; +} + +nav.pagination .next::before { + content: "Next"; +} + +nav.pagination a { + font-weight: var(--body-font-weight-bold); + line-height: 1.3; + position: relative; +} + +nav.pagination a::before, +nav.pagination a::after { + color: var(--toolbar-muted-color); + font-weight: normal; + font-size: 1.5em; + line-height: 0.75; + position: absolute; + top: 0; + width: 1rem; +} + +nav.pagination .prev a::before { + content: "\2039"; + transform: translateX(-100%); +} + +nav.pagination .next a::after { + content: "\203a"; +} diff --git a/doc/doc-ui/src/css/print.css b/doc/doc-ui/src/css/print.css new file mode 100644 index 0000000..9a92d06 --- /dev/null +++ b/doc/doc-ui/src/css/print.css @@ -0,0 +1,88 @@ +@page { + margin: 0.5in; +} + +@media print { + .hide-for-print { + display: none !important; + } + + html { + font-size: var(--body-font-size--print); + } + + a { + color: inherit !important; + text-decoration: underline; + } + + a.bare, + a[href^="#"], + a[href^="mailto:"] { + text-decoration: none; + } + + tr, + img, + object, + svg { + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + pre { + hyphens: none; + white-space: pre-wrap; + } + + body { + padding-top: 2rem; + } + + .navbar { + background: none; + color: inherit; + position: absolute; + } + + .navbar * { + color: inherit !important; + } + + .navbar > :not(.navbar-brand), + .nav-container, + .toolbar, + aside.sidebar, + nav.pagination { + display: none; + } + + .doc { + color: inherit; + margin: auto; + max-width: none; + padding-bottom: 2rem; + } + + .doc .admonitionblock td.icon { + color-adjust: exact; + } + + .doc .listingblock code[data-lang]::before { + display: block; + } + + footer.footer { + background: none; + border-top: 1px solid var(--panel-border-color); + color: var(--quote-attribution-font-color); + padding: 0.25rem 0.5rem 0; + } + + .footer * { + color: inherit; + } +} diff --git a/doc/doc-ui/src/css/site.css b/doc/doc-ui/src/css/site.css new file mode 100644 index 0000000..4e26012 --- /dev/null +++ b/doc/doc-ui/src/css/site.css @@ -0,0 +1,18 @@ +@import "typeface-roboto.css"; +@import "typeface-roboto-mono.css"; +@import "vars.css"; +@import "base.css"; +@import "body.css"; +@import "nav.css"; +@import "main.css"; +@import "toolbar.css"; +@import "breadcrumbs.css"; +@import "page-versions.css"; +@import "toc.css"; +@import "comment.css"; +@import "doc.css"; +@import "pagination.css"; +@import "header.css"; +@import "footer.css"; +@import "highlight.css"; +@import "print.css"; diff --git a/doc/doc-ui/src/css/toc.css b/doc/doc-ui/src/css/toc.css new file mode 100644 index 0000000..7a3edee --- /dev/null +++ b/doc/doc-ui/src/css/toc.css @@ -0,0 +1,102 @@ +.toc-menu { + color: var(--toc-font-color); +} + +.sidebar .toc .toc-menu { + margin-right: 0.75rem; + position: sticky; + top: var(--toc-top); +} + +.toc .toc-menu h3 { + color: var(--toc-heading-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + font-weight: var(--body-font-weight-bold); + line-height: 1.3; + margin: 0 -0.5px; + padding-bottom: 0.25rem; +} + +.sidebar .toc .toc-menu h3 { + display: flex; + flex-direction: column; + height: 2.5rem; + justify-content: flex-end; +} + +.toc .toc-menu ul { + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: var(--toc-line-height); + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar .toc .toc-menu ul { + max-height: var(--toc-height); + overflow-y: auto; + overscroll-behavior: none; +} + +@supports (scrollbar-width: none) { + .sidebar .toc .toc-menu ul { + scrollbar-width: none; + } +} + +.toc .toc-menu ul::-webkit-scrollbar { + width: 0; + height: 0; +} + +@media screen and (min-width: 1024px) { + .toc .toc-menu h3 { + font-size: calc(15 / var(--rem-base) * 1rem); + } + + .toc .toc-menu ul { + font-size: calc(13.5 / var(--rem-base) * 1rem); + } +} + +.toc .toc-menu li { + margin: 0; +} + +.toc .toc-menu li[data-level="2"] a { + padding-left: 1.25rem; +} + +.toc .toc-menu li[data-level="3"] a { + padding-left: 2rem; +} + +.toc .toc-menu a { + color: inherit; + border-left: 2px solid var(--toc-border-color); + display: inline-block; + padding: 0.25rem 0 0.25rem 0.5rem; + text-decoration: none; +} + +.sidebar.toc .toc-menu a { + display: block; + outline: none; +} + +.toc .toc-menu a:hover { + color: var(--link-font-color); +} + +.toc .toc-menu a.is-active { + border-left-color: var(--link-font-color); + color: var(--doc-font-color); +} + +.sidebar .toc .toc-menu a:focus { + background: var(--panel-background); +} + +.toc .toc-menu .is-hidden-toc { + display: none !important; +} diff --git a/doc/doc-ui/src/css/toolbar.css b/doc/doc-ui/src/css/toolbar.css new file mode 100644 index 0000000..7f38488 --- /dev/null +++ b/doc/doc-ui/src/css/toolbar.css @@ -0,0 +1,68 @@ +.toolbar { + color: var(--toolbar-font-color); + align-items: center; + background-color: var(--toolbar-background); + box-shadow: 0 1px 0 var(--toolbar-border-color); + display: flex; + font-size: calc(15 / var(--rem-base) * 1rem); + height: var(--toolbar-height); + justify-content: flex-start; + position: sticky; + top: var(--navbar-height); + z-index: var(--z-index-toolbar); +} + +.toolbar a { + color: inherit; +} + +.nav-toggle { + background: url(../img/menu.svg) no-repeat 50% 47.5%; + background-size: 49%; + border: none; + outline: none; + line-height: inherit; + padding: 0; + height: var(--toolbar-height); + width: var(--toolbar-height); + margin-right: -0.25rem; +} + +@media screen and (min-width: 1024px) { + .nav-toggle { + display: none; + } +} + +.nav-toggle.is-active { + background-image: url(../img/back.svg); + background-size: 41.5%; +} + +.home-link { + display: block; + background: url(../img/home-o.svg) no-repeat center; + height: calc(var(--toolbar-height) / 2); + width: calc(var(--toolbar-height) / 2); + margin: calc(var(--toolbar-height) / 4); +} + +.home-link:hover, +.home-link.is-current { + background-image: url(../img/home.svg); +} + +.edit-this-page { + display: none; + padding-right: 0.5rem; +} + +@media screen and (min-width: 1024px) { + .edit-this-page { + display: block; + } +} + +.toolbar .edit-this-page a { + color: var(--toolbar-muted-color); +} diff --git a/doc/doc-ui/src/css/typeface-fontawesome.css b/doc/doc-ui/src/css/typeface-fontawesome.css new file mode 100644 index 0000000..54656c0 --- /dev/null +++ b/doc/doc-ui/src/css/typeface-fontawesome.css @@ -0,0 +1,48 @@ +@font-face { + font-family: "Font Awesome 5 Free"; + font-style: normal; + font-weight: 400; + src: + url(~@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2) + format("woff2"), + url(~@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff) + format("woff"); +} + +@font-face { + font-family: "Font Awesome 5 Free"; + font-style: normal; + font-weight: 900; + src: + url(~@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2) + format("woff2"), + url(~@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff) + format("woff"); +} + +@font-face { + font-family: "Font Awesome 5 Brands"; + font-style: normal; + font-weight: 400; + src: + url(~@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2) + format("woff2"), + url(~@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff) + format("woff"); +} + +.fa, +.fas { + font-family: "Font Awesome 5 Free"; /* stylelint-disable-line */ + font-weight: 900; +} + +.far { + font-family: "Font Awesome 5 Free"; /* stylelint-disable-line */ + font-weight: 400; +} + +.fab { + font-family: "Font Awesome 5 Brands"; /* stylelint-disable-line */ + font-weight: 400; +} diff --git a/doc/doc-ui/src/css/typeface-roboto-mono.css b/doc/doc-ui/src/css/typeface-roboto-mono.css new file mode 100644 index 0000000..841df08 --- /dev/null +++ b/doc/doc-ui/src/css/typeface-roboto-mono.css @@ -0,0 +1,19 @@ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-weight: 400; + src: + url(~@fontsource/roboto-mono/files/roboto-mono-latin-400-normal.woff2) format("woff2"), + url(~@fontsource/roboto-mono/files/roboto-mono-latin-400-normal.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-weight: 500; + src: + url(~@fontsource/roboto-mono/files/roboto-mono-latin-500-normal.woff2) format("woff2"), + url(~@fontsource/roboto-mono/files/roboto-mono-latin-500-normal.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/doc/doc-ui/src/css/typeface-roboto.css b/doc/doc-ui/src/css/typeface-roboto.css new file mode 100644 index 0000000..1648a2b --- /dev/null +++ b/doc/doc-ui/src/css/typeface-roboto.css @@ -0,0 +1,39 @@ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 400; + src: + url(~@fontsource/roboto/files/roboto-latin-400-normal.woff2) format("woff2"), + url(~@fontsource/roboto/files/roboto-latin-400-normal.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + src: + url(~@fontsource/roboto/files/roboto-latin-400-italic.woff2) format("woff2"), + url(~@fontsource/roboto/files/roboto-latin-400-italic.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 500; + src: + url(~@fontsource/roboto/files/roboto-latin-500-normal.woff2) format("woff2"), + url(~@fontsource/roboto/files/roboto-latin-500-normal.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 500; + src: + url(~@fontsource/roboto/files/roboto-latin-500-italic.woff2) format("woff2"), + url(~@fontsource/roboto/files/roboto-latin-500-italic.woff) format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/doc/doc-ui/src/css/vars.css b/doc/doc-ui/src/css/vars.css new file mode 100644 index 0000000..f4b05ce --- /dev/null +++ b/doc/doc-ui/src/css/vars.css @@ -0,0 +1,146 @@ +:root { + /* colors */ + --color-white: #fff; + --color-smoke-10: #fefefe; + --color-smoke-30: #fafafa; + --color-smoke-50: #f5f5f5; + --color-smoke-70: #f0f0f0; + --color-smoke-90: #e1e1e1; + --color-gray-10: #c1c1c1; + --color-gray-30: #9c9c9c; + --color-gray-40: #8e8e8e; + --color-gray-50: #808080; + --color-gray-70: #5d5d5d; + --color-jet-20: #4a4a4a; + --color-jet-30: #424242; + --color-jet-50: #333; + --color-jet-70: #222; + --color-jet-80: #191919; + --color-black: #000; + /* fonts */ + --rem-base: 18; /* used to compute rem value from desired pixel value (e.g., calc(18 / var(--rem-base) * 1rem) = 18px) */ + --body-font-size: 1.0625em; /* 17px */ + --body-font-size--desktop: 1.125em; /* 18px */ + --body-font-size--print: 0.9375em; /* 15px */ + --body-line-height: 1.15; + --body-font-color: var(--color-jet-70); + --body-font-family: "Roboto", sans-serif; + --body-font-weight-bold: 500; + --monospace-font-family: "Roboto Mono", monospace; + --monospace-font-weight-bold: 500; + /* base */ + --body-background: var(--color-white); + --panel-background: var(--color-smoke-30); + --panel-border-color: var(--color-smoke-90); + --scrollbar-track-color: var(--color-smoke-30); + --scrollbar-thumb-color: var(--color-gray-10); + --scrollbar_hover-thumb-color: var(--color-gray-30); + /* navbar */ + --navbar-background: var(--color-jet-80); + --navbar-font-color: var(--color-white); + --navbar_hover-background: var(--color-black); + --navbar-button-background: var(--color-white); + --navbar-button-border-color: var(--panel-border-color); + --navbar-button-font-color: var(--body-font-color); + --navbar-menu-border-color: var(--panel-border-color); + --navbar-menu-background: var(--color-white); + --navbar-menu-font-color: var(--body-font-color); + --navbar-menu_hover-background: var(--color-smoke-50); + /* nav */ + --nav-background: var(--panel-background); + --nav-border-color: var(--color-gray-10); + --nav-line-height: 1.35; + --nav-heading-font-color: var(--color-jet-30); + --nav-muted-color: var(--color-gray-70); + --nav-panel-divider-color: var(--color-smoke-90); + --nav-secondary-background: var(--color-smoke-70); + /* toolbar */ + --toolbar-background: var(--panel-background); + --toolbar-border-color: var(--panel-border-color); + --toolbar-font-color: var(--color-gray-70); + --toolbar-muted-color: var(--color-gray-40); + --page-version-menu-background: var(--color-smoke-70); + --page-version-missing-font-color: var(--color-gray-40); + /* admonitions */ + --caution-color: #a0439c; + --caution-on-color: var(--color-white); + --important-color: #d32f2f; + --important-on-color: var(--color-white); + --note-color: #217ee7; + --note-on-color: var(--color-white); + --tip-color: #41af46; + --tip-on-color: var(--color-white); + --warning-color: #e18114; + --warning-on-color: var(--color-white); + /* doc */ + --doc-font-color: var(--color-jet-50); + --doc-font-size: inherit; + --doc-font-size--desktop: calc(17 / var(--rem-base) * 1rem); + --doc-line-height: 1.6; + --doc-margin: 0 auto; + --doc-margin--desktop: 0 2rem; + --heading-font-color: var(--color-jet-80); + --heading-font-weight: normal; + --alt-heading-font-weight: var(--body-font-weight-bold); + --section-divider-color: var(--panel-border-color); + --link-font-color: #1565c0; + --link_hover-font-color: #104d92; + --link_unresolved-font-color: var(--important-color); + --abstract-background: var(--color-smoke-70); + --abstract-font-color: var(--color-jet-20); + --abstract-border-color: var(--panel-border-color); + --admonition-background: var(--panel-background); + --admonition-label-font-weight: var(--body-font-weight-bold); + --caption-font-color: var(--color-gray-70); + --caption-font-style: italic; + --caption-font-weight: var(--body-font-weight-bold); + --code-background: var(--panel-background); + --code-font-color: var(--body-font-color); + --example-background: var(--color-white); + --example-border-color: var(--color-gray-70); + --kbd-background: var(--panel-background); + --kbd-border-color: var(--color-gray-10); + --pre-background: var(--panel-background); + --pre-border-color: var(--panel-border-color); + --pre-annotation-font-color: var(--color-gray-50); + --quote-background: var(--panel-background); + --quote-border-color: var(--color-gray-70); + --quote-font-color: var(--color-gray-70); + --quote-attribution-font-color: var(--color-gray-40); + --sidebar-background: var(--color-smoke-90); + --table-border-color: var(--panel-border-color); + --table-stripe-background: var(--panel-background); + --table-footer-background: linear-gradient(to bottom, var(--color-smoke-70) 0%, var(--color-white) 100%); + /* toc */ + --toc-font-color: var(--nav-muted-color); + --toc-heading-font-color: var(--doc-font-color); + --toc-border-color: var(--panel-border-color); + --toc-line-height: 1.2; + /* footer */ + --footer-line-height: var(--doc-line-height); + --footer-background: var(--color-smoke-90); + --footer-font-color: var(--color-gray-70); + --footer-link-font-color: var(--color-jet-80); + /* dimensions and positioning */ + --navbar-height: calc(63 / var(--rem-base) * 1rem); + --toolbar-height: calc(45 / var(--rem-base) * 1rem); + --drawer-height: var(--toolbar-height); + --body-top: var(--navbar-height); + --body-min-height: calc(100vh - var(--body-top)); + --nav-height: calc(var(--body-min-height) - var(--toolbar-height)); + --nav-height--desktop: var(--body-min-height); + --nav-panel-menu-height: calc(100% - var(--drawer-height)); + --nav-panel-explore-height: calc(50% + var(--drawer-height)); + --nav-width: calc(270 / var(--rem-base) * 1rem); + --toc-top: calc(var(--body-top) + var(--toolbar-height)); + --toc-height: calc(100vh - var(--toc-top) - 2.5rem); + --sidebar-width: calc(200 / var(--rem-base) * 1rem); + --sidebar-width--widescreen: calc(300 / var(--rem-base) * 1rem); + --doc-max-width: calc(720 / var(--rem-base) * 1rem); + --doc-max-width--desktop: calc(1440 / var(--rem-base) * 1rem); + /* stacking */ + --z-index-nav: 1; + --z-index-toolbar: 2; + --z-index-page-version-menu: 3; + --z-index-navbar: 4; +} diff --git a/doc/doc-ui/src/css/vendor/fontawesome.css b/doc/doc-ui/src/css/vendor/fontawesome.css new file mode 100644 index 0000000..a2c0be9 --- /dev/null +++ b/doc/doc-ui/src/css/vendor/fontawesome.css @@ -0,0 +1,2 @@ +@import "../typeface-fontawesome.css"; +@import "@fortawesome/fontawesome-free/css/all.min.css"; diff --git a/doc/doc-ui/src/helpers/and.js b/doc/doc-ui/src/helpers/and.js new file mode 100644 index 0000000..5637b15 --- /dev/null +++ b/doc/doc-ui/src/helpers/and.js @@ -0,0 +1,9 @@ +'use strict' + +module.exports = (...args) => { + const numArgs = args.length + if (numArgs === 3) return args[0] && args[1] + if (numArgs < 3) throw new Error('{{and}} helper expects at least 2 arguments') + args.pop() + return args.every((it) => it) +} diff --git a/doc/doc-ui/src/helpers/detag.js b/doc/doc-ui/src/helpers/detag.js new file mode 100644 index 0000000..e32f147 --- /dev/null +++ b/doc/doc-ui/src/helpers/detag.js @@ -0,0 +1,5 @@ +'use strict' + +const TAG_ALL_RX = /<[^>]+>/g + +module.exports = (html) => html && html.replace(TAG_ALL_RX, '') diff --git a/doc/doc-ui/src/helpers/eq.js b/doc/doc-ui/src/helpers/eq.js new file mode 100644 index 0000000..16dc287 --- /dev/null +++ b/doc/doc-ui/src/helpers/eq.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = (a, b) => a === b diff --git a/doc/doc-ui/src/helpers/get_pdf_link.js b/doc/doc-ui/src/helpers/get_pdf_link.js new file mode 100644 index 0000000..e9b116a --- /dev/null +++ b/doc/doc-ui/src/helpers/get_pdf_link.js @@ -0,0 +1,8 @@ +'use strict' + +module.exports = ({ data }) => { + return '/' + data.root.page.component.name + + '/' + data.root.page.version + + '/' + data.root.page.component.title.toLowerCase().replaceAll(' ', '-') + + '.pdf' +} diff --git a/doc/doc-ui/src/helpers/increment.js b/doc/doc-ui/src/helpers/increment.js new file mode 100644 index 0000000..bb8f7e1 --- /dev/null +++ b/doc/doc-ui/src/helpers/increment.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = (value) => (value || 0) + 1 diff --git a/doc/doc-ui/src/helpers/ne.js b/doc/doc-ui/src/helpers/ne.js new file mode 100644 index 0000000..245f03b --- /dev/null +++ b/doc/doc-ui/src/helpers/ne.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = (a, b) => a !== b diff --git a/doc/doc-ui/src/helpers/not.js b/doc/doc-ui/src/helpers/not.js new file mode 100644 index 0000000..8b3aa91 --- /dev/null +++ b/doc/doc-ui/src/helpers/not.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = (val) => !val diff --git a/doc/doc-ui/src/helpers/or.js b/doc/doc-ui/src/helpers/or.js new file mode 100644 index 0000000..eb53907 --- /dev/null +++ b/doc/doc-ui/src/helpers/or.js @@ -0,0 +1,9 @@ +'use strict' + +module.exports = (...args) => { + const numArgs = args.length + if (numArgs === 3) return args[0] || args[1] + if (numArgs < 3) throw new Error('{{or}} helper expects at least 2 arguments') + args.pop() + return args.some((it) => it) +} diff --git a/doc/doc-ui/src/helpers/relativize.js b/doc/doc-ui/src/helpers/relativize.js new file mode 100644 index 0000000..6fdfb45 --- /dev/null +++ b/doc/doc-ui/src/helpers/relativize.js @@ -0,0 +1,24 @@ +'use strict' + +const { posix: path } = require('path') + +module.exports = (to, from, ctx) => { + if (!to) return '#' + // NOTE only legacy invocation provides both to and from + if (!ctx) from = (ctx = from).data.root.page.url + if (to.charAt() !== '/') return to + if (!from) return (ctx.data.root.site.path || '') + to + let hash = '' + const hashIdx = to.indexOf('#') + if (~hashIdx) { + hash = to.substr(hashIdx) + to = to.substr(0, hashIdx) + } + return to === from + ? hash || (isDir(to) ? './' : path.basename(to)) + : (path.relative(path.dirname(from + '.'), to) || '.') + (isDir(to) ? '/' + hash : hash) +} + +function isDir (str) { + return str.charAt(str.length - 1) === '/' +} diff --git a/doc/doc-ui/src/helpers/year.js b/doc/doc-ui/src/helpers/year.js new file mode 100644 index 0000000..aa38992 --- /dev/null +++ b/doc/doc-ui/src/helpers/year.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = () => new Date().getFullYear().toString() diff --git a/doc/doc-ui/src/img/back.svg b/doc/doc-ui/src/img/back.svg new file mode 100644 index 0000000..1a66e8d --- /dev/null +++ b/doc/doc-ui/src/img/back.svg @@ -0,0 +1,86 @@ + + + + +Left arrow + + + + +image/svg+xml + +Left arrow + + +Sarah White + + + + +OpenDevise Inc. + + + + + + + + + + + + + + + + + + diff --git a/doc/doc-ui/src/img/caret.svg b/doc/doc-ui/src/img/caret.svg new file mode 100644 index 0000000..faea566 --- /dev/null +++ b/doc/doc-ui/src/img/caret.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/doc/doc-ui/src/img/caution.svg b/doc/doc-ui/src/img/caution.svg new file mode 100644 index 0000000..98c9421 --- /dev/null +++ b/doc/doc-ui/src/img/caution.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/doc-ui/src/img/chevron.svg b/doc/doc-ui/src/img/chevron.svg new file mode 100644 index 0000000..836c90f --- /dev/null +++ b/doc/doc-ui/src/img/chevron.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/doc/doc-ui/src/img/home-o.svg b/doc/doc-ui/src/img/home-o.svg new file mode 100644 index 0000000..02e64b8 --- /dev/null +++ b/doc/doc-ui/src/img/home-o.svg @@ -0,0 +1,124 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/doc-ui/src/img/home.svg b/doc/doc-ui/src/img/home.svg new file mode 100644 index 0000000..06ca956 --- /dev/null +++ b/doc/doc-ui/src/img/home.svg @@ -0,0 +1,124 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/doc-ui/src/img/important.svg b/doc/doc-ui/src/img/important.svg new file mode 100644 index 0000000..3ddcc81 --- /dev/null +++ b/doc/doc-ui/src/img/important.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/doc-ui/src/img/menu.svg b/doc/doc-ui/src/img/menu.svg new file mode 100644 index 0000000..211102b --- /dev/null +++ b/doc/doc-ui/src/img/menu.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/doc-ui/src/img/note.svg b/doc/doc-ui/src/img/note.svg new file mode 100644 index 0000000..7d77853 --- /dev/null +++ b/doc/doc-ui/src/img/note.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/doc-ui/src/img/octicons-16.svg b/doc/doc-ui/src/img/octicons-16.svg new file mode 100644 index 0000000..d8415d0 --- /dev/null +++ b/doc/doc-ui/src/img/octicons-16.svg @@ -0,0 +1,36 @@ + + Octicons (16px subset) + Octicons v11.2.0 by GitHub - https://primer.style/octicons/ - License: MIT + + + + @primer/octicons + 11.2.0 + A scalable set of icons handcrafted with <3 by GitHub + image/svg+xml + + + GitHub + + + + + Copyright (c) 2020 GitHub Inc. + + + + https://primer.style/octicons/ + + + + + + + + + diff --git a/doc/doc-ui/src/img/tip.svg b/doc/doc-ui/src/img/tip.svg new file mode 100644 index 0000000..1405622 --- /dev/null +++ b/doc/doc-ui/src/img/tip.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/doc-ui/src/img/warning.svg b/doc/doc-ui/src/img/warning.svg new file mode 100644 index 0000000..3ddcc81 --- /dev/null +++ b/doc/doc-ui/src/img/warning.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/doc-ui/src/js/01-nav.js b/doc/doc-ui/src/js/01-nav.js new file mode 100644 index 0000000..80937ee --- /dev/null +++ b/doc/doc-ui/src/js/01-nav.js @@ -0,0 +1,157 @@ +;(function () { + 'use strict' + + var SECT_CLASS_RX = /^sect(\d)$/ + + var navContainer = document.querySelector('.nav-container') + var navToggle = document.querySelector('.nav-toggle') + var nav = navContainer.querySelector('.nav') + + navToggle.addEventListener('click', showNav) + navContainer.addEventListener('click', trapEvent) + + var menuPanel = navContainer.querySelector('[data-panel=menu]') + if (!menuPanel) return + var explorePanel = navContainer.querySelector('[data-panel=explore]') + + var currentPageItem = menuPanel.querySelector('.is-current-page') + var originalPageItem = currentPageItem + if (currentPageItem) { + activateCurrentPath(currentPageItem) + scrollItemToMidpoint(menuPanel, currentPageItem.querySelector('.nav-link')) + } else { + menuPanel.scrollTop = 0 + } + + find(menuPanel, '.nav-item-toggle').forEach(function (btn) { + var li = btn.parentElement + btn.addEventListener('click', toggleActive.bind(li)) + var navItemSpan = findNextElement(btn, '.nav-text') + if (navItemSpan) { + navItemSpan.style.cursor = 'pointer' + navItemSpan.addEventListener('click', toggleActive.bind(li)) + } + }) + + if (explorePanel) { + explorePanel.querySelector('.context').addEventListener('click', function () { + // NOTE logic assumes there are only two panels + find(nav, '[data-panel]').forEach(function (panel) { + panel.classList.toggle('is-active') + }) + }) + } + + // NOTE prevent text from being selected by double click + menuPanel.addEventListener('mousedown', function (e) { + if (e.detail > 1) e.preventDefault() + }) + + function onHashChange () { + var navLink + var hash = window.location.hash + if (hash) { + if (hash.indexOf('%')) hash = decodeURIComponent(hash) + navLink = menuPanel.querySelector('.nav-link[href="' + hash + '"]') + if (!navLink) { + var targetNode = document.getElementById(hash.slice(1)) + if (targetNode) { + var current = targetNode + var ceiling = document.querySelector('article.doc') + while ((current = current.parentNode) && current !== ceiling) { + var id = current.id + // NOTE: look for section heading + if (!id && (id = SECT_CLASS_RX.test(current.className))) id = (current.firstElementChild || {}).id + if (id && (navLink = menuPanel.querySelector('.nav-link[href="#' + id + '"]'))) break + } + } + } + } + var navItem + if (navLink) { + navItem = navLink.parentNode + } else if (originalPageItem) { + navLink = (navItem = originalPageItem).querySelector('.nav-link') + } else { + return + } + if (navItem === currentPageItem) return + find(menuPanel, '.nav-item.is-active').forEach(function (el) { + el.classList.remove('is-active', 'is-current-path', 'is-current-page') + }) + navItem.classList.add('is-current-page') + currentPageItem = navItem + activateCurrentPath(navItem) + scrollItemToMidpoint(menuPanel, navLink) + } + + if (menuPanel.querySelector('.nav-link[href^="#"]')) { + if (window.location.hash) onHashChange() + window.addEventListener('hashchange', onHashChange) + } + + function activateCurrentPath (navItem) { + var ancestorClasses + var ancestor = navItem.parentNode + while (!(ancestorClasses = ancestor.classList).contains('nav-menu')) { + if (ancestor.tagName === 'LI' && ancestorClasses.contains('nav-item')) { + ancestorClasses.add('is-active', 'is-current-path') + } + ancestor = ancestor.parentNode + } + navItem.classList.add('is-active') + } + + function toggleActive () { + if (this.classList.toggle('is-active')) { + var padding = parseFloat(window.getComputedStyle(this).marginTop) + var rect = this.getBoundingClientRect() + var menuPanelRect = menuPanel.getBoundingClientRect() + var overflowY = (rect.bottom - menuPanelRect.top - menuPanelRect.height + padding).toFixed() + if (overflowY > 0) menuPanel.scrollTop += Math.min((rect.top - menuPanelRect.top - padding).toFixed(), overflowY) + } + } + + function showNav (e) { + if (navToggle.classList.contains('is-active')) return hideNav(e) + trapEvent(e) + var html = document.documentElement + html.classList.add('is-clipped--nav') + navToggle.classList.add('is-active') + navContainer.classList.add('is-active') + var bounds = nav.getBoundingClientRect() + var expectedHeight = window.innerHeight - Math.round(bounds.top) + if (Math.round(bounds.height) !== expectedHeight) nav.style.height = expectedHeight + 'px' + html.addEventListener('click', hideNav) + } + + function hideNav (e) { + trapEvent(e) + var html = document.documentElement + html.classList.remove('is-clipped--nav') + navToggle.classList.remove('is-active') + navContainer.classList.remove('is-active') + html.removeEventListener('click', hideNav) + } + + function trapEvent (e) { + e.stopPropagation() + } + + function scrollItemToMidpoint (panel, el) { + var rect = panel.getBoundingClientRect() + var effectiveHeight = rect.height + var navStyle = window.getComputedStyle(nav) + if (navStyle.position === 'sticky') effectiveHeight -= rect.top - parseFloat(navStyle.top) + panel.scrollTop = Math.max(0, (el.getBoundingClientRect().height - effectiveHeight) * 0.5 + el.offsetTop) + } + + function find (from, selector) { + return [].slice.call(from.querySelectorAll(selector)) + } + + function findNextElement (from, selector) { + var el = from.nextElementSibling + return el && selector ? el[el.matches ? 'matches' : 'msMatchesSelector'](selector) && el : el + } +})() diff --git a/doc/doc-ui/src/js/02-on-this-page.js b/doc/doc-ui/src/js/02-on-this-page.js new file mode 100644 index 0000000..9d0d1f5 --- /dev/null +++ b/doc/doc-ui/src/js/02-on-this-page.js @@ -0,0 +1,115 @@ +;(function () { + 'use strict' + + var sidebar = document.querySelector('aside.sidebar') + var toc = sidebar.querySelector('.toc') + if (!sidebar) return + if (document.querySelector('body.-toc')) return sidebar.removeChild(toc) + var levels = parseInt(toc.dataset.levels || 2, 10) + if (levels < 0) return + + var articleSelector = 'article.doc' + var article = document.querySelector(articleSelector) + var headingsSelector = [] + for (var level = 0; level <= levels; level++) { + var headingSelector = [articleSelector] + if (level) { + for (var l = 1; l <= level; l++) headingSelector.push((l === 2 ? '.sectionbody>' : '') + '.sect' + l) + headingSelector.push('h' + (level + 1) + '[id]') + } else { + headingSelector.push('h1[id].sect0') + } + headingsSelector.push(headingSelector.join('>')) + } + var headings = find(headingsSelector.join(','), article.parentNode) + if (!headings.length) return sidebar.removeChild(toc) + + var lastActiveFragment + var links = {} + var list = headings.reduce(function (accum, heading) { + var link = document.createElement('a') + link.textContent = heading.textContent + links[(link.href = '#' + heading.id)] = link + var listItem = document.createElement('li') + listItem.dataset.level = parseInt(heading.nodeName.slice(1), 10) - 1 + listItem.appendChild(link) + accum.appendChild(listItem) + return accum + }, document.createElement('ul')) + + var tocMenu = toc.querySelector('.toc-menu') + if (!tocMenu) (tocMenu = document.createElement('div')).className = 'toc-menu' + + var title = document.createElement('h3') + title.textContent = toc.dataset.title || 'Contents' + tocMenu.appendChild(title) + tocMenu.appendChild(list) + + var startOfContent = !document.getElementById('toc') && article.querySelector('h1.page ~ :not(.is-before-toc)') + if (startOfContent) { + var embeddedTocAside = document.createElement('aside') + embeddedTocAside.className = 'toc embedded' + embeddedTocAside.appendChild(tocMenu.cloneNode(true)) + startOfContent.parentNode.insertBefore(embeddedTocAside, startOfContent) + } + + window.addEventListener('load', function () { + onScroll() + window.addEventListener('scroll', onScroll) + }) + + function onScroll () { + var scrolledBy = window.pageYOffset + var buffer = getNumericStyleVal(document.documentElement, 'fontSize') * 1.15 + var ceil = article.offsetTop + if (scrolledBy && window.innerHeight + scrolledBy + 2 >= document.documentElement.scrollHeight) { + lastActiveFragment = Array.isArray(lastActiveFragment) ? lastActiveFragment : Array(lastActiveFragment || 0) + var activeFragments = [] + var lastIdx = headings.length - 1 + headings.forEach(function (heading, idx) { + var fragment = '#' + heading.id + if (idx === lastIdx || heading.getBoundingClientRect().top + getNumericStyleVal(heading, 'paddingTop') > ceil) { + activeFragments.push(fragment) + if (lastActiveFragment.indexOf(fragment) < 0) links[fragment].classList.add('is-active') + } else if (~lastActiveFragment.indexOf(fragment)) { + links[lastActiveFragment.shift()].classList.remove('is-active') + } + }) + list.scrollTop = list.scrollHeight - list.offsetHeight + lastActiveFragment = activeFragments.length > 1 ? activeFragments : activeFragments[0] + return + } + if (Array.isArray(lastActiveFragment)) { + lastActiveFragment.forEach(function (fragment) { + links[fragment].classList.remove('is-active') + }) + lastActiveFragment = undefined + } + var activeFragment + headings.some(function (heading) { + if (heading.getBoundingClientRect().top + getNumericStyleVal(heading, 'paddingTop') - buffer > ceil) return true + activeFragment = '#' + heading.id + }) + if (activeFragment) { + if (activeFragment === lastActiveFragment) return + if (lastActiveFragment) links[lastActiveFragment].classList.remove('is-active') + var activeLink = links[activeFragment] + activeLink.classList.add('is-active') + if (list.scrollHeight > list.offsetHeight) { + list.scrollTop = Math.max(0, activeLink.offsetTop + activeLink.offsetHeight - list.offsetHeight) + } + lastActiveFragment = activeFragment + } else if (lastActiveFragment) { + links[lastActiveFragment].classList.remove('is-active') + lastActiveFragment = undefined + } + } + + function find (selector, from) { + return [].slice.call((from || document).querySelectorAll(selector)) + } + + function getNumericStyleVal (el, prop) { + return parseFloat(window.getComputedStyle(el)[prop]) + } +})() diff --git a/doc/doc-ui/src/js/03-fragment-jumper.js b/doc/doc-ui/src/js/03-fragment-jumper.js new file mode 100644 index 0000000..d112e47 --- /dev/null +++ b/doc/doc-ui/src/js/03-fragment-jumper.js @@ -0,0 +1,42 @@ +;(function () { + 'use strict' + + var article = document.querySelector('article.doc') + var toolbar = document.querySelector('.toolbar') + var supportsScrollToOptions = 'scrollTo' in document.documentElement + + function decodeFragment (hash) { + return hash && (~hash.indexOf('%') ? decodeURIComponent(hash) : hash).slice(1) + } + + function computePosition (el, sum) { + return article.contains(el) ? computePosition(el.offsetParent, el.offsetTop + sum) : sum + } + + function jumpToAnchor (e) { + if (e) { + if (e.altKey || e.ctrlKey) return + window.location.hash = '#' + this.id + e.preventDefault() + } + var y = computePosition(this, 0) - toolbar.getBoundingClientRect().bottom + var instant = e === false && supportsScrollToOptions + instant ? window.scrollTo({ left: 0, top: y, behavior: 'instant' }) : window.scrollTo(0, y) + } + + window.addEventListener('load', function jumpOnLoad (e) { + var fragment, target + if ((fragment = decodeFragment(window.location.hash)) && (target = document.getElementById(fragment))) { + jumpToAnchor.call(target, false) + setTimeout(jumpToAnchor.bind(target, false), 250) + } + window.removeEventListener('load', jumpOnLoad) + }) + + Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function (el) { + var fragment, target + if ((fragment = decodeFragment(el.hash)) && (target = document.getElementById(fragment))) { + el.addEventListener('click', jumpToAnchor.bind(target)) + } + }) +})() diff --git a/doc/doc-ui/src/js/04-page-versions.js b/doc/doc-ui/src/js/04-page-versions.js new file mode 100644 index 0000000..c4c1378 --- /dev/null +++ b/doc/doc-ui/src/js/04-page-versions.js @@ -0,0 +1,17 @@ +;(function () { + 'use strict' + + var toggle = document.querySelector('.page-versions .version-menu-toggle') + if (!toggle) return + + var selector = document.querySelector('.page-versions') + + toggle.addEventListener('click', function (e) { + selector.classList.toggle('is-active') + e.stopPropagation() // trap event + }) + + document.documentElement.addEventListener('click', function () { + selector.classList.remove('is-active') + }) +})() diff --git a/doc/doc-ui/src/js/05-mobile-navbar.js b/doc/doc-ui/src/js/05-mobile-navbar.js new file mode 100644 index 0000000..892d0e7 --- /dev/null +++ b/doc/doc-ui/src/js/05-mobile-navbar.js @@ -0,0 +1,20 @@ +;(function () { + 'use strict' + + var navbarBurger = document.querySelector('.navbar-burger') + if (!navbarBurger) return + navbarBurger.addEventListener('click', toggleNavbarMenu.bind(navbarBurger)) + + function toggleNavbarMenu (e) { + e.stopPropagation() // trap event + document.documentElement.classList.toggle('is-clipped--navbar') + this.classList.toggle('is-active') + var menu = document.getElementById(this.dataset.target) + if (menu.classList.toggle('is-active')) { + menu.style.maxHeight = '' + var expectedMaxHeight = window.innerHeight - Math.round(menu.getBoundingClientRect().top) + var actualMaxHeight = parseInt(window.getComputedStyle(menu).maxHeight, 10) + if (actualMaxHeight !== expectedMaxHeight) menu.style.maxHeight = expectedMaxHeight + 'px' + } + } +})() diff --git a/doc/doc-ui/src/js/06-copy-to-clipboard.js b/doc/doc-ui/src/js/06-copy-to-clipboard.js new file mode 100644 index 0000000..df86df8 --- /dev/null +++ b/doc/doc-ui/src/js/06-copy-to-clipboard.js @@ -0,0 +1,80 @@ +;(function () { + 'use strict' + + var CMD_RX = /^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm + var LINE_CONTINUATION_RX = /( ) *\\\n *|\\\n( ?) */g + var TRAILING_SPACE_RX = / +$/gm + + var config = (document.getElementById('site-script') || { dataset: {} }).dataset + var uiRootPath = config.uiRootPath == null ? '.' : config.uiRootPath + var svgAs = config.svgAs + var supportsCopy = window.navigator.clipboard + + ;[].slice.call(document.querySelectorAll('.doc pre.highlight, .doc .literalblock pre')).forEach(function (pre) { + var code, language, lang, copy, toast, toolbox + if (pre.classList.contains('highlight')) { + code = pre.querySelector('code') + if ((language = code.dataset.lang) && language !== 'console') { + ;(lang = document.createElement('span')).className = 'source-lang' + lang.appendChild(document.createTextNode(language)) + } + } else if (pre.innerText.startsWith('$ ')) { + var block = pre.parentNode.parentNode + block.classList.remove('literalblock') + block.classList.add('listingblock') + pre.classList.add('highlightjs', 'highlight') + ;(code = document.createElement('code')).className = 'language-console hljs' + code.dataset.lang = 'console' + code.appendChild(pre.firstChild) + pre.appendChild(code) + } else { + return + } + ;(toolbox = document.createElement('div')).className = 'source-toolbox' + if (lang) toolbox.appendChild(lang) + if (supportsCopy) { + ;(copy = document.createElement('button')).className = 'copy-button' + copy.setAttribute('title', 'Copy to clipboard') + if (svgAs === 'svg') { + var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg') + svg.setAttribute('class', 'copy-icon') + var use = document.createElementNS('http://www.w3.org/2000/svg', 'use') + use.setAttribute('href', uiRootPath + '/img/octicons-16.svg#icon-clippy') + svg.appendChild(use) + copy.appendChild(svg) + } else { + var img = document.createElement('img') + img.src = uiRootPath + '/img/octicons-16.svg#view-clippy' + img.alt = 'copy icon' + img.className = 'copy-icon' + copy.appendChild(img) + } + ;(toast = document.createElement('span')).className = 'copy-toast' + toast.appendChild(document.createTextNode('Copied!')) + copy.appendChild(toast) + toolbox.appendChild(copy) + } + pre.parentNode.appendChild(toolbox) + if (copy) copy.addEventListener('click', writeToClipboard.bind(copy, code)) + }) + + function extractCommands (text) { + var cmds = [] + var m + while ((m = CMD_RX.exec(text))) cmds.push(m[1].replace(LINE_CONTINUATION_RX, '$1$2')) + return cmds.join(' && ') + } + + function writeToClipboard (code) { + var text = code.innerText.replace(TRAILING_SPACE_RX, '') + if (code.dataset.lang === 'console' && text.startsWith('$ ')) text = extractCommands(text) + window.navigator.clipboard.writeText(text).then( + function () { + this.classList.add('clicked') + this.offsetHeight // eslint-disable-line no-unused-expressions + this.classList.remove('clicked') + }.bind(this), + function () {} + ) + } +})() diff --git a/doc/doc-ui/src/js/07-download-pdf.js b/doc/doc-ui/src/js/07-download-pdf.js new file mode 100644 index 0000000..1d8fa7a --- /dev/null +++ b/doc/doc-ui/src/js/07-download-pdf.js @@ -0,0 +1,20 @@ +;(function () { + 'use strict' + + var downloadButton = document.querySelector('#download') + + downloadButton.addEventListener('click', function () { + var articleContent = document.querySelector('article') + var title = document.querySelector('h1.page') + + var opt = { + margin: 1, + filename: title.textContent + '.pdf', + image: { type: 'jpeg', quality: 0.98 }, + html2canvas: { scale: 2 }, + pagebreak: { mode: ['avoid-all', 'css', 'legacy'] }, + } + + window.html2pdf().set(opt).from(articleContent).save() + }) +})() diff --git a/doc/doc-ui/src/js/vendor/highlight.bundle.js b/doc/doc-ui/src/js/vendor/highlight.bundle.js new file mode 100644 index 0000000..4d90370 --- /dev/null +++ b/doc/doc-ui/src/js/vendor/highlight.bundle.js @@ -0,0 +1,42 @@ +;(function () { + 'use strict' + + var hljs = require('highlight.js/lib/highlight') + hljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) + hljs.registerLanguage('bash', require('highlight.js/lib/languages/bash')) + hljs.registerLanguage('clojure', require('highlight.js/lib/languages/clojure')) + hljs.registerLanguage('cpp', require('highlight.js/lib/languages/cpp')) + hljs.registerLanguage('cs', require('highlight.js/lib/languages/cs')) + hljs.registerLanguage('css', require('highlight.js/lib/languages/css')) + hljs.registerLanguage('diff', require('highlight.js/lib/languages/diff')) + hljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile')) + hljs.registerLanguage('elixir', require('highlight.js/lib/languages/elixir')) + hljs.registerLanguage('go', require('highlight.js/lib/languages/go')) + hljs.registerLanguage('groovy', require('highlight.js/lib/languages/groovy')) + hljs.registerLanguage('haskell', require('highlight.js/lib/languages/haskell')) + hljs.registerLanguage('java', require('highlight.js/lib/languages/java')) + hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript')) + hljs.registerLanguage('json', require('highlight.js/lib/languages/json')) + hljs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin')) + hljs.registerLanguage('lua', require('highlight.js/lib/languages/lua')) + hljs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown')) + hljs.registerLanguage('nix', require('highlight.js/lib/languages/nix')) + hljs.registerLanguage('none', require('highlight.js/lib/languages/plaintext')) + hljs.registerLanguage('objectivec', require('highlight.js/lib/languages/objectivec')) + hljs.registerLanguage('perl', require('highlight.js/lib/languages/perl')) + hljs.registerLanguage('php', require('highlight.js/lib/languages/php')) + hljs.registerLanguage('properties', require('highlight.js/lib/languages/properties')) + hljs.registerLanguage('puppet', require('highlight.js/lib/languages/puppet')) + hljs.registerLanguage('python', require('highlight.js/lib/languages/python')) + hljs.registerLanguage('ruby', require('highlight.js/lib/languages/ruby')) + hljs.registerLanguage('rust', require('highlight.js/lib/languages/rust')) + hljs.registerLanguage('scala', require('highlight.js/lib/languages/scala')) + hljs.registerLanguage('shell', require('highlight.js/lib/languages/shell')) + hljs.registerLanguage('sql', require('highlight.js/lib/languages/sql')) + hljs.registerLanguage('swift', require('highlight.js/lib/languages/swift')) + hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml')) + hljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')) + ;[].slice.call(document.querySelectorAll('pre code.hljs[data-lang]')).forEach(function (node) { + hljs.highlightBlock(node) + }) +})() diff --git a/doc/doc-ui/src/layouts/404.hbs b/doc/doc-ui/src/layouts/404.hbs new file mode 100644 index 0000000..8caab1d --- /dev/null +++ b/doc/doc-ui/src/layouts/404.hbs @@ -0,0 +1,11 @@ + + + +{{> head defaultPageTitle='Page Not Found'}} + + +{{> header}} +{{> body}} +{{> footer}} + + diff --git a/doc/doc-ui/src/layouts/default.hbs b/doc/doc-ui/src/layouts/default.hbs new file mode 100644 index 0000000..02c84f4 --- /dev/null +++ b/doc/doc-ui/src/layouts/default.hbs @@ -0,0 +1,12 @@ + + + +{{> head defaultPageTitle='Untitled'}} + + +{{> header}} +{{> body}} +{{> footer}} + + + diff --git a/doc/doc-ui/src/partials/article-404.hbs b/doc/doc-ui/src/partials/article-404.hbs new file mode 100644 index 0000000..436b280 --- /dev/null +++ b/doc/doc-ui/src/partials/article-404.hbs @@ -0,0 +1,10 @@ +
      +

      {{{or page.title 'Page Not Found'}}}

      +
      +

      The page you’re looking for does not exist. It may have been moved. You can{{#with site.homeUrl}} return to the start page, or{{/with}} follow one of the links in the navigation to the left.

      +
      +
      +

      If you arrived on this page by clicking on a link, please notify the owner of the site that the link is broken. +If you typed the URL of this page manually, please double check that you entered the address correctly.

      +
      +
      diff --git a/doc/doc-ui/src/partials/article.hbs b/doc/doc-ui/src/partials/article.hbs new file mode 100644 index 0000000..81dac29 --- /dev/null +++ b/doc/doc-ui/src/partials/article.hbs @@ -0,0 +1,7 @@ +
      +{{#with page.title}} +

      {{{this}}}

      +{{/with}} +{{{page.contents}}} +{{> pagination}} +
      diff --git a/doc/doc-ui/src/partials/body.hbs b/doc/doc-ui/src/partials/body.hbs new file mode 100644 index 0000000..4a0ac25 --- /dev/null +++ b/doc/doc-ui/src/partials/body.hbs @@ -0,0 +1,4 @@ +
      +{{> nav}} +{{> main}} +
      diff --git a/doc/doc-ui/src/partials/breadcrumbs.hbs b/doc/doc-ui/src/partials/breadcrumbs.hbs new file mode 100644 index 0000000..24b6fb0 --- /dev/null +++ b/doc/doc-ui/src/partials/breadcrumbs.hbs @@ -0,0 +1,20 @@ + diff --git a/doc/doc-ui/src/partials/comment.hbs b/doc/doc-ui/src/partials/comment.hbs new file mode 100644 index 0000000..333aba1 --- /dev/null +++ b/doc/doc-ui/src/partials/comment.hbs @@ -0,0 +1,3 @@ +
      +
      +
      \ No newline at end of file diff --git a/doc/doc-ui/src/partials/footer-content.hbs b/doc/doc-ui/src/partials/footer-content.hbs new file mode 100644 index 0000000..cdeeb47 --- /dev/null +++ b/doc/doc-ui/src/partials/footer-content.hbs @@ -0,0 +1,4 @@ +
      +

      This page was built using the Antora default UI.

      +

      The source code for this UI is licensed under the terms of the MPL-2.0 license.

      +
      diff --git a/doc/doc-ui/src/partials/footer-scripts.hbs b/doc/doc-ui/src/partials/footer-scripts.hbs new file mode 100644 index 0000000..3d9b577 --- /dev/null +++ b/doc/doc-ui/src/partials/footer-scripts.hbs @@ -0,0 +1,5 @@ + + +{{#if env.SITE_SEARCH_PROVIDER}} +{{> search-scripts}} +{{/if}} diff --git a/doc/doc-ui/src/partials/footer.hbs b/doc/doc-ui/src/partials/footer.hbs new file mode 100644 index 0000000..9d49017 --- /dev/null +++ b/doc/doc-ui/src/partials/footer.hbs @@ -0,0 +1,2 @@ +{{> footer-content}} +{{> footer-scripts}} diff --git a/doc/doc-ui/src/partials/head-icons.hbs b/doc/doc-ui/src/partials/head-icons.hbs new file mode 100644 index 0000000..4400e2f --- /dev/null +++ b/doc/doc-ui/src/partials/head-icons.hbs @@ -0,0 +1 @@ + {{!-- --}} diff --git a/doc/doc-ui/src/partials/head-info.hbs b/doc/doc-ui/src/partials/head-info.hbs new file mode 100644 index 0000000..07efba1 --- /dev/null +++ b/doc/doc-ui/src/partials/head-info.hbs @@ -0,0 +1,20 @@ + {{#with page.canonicalUrl}} + + {{/with}} + {{#unless (eq page.attributes.pagination undefined)}} + {{#with page.previous}} + + {{/with}} + {{#with page.next}} + + {{/with}} + {{/unless}} + {{#with page.description}} + + {{/with}} + {{#with page.keywords}} + + {{/with}} + {{#with (or antoraVersion site.antoraVersion)}} + + {{/with}} diff --git a/doc/doc-ui/src/partials/head-meta.hbs b/doc/doc-ui/src/partials/head-meta.hbs new file mode 100644 index 0000000..1aef0af --- /dev/null +++ b/doc/doc-ui/src/partials/head-meta.hbs @@ -0,0 +1 @@ + {{!-- Add additional meta tags here --}} diff --git a/doc/doc-ui/src/partials/head-prelude.hbs b/doc/doc-ui/src/partials/head-prelude.hbs new file mode 100644 index 0000000..a8b267d --- /dev/null +++ b/doc/doc-ui/src/partials/head-prelude.hbs @@ -0,0 +1,2 @@ + + diff --git a/doc/doc-ui/src/partials/head-scripts.hbs b/doc/doc-ui/src/partials/head-scripts.hbs new file mode 100644 index 0000000..dd75393 --- /dev/null +++ b/doc/doc-ui/src/partials/head-scripts.hbs @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/doc-ui/src/partials/head-styles.hbs b/doc/doc-ui/src/partials/head-styles.hbs new file mode 100644 index 0000000..dae4bb1 --- /dev/null +++ b/doc/doc-ui/src/partials/head-styles.hbs @@ -0,0 +1,2 @@ + + diff --git a/doc/doc-ui/src/partials/head-title.hbs b/doc/doc-ui/src/partials/head-title.hbs new file mode 100644 index 0000000..924fcac --- /dev/null +++ b/doc/doc-ui/src/partials/head-title.hbs @@ -0,0 +1 @@ + {{{detag (or page.title defaultPageTitle)}}}{{#with site.title}} :: {{this}}{{/with}} diff --git a/doc/doc-ui/src/partials/head.hbs b/doc/doc-ui/src/partials/head.hbs new file mode 100644 index 0000000..7dd18b2 --- /dev/null +++ b/doc/doc-ui/src/partials/head.hbs @@ -0,0 +1,7 @@ +{{> head-prelude}} +{{> head-title}} +{{> head-info}} +{{> head-styles}} +{{> head-meta}} +{{> head-scripts}} +{{> head-icons}} diff --git a/doc/doc-ui/src/partials/header-content.hbs b/doc/doc-ui/src/partials/header-content.hbs new file mode 100644 index 0000000..3362887 --- /dev/null +++ b/doc/doc-ui/src/partials/header-content.hbs @@ -0,0 +1,50 @@ +
      + +
      diff --git a/doc/doc-ui/src/partials/header-scripts.hbs b/doc/doc-ui/src/partials/header-scripts.hbs new file mode 100644 index 0000000..b7d34d0 --- /dev/null +++ b/doc/doc-ui/src/partials/header-scripts.hbs @@ -0,0 +1,8 @@ +{{!-- Add header scripts here --}} + + + + + + + diff --git a/doc/doc-ui/src/partials/header.hbs b/doc/doc-ui/src/partials/header.hbs new file mode 100644 index 0000000..8a39422 --- /dev/null +++ b/doc/doc-ui/src/partials/header.hbs @@ -0,0 +1,2 @@ +{{> header-scripts}} +{{> header-content}} diff --git a/doc/doc-ui/src/partials/main.hbs b/doc/doc-ui/src/partials/main.hbs new file mode 100644 index 0000000..25835d5 --- /dev/null +++ b/doc/doc-ui/src/partials/main.hbs @@ -0,0 +1,12 @@ +
      +{{> toolbar}} +
      +{{#if (eq page.layout '404')}} +{{> article-404}} +{{else}} +{{> sidebar}} +
      +{{> article}} +{{/if}} +
      +
      \ No newline at end of file diff --git a/doc/doc-ui/src/partials/nav-explore.hbs b/doc/doc-ui/src/partials/nav-explore.hbs new file mode 100644 index 0000000..730b5f2 --- /dev/null +++ b/doc/doc-ui/src/partials/nav-explore.hbs @@ -0,0 +1,24 @@ + diff --git a/doc/doc-ui/src/partials/nav-menu.hbs b/doc/doc-ui/src/partials/nav-menu.hbs new file mode 100644 index 0000000..46adf92 --- /dev/null +++ b/doc/doc-ui/src/partials/nav-menu.hbs @@ -0,0 +1,10 @@ +{{#with page.navigation}} + +{{/with}} diff --git a/doc/doc-ui/src/partials/nav-toggle.hbs b/doc/doc-ui/src/partials/nav-toggle.hbs new file mode 100644 index 0000000..0f11e25 --- /dev/null +++ b/doc/doc-ui/src/partials/nav-toggle.hbs @@ -0,0 +1 @@ + diff --git a/doc/doc-ui/src/partials/nav-tree.hbs b/doc/doc-ui/src/partials/nav-tree.hbs new file mode 100644 index 0000000..79e3c1e --- /dev/null +++ b/doc/doc-ui/src/partials/nav-tree.hbs @@ -0,0 +1,21 @@ +{{#if navigation.length}} + +{{/if}} diff --git a/doc/doc-ui/src/partials/nav.hbs b/doc/doc-ui/src/partials/nav.hbs new file mode 100644 index 0000000..7e0f091 --- /dev/null +++ b/doc/doc-ui/src/partials/nav.hbs @@ -0,0 +1,8 @@ + diff --git a/doc/doc-ui/src/partials/page-versions.hbs b/doc/doc-ui/src/partials/page-versions.hbs new file mode 100644 index 0000000..a9792db --- /dev/null +++ b/doc/doc-ui/src/partials/page-versions.hbs @@ -0,0 +1,12 @@ +{{#with page.versions}} +
      + +
      + {{#each this}} + {{./displayVersion}} + {{/each}} +
      +
      +{{/with}} diff --git a/doc/doc-ui/src/partials/pagination.hbs b/doc/doc-ui/src/partials/pagination.hbs new file mode 100644 index 0000000..4f6300f --- /dev/null +++ b/doc/doc-ui/src/partials/pagination.hbs @@ -0,0 +1,12 @@ +{{#unless (eq page.attributes.pagination undefined)}} +{{#if (or page.previous page.next)}} + +{{/if}} +{{/unless}} diff --git a/doc/doc-ui/src/partials/sidebar.hbs b/doc/doc-ui/src/partials/sidebar.hbs new file mode 100644 index 0000000..ab00993 --- /dev/null +++ b/doc/doc-ui/src/partials/sidebar.hbs @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/doc/doc-ui/src/partials/toc.hbs b/doc/doc-ui/src/partials/toc.hbs new file mode 100644 index 0000000..da333a2 --- /dev/null +++ b/doc/doc-ui/src/partials/toc.hbs @@ -0,0 +1,3 @@ +
      +
      +
      diff --git a/doc/doc-ui/src/partials/toolbar.hbs b/doc/doc-ui/src/partials/toolbar.hbs new file mode 100644 index 0000000..9a56033 --- /dev/null +++ b/doc/doc-ui/src/partials/toolbar.hbs @@ -0,0 +1,13 @@ + diff --git a/doc/docs-site/antora-playbook.yml b/doc/docs-site/antora-playbook.yml new file mode 100644 index 0000000..6781b5e --- /dev/null +++ b/doc/docs-site/antora-playbook.yml @@ -0,0 +1,25 @@ +site: + title: SysOn documentation + start_page: syson::index.adoc + +output: + clean: true + +content: + sources: + - url: /usr/app + start_paths: doc/content + branches: HEAD + +ui: + bundle: + url: /home/antora/ui-bundle.zip + +asciidoc: + attributes: + icons: font + icon-set: fas + sectanchors: + sectlinks: + sectnums: all + page-toclevels: 3 diff --git a/doc/docs-site/package-lock.json b/doc/docs-site/package-lock.json new file mode 100644 index 0000000..dced352 --- /dev/null +++ b/doc/docs-site/package-lock.json @@ -0,0 +1,3341 @@ +{ + "name": "docs-site", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@antora/assembler": "^1.0.0-alpha.6", + "@antora/cli": "~3.1.4", + "@antora/collector-extension": "^1.0.0-alpha.3", + "@antora/lunr-extension": "^1.0.0-alpha.8", + "@antora/pdf-extension": "^1.0.0-alpha.6", + "@antora/site-generator-default": "~3.1.4", + "@antora/site-generator-with-pdf-exporter": "git+https://gitlab.com/opendevise/oss/antora-site-generator-with-pdf-exporter#v2.3.0-alpha.2" + } + }, + "node_modules/@antora/asciidoc-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.1.4.tgz", + "integrity": "sha512-ttsPR1J6gt7gGiCPrtfKX6tSbCHztzpRP0t+/6m+o3JCwXnjoD+dCi73hp8UCkyS+EU+GTo/FeXclYjZnUMXhQ==", + "dependencies": { + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "@asciidoctor/core": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/assembler": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@antora/assembler/-/assembler-1.0.0-alpha.6.tgz", + "integrity": "sha512-Gb8aEtVjdo4d5Dq+xm5yb+tFOUUtfSM+81wERt/t1pykRDtPcnAH1d7imNspVXiVMSA9rRvsmy38svLZgq/O4A==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "braces": "~3.0", + "js-yaml": "~4.1", + "picomatch": "~2.3", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/cli": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.1.4.tgz", + "integrity": "sha512-bLDt10VSOcqsHOM5kubjvx9HfdqzLESWEM4Hv0zOPsG3drXKZM/PkStDj6wVt2J6B4OtruusLH2CETKkd9vfGQ==", + "dependencies": { + "@antora/logger": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/user-require-helper": "~2.0", + "commander": "~10.0" + }, + "bin": { + "antora": "bin/antora" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/collector-extension": { + "version": "1.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@antora/collector-extension/-/collector-extension-1.0.0-alpha.3.tgz", + "integrity": "sha512-0yUc+lMVKzXUfOyelGjVO4C2h8ltzYupyWsjymfBPH251Noj9pSlAuzbldjlp7h92dJakgsz+NsLTHIj6lArbQ==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "isomorphic-git": "~1.21", + "js-yaml": "~4.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-aggregator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.1.4.tgz", + "integrity": "sha512-qurPCaV8w6S1u9aN53NWVyznVxo/Tnhiy2gFqQQPPZZkecGiEqiXm2bd6DF5WPDnb1GMWn87qX7b7uwxuJXB3Q==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "@antora/logger": "3.1.4", + "@antora/user-require-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "hpagent": "~1.2", + "isomorphic-git": "~1.21", + "js-yaml": "~4.1", + "multi-progress": "~4.0", + "picomatch": "~2.3", + "progress": "~2.0", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-classifier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.1.4.tgz", + "integrity": "sha512-23/C9uXPCGc7eCyCbr/BnppUzrXuY0uJJsemuVM0CF0woRJ+/Gat0wXwvTvZF4C7Lt1WBKlf2yT0Uk7hDOvg8A==", + "dependencies": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/logger": "3.1.4", + "mime-types": "~2.1", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/document-converter": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.1.4.tgz", + "integrity": "sha512-zKpT/I025yHfI0RMnNHDhH24Uj4XVLwIPOjzCWLiogIKXxUkFGltQ55V2Ph7LMysYF7/3RVwpQx3cYhJv5QXBQ==", + "dependencies": { + "@antora/asciidoc-loader": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/expand-path-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-2.0.0.tgz", + "integrity": "sha512-CSMBGC+tI21VS2kGW3PV7T2kQTM5eT3f2GTPVLttwaNYbNxDve08en/huzszHJfxo11CcEs26Ostr0F2c1QqeA==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@antora/file-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.1.4.tgz", + "integrity": "sha512-pHCy+wOkzjVPRF16fY4AzFcMt2B2c0r+CE5Er1quOhl19jL7wwaw3OmCuzgJ/BmZynDFyerlfLu2MPlWJVL1+Q==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "@antora/user-require-helper": "~2.0", + "gulp-vinyl-zip": "~2.5", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/logger": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.1.4.tgz", + "integrity": "sha512-E5B9NnZoe4wHOv1MWWYqaGDSOlADHGZd5mZJFvuA0guJCbO3amAhi3ZZ12tOOF3nvpZ3UABFMf9aIzojlERQJw==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "pino": "~8.14", + "pino-pretty": "~10.0", + "sonic-boom": "~3.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/lunr-extension": { + "version": "1.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@antora/lunr-extension/-/lunr-extension-1.0.0-alpha.8.tgz", + "integrity": "sha512-vdBgW3rsvbnmA236kT2Dckh9n0Db5za2/WxiLnFLgZ05ZO1KJQa9+R2WHaIFuGE7bKKbY+lqfM/i3KiezbL9YQ==", + "dependencies": { + "cheerio": "1.0.0-rc.10", + "html-entities": "~2.3", + "lunr": "~2.3", + "lunr-languages": "~1.9" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/navigation-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.1.4.tgz", + "integrity": "sha512-HfH77gDKiL4ZYUWtWtuJnJunWdALDyql198SNcLlD/Vs2ZatO3qucP6YZXSX6k8aqj9XU4L8xkhltr24iDWlkg==", + "dependencies": { + "@antora/asciidoc-loader": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/page-composer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.1.4.tgz", + "integrity": "sha512-9eZEqjhC7jgOpJLRIN5kQ3cmy2NiajAq9n4bmZdVsOYUdkyleiOdUSLuxwQOSY0PkKxEQTqBKzAFG9WL1pTODQ==", + "dependencies": { + "@antora/logger": "3.1.4", + "handlebars": "~4.7", + "require-from-string": "~2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/pdf-extension": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@antora/pdf-extension/-/pdf-extension-1.0.0-alpha.6.tgz", + "integrity": "sha512-oJ7zcYLF8oavEhZ7zgEZxHiNTdt8YmPNoKnPQ2ylGHdx/zFFLy9AZyEoTULs2S5lbx+0Z53Z23q3Gkp86f8EcQ==", + "dependencies": { + "@antora/assembler": "1.0.0-alpha.6" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/playbook-builder": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.1.4.tgz", + "integrity": "sha512-Vf3bx6Wqz4ATrKsYoOqu1UctNu8/H/WSVvrAHgsweoD5vPHElISQ2XH6cyOvRNf93Qn1ckQSgOLjpd9N2KE0aA==", + "dependencies": { + "@iarna/toml": "~2.2", + "convict": "~6.2", + "js-yaml": "~4.1", + "json5": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/redirect-producer": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.1.4.tgz", + "integrity": "sha512-1AdPwmCo1VCHpzL9AOgmte6zmzeNffdUXGl3oDE91wsNCNK/deZw4TgImVjou5NY5m34UTprIZSTZ5IsLt5ccQ==", + "dependencies": { + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-generator": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.1.4.tgz", + "integrity": "sha512-RG2w0U+8tljULY7iQqLW2FECaQJguSBd2HhR0exEiw/eHv66q6ANzsYI3AGTmLUqU/F2n30+gSZCeepVyO1gWA==", + "dependencies": { + "@antora/asciidoc-loader": "3.1.4", + "@antora/content-aggregator": "3.1.4", + "@antora/content-classifier": "3.1.4", + "@antora/document-converter": "3.1.4", + "@antora/file-publisher": "3.1.4", + "@antora/logger": "3.1.4", + "@antora/navigation-builder": "3.1.4", + "@antora/page-composer": "3.1.4", + "@antora/playbook-builder": "3.1.4", + "@antora/redirect-producer": "3.1.4", + "@antora/site-mapper": "3.1.4", + "@antora/site-publisher": "3.1.4", + "@antora/ui-loader": "3.1.4", + "@antora/user-require-helper": "~2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-generator-default": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-generator-default/-/site-generator-default-3.1.4.tgz", + "integrity": "sha512-BSsS1nrmT8v0uRyobDfNes6llUp3MoXKSbQTJ6PE8wNd8SLjXajTq6IXw6XJ8LnWzMFRvj0nPwqpA10jPDfbmg==", + "dependencies": { + "@antora/site-generator": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter": { + "version": "2.3.0-alpha.2", + "resolved": "git+ssh://git@gitlab.com/opendevise/oss/antora-site-generator-with-pdf-exporter.git#7ebf6044687b622a93f0bfe5aa10437bc3963a59", + "license": "MPL-2.0", + "dependencies": { + "@antora/expand-path-helper": "~1.0", + "camelcase-keys": "~6.2", + "js-yaml": "~3.14", + "lazystream": "~1.0", + "picomatch": "~2.2", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=10.17.0" + }, + "optionalDependencies": { + "@antora/asciidoc-loader": "~2 >=2.3.4", + "@antora/content-aggregator": "~2 >=2.3.4", + "@antora/content-classifier": "~2 >=2.3.4", + "@antora/document-converter": "~2 >=2.3.4", + "@antora/navigation-builder": "~2 >=2.3.4", + "@antora/page-composer": "~2 >=2.3.4", + "@antora/playbook-builder": "~2 >=2.3.4", + "@antora/redirect-producer": "~2 >=2.3.4", + "@antora/site-mapper": "~2 >=2.3.4", + "@antora/site-publisher": "~2 >=2.3.4", + "@antora/ui-loader": "~2 >=2.3.4" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/asciidoc-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-2.3.4.tgz", + "integrity": "sha512-IQ0d/hnOCGZXzTYUwKAw2BlyRMI4Kg/zu7XejQ6ERIncjuUUv/+PhlzVxoJNT0r9uasJFHDlZ7l3X53Hn+MUuQ==", + "optional": true, + "dependencies": { + "asciidoctor.js": "1.5.9", + "opal-runtime": "1.0.11" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/content-aggregator": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-2.3.4.tgz", + "integrity": "sha512-ZwlGm/t90PUnGVo+pir71O+wC+gyXnVuhoAed+9bBLjsiGI7EGUzwUEXSZqHRSihPx5XLFj6pZinoCGX+uabcw==", + "optional": true, + "dependencies": { + "@antora/expand-path-helper": "~1.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "camelcase-keys": "~6.2", + "fs-extra": "~8.1", + "isomorphic-git": "0.78.5", + "js-yaml": "~3.14", + "matcher": "~2.1", + "mime-types": "~2.1", + "multi-progress": "~2.0", + "picomatch": "~2.2", + "through2": "~4.0", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/content-classifier": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-2.3.4.tgz", + "integrity": "sha512-DR4I6dLSZEFOS3T0F/hYwLf3AGY2Rb3e9j8V8ygEFzdP8OySAAZWyTjjJPF4pJZqjWtqD7s7S1f5/cCI83977Q==", + "optional": true, + "dependencies": { + "@antora/asciidoc-loader": "2.3.4", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/document-converter": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-2.3.4.tgz", + "integrity": "sha512-Fo2SKdX3BlNrvfQEBOi2II+YmYzdEqKQ5+lO2pzxJuNBfqN0kJJYYk30jFPR27h6QuU43U/XZgufyDt+FjfdZg==", + "optional": true, + "dependencies": { + "@antora/asciidoc-loader": "2.3.4" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/expand-path-helper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-1.0.0.tgz", + "integrity": "sha512-hg3y6M3OvRTb7jtLAnwwloYDxafbyKYttcf16kGCXvP7Wqosh7c+Ag+ltaZ7VSebpzpphO/umb/BXdpU7rxapw==" + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/navigation-builder": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-2.3.4.tgz", + "integrity": "sha512-55I7p9tNTernQ/YR1+mp6RRXMV5EcU8q20Tdodt3mazdm3ObTe9E9XVAvUDFmDzRA27D0eb06jVRwLoth1gHYA==", + "optional": true, + "dependencies": { + "@antora/asciidoc-loader": "2.3.4" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/page-composer": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-2.3.4.tgz", + "integrity": "sha512-xY0O9X87DzcoP6k/5Jx55ysy0iQIhgav3q1JbOQK/FoYQYHbiQgmVWOjJdqh5nZw57ih3yE20JROPuYqOYuUZA==", + "optional": true, + "dependencies": { + "handlebars": "~4.7", + "require-from-string": "~2.0" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/playbook-builder": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-2.3.4.tgz", + "integrity": "sha512-iPjBndcoZhWqpN608WOkXKUUD94b3JX38igebshiT5/NRINJbeEclpdEX/gPv8D1Z1JcrSVGURZQO1uML76dkg==", + "optional": true, + "dependencies": { + "@iarna/toml": "~2.2", + "camelcase-keys": "~6.2", + "convict": "~6.0", + "js-yaml": "~3.14", + "json5": "~2.1" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/redirect-producer": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-2.3.4.tgz", + "integrity": "sha512-148amiLc+1Pod6kluAOBke8OATFWFUW3LZdTPFVfqX1lJolCp5ciOnGciy52sIIysSyVkQUjotEUhqGO9Af1EQ==", + "optional": true, + "dependencies": { + "@antora/asciidoc-loader": "2.3.4", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/site-mapper": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-2.3.4.tgz", + "integrity": "sha512-GVghn6ausIWZlUfbEEdDD4YB7M1mWJAUMokyha9sE5w0gyYoWwukKWQiwCwk/JhvnwXunMLhEUm6y2nrHEmlLw==", + "optional": true, + "dependencies": { + "@antora/content-classifier": "2.3.4", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/site-publisher": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-2.3.4.tgz", + "integrity": "sha512-7xI/5OdjKq5tkdGzE0ABkl/QpIcgtnof+rnIWZweQKeQtA3LWutvEHtdIeXLQt0oNZmE/kf45FwC2XCg9/ptDg==", + "optional": true, + "dependencies": { + "@antora/expand-path-helper": "~1.0", + "fs-extra": "~8.1", + "gulp-vinyl-zip": "~2.2", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/@antora/ui-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-2.3.4.tgz", + "integrity": "sha512-eorTmZW7zc6ZHgGLt3Vrq7mzPuobPeJnyfli50/m/DIQ91slkqjPKUYGcq4paPEz6IWoa7LT2ZwtwA5KzMyTPg==", + "optional": true, + "dependencies": { + "@antora/expand-path-helper": "~1.0", + "bl": "~4.0", + "cache-directory": "~2.0", + "camelcase-keys": "~6.2", + "fs-extra": "~8.1", + "got": "~9.6", + "gulp-vinyl-zip": "~2.2", + "js-yaml": "~3.14", + "minimatch-all": "~1.1", + "through2": "~4.0", + "vinyl": "~2.2", + "vinyl-fs": "~3.0" + }, + "engines": { + "node": ">=8.11.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/convict": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.1.tgz", + "integrity": "sha512-M4YNNq5NV4/VS8JhvBSHAokwvQRL4evEuU0VFe1GNPiqnj9TAkLXpf39ImCCVZlsp3CFp04bc/kRSWPGsJGJWg==", + "optional": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/gulp-vinyl-zip": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.2.1.tgz", + "integrity": "sha512-9lwCZUkrENzP649hVQB2r+8GgeGtVrqA2fEeVDX6aYr6+yJjdczWu0r1C6WvbZdzhXcA61MtR5MEyjR9a3D7cw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "optional": true, + "dependencies": { + "queue": "^4.2.1", + "through": "^2.3.8", + "through2": "^2.0.3", + "vinyl": "^2.0.2", + "vinyl-fs": "^3.0.3", + "yauzl": "^2.2.1", + "yazl": "^2.2.1" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/gulp-vinyl-zip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/gulp-vinyl-zip/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "optional": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/isomorphic-git": { + "version": "0.78.5", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-0.78.5.tgz", + "integrity": "sha512-LrF5t9x7RdFeg84NsYpZo9qF1MZeb56LpBm6Jv47qMjnWMv0Il/3wPTA8I/lUYywgVbvF/e7xypHauj5auKW3w==", + "optional": true, + "dependencies": { + "async-lock": "^1.1.0", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "git-apply-delta": "0.0.7", + "globalyzer": "^0.1.4", + "globrex": "^0.1.2", + "ignore": "^5.1.4", + "marky": "^1.2.1", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^3.0.2" + }, + "bin": { + "isogit": "cli.js" + }, + "engines": { + "node": ">=7.6.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "optional": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/multi-progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-2.0.0.tgz", + "integrity": "sha512-ArGgS/Qib/X2FWfE6CVpic+Z0C9kQuhiK9HQtz5pcCfsXwMzoNnXP6FJlplNAMsJuoLtWA8bAoPV36ezT2IFGw==", + "optional": true, + "dependencies": { + "progress": "^1.1.8" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "optional": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@antora/site-generator-with-pdf-exporter/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "optional": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@antora/site-mapper": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.1.4.tgz", + "integrity": "sha512-HWtOnxv467sdafG39AxPtEFKrZxkWpBaxmRGzgPELFUdnZxaI4fzeIyVj7CE8AJunVq5KMIqZpca2redLC5CJA==", + "dependencies": { + "@antora/content-classifier": "3.1.4", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-publisher": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.1.4.tgz", + "integrity": "sha512-mBw9eDgtblL54S2NSJ5tbHReA+0tSURFYu7wUTiZ7knnM8c0nyJmcwrOyv5lImaFlPHC3qt1oXuewyhAeqSYDA==", + "dependencies": { + "@antora/file-publisher": "3.1.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/ui-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.1.4.tgz", + "integrity": "sha512-J1eGOr4bdou6Kb7RfhSNMLwNHPywZ42OB3wUsBFgWtRNDah+iMN1A1OzmtAixcc9FlmKm6oKjyw3TpD9D65hrA==", + "dependencies": { + "@antora/expand-path-helper": "~2.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "glob-stream": "~7.0", + "gulp-vinyl-zip": "~2.5", + "hpagent": "~1.2", + "js-yaml": "~4.1", + "picomatch": "~2.3", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/user-require-helper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-2.0.0.tgz", + "integrity": "sha512-5fMfBZfw4zLoFdDAPMQX6Frik90uvfD8rXOA4UpXPOUikkX4uT1Rk6m0/4oi8oS3fcjiIl0k/7Nc+eTxW5TcQQ==", + "dependencies": { + "@antora/expand-path-helper": "~2.0" + }, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@asciidoctor/core": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.6.tgz", + "integrity": "sha512-TmB2K5UfpDpSbCNBBntXzKHcAk2EA3/P68jmWvmJvglVUdkO9V6kTAuXVe12+h6C4GK0ndwuCrHHtEVcL5t6pQ==", + "dependencies": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "optional": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/asciidoctor.js": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/asciidoctor.js/-/asciidoctor.js-1.5.9.tgz", + "integrity": "sha512-k5JgwyV82TsiCpnYbDPReuHhzf/vRUt6NaZ+OGywkDDGeGG/CPfvN2Gd1MJ0iIZKDyuk4iJHOdY/2x1KBrWMzA==", + "deprecated": "Package no longer supported. Replaced by @asciidoctor/core", + "optional": true, + "dependencies": { + "opal-runtime": "1.0.11" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.4.tgz", + "integrity": "sha512-7tdr4EpSd7jJ6tuQ21vu2ke8w7pNEstzj1O8wwq6sNNzO3UDi5MA8Gny/gquCj7r2C6fHudg8tKRGyjRgmvNxQ==", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/bops": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.7.tgz", + "integrity": "sha512-oF8JFj2vZoTTzbS4haaB/37vqoJbZXxPBWmNdFONu3dUBW+zp7JcoIIYYd1r+4/YwFM8QUSR1u4rrPbtcdHsRg==", + "optional": true, + "dependencies": { + "base64-js": "0.0.2", + "to-utf8": "0.0.1" + } + }, + "node_modules/bops/node_modules/base64-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", + "integrity": "sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cache-directory": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cache-directory/-/cache-directory-2.0.0.tgz", + "integrity": "sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA==", + "dependencies": { + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "optional": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "optional": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "dependencies": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==" + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "optional": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/cloneable-readable/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/cloneable-readable/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "optional": true + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==" + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "optional": true + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + }, + "node_modules/fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "optional": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/git-apply-delta": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/git-apply-delta/-/git-apply-delta-0.0.7.tgz", + "integrity": "sha512-P99rChCrhraaY7D6E4NUotfhjzRRNvlf3Mumw9BHgOJFQTfYHhTwAgSTEtcBvb25iXttvMRLEHtzyz9mE2gLjQ==", + "optional": true, + "dependencies": { + "bops": "~0.0.6", + "varint": "0.0.3" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-7.0.0.tgz", + "integrity": "sha512-evR4kvr6s0Yo5t4CD4H171n4T8XcnPFznvsbeN8K9FPzc0Q0wYqcOWyGtck2qcvJSLXKnU6DnDyfmbDDabYvRQ==", + "dependencies": { + "extend": "^3.0.2", + "glob": "^7.2.0", + "glob-parent": "^6.0.2", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.1", + "pumpify": "^2.0.1", + "readable-stream": "^3.6.0", + "remove-trailing-separator": "^1.1.0", + "to-absolute-glob": "^2.0.2", + "unique-stream": "^2.3.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalyzer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", + "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", + "optional": true + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "optional": true + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "optional": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "optional": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gulp-vinyl-zip": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.5.0.tgz", + "integrity": "sha512-KPi5/2SUmkXXDvKU4L2U1dkPOP03SbhONTOgNZlL23l9Yopt+euJ1bBXwWrSMbsyh3JLW/TYuC8CI4c4Kq4qrw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "queue": "^4.2.1", + "through": "^2.3.8", + "through2": "^2.0.3", + "vinyl": "^2.0.2", + "vinyl-fs": "^3.0.3", + "yauzl": "^2.2.1", + "yazl": "^2.2.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "dependencies": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/help-me/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/help-me/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/help-me/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "optional": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isomorphic-git": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.21.0.tgz", + "integrity": "sha512-ZqCAUM63CYepA3fB8H7NVyPSiOkgzIbQ7T+QPrm9xtYgQypN9JUJ5uLMjB5iTfomdJf3mdm6aSxjZwnT6ubvEA==", + "dependencies": { + "async-lock": "^1.1.0", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^4.0.1" + }, + "bin": { + "isogit": "cli.cjs" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "optional": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optional": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "optional": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + }, + "node_modules/lunr-languages": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.9.0.tgz", + "integrity": "sha512-Be5vFuc8NAheOIjviCRms3ZqFFBlzns3u9DXpPSZvALetgnydAN0poV71pVLFn0keYy/s4VblMMkqewTLe+KPg==" + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "optional": true + }, + "node_modules/matcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz", + "integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==", + "optional": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz", + "integrity": "sha512-g1wQmOhBRTqQw9dqkpkhKMT6LvJREygVzRRTqJUe/B6NCtM1+exYpzjR9mS0vGj7q3gbHdHpqNVoCXtZk6qk6A==", + "optional": true, + "dependencies": { + "minimatch": "^3.0.2" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", + "dependencies": { + "minimist": "^1.2.5" + } + }, + "node_modules/multi-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz", + "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==", + "peerDependencies": { + "progress": "^2.0.0" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", + "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opal-runtime": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/opal-runtime/-/opal-runtime-1.0.11.tgz", + "integrity": "sha512-L+6pnRvXPlDtbamBRnJAnB9mEMXmsIQ/b+0r/2xJ5/n/nxheEkLo+Pm5QNQ08LEbEN9TI6/kedhIspqRRu6tXA==", + "optional": true, + "dependencies": { + "glob": "6.0.4", + "xmlhttprequest": "1.8.0" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/opal-runtime/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/ordered-read-streams/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pino": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.1.tgz", + "integrity": "sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.1.tgz", + "integrity": "sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.0.tgz", + "integrity": "sha512-zKFjYXBzLaLTEAN1ayKpHXtL5UeRQC7R3lvhKe7fWs7hIVEjKGG/qIXwQt9HmeUp71ogUd/YcW+LmMwRp4KT6Q==", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.1.tgz", + "integrity": "sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/process-warning": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", + "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/queue": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", + "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", + "dependencies": { + "inherits": "~2.0.0" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "optional": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/should-proxy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", + "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", + "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/to-utf8": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", + "integrity": "sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==", + "optional": true + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "engines": { + "node": ">=8.11" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "optional": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/varint/-/varint-0.0.3.tgz", + "integrity": "sha512-SZOWhAh1wbG6fxU5QJMudwrudDkVFCQJlcZEDFQoKdcpr0q2YG5VuS24WSA+w4m0N+9SNe1S2Zd5IdLWXaHyKQ==", + "optional": true + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-fs/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/vinyl-fs/node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/vinyl-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/vinyl-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/vinyl-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + } +} diff --git a/doc/docs-site/package.json b/doc/docs-site/package.json new file mode 100644 index 0000000..fc2a6b1 --- /dev/null +++ b/doc/docs-site/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "dependencies": { + "@antora/assembler": "^1.0.0-alpha.6", + "@antora/cli": "~3.1.4", + "@antora/collector-extension": "^1.0.0-alpha.3", + "@antora/lunr-extension": "^1.0.0-alpha.8", + "@antora/pdf-extension": "^1.0.0-alpha.6", + "@antora/site-generator-default": "~3.1.4", + "@antora/site-generator-with-pdf-exporter": "git+https://gitlab.com/opendevise/oss/antora-site-generator-with-pdf-exporter#v2.3.0-alpha.2" + } +} diff --git a/doc/generate.bash b/doc/generate.bash new file mode 100755 index 0000000..ebe2f6e --- /dev/null +++ b/doc/generate.bash @@ -0,0 +1,16 @@ +#!/bin/bash + +set -x +set -e +# version : 0.1.0 + +SCRIPT=$(realpath "$0") +SCRIPTPATH=$(dirname "$SCRIPT") + +# Generate HTML / PDF +echo "Antora build" + + +docker build ${SCRIPTPATH} -t syson_doc_generator:local + +docker run -v $SCRIPTPATH/..:/usr/app:z --security-opt label=disable syson_doc_generator:local