diff --git a/.gitignore b/.gitignore
index 664a12f27e4..7a19eaec876 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,8 +59,11 @@ deploy_key
jsdocs/
site/
-# Custom files
-docs/pages/CLI.md
-
-# Needed for packages/server & packages/project
-!**/test/fixtures/**/node_modules
\ No newline at end of file
+# Needed for packages/server
+!packages/**/test/fixtures/**/node_modules
+
+# Documentation
+packages/documentation/docs/pages/CLI.md
+packages/documentation/.vitepress/dist
+packages/documentation/.vitepress/cache
+packages/documentation/dist
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 515ba010b7f..00000000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,92 +0,0 @@
-site_name: UI5 CLI
-site_url: 'https://ui5.github.io/cli/' # required for working 404 page
-repo_name: 'UI5/cli'
-repo_url: 'https://github.com/UI5/cli'
-edit_uri: ./edit/main/docs # default points to "master" branch
-docs_dir: 'docs' # default
-site_dir: 'site' # default
-copyright: '© Copyright 2025, SAP SE and UI5 CLI Contributors'
-nav:
- - Home: index.md
- - Getting Started: pages/GettingStarted.md
- - UI5 CLI: pages/CLI.md
- - Configuration: pages/Configuration.md
- - Development:
- - Overview: pages/Overview.md
- - OpenUI5: pages/OpenUI5.md
- - SAPUI5: pages/SAPUI5.md
- - Workspace: pages/Workspace.md
- - Extensibility:
- - Custom Tasks: pages/extensibility/CustomTasks.md
- - Custom Server Middleware: pages/extensibility/CustomServerMiddleware.md
- - Project Shims: pages/extensibility/ProjectShims.md
- - Modules:
- - Server: pages/Server.md
- - Builder: pages/Builder.md
- - Project: pages/Project.md
- - File System: pages/FileSystem.md
- - Upgrade Guides:
- - Migrate to v4: updates/migrate-v4.md
- - Migrate to v3: updates/migrate-v3.md
- - Migrate to v2: updates/migrate-v2.md
- - Migrate to v1: updates/migrate-v1.md
- - FAQ: pages/FAQ.md
- - Miscellaneous:
- - Troubleshooting: pages/Troubleshooting.md
- - Benchmarking: pages/Benchmarking.md
- - ECMAScript Support: pages/ESSupport.md
- - Code Analysis: pages/CodeAnalysis.md
- - API Reference: 'api/index.html' # only available in final build, not serve
-
-theme:
- name: 'material'
- custom_dir: 'overrides'
- palette:
- primary: 'blue'
- accent: 'blue'
- logo: 'images/logo.svg'
- favicon: 'images/favicon.png'
- font: false
- features:
- - navigation.expand
-
-extra_css:
- - 'stylesheets/extra.css'
-
-extra:
- version:
- provider: mike
-
-plugins:
- - search
- - minify:
- minify_html: true
- - mike:
- canonical_version: null
- version_selector: true
- css_dir: stylesheets
- javascript_dir: js
-
-markdown_extensions:
- - admonition
- - attr_list
- - codehilite:
- guess_lang: false
- - toc:
- permalink: true
- # PyMdown Extensions Documentation: https://facelessuser.github.io/pymdown-extensions/extensions/betterem/
- - pymdownx.betterem:
- smart_enable: all
- - pymdownx.details
- - pymdownx.inlinehilite
- - pymdownx.magiclink
- - pymdownx.mark
- - pymdownx.keys
- - pymdownx.smartsymbols
- - pymdownx.tabbed:
- alternate_style: true
- - pymdownx.superfences
- - pymdownx.tasklist:
- custom_checkbox: true
- - pymdownx.tilde
- - pymdownx.caret
diff --git a/overrides/partials/footer.html b/overrides/partials/footer.html
deleted file mode 100644
index 0be1a43854f..00000000000
--- a/overrides/partials/footer.html
+++ /dev/null
@@ -1,58 +0,0 @@
-{#-
- This file was initialy copied from https://github.com/squidfunk/mkdocs-material/blob/-/material/partials/footer.html
- and adjusted to offer a customized footer according to the SAP Web Presence Policy.
- See also the corresponding stylesheet content in /docs/stylesheets/extra.css.
--#}
-
diff --git a/package.json b/package.json
index c770b1f7139..b07efce20fc 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,6 @@
"jsdoc-generate": "node ./scripts/isWorkspace.js && npm run jsdoc-generate-workspace || npm run jsdoc-generate-local",
"jsdoc-generate-local": "jsdoc -c ./jsdoc.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ./ || (echo 'Error during JSDoc generation! Check log.' && exit 1)",
"jsdoc-generate-workspace": "jsdoc -c ./jsdoc-workspace.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ../ || (echo 'Error during JSDoc generation! Check log.' && exit 1)",
- "docs": "bash ./scripts/serveDocs.sh",
- "docs-generate": "bash ./scripts/buildDocs.sh && open-cli http://localhost:8000 && ws --compress -d site",
"schema-generate": "node ./scripts/buildSchema.js ui5",
"schema-workspace-generate": "node ./scripts/buildSchema.js ui5-workspace",
"generate-cli-doc": "node ./scripts/generateCliDoc.js",
diff --git a/packages/documentation/.vitepress/config.ts b/packages/documentation/.vitepress/config.ts
new file mode 100644
index 00000000000..a4fbfcce5f8
--- /dev/null
+++ b/packages/documentation/.vitepress/config.ts
@@ -0,0 +1,283 @@
+// using the defineConfig helper will provide TypeScript-powered
+// intellisense for config options
+import { defineConfig } from "vitepress";
+
+// markdown
+import MarkdownItImplicitFigures from "markdown-it-implicit-figures";
+
+export default defineConfig({
+
+ base: "/cli/v5/", // GitHub Pages deployment base path
+ srcDir: "docs",
+ outDir: "dist",
+ lang: "en-US",
+ title: "UI5 CLI",
+
+ description: "An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.",
+ lastUpdated: false, // disable git author info
+ cleanUrls: true,
+
+ vue: {
+ template: {
+ compilerOptions: {
+ // treat all tags with a "ui5-" prefix as custom elements
+ isCustomElement: (tag: string) => tag.includes("ui5-"),
+ },
+ },
+ },
+
+
+ head: [
+ [
+ "link",
+ { rel: "icon", type: "image/png", href: "./images/favicon.png" }
+
+ ]
+ ],
+
+ themeConfig: {
+
+
+ logo: {
+ light: "/images/Logo_B_RGB.png",
+ dark: "/images/Logo_O_RGB.png"
+ },
+ externalLinkIcon: false,
+ outline: [1, 3],
+
+ nav: nav(),
+
+ sidebar: {
+ "/": guide(),
+ },
+
+ socialLinks: [
+
+ { icon: "github", link: "https://github.com/UI5/cli" },
+ ],
+
+ footer: {
+
+ message: `
+ © Copyright ${new Date().getFullYear()}, SAP SE and UI5 CLI Contributors
+ Legal Disclosure
+ Terms of Use
+ Privacy
+ Trademarks
+ `,
+
+
+ },
+
+ search: {
+ provider: "local",
+ //hotKeys: [], // disable hotkeys to avoid search while using UI5 web components input
+ },
+
+
+
+ },
+
+ markdown: {
+ // Configure the Markdown-it instance
+ config: (md) => {
+ // https://www.npmjs.com/package/markdown-it-implicit-figures
+ md.use(MarkdownItImplicitFigures, {
+ figcaption: true,
+ });
+ },
+ },
+
+
+ vite: {
+ build: {
+ chunkSizeWarningLimit: 4000, // chunk for local search index dominates
+ }
+ }
+});
+
+function nav() {
+ return [
+ {
+
+ text: 'V5',
+ items: [
+ {
+ text: 'V4',
+ link: '../v4/',
+ target: "_self"
+ },
+ {
+ text: 'V3',
+ link: '../v3/',
+ target: "_self"
+ },
+ {
+ text: 'V2',
+ link: '../v2/',
+ target: "_self"
+ }
+ ]
+ },
+ ];
+}
+
+function guide() {
+
+ return [
+
+ {
+ text: "Introduction",
+ collapsed: false,
+
+ items: [
+
+ {
+ text: "Home",
+ link: "/",
+ },
+ {
+ text: "Getting Started",
+ link: "/pages/GettingStarted",
+ },
+
+ ],
+
+ },
+ {
+ text: "UI5 CLI",
+ collapsed: true,
+ link: "/pages/CLI",
+
+
+ },
+ {
+ text: "Configuration",
+ collapsed: true,
+
+ link: "/pages/Configuration",
+
+ },
+ {
+ text: "Development",
+ collapsed: false,
+ items: [
+ {
+ text: "Overview",
+ link: "/pages/Overview",
+ },
+ {
+ text: "OpenUI5",
+ link: "/pages/OpenUI5",
+ },
+ {
+ text: "SAPUI5",
+ link: "/pages/SAPUI5",
+ },
+ {
+ text: "Workspace",
+ link: "/pages/Workspace",
+ },
+
+ ],
+ },
+
+ {
+ text: "Extensibility",
+ collapsed: false,
+ items: [
+ {
+ text: "Custom Tasks",
+ link: "/pages/extensibility/CustomTasks",
+ },
+ {
+ text: "Custom Server Middleware",
+ link: "/pages/extensibility/CustomServerMiddleware",
+ },
+ {
+ text: "Project Shims",
+ link: "/pages/extensibility/ProjectShims",
+ },
+ ],
+ },
+ {
+ text: "Modules",
+ collapsed: false,
+ items: [
+ {
+ text: "Server",
+ link: "/pages/Server",
+ },
+ {
+ text: "Builder",
+ link: "/pages/Builder",
+ },
+ {
+ text: "Project",
+ link: "/pages/Project",
+ },
+ {
+ text: "File System",
+ link: "/pages/FileSystem",
+ },
+ ],
+ },
+ {
+ text: "FAQ",
+ collapsed: false,
+ link: "/pages/FAQ",
+
+ },
+ {
+ text: "Upgrade Guides",
+ collapsed: false,
+ items: [
+ {
+ text: "Migrate to v4",
+ link: "/updates/migrate-v4",
+ },
+ {
+ text: "Migrate to v3",
+ link: "/updates/migrate-v3",
+ },
+ {
+ text: "Migrate to v2",
+ link: "/updates/migrate-v2",
+ },
+ {
+ text: "Migrate to v1",
+ link: "/updates/migrate-v1",
+ },
+ ],
+ },
+ {
+ text: "Miscellaneous",
+ collapsed: false,
+ items: [
+ {
+ text: "Troubleshooting",
+ link: "/pages/Troubleshooting",
+ },
+ {
+ text: "Benchmarking",
+ link: "/pages/Benchmarking",
+ },
+ {
+ text: "ECMAScript Support",
+ link: "/pages/ESSupport",
+ },
+ {
+ text: "Code Analysis",
+ link: "/pages/CodeAnalysis",
+ },
+ ],
+ },
+ {
+ text: "API Reference",
+ link: "https://ui5.github.io/cli/api/index.html",
+
+ },
+
+ ];
+}
+
diff --git a/packages/documentation/.vitepress/theme/components/Badgen.vue b/packages/documentation/.vitepress/theme/components/Badgen.vue
new file mode 100644
index 00000000000..db0dda9a8a0
--- /dev/null
+++ b/packages/documentation/.vitepress/theme/components/Badgen.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/documentation/.vitepress/theme/custom.css b/packages/documentation/.vitepress/theme/custom.css
new file mode 100644
index 00000000000..e666cba1d66
--- /dev/null
+++ b/packages/documentation/.vitepress/theme/custom.css
@@ -0,0 +1,303 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ /**
+ * Colors
+ * -------------------------------------------------------------------------- */
+ :root {
+ /* Fire */
+ --ui5-fire-main: #ff5a37; /* outrageous-orange-400 */
+ --ui5-fire-secondary: #ffa42c; /* sunshade-400 */
+ --ui5-fire-background: #000000; /* black */
+
+ /* Water */
+ --ui5-water-main: #1873b4; /* denim-600 */
+ --ui5-water-secondary: #53b8de; /* viking-400 */
+ --ui5-water-background: #ffffff; /* white */
+
+ /* Tailwind CSS Color Generator
+ ** https://uicolors.app/create
+ */
+
+ /* VP */
+ /* The most solid color used mainly for colored text. */
+ --vp-c-brand-1: #1873b4; /* lochmara-600 */
+ /* The color used mainly for hover state of the button. */
+ --vp-c-brand-2: #53b8de; /* lochmara-500 */
+ /* The color for solid background, such as bg color of the button. */
+ --vp-c-brand-3: #1873b4; /* endeavour-700 */
+ /* The color used for subtle background such as custom container or badges. */
+ /* The soft color must be semi transparent alpha channel. */
+ /*--vp-c-brand-soft: rgba(12, 72, 120, 0.14);*/ /* --brand-dark-blue */
+ --vp-c-brand-soft: rgba(3, 103, 161, 0.14); /* lochmara-700 */
+ }
+ .dark {
+ /* The most solid color used mainly for colored text. */
+ --vp-c-brand-1: #ff5a37; /* lochmara-600 */
+ /* The color used mainly for hover state of the button. */
+ --vp-c-brand-2: #ffa42c; /* lochmara-500 */
+ /* The color for solid background, such as bg color of the button. */
+ --vp-c-brand-3: #ff5a37; /* endeavour-700 */
+
+ /* The bg color used for main screen */
+ --vp-c-bg: #000000;
+ /* The alternative bg color used in places such as "sidebar" or "code block". */
+
+ /* The elevated bg color. This is used at parts where it "floats", such as "dialog". */
+ /*--vp-c-bg-elv: red;*/ /* #1d2025;*/
+ /* The bg color to slightly ditinguish some components from the page.
+ ** Used for things like "carbon ads" or "table".
+ */
+ --vp-c-bg-soft: #2b313a; /* 202127 */
+ /* This is used for separators. This is used to divide sections within the same components,
+ ** such as having separator on "h2" heading.
+ */
+ --vp-c-divider: rgba(82,82,89,0.32); /*#2e2e32;*/
+ /* This is designed for borders on interactive components.
+ ** For example this should be used for a button outline. */
+ /*--vp-c-border: #3c3f44; */
+ /* This is used to divide components in the page. For example the header and the rest of the page. */
+ /*--vp-c-gutter: var(--vp-c-bg-alt);*/ /* #000000 */
+ --vp-c-gutter: transparent; /* #000000 */
+ }
+
+ img {
+ @apply rounded-md;
+ }
+
+ /* fix Tailwind default issue for Search button */
+ .DocSearch.button,
+ .DocSearch[type="button"] {
+ background-color: var(--vp-c-bg-alt);
+ }
+}
+
+/* Implement udina design language by avoiding repeated utility patterns */
+@layer components {
+ /* reset vpdoc */
+ .vp-doc .u-list-reset {
+ @apply list-none list-image-none p-0 m-0;
+ }
+
+ .vp-doc .u-list-reset li + li {
+ @apply mt-0;
+ }
+
+ /* Default KBD
+ ** https://flowbite.com/docs/components/kbd/
+ */
+ .u-kbd {
+ @apply px-2 py-1 text-xs font-semibold text-gray-800 bg-gray-50 border border-gray-300 rounded-lg dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500;
+ }
+
+ /* udina design language */
+ .udina {
+ @apply font-sans font-extrabold;
+ }
+
+ .u-right-brand {
+ @apply float-right ml-4 w-12 md:ml-8 md:w-20 lg:w-24;
+ }
+
+ .u-p-white {
+ @apply p-2 bg-white;
+ }
+
+ .u-bar {
+ @apply flex flex-col md:flex-row md:justify-between md:items-center space-y-2 md:space-y-0;
+ }
+
+ .u-bar-content {
+ @apply flex items-center;
+ }
+
+ .u-bar-singleLineContent {
+ @apply flex md:items-center flex-col md:flex-row space-y-2 md:space-y-0;
+ }
+}
+
+/**
+ * Prototypes
+ * -------------------------------------------------------------------------- */
+
+/* disable anchor undeline */
+.vp-doc a {
+ text-decoration: none;
+}
+
+.u-pi {
+ color: transparent;
+ font-size: 1rem;
+ transition: all .2s ease-in-out;
+}
+
+.u-pi:hover {
+ font-size: 2rem;
+ color: inherit;
+}
+
+/**
+* Custom Block
+* -------------------------------------------------------------------------- */
+.vp-doc .custom-block {
+ padding: 16px;
+}
+
+.vp-doc .custom-block.tip {
+ border-color: var(--vp-c-tip-1);
+}
+
+.vp-doc .custom-block.warning {
+ border-color: var(--vp-c-warning-1);
+}
+
+.vp-doc .custom-block.danger {
+ border-color: var(--vp-c-danger-1);
+}
+
+.vp-doc .custom-block:not(.info) {
+ /*font-size: 95%;*/
+ border-width: 0 0 0 7px;
+}
+
+/* allow blue/udina color links in blocks */
+.vp-doc .custom-block a {
+ color: var(--vp-c-brand);
+}
+
+/* clearfix to avoid overlapping float-right image inside custom block */
+.vp-doc .custom-block:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+/**
+* zoom vanilla
+* -------------------------------------------------------------------------- */
+img[data-action="zoom"] {
+ cursor: zoom-in;
+}
+
+.zoom-img,
+.zoom-img-wrap {
+ position: relative;
+ z-index: 666;
+ /*z-index: 20;*/
+ transition: all 300ms;
+}
+
+img.zoom-img {
+ cursor: zoom-out;
+ /* UDINA */
+ /*z-index: 21;*/
+ /* reset u-right-brand margin-left */
+ margin: 0;
+}
+
+.zoom-overlay {
+ cursor: zoom-out;
+ z-index: 420;
+ background: #fff;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ filter: "alpha(opacity=0)";
+ opacity: 0;
+ transition: opacity 300ms;
+ /* UDINA */
+ background-color: var(--vp-c-bg);
+}
+
+.zoom-overlay-open .zoom-overlay {
+ filter: "alpha(opacity=100)";
+ opacity: 1;
+}
+
+/**
+* Blockquotes
+* -------------------------------------------------------------------------- */
+.udina-quote {
+ font-family: Georgia, Times, "Times New Roman", serif;
+ font-size: 1.25em;
+ font-style: italic;
+ position: relative;
+ z-index: 0;
+}
+
+.udina-quote:before {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: -4px;
+ height: 1em;
+ background-color: var(--c-bg);
+ width: 5px;
+ margin-top: -0.5em;
+}
+
+.udina-quote:after {
+ content: "“";
+ position: absolute;
+ top: 50%;
+ left: -0.5em;
+ color: var(--c-border-dark);
+ font-size: 2em;
+ line-height: 2em;
+ text-align: center;
+ text-indent: -2px;
+ width: 0.8em;
+ margin-top: -0.75em;
+}
+
+.udina-quote cite {
+ display: block;
+ font-size: 0.75em;
+ margin-top: 0.5em;
+}
+
+/**
+* Figure (used by markdown-it-figure)
+* -------------------------------------------------------------------------- */
+figure {
+ margin-inline-start: 0;
+ margin-inline-end: 0;
+ text-align: center;
+ text-align: -webkit-center;
+ margin: 1rem 0;
+}
+
+figcaption {
+ margin-top: 0.5rem;
+ font-style: italic;
+ font-size: small;
+ text-align: center;
+ text-align: -webkit-center;
+}
+
+/**
+* Learn more
+* -------------------------------------------------------------------------- */
+.learn-more {
+ font-style: italic;
+ margin-top: -5px;
+ margin-bottom: 5px;
+ display: block;
+}
+
+li .learn-more {
+ margin-top: 0;
+}
+
+.learn-more:before {
+ content: url(/learn-more.svg);
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ margin-right: 5px;
+ vertical-align: middle;
+}
diff --git a/packages/documentation/.vitepress/theme/index.ts b/packages/documentation/.vitepress/theme/index.ts
new file mode 100644
index 00000000000..82c2a17338e
--- /dev/null
+++ b/packages/documentation/.vitepress/theme/index.ts
@@ -0,0 +1,52 @@
+import DefaultTheme from "vitepress/theme";
+import { EnhanceAppContext } from 'vitepress/dist/client/index.js'
+import { useRoute } from "vitepress";
+import { onMounted, watch, nextTick } from "vue";
+
+// custom css
+import "./custom.css";
+
+// global components
+import Badgen from "@theme/components/Badgen.vue";
+
+export default {
+ ...DefaultTheme,
+
+ enhanceApp(ctx: EnhanceAppContext) {
+ // app is the Vue 3 app instance from `createApp()`.
+ // router is VitePress' custom router. `siteData` is
+ // a `ref` of current site-level metadata.
+
+ // extend default theme custom behaviour.
+ DefaultTheme.enhanceApp(ctx);
+
+ // register your custom global components
+ ctx.app.component("Badgen", Badgen);
+ },
+
+ setup() {
+ // this function will be executed inside VitePressApp's setup hook.
+ // all composition APIs are available here.
+ const route = useRoute();
+ let initZoom: () => void;
+
+ onMounted(async () => {
+ // initialize components based on data attribute selectors
+ //initCarousels();
+
+ (await import("./mixins/u-zoom-vanilla.js")).default;
+ initZoom = () => {
+ // no zoom inside links or disabled by class=".no-zoom"
+ document.querySelectorAll(".main img:not(a>img):not(.no-zoom)").forEach(el => {
+ el.setAttribute("data-action", "zoom");
+ });
+ };
+
+ initZoom();
+ });
+ watch(
+ () => route.path,
+ () => nextTick(() => initZoom())
+ );
+ },
+};
diff --git a/packages/documentation/.vitepress/theme/mixins/u-zoom-vanilla.js b/packages/documentation/.vitepress/theme/mixins/u-zoom-vanilla.js
new file mode 100644
index 00000000000..b8a9493e835
--- /dev/null
+++ b/packages/documentation/.vitepress/theme/mixins/u-zoom-vanilla.js
@@ -0,0 +1,265 @@
+export default +function () {
+ "use strict";
+ var OFFSET = 80
+
+ // From http://youmightnotneedjquery.com/#offset
+ function offset(element) {
+ var rect = element.getBoundingClientRect()
+ var scrollTop = window.pageYOffset ||
+ document.documentElement.scrollTop ||
+ document.body.scrollTop ||
+ 0
+ var scrollLeft = window.pageXOffset ||
+ document.documentElement.scrollLeft ||
+ document.body.scrollLeft ||
+ 0
+ return {
+ top: rect.top + scrollTop,
+ left: rect.left + scrollLeft
+ }
+ }
+
+ function zoomListener() {
+ var activeZoom = null
+ var initialScrollPosition = null
+ var initialTouchPosition = null
+
+ function listen() {
+ document.body.addEventListener('click', function (event) {
+ if (event.target.getAttribute('data-action') !== 'zoom' ||
+ event.target.tagName !== 'IMG') return
+
+ zoom(event)
+ })
+ }
+
+ function zoom(event) {
+ event.stopPropagation()
+
+ if (document.body.classList.contains('zoom-overlay-open')) return
+
+ if (event.metaKey || event.ctrlKey) return openInNewWindow()
+
+ closeActiveZoom({ forceDispose: true })
+
+ activeZoom = vanillaZoom(event.target)
+ activeZoom.zoomImage()
+
+ addCloseActiveZoomListeners()
+ }
+
+ function openInNewWindow() {
+ window.open(event.target.getAttribute('data-original') ||
+ event.target.currentSrc ||
+ event.target.src,
+ '_blank')
+ }
+
+ function closeActiveZoom(options) {
+ options = options || { forceDispose: false }
+ if (!activeZoom) return
+
+ activeZoom[options.forceDispose ? 'dispose' : 'close']()
+ removeCloseActiveZoomListeners()
+ activeZoom = null
+ }
+
+ function addCloseActiveZoomListeners() {
+ // todo(fat): probably worth throttling this
+ window.addEventListener('scroll', handleScroll)
+ document.addEventListener('click', handleClick)
+ document.addEventListener('keyup', handleEscPressed)
+ document.addEventListener('touchstart', handleTouchStart)
+ document.addEventListener('touchend', handleClick)
+ }
+
+ function removeCloseActiveZoomListeners() {
+ window.removeEventListener('scroll', handleScroll)
+ document.removeEventListener('keyup', handleEscPressed)
+ document.removeEventListener('click', handleClick)
+ document.removeEventListener('touchstart', handleTouchStart)
+ document.removeEventListener('touchend', handleClick)
+ }
+
+ function handleScroll(event) {
+ if (initialScrollPosition === null) initialScrollPosition = window.pageYOffset
+ var deltaY = initialScrollPosition - window.pageYOffset
+ if (Math.abs(deltaY) >= 40) closeActiveZoom()
+ }
+
+ function handleEscPressed(event) {
+ if (event.keyCode == 27) closeActiveZoom()
+ }
+
+ function handleClick(event) {
+ event.stopPropagation()
+ event.preventDefault()
+ closeActiveZoom()
+ }
+
+ function handleTouchStart(event) {
+ initialTouchPosition = event.touches[0].pageY
+ event.target.addEventListener('touchmove', handleTouchMove)
+ }
+
+ function handleTouchMove(event) {
+ if (Math.abs(event.touches[0].pageY - initialTouchPosition) <= 10) return
+ closeActiveZoom()
+ event.target.removeEventListener('touchmove', handleTouchMove)
+ }
+
+ return { listen: listen }
+ }
+
+ var vanillaZoom = (function () {
+ var fullHeight = null
+ var fullWidth = null
+ var overlay = null
+ var imgScaleFactor = null
+
+ var targetImage = null
+ var targetImageWrap = null
+ var targetImageClone = null
+
+ function zoomImage() {
+ var img = document.createElement('img')
+ img.onload = function () {
+ fullHeight = Number(img.height)
+ fullWidth = Number(img.width)
+ zoomOriginal()
+ }
+ img.src = targetImage.currentSrc || targetImage.src
+ }
+
+ function zoomOriginal() {
+ targetImageWrap = document.createElement('div')
+ targetImageWrap.className = 'zoom-img-wrap'
+ targetImageWrap.style.position = 'absolute'
+ targetImageWrap.style.top = offset(targetImage).top + 'px'
+ targetImageWrap.style.left = offset(targetImage).left + 'px'
+
+ targetImageClone = targetImage.cloneNode()
+ targetImageClone.style.visibility = 'hidden'
+
+ targetImage.style.width = targetImage.offsetWidth + 'px'
+ targetImage.parentNode.replaceChild(targetImageClone, targetImage)
+
+ document.body.appendChild(targetImageWrap)
+ targetImageWrap.appendChild(targetImage)
+
+ targetImage.classList.add('zoom-img')
+ targetImage.setAttribute('data-action', 'zoom-out')
+
+ overlay = document.createElement('div')
+ overlay.className = 'zoom-overlay'
+
+ document.body.appendChild(overlay)
+
+ calculateZoom()
+ triggerAnimation()
+ }
+
+ function calculateZoom() {
+ // UDINA
+ var maxWidth = window.innerWidth * 0.8
+ var ratio = targetImage.width / targetImage.height
+ var isSVG = targetImage?.src?.endsWith(".svg")
+
+ targetImage.offsetWidth // repaint before animating
+
+ //var originalFullImageWidth = fullWidth
+ var originalFullImageWidth = (isSVG) ? maxWidth : fullWidth
+ //var originalFullImageHeight = fullHeight
+ var originalFullImageHeight = (isSVG) ? maxWidth / ratio : fullHeight
+
+ var maxScaleFactor = originalFullImageWidth / targetImage.width
+ //var maxScaleFactor = originalFullImageWidth / originalFullImageHeight
+
+ var viewportHeight = window.innerHeight - OFFSET
+ var viewportWidth = window.innerWidth - OFFSET
+
+ var imageAspectRatio = originalFullImageWidth / originalFullImageHeight
+ var viewportAspectRatio = viewportWidth / viewportHeight
+
+ if (originalFullImageWidth < viewportWidth && originalFullImageHeight < viewportHeight) {
+ imgScaleFactor = maxScaleFactor
+ } else if (imageAspectRatio < viewportAspectRatio) {
+ imgScaleFactor = (viewportHeight / originalFullImageHeight) * maxScaleFactor
+ } else {
+ imgScaleFactor = (viewportWidth / originalFullImageWidth) * maxScaleFactor
+ }
+ }
+
+ function triggerAnimation() {
+ targetImage.offsetWidth // repaint before animating
+
+ var imageOffset = offset(targetImage)
+ var scrollTop = window.pageYOffset
+
+ var viewportY = scrollTop + (window.innerHeight / 2)
+ var viewportX = (window.innerWidth / 2)
+
+ var imageCenterY = imageOffset.top + (targetImage.height / 2)
+ var imageCenterX = imageOffset.left + (targetImage.width / 2)
+
+ var translateY = Math.round(viewportY - imageCenterY)
+ var translateX = Math.round(viewportX - imageCenterX)
+
+ var targetImageTransform = 'scale(' + imgScaleFactor + ')'
+ var targetImageWrapTransform =
+ 'translate(' + translateX + 'px, ' + translateY + 'px) translateZ(0)'
+
+ targetImage.style.webkitTransform = targetImageTransform
+ targetImage.style.msTransform = targetImageTransform
+ targetImage.style.transform = targetImageTransform
+
+ targetImageWrap.style.webkitTransform = targetImageWrapTransform
+ targetImageWrap.style.msTransform = targetImageWrapTransform
+ targetImageWrap.style.transform = targetImageWrapTransform
+
+ document.body.classList.add('zoom-overlay-open')
+ }
+
+ function close() {
+ document.body.classList.remove('zoom-overlay-open')
+ document.body.classList.add('zoom-overlay-transitioning')
+
+ targetImage.style.webkitTransform = ''
+ targetImage.style.msTransform = ''
+ targetImage.style.transform = ''
+
+ targetImageWrap.style.webkitTransform = ''
+ targetImageWrap.style.msTransform = ''
+ targetImageWrap.style.transform = ''
+
+ if (!'transition' in document.body.style) return dispose()
+
+ targetImageWrap.addEventListener('transitionend', dispose)
+ targetImageWrap.addEventListener('webkitTransitionEnd', dispose)
+ }
+
+ function dispose() {
+ targetImage.removeEventListener('transitionend', dispose)
+ targetImage.removeEventListener('webkitTransitionEnd', dispose)
+
+ if (!targetImageWrap || !targetImageWrap.parentNode) return
+
+ targetImage.classList.remove('zoom-img')
+ targetImage.style.width = ''
+ targetImage.setAttribute('data-action', 'zoom')
+
+ targetImageClone.parentNode.replaceChild(targetImage, targetImageClone)
+ targetImageWrap.parentNode.removeChild(targetImageWrap)
+ overlay.parentNode.removeChild(overlay)
+
+ document.body.classList.remove('zoom-overlay-transitioning')
+ }
+
+ return function (target) {
+ targetImage = target
+ return { zoomImage: zoomImage, close: close, dispose: dispose }
+ }
+ }())
+
+ zoomListener().listen()
+}()
\ No newline at end of file
diff --git a/packages/documentation/docs/images/Logo_B_RGB.png b/packages/documentation/docs/images/Logo_B_RGB.png
new file mode 100755
index 00000000000..088e1078b55
Binary files /dev/null and b/packages/documentation/docs/images/Logo_B_RGB.png differ
diff --git a/packages/documentation/docs/images/Logo_O_RGB.png b/packages/documentation/docs/images/Logo_O_RGB.png
new file mode 100755
index 00000000000..f83bc539455
Binary files /dev/null and b/packages/documentation/docs/images/Logo_O_RGB.png differ
diff --git a/packages/documentation/docs/images/O_UI5_H_noBG.png b/packages/documentation/docs/images/O_UI5_H_noBG.png
new file mode 100755
index 00000000000..b0aa012e1b9
Binary files /dev/null and b/packages/documentation/docs/images/O_UI5_H_noBG.png differ
diff --git a/packages/documentation/docs/index.md b/packages/documentation/docs/index.md
index b5d4500e27d..421519b3921 100644
--- a/packages/documentation/docs/index.md
+++ b/packages/documentation/docs/index.md
@@ -1,22 +1,38 @@
-
+---
+next:
+ text: 'Getting Started'
+ link: '/pages/GettingStarted'
+---
+
+
+
+
# UI5 CLI
An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework.
-!!! abstract "Project Rename"
- **UI5 Tooling has been renamed to UI5 CLI 🚨**
+::: warning Project Rename
+**UI5 Tooling has been renamed to UI5 CLI 🚨**
- Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)**
+Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)**
+:::
-!!! tip "New Release"
- **UI5 CLI V4 is here 🎉**
+::: tip New Release
+**UI5 CLI V4 is here 🎉**
- Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)**
+Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)**
- And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation.
+And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation.
+:::
-[**Get Started**](./pages/GettingStarted.md){: .md-button .md-button--primary .sap-icon-initiative }
+
+
+
## Main Features
@@ -99,40 +115,38 @@ info ProjectBuilder Executing cleanup tasks...
Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects.
This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.
-All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html).
-
-=== "ESM"
-
- ```js linenums="1"
- import {graphFromPackageDependencies} from "@ui5/project/graph";
-
- async function buildApp(projectPath, destinationPath) {
- const graph = await graphFromPackageDependencies({
- cwd: projectPath
- });
- await graph.build({
- destPath: destinationPath,
- selfContained: true,
- excludedTasks: ["transformBootstrapHtml"],
- includedDependencies: ["*"]
- });
- }
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- async function buildApp(projectPath, destinationPath) {
- const {graphFromPackageDependencies} =
- await import("@ui5/project/graph");
- const graph = await graphFromPackageDependencies({
- cwd: projectPath
- });
- await graph.build({
- destPath: destinationPath,
- selfContained: true,
- excludedTasks: ["transformBootstrapHtml"],
- includedDependencies: ["*"]
- });
- }
- ```
+All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v5/api/index.html).
+
+::: code-group
+```js [ESM]
+import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+async function buildApp(projectPath, destinationPath) {
+ const graph = await graphFromPackageDependencies({
+ cwd: projectPath
+ });
+ await graph.build({
+ destPath: destinationPath,
+ selfContained: true,
+ excludedTasks: ["transformBootstrapHtml"],
+ includedDependencies: ["*"]
+ });
+}
+```
+
+```js [CommonJS]
+async function buildApp(projectPath, destinationPath) {
+ const {graphFromPackageDependencies} =
+ await import("@ui5/project/graph");
+ const graph = await graphFromPackageDependencies({
+ cwd: projectPath
+ });
+ await graph.build({
+ destPath: destinationPath,
+ selfContained: true,
+ excludedTasks: ["transformBootstrapHtml"],
+ includedDependencies: ["*"]
+ });
+}
+```
+:::
\ No newline at end of file
diff --git a/packages/documentation/docs/pages/Benchmarking.md b/packages/documentation/docs/pages/Benchmarking.md
index 321ff98497f..364b9ec8fe9 100644
--- a/packages/documentation/docs/pages/Benchmarking.md
+++ b/packages/documentation/docs/pages/Benchmarking.md
@@ -102,11 +102,11 @@ The following is a walk-through on how to evaluate the performance impact of an
1. Prepare your change
1. Switch to the branch that contains your change
```sh
- (cd ../ui5-builder && git checkout my-change)
+ (cd ../packages/builder && git checkout my-change)
```
1. If your change requires different npm dependencies, reinstall them
```sh
- (cd ../ui5-builder && npm install)
+ (cd ../packages/builder && npm install)
```
1. The link from UI5 CLI is still in place. However, if you have changes in **multiple** UI5 CLI modules, you might need to `npm link` those again
diff --git a/packages/documentation/docs/pages/Builder.md b/packages/documentation/docs/pages/Builder.md
index b007bdac38a..ea77a9a7ff8 100644
--- a/packages/documentation/docs/pages/Builder.md
+++ b/packages/documentation/docs/pages/Builder.md
@@ -2,11 +2,17 @@
The [UI5 Builder](https://github.com/SAP/ui5-builder) module takes care of building your project.
+
+
Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks".
For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI.md#ui5-build), and you can include tasks using the `--include-task` parameter.
-[**API Reference**](https://ui5.github.io/cli/v4/api/index.html){: .md-button .sap-icon-initiative }
+
+
+
## Tasks
Tasks are specific build steps to be executed during build phase.
@@ -17,7 +23,7 @@ A project can add custom tasks to the build by using the [Custom Tasks Extensibi
### Standard Tasks
-All available standard tasks are documented [in the API reference](https://ui5.github.io/cli/v4/api/index.html). Search for `@ui5/builder/tasks/` to filter the API reference for all available tasks. The list below offers the actual order of their execution:
+All available standard tasks are documented [in the API reference](https://ui5.github.io/cli/v5/api/index.html). Search for `@ui5/builder/tasks/` to filter the API reference for all available tasks. The list below offers the actual order of their execution:
| Task | Type `application` | Type `library` | Type `theme-library` |
| ------------------------------ | :----------------: | :------------: | :------------------: |
@@ -65,24 +71,30 @@ Related to this, the bundling tasks will also incorporate the generated source m
#### Input Source Maps
-!!! info
- Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0).
+::: info Info
+Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0).
+
+:::
For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code.
UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze.
-!!! warning
- If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.
+::: warning Warning
+If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.
+
+It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.
- It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.
+Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`.
- Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`.
+:::
Expand the block below to view a diagram illustrating the minification process and source map handling.
-??? info "Minification Activity Diagram"
- { loading=lazy }
+::: info Minification Activity Diagram
+ 
+
+:::
### Generation of Supported Locales
@@ -145,7 +157,7 @@ Processors work with provided resources. They contain the actual build step logi
Processors can be implemented generically. The string replacer is an example for that.
Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step.
-To get a list of all available processors, please visit [the API reference](https://ui5.github.io/cli/v4/api/index.html) and search for `@ui5/builder/processors/`.
+To get a list of all available processors, please visit [the API reference](https://ui5.github.io/cli/v5/api/index.html) and search for `@ui5/builder/processors/`.
## Legacy Bundle Tooling (lbt)
JavaScript port of the "legacy" Maven/Java based bundle tooling.
@@ -166,17 +178,24 @@ If you see this error message, please adjust your code by applying one of the fo
**Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below:
-!!! example
- **Before**:
- ```js
- const myFancyModule = {};
- ```
+::: details Example
+**Before**:
+```js
+const myFancyModule = {};
+```
- **After**:
- ```js
- sap.ui.define([], () => {
- "use strict";
- const myFancyModule = {};
- return myFancyModule;
- });
- ```
+**After**:
+```js
+sap.ui.define([], () => {
+ "use strict";
+ const myFancyModule = {};
+ return myFancyModule;
+});
+```
+
+:::
+
diff --git a/packages/documentation/docs/pages/CLI.md b/packages/documentation/docs/pages/CLI.md
deleted file mode 100644
index 1ab4eef2089..00000000000
--- a/packages/documentation/docs/pages/CLI.md
+++ /dev/null
@@ -1,393 +0,0 @@
-# UI5 CLI
-## Requirements
-- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
-- [npm](https://www.npmjs.com/) version v8.0.0 or higher
-
-## Installation
-
-Install the CLI using the npm package manager:
-
-```sh
-npm install --global @ui5/cli
-
-# Verify installation
-ui5 --help
-```
-
-## Usage/Syntax
-
-`
- ui5 [options]
-`
-
-The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings).
-
-## Common options
-
-These options you can use with each command.
-
-| Option | Description | Details |
-| --- | --- | --- |
-| -h, --help | Show help | [boolean] |
-| -v, --version | Show version number | [boolean] |
-| -c, --config | Path to project configuration file in YAML format | [string] |
-| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] |
-| --workspace-config | Path to workspace configuration file in YAML format | [string] |
-| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] |
-| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] |
-| --verbose | Enable verbose logging. | [boolean] [default: false] |
-| --perf | Enable performance measurements and related logging. | [boolean] [default: false] |
-| --silent | Disable all log output. | [boolean] [default: false] |
-
-## Examples
-
-Execute command using a static dependency tree instead of resolving node package dependencies
-```
-ui5 --dependency-definition /path/to/projectDependencies.yaml
-```
-Execute command using a project configuration from custom path
-```
-ui5 --config /path/to/ui5.yaml
-```
-Execute command using the 'dolphin' workspace of a ui5-workspace.yaml
-```
-ui5 --workspace dolphin
-```
-Execute command with the maximum log output
-```
-ui5 --log-level silly
-```
-
-## Commands
-
-### ui5 add
-
-**Description**
-
-Add SAPUI5/OpenUI5 framework libraries to the project configuration.
-
-**Usage**
-
-`
-ui5 add [--development] [--optional]
-`
-
-
-**Options**
-
-| Option | Description | Details |
-| --- | --- | --- |
-| -D, --development, --dev | Add as development dependency | [boolean] [default: false] |
-| -O, --optional | Add as optional dependency | [boolean] [default: false] |
-
-**Positionals**
-
-| Positional | Description | Details |
-| --- | --- | --- |
-| framework-libraries | Framework library names | [array] [required] [default: []] |
-
-**Examples**
-
-Add the framework libraries sap.ui.core and sap.m as dependencies
-```
-ui5 add sap.ui.core sap.m
-```
-Add the framework library sap.ui.support as development dependency
-```
-ui5 add -D sap.ui.support
-```
-Add the framework library themelib_sap_fiori_3 as optional dependency
-```
-ui5 add --optional themelib_sap_fiori_3
-```
-### ui5 build
-
-**Description**
-
-Build project in current directory
-
-**Usage**
-
-`
-ui5 build
-`
-
-**Child Commands**
-
-| Command | Description |
-| --- | --- |
-| ui5 build jsdoc | Build JSDoc resources |
-| ui5 build preload | (default) Build project and create preload bundles |
-| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies |
-
-**Options**
-
-| Option | Description | Details |
-| --- | --- | --- |
-| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] |
-| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] |
-| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] |
-| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] |
-| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] |
-| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] |
-| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] |
-| --dest | Path of build destination | [string] [default: "./dist"] |
-| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] |
-| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] |
-| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] |
-| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] |
-| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] |
-| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] |
-| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] |
-| --output-style | Processes build results into a specific directory structure. - Flat: Omits the project namespace and the "resources" directory. - Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure. - Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] |
-
-
-**Examples**
-
-Preload build for project without dependencies
-```
-ui5 build
-```
-Self-contained build for project
-```
-ui5 build self-contained
-```
-Build project but only apply the minify- and generateComponentPreload tasks
-```
-ui5 build --exclude-task=* --include-task=minify generateComponentPreload
-```
-Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task
-```
-ui5 build --include-task=minify --exclude-task=generateComponentPreload
-```
-Preload build with experimental CSS variables artifacts
-```
-ui5 build --experimental-css-variables
-```
-### ui5 config
-
-**Description**
-
-Get and set UI5 CLI configuration options
-
-**Usage**
-
-`
-ui5 config
-`
-
-**Child Commands**
-
-| Command | Description |
-| --- | --- |
-| ui5 config set [value] | Set the value for a given configuration option. Clear an existing configuration by omitting the value |
-| ui5 config get | Get the value for a given configuration option |
-| ui5 config list | Display the current configuration |
-
-
-
-**Examples**
-
-Set a value for the ui5DataDir configuration
-```
-ui5 config set ui5DataDir /path/to/.ui5
-```
-Unset the current value of the ui5DataDir configuration
-```
-ui5 config set ui5DataDir
-```
-### ui5 init
-
-**Description**
-
-Initialize the UI5 CLI configuration for an application or library project.
-
-**Usage**
-
-`
-ui5 init
-`
-
-
-
-
-### ui5 remove
-
-**Description**
-
-Remove SAPUI5/OpenUI5 framework libraries from the project configuration.
-
-**Usage**
-
-`
-ui5 remove
-`
-
-
-
-**Positionals**
-
-| Positional | Description | Details |
-| --- | --- | --- |
-| framework-libraries | Framework library names | [array] [required] [default: []] |
-
-**Examples**
-
-Remove the framework libraries sap.ui.core and sap.m as dependencies
-```
-ui5 remove sap.ui.core sap.m
-```
-### ui5 serve
-
-**Description**
-
-Start a web server for the current project
-
-**Usage**
-
-`
-ui5 serve
-`
-
-
-**Options**
-
-| Option | Description | Details |
-| --- | --- | --- |
-| -p, --port | Port to bind on (default for HTTP: 8080, HTTP/2: 8443) | [number] |
-| -o, --open | Open web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL | [string] |
-| --h2 | Shortcut for enabling the HTTP/2 protocol for the web server | [boolean] [default: false] |
-| --simple-index | Use a simplified view for the server directory listing | [boolean] [default: false] |
-| --accept-remote-connections | Accept remote connections. By default the server only accepts connections from localhost | [boolean] [default: false] |
-| --key | Path to the private key | [string] [default: "~/.ui5/server/server.key"] |
-| --cert | Path to the certificate | [string] [default: "~/.ui5/server/server.crt"] |
-| --sap-csp-policies | Always send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode | [boolean] [default: false] |
-| --serve-csp-reports | Collects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json' | [boolean] [default: false] |
-| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] |
-| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] |
-
-
-**Examples**
-
-Start a web server for the current project
-```
-ui5 serve
-```
-Enable the HTTP/2 protocol for the web server (requires SSL certificate)
-```
-ui5 serve --h2
-```
-Use the project configuration from a custom path
-```
-ui5 serve --config /path/to/ui5.yaml
-```
-Use a static dependency definition file
-```
-ui5 serve --dependency-definition /path/to/projectDependencies.yaml
-```
-Listen to port 1337 and launch default browser with http://localhost:1337/test/QUnit.html
-```
-ui5 serve --port 1337 --open tests/QUnit.html
-```
-### ui5 tree
-
-**Description**
-
-Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account.
-
-**Usage**
-
-`
-ui5 tree
-`
-
-
-**Options**
-
-| Option | Description | Details |
-| --- | --- | --- |
-| --flat | Output a flat list of all dependencies instead of a tree hierarchy | [boolean] [default: false] |
-| --level | Limit the number of levels shown in the tree hierarchy | [number] |
-| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] |
-| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] |
-| | | |
-
-
-### ui5 use
-
-**Description**
-
-Initialize or update the project's framework configuration.
-
-**Usage**
-
-`
-ui5 use
-`
-
-
-
-**Positionals**
-
-| Positional | Description | Details |
-| --- | --- | --- |
-| framework-info | Framework name, version or both (name@version). Name can be "SAPUI5" or "OpenUI5" (case-insensitive). Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry. For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT". | [string] [required] |
-
-**Examples**
-
-Use SAPUI5 in the latest available version
-```
-ui5 use sapui5@latest
-```
-Use OpenUI5 in the latest available 1.76 patch version
-```
-ui5 use openui5@1.76
-```
-Use the latest available version of the configured framework
-```
-ui5 use latest
-```
-Use OpenUI5 in the latest available version
-```
-ui5 use openui5
-```
-### ui5 versions
-
-**Description**
-
-Shows the versions of all UI5 CLI modules
-
-**Usage**
-
-`
-ui5 versions
-`
-
-
-
-
-
-## Local vs. Global Installation
-In general, we recommend a global installation of the UI5 CLI (`npm install --global @ui5/cli`).
-
-However, it makes sense to add the UI5 CLI as a [devDependency](https://docs.npmjs.com/files/package.json#devdependencies) (`npm install --save-dev @ui5/cli`) to a project's `package.json`. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version.
-
-In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because [npm scripts](https://docs.npmjs.com/misc/scripts) defined in your `package.json` will also always invoke the local installation.
-
-This behavior can be disabled by setting the environment variable `UI5_CLI_NO_LOCAL`.
-
-**Example**
-You have a project located in the directory `/my-application`.
-
-You have installed the UI5 CLI globally. In addition, the project's `package.json` defines a `devDependency` to `@ui5/cli` and a start script `"ui5 serve"`. This means there are at least two installations of `@ui5/cli` on your system. Their versions might not match.
-
-This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project.
-
-| Current Working Directory | Command | Global UI5 CLI | Local UI5 CLI |
-| ------------------------- | ------------------------------- | :-----------------------------: | :----------------------------: |
-| `/` | `ui5 --version` | enabled |
-| `/my-application` | `ui5 --version` | | enabled |
-| `/my-application` | `ui5 serve` | | enabled |
-| `/my-application` | `UI5_CLI_NO_LOCAL=X ui5 serve` | enabled |
-| `/my-application` | `npm start` | | enabled |
-| `/my-application` | `UI5_CLI_NO_LOCAL=X npm start` | | enabled |
diff --git a/packages/documentation/docs/pages/CodeAnalysis.md b/packages/documentation/docs/pages/CodeAnalysis.md
index 9f7518a6c21..4978afa7f43 100644
--- a/packages/documentation/docs/pages/CodeAnalysis.md
+++ b/packages/documentation/docs/pages/CodeAnalysis.md
@@ -35,7 +35,7 @@ For example, top-level code is always executed. Flow-control statements in JavaS
Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies.
-The bundling implemented by UI5 CLI can either follow only eager dependencies (`resolve`: `true`) or additionally conditional dependencies (`resolveConditional`). For more information, see [Custom Bundling](https://ui5.github.io/cli/v4/pages/Configuration/#custom-bundling).
+The bundling implemented by UI5 CLI can either follow only eager dependencies (`resolve`: `true`) or additionally conditional dependencies (`resolveConditional`). For more information, see [Custom Bundling](https://ui5.github.io/cli/v5/pages/Configuration/#custom-bundling).
When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI.
@@ -88,27 +88,27 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless,
The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control.
-=== "Name of the XMLComposite is equal to fragment name"
-
- ```javascript hl_lines="4"
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- return XMLComposite.extend("composites.MyComposite", {}
- });
- ```
-
-=== "Dedicated fragment name"
-
- ```javascript hl_lines="5"
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- return XMLComposite.extend("composites.MyComposite", {
- fragment: "composites.custom.MyComposite"
- }
- });
- ```
+
+:::code-group
+
+```js [Name of the XMLComposite is equal to fragment name]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ return XMLComposite.extend("composites.MyComposite", {}
+});
+```
+
+```js [Dedicated fragment name]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ return XMLComposite.extend("composites.MyComposite", {
+ fragment: "composites.custom.MyComposite"
+ }
+});
+```
+:::
## Library Initialization
diff --git a/packages/documentation/docs/pages/Configuration.md b/packages/documentation/docs/pages/Configuration.md
index 451c0446c8d..511a8743f9d 100644
--- a/packages/documentation/docs/pages/Configuration.md
+++ b/packages/documentation/docs/pages/Configuration.md
@@ -2,12 +2,14 @@
A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory.
-!!! info
- This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**.
+::: info Info
+This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**.
+
+:::
## Validation / IDE support
-Starting with [Specification Version 2.0](#specification-version-20) the configuration is validated according to a JSON schema.
+Starting with [Specification Version 2.0](#specification-version-2-0) the configuration is validated according to a JSON schema.
The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json
The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server).
@@ -31,53 +33,49 @@ In addition, a project must define a `type`. This can be either `application`, `
The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder.md#types) for details.
-!!! example
-
- === "application"
-
- ```yaml
- specVersion: "4.0"
- type: application
- ```
-
- === "library"
+:::code-group Example
- ```yaml
- specVersion: "4.0"
- type: library
- ```
+```yaml [application]
+specVersion: "4.0"
+type: application
+```
- === "theme-library"
+```yaml [library]
+specVersion: "4.0"
+type: library
+```
- ```yaml
- specVersion: "4.0"
- type: theme-library
- ```
+```yaml [theme-library]
+specVersion: "4.0"
+type: theme-library
+```
- === "module"
+```yaml [module]
+specVersion: "4.0"
+type: module
+```
- ```yaml
- specVersion: "4.0"
- type: module
- ```
+:::
### Kind
The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions.
-This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks.md#custom-task-extension).
+This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility/CustomTasks.md#custom-task-extension).
### Metadata
-!!! example
- ```yaml
- metadata:
- name: my.company.project
- copyright: |-
- My Project
- * (c) Copyright 2009-${currentYear} My Company
- * Licensed under the XYZ License, Version n - see LICENSE.txt.
- ```
+::: details Example
+```yaml
+metadata:
+ name: my.company.project
+ copyright: |-
+ My Project
+ * (c) Copyright 2009-${currentYear} My Company
+ * Licensed under the XYZ License, Version n - see LICENSE.txt.
+```
+
+:::
#### name
@@ -117,81 +115,82 @@ Note that all configured paths must be written in POSIX (i.e. using only forward
#### Available Path Mappings
-=== "Applications"
- - `webapp`: Mapped to runtime path `/` (root)
+#### Applications
+- `webapp`: Mapped to runtime path `/` (root)
- ```yaml title="Default Configuration"
- resources:
- configuration:
- paths:
- webapp: webapp
- ```
+```yaml title="Default Configuration"
+resources:
+ configuration:
+ paths:
+ webapp: webapp
+```
-=== "Libraries"
- - `src`: Mapped to runtime path `/resources`
- - `test`: Mapped to runtime path `/test-resources`
+#### Libraries
+- `src`: Mapped to runtime path `/resources`
+- `test`: Mapped to runtime path `/test-resources`
- ```yaml title="Default Configuration"
- resources:
- configuration:
- paths:
- src: src
- test: test
- ```
+```yaml title="Default Configuration"
+resources:
+ configuration:
+ paths:
+ src: src
+ test: test
+```
-=== "Modules"
- Modules can map any virtual paths to any physical path within the project.
+#### Modules
+Modules can map any virtual paths to any physical path within the project.
- However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects.
+However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects.
+
+```yaml title="Example Configuration"
+resources:
+ configuration:
+ paths:
+ /resources/my/library/module-xy/: lib
+ /resources/my/library/module-xy-min/: dist
+```
+
+::: details Example
+For an application project with the following directory structure, you need the path mapping configuration given below:
+
+```
+my-app/
+\_ ui5.yaml
+\_ lib/
+ \_ js/
+ \_ app/
+```
+
+```yaml
+resources:
+ configuration:
+ paths:
+ webapp: lib/js/app
+```
- ```yaml title="Example Configuration"
- resources:
- configuration:
- paths:
- /resources/my/library/module-xy/: lib
- /resources/my/library/module-xy-min/: dist
- ```
-
-!!! example
- For an application project with the following directory structure, you need the path mapping configuration given below:
-
- ``` hl_lines="3 4 5" title="Directory Structure"
- my-app/
- \_ ui5.yaml
- \_ lib/
- \_ js/
- \_ app/
- ```
-
- ```yaml hl_lines="4" title="Path Mapping Configuration"
- resources:
- configuration:
- paths:
- webapp: lib/js/app
- ```
+:::
### Encoding of `*.properties` files
-!!! info
- This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0)
+::: info Info
+This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0)
-!!! example
- === "UTF-8"
+::: code-group Example
- ```yaml
- resources:
- configuration:
- propertiesFileSourceEncoding: UTF-8
- ```
+```yaml [UTF-8]
+resources:
+ configuration:
+ propertiesFileSourceEncoding: UTF-8
+```
- === "ISO-8859-1"
+```yaml [ISO-8859-1]
+resources:
+ configuration:
+ propertiesFileSourceEncoding: ISO-8859-1
+```
- ```yaml
- resources:
- configuration:
- propertiesFileSourceEncoding: ISO-8859-1
- ```
+:::
By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version:
@@ -206,19 +205,21 @@ UI5 CLI will read the corresponding files of the project in the given encoding.
## Custom Configuration
-!!! info
- This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.1 or higher.
+::: info
+This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.1 or higher.
+
+::: details Example
+```yaml
+customConfiguration:
+ myTool:
+ key: value
+ myOtherTool:
+ otherKey: otherValue
+```
-!!! example
- ```yaml
- customConfiguration:
- myTool:
- key: value
- myOtherTool:
- otherKey: otherValue
- ```
+:::
Custom configuration that is ignored by UI5 CLI.
This can be used to store UI5 specific configuration for third-party tools.
@@ -228,10 +229,12 @@ For third-party tools it is recommended to follow a namespace-like structure.
## Framework Configuration
-!!! info
- This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.0 or higher.
+::: info
+This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.0 or higher.
+
+:::
Define your project's framework dependencies.
@@ -239,21 +242,22 @@ Define your project's framework dependencies.
In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version:
-=== "OpenUI5"
- ```yaml
- framework:
- name: OpenUI5
- version: 1.82.0
- ```
+::: code-group
+
+```yaml [OpenUI5]
+framework:
+ name: OpenUI5
+ version: 1.82.0
+```
-=== "SAPUI5"
- ```yaml
- framework:
- name: SAPUI5
- version: 1.82.0
- ```
+```yaml [SAPUI5]
+framework:
+ name: SAPUI5
+ version: 1.82.0
+```
+:::
-If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5).
+If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5).
You can find an overview of the available versions for each framework here:
@@ -262,81 +266,85 @@ You can find an overview of the available versions for each framework here:
- [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html)
- *The lowest version supported by UI5 CLI is __1.76.0__*
-!!! info
- Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework.
+::: info
+Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework.
+
+:::
### Dependencies
-!!! example
- === "application"
- ```yaml
- specVersion: "4.0"
- type: application
- metadata:
- name: my.company.app
- framework:
- name: OpenUI5
- version: 1.82.0
- libraries:
- - name: sap.ui.core
- - name: sap.m
- - name: sap.ui.table
- - name: themelib_sap_fiori_3
- ```
-
- === "library"
- ```yaml
- specVersion: "4.0"
- type: library
- metadata:
- name: my.company.library
- framework:
- name: SAPUI5
- version: 1.82.0
- libraries:
- - name: sap.ui.core
- - name: sap.m
- - name: themelib_sap_belize
- optional: true
- - name: themelib_sap_bluecrystal
- optional: true
- - name: themelib_sap_fiori_3
- optional: true
- ```
-
- When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.
+::: code-group Example
+
+```yaml [application]
+specVersion: "4.0"
+type: application
+metadata:
+ name: my.company.app
+framework:
+ name: OpenUI5
+ version: 1.82.0
+ libraries:
+ - name: sap.ui.core
+ - name: sap.m
+ - name: sap.ui.table
+ - name: themelib_sap_fiori_3
+```
+
+```yaml [library]
+specVersion: "4.0"
+type: library
+metadata:
+ name: my.company.library
+framework:
+ name: SAPUI5
+ version: 1.82.0
+ libraries:
+ - name: sap.ui.core
+ - name: sap.m
+ - name: themelib_sap_belize
+ optional: true
+ - name: themelib_sap_bluecrystal
+ optional: true
+ - name: themelib_sap_fiori_3
+ optional: true
+```
+
+ When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.
+
+:::
#### Runtime Dependencies
All libraries required by your project must be listed in the `libraries` section of the framework configuration:
-=== "OpenUI5"
- ```yaml hl_lines="4-7"
- framework:
- name: OpenUI5
- version: 1.82.0
- libraries:
- - name: sap.ui.core
- - name: sap.m
- - name: sap.ui.table
- ```
-
-=== "SAPUI5"
- ```yaml hl_lines="4-7"
- framework:
- name: SAPUI5
- version: 1.82.0
- libraries:
- - name: sap.ui.core
- - name: sap.m
- - name: sap.ui.comp
- ```
+::: code-group
+
+```yaml [OpenUI5]
+framework:
+ name: OpenUI5
+ version: 1.82.0
+ libraries:
+ - name: sap.ui.core
+ - name: sap.m
+ - name: sap.ui.table
+```
+
+```yaml [SAPUI5]
+framework:
+ name: SAPUI5
+ version: 1.82.0
+ libraries:
+ - name: sap.ui.core
+ - name: sap.m
+ - name: sap.ui.comp
+```
+:::
#### Development Dependencies
Development dependencies are only installed if the project defining them is the current root project.
They are typically only required during the development of the project.
-```yaml hl_lines="3"
+```yaml
libraries:
- name: sap.ushell
development: true
@@ -348,7 +356,7 @@ Note that a development dependency cannot be optional and vice versa.
Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support.
You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency.
-```yaml hl_lines="3"
+```yaml
libraries:
- name: themelib_sap_fiori_3
optional: true
@@ -357,43 +365,45 @@ You can choose which theme library to use by the application that is consuming t
## Build Configuration
### Exclude Resources
-!!! example
- === "application"
- ```yaml
- builder:
- resources:
- excludes:
- # You can specify paths relative to the configured "webapp" directory
- - "index.html"
- # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
- - "/resources/my/project/namespace/test/**"
- ```
-
- === "library or theme-library"
- ```yaml
- builder:
- resources:
- excludes:
- # For libraries, all paths must be absolute, except for wildcards
- - "/resources/some/project/name/test_results/**"
- - "/test-resources/**"
- - "!/test-resources/some/project/name/demo-app/**"
- - "**/*.svg"
- ```
-
- === "module"
- !!! info
- For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0)
- and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher.
- ```yaml
- builder:
- resources:
- excludes:
- # For modules, all paths must be absolute, except for wildcards
- - "/resources/my/library/module-xy/min/**"
- - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
- - "**/*.svg"
- ```
+::: code-group Example
+
+```yaml [application]
+builder:
+ resources:
+ excludes:
+ # You can specify paths relative to the configured "webapp" directory
+ - "index.html"
+ # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
+ - "/resources/my/project/namespace/test/**"
+```
+
+```yaml [library or theme-library]
+builder:
+ resources:
+ excludes:
+ # For libraries, all paths must be absolute, except for wildcards
+ - "/resources/some/project/name/test_results/**"
+ - "/test-resources/**"
+ - "!/test-resources/some/project/name/demo-app/**"
+ - "**/*.svg"
+```
+```yaml [module]
+builder:
+ resources:
+ excludes:
+ # For modules, all paths must be absolute, except for wildcards
+ - "/resources/my/library/module-xy/min/**"
+ - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
+ - "**/*.svg"
+```
+:::
+
+::: info
+
+For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0)
+and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher.
+
+:::
You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks.
@@ -401,19 +411,21 @@ Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime pat
### Cachebuster
-!!! example
- === "time (default)"
- ```yaml
- builder:
- cachebuster:
- signatureType: time
- ```
- === "hash"
- ```yaml
- builder:
- cachebuster:
- signatureType: hash
- ```
+::: code-group Example
+
+```yaml [time (default)]
+builder:
+ cachebuster:
+ signatureType: time
+```
+
+```yaml [hash]
+builder:
+ cachebuster:
+ signatureType: hash
+```
+
+:::
By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details.
@@ -429,60 +441,64 @@ There are two ways to define the set of components for which preload bundles sho
#### paths
-!!! example
- ```yaml
- builder:
- componentPreload:
- paths:
- - "my/awesome/app/**/Component.js"
- ```
+::: details Example
+```yaml
+builder:
+ componentPreload:
+ paths:
+ - "my/awesome/app/**/Component.js"
+```
+
+:::
The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`.
#### namespaces
-!!! example
- ```yaml
- builder:
- componentPreload:
- namespaces:
- - "my/awesome/app"
- - "my/awesome/app/componentOne"
- - "my/awesome/app/componentTwo"
- ```
+::: details Example
+```yaml
+builder:
+ componentPreload:
+ namespaces:
+ - "my/awesome/app"
+ - "my/awesome/app/componentOne"
+ - "my/awesome/app/componentTwo"
+```
+
+:::
The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures.
#### excludes
-!!! info
- This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.3 or higher.
-
-!!! example
- === "Single Component"
-
- ```yaml
- builder:
- componentPreload:
- excludes:
- - "my/awesome/app/localService/**"
- ```
-
- === "Multiple Components"
-
- ```yaml
- builder:
- componentPreload:
- namespaces:
- - "my/awesome/app"
- - "my/awesome/app/componentOne"
- - "my/awesome/app/componentTwo"
- excludes:
- - "my/awesome/app/**/thirdparty/"
- - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"
- ```
+::: info
+This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.3 or higher.
+
+::: code-group Example
+
+```yaml [Single Component]
+builder:
+ componentPreload:
+ excludes:
+ - "my/awesome/app/localService/**"
+```
+
+
+```yaml [Multiple Components]
+builder:
+ componentPreload:
+ namespaces:
+ - "my/awesome/app"
+ - "my/awesome/app/componentOne"
+ - "my/awesome/app/componentTwo"
+ excludes:
+ - "my/awesome/app/**/thirdparty/"
+ - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"
+```
+
+:::
List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.
@@ -494,38 +510,42 @@ For projects of type `library` a `library-preload.js` bundle is generated by def
#### excludes
-!!! info
- This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.3 or higher.
-
-!!! example
- ```yaml
- builder:
- libraryPreload:
- excludes:
- - "my/lib/thirdparty/"
- - "!my/lib/thirdparty/NotExcluded.js"
- ```
+::: info
+This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.3 or higher.
+
+::: details Example
+```yaml
+builder:
+ libraryPreload:
+ excludes:
+ - "my/lib/thirdparty/"
+ - "!my/lib/thirdparty/NotExcluded.js"
+```
+:::
+
List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.
Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the library's namespace.
### Custom Tasks
-!!! example
- ```yaml
- builder:
- customTasks:
- - name: custom-task-1
- beforeTask: replaceCopyright
- configuration:
- some-key: some value
- - name: custom-task-2
- afterTask: custom-task-1
- configuration:
- color: blue
- ```
+::: details Example
+```yaml
+builder:
+ customTasks:
+ - name: custom-task-1
+ beforeTask: replaceCopyright
+ configuration:
+ some-key: some value
+ - name: custom-task-2
+ afterTask: custom-task-1
+ configuration:
+ color: blue
+```
+
+:::
You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks.md) for a detailed explanation and examples of the build extensibility.
@@ -537,13 +557,15 @@ Optionally, arbitrary `configuration` can be passed to the custom task.
### JSDoc
-!!! example
- ```yaml
- builder:
- jsdoc:
- excludes:
- - "some/project/name/thirdparty/**"
- ```
+::: details Example
+```yaml
+builder:
+ jsdoc:
+ excludes:
+ - "some/project/name/thirdparty/**"
+```
+
+:::
You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task.
@@ -553,22 +575,24 @@ These excludes are applied *before* any general builder excludes that have been
### Include Dependencies
-!!! info
- This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.5 or higher.
-
-!!! example
- ```yaml
- builder:
- settings:
- includeDependency:
- - shimmed.thirdparty.library
- includeDependencyRegExp:
- - ^com\.namespace
- includeDependencyTree:
- - sap.m
- ```
+::: info
+This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.5 or higher.
+
+::: details Example
+```yaml
+builder:
+ settings:
+ includeDependency:
+ - shimmed.thirdparty.library
+ includeDependencyRegExp:
+ - ^com\.namespace
+ includeDependencyTree:
+ - sap.m
+```
+
+:::
You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used.
@@ -582,29 +606,33 @@ The project's `ui5.yaml` file can contain a list of modules declared as glob pat
Note that patterns are always applied relative to the project's virtual source directory `/resources/`.
-!!! info
- This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0)
- and applies only to projects defining [Specification Version](#specification-versions)
- 2.6 or higher.
+::: info
+This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0)
+and applies only to projects defining [Specification Version](#specification-versions)
+2.6 or higher.
-!!! example
- ```yaml
- builder:
- minification:
- excludes:
- - "my/lib/thirdparty/"
- - "!my/lib/thirdparty/NotExcluded.js"
- ```
+::: details Example
+```yaml
+builder:
+ minification:
+ excludes:
+ - "my/lib/thirdparty/"
+ - "!my/lib/thirdparty/NotExcluded.js"
+```
+
+:::
## Server Configuration
-!!! example
- ```yaml
- server:
- settings:
- httpPort: 1337
- httpsPort: 1443
- ```
+::: details Example
+```yaml
+server:
+ settings:
+ httpPort: 1337
+ httpsPort: 1443
+```
+
+:::
By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used.
@@ -616,30 +644,32 @@ The default and configured server ports can always be overwritten with the CLI p
## Extension Configuration
-!!! example
- ```yaml
- specVersion: "4.0"
- type: application
- metadata:
- name: my.application
- ---
- specVersion: "4.0"
- kind: extension
- type: project-shim
- metadata:
- name: my.application.thirdparty
- shims:
- configurations:
- lodash:
- specVersion: "4.0"
- type: module
- metadata:
- name: lodash
- resources:
- configuration:
- paths:
- /resources/my/application/thirdparty/: ""
- ```
+::: details Example
+```yaml
+specVersion: "4.0"
+type: application
+metadata:
+ name: my.application
+---
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+ name: my.application.thirdparty
+shims:
+ configurations:
+ lodash:
+ specVersion: "4.0"
+ type: module
+ metadata:
+ name: lodash
+ resources:
+ configuration:
+ paths:
+ /resources/my/application/thirdparty/: ""
+```
+
+:::
Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`".
@@ -654,35 +684,37 @@ Extensions can be identified by the `kind: extension` configuration. Note that i
## Custom Bundling
-!!! example
- ```yaml
- builder:
- bundles:
- - bundleDefinition:
- name: "sap-ui-custom.js"
- sections:
- - mode: raw
- filters:
- - ui5loader-autoconfig.js
- resolve: true
- sort: true
- bundleOptions:
- optimize: true
- - bundleDefinition:
- name: "app.js"
- sections:
- - mode: preload
- filters:
- - some/app/Component.js
- resolve: true
- sort: true
- - mode: provided
- filters:
- - ui5loader-autoconfig.js
- resolve: true
- bundleOptions:
- optimize: true
- ```
+::: details Example
+```yaml
+builder:
+ bundles:
+ - bundleDefinition:
+ name: "sap-ui-custom.js"
+ sections:
+ - mode: raw
+ filters:
+ - ui5loader-autoconfig.js
+ resolve: true
+ sort: true
+ bundleOptions:
+ optimize: true
+ - bundleDefinition:
+ name: "app.js"
+ sections:
+ - mode: preload
+ filters:
+ - some/app/Component.js
+ resolve: true
+ sort: true
+ - mode: provided
+ filters:
+ - ui5loader-autoconfig.js
+ resolve: true
+ bundleOptions:
+ optimize: true
+```
+
+:::
Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described.
@@ -694,7 +726,7 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt
- `name`: The module bundle name
- `defaultFileTypes`: List of default file types which should be included in the bundle. Defaults to: `.js`, `.control.xml`, `.fragment.html`, `.fragment.json`, `.fragment.xml`, `.view.html`, `.view.json` and `.view.xml`
-- `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v4/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section.
+- `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v5/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section.
- `mode`: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require)
- `filters`: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.
- `resolve`: Setting resolve to `true` will also include all (transitive) dependencies of the files
@@ -759,7 +791,7 @@ Version | UI5 CLI Release
**Breaking changes:**
- Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete.
-- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for details.
+- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](./Configuration.md#properties) for details.
Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above.
diff --git a/packages/documentation/docs/pages/ESSupport.md b/packages/documentation/docs/pages/ESSupport.md
index b7ac05687a1..9320c899338 100644
--- a/packages/documentation/docs/pages/ESSupport.md
+++ b/packages/documentation/docs/pages/ESSupport.md
@@ -21,24 +21,23 @@ In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaSc
UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "ModuleA",
- "ModuleB"
- ], function(ModuleA, ModuleB) {
- return ModuleA.extend("ModuleC", {});
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="1 2 3"
- import ModuleA from "ModuleA";
- import ModuleB from "ModuleB";
- export default class ModuleC extends ModuleA {};
- ```
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "ModuleA",
+ "ModuleB"
+], function(ModuleA, ModuleB) {
+ return ModuleA.extend("ModuleC", {});
+});
+```
+
+```js [Not Supported]
+import ModuleA from "ModuleA";
+import ModuleB from "ModuleB";
+export default class ModuleC extends ModuleA {};
+```
+:::
### Template Literal
@@ -48,26 +47,26 @@ UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import`
Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported.
-=== "Supported"
+::: code-group
- ```javascript
- sap.ui.define([
- `ModuleA`,
- `ModuleB`
- ], function(ModuleA, ModuleB) {
- });
- ```
+```js [Supported]
+sap.ui.define([
+ `ModuleA`,
+ `ModuleB`
+], function(ModuleA, ModuleB) {
+});
+```
-=== "Not Supported"
+```js [Not Supported]
+const i = `B`;
+sap.ui.define([
+ `ModuleA`,
+ `Module${i}`
+], function(ModuleA, ModuleB) {
+});
+```
- ```javascript hl_lines="4"
- const i = `B`;
- sap.ui.define([
- `ModuleA`,
- `Module${i}`
- ], function(ModuleA, ModuleB) {
- });
- ```
+:::
The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`.
@@ -75,50 +74,49 @@ The same rule applies also for the usage of deprecated or no longer recommended
When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- `sap/suite/ui/generic/template/lib/TemplateAssembler`
- ], function(TemplateAssembler) {
- return TemplateAssembler.getTemplateComponent(getMethods,
- `sap.suite.ui.generic.templates.Page.Component`, {
- metadata: {
- properties: {
- templateName: {
- type: `string`,
- defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
- }
- },
- manifest: `json`
- }
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ `sap/suite/ui/generic/template/lib/TemplateAssembler`
+], function(TemplateAssembler) {
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ `sap.suite.ui.generic.templates.Page.Component`, {
+ metadata: {
+ properties: {
+ templateName: {
+ type: `string`,
+ defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
+ }
+ },
+ manifest: `json`
}
- );
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="6"
- sap.ui.define([
- `sap/suite/ui/generic/template/lib/TemplateAssembler`
- ], function(TemplateAssembler) {
- const name = `Component`;
- return TemplateAssembler.getTemplateComponent(getMethods,
- `sap.suite.ui.generic.templates.Page.${name}`, {
- metadata: {
- properties: {
- templateName: {
- type: `string`,
- defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
- }
- },
- manifest: `json`
- }
+ }
+ );
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ `sap/suite/ui/generic/template/lib/TemplateAssembler`
+], function(TemplateAssembler) {
+ const name = `Component`;
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ `sap.suite.ui.generic.templates.Page.${name}`, {
+ metadata: {
+ properties: {
+ templateName: {
+ type: `string`,
+ defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
+ }
+ },
+ manifest: `json`
}
- );
- });
- ```
+ }
+ );
+});
+```
+:::
#### Template Literal in XMLComposite Declaration
@@ -126,47 +124,45 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless
Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- `sap/ui/core/XMLComposite`
- ], function(XMLComposite) {
- return XMLComposite.extend(`composites.MyComposite`, {}
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="5"
- sap.ui.define([
- `sap/ui/core/XMLComposite`
- ], function(XMLComposite) {
- const name = `MyComposite`;
- return XMLComposite.extend(`composites.${name}`, {});
- });
- ```
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ `sap/ui/core/XMLComposite`
+], function(XMLComposite) {
+ return XMLComposite.extend(`composites.MyComposite`, {}
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ `sap/ui/core/XMLComposite`
+], function(XMLComposite) {
+ const name = `MyComposite`;
+ return XMLComposite.extend(`composites.${name}`, {});
+});
+```
+:::
#### Template Literal in sap/ui/core/Core#initLibrary Call
A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name.
-=== "Supported"
+::: code-group
- ```javascript
- sap.ui.getCore().initLibrary({
- name: `my.lib`
- });
- ```
+```js [Supported]
+sap.ui.getCore().initLibrary({
+ name: `my.lib`
+});
+```
-=== "Not Supported"
-
- ```javascript hl_lines="3"
- const libraryName = `lib`;
- sap.ui.getCore().initLibrary({
- name: `my.${libraryName}`
- });
- ```
+```js [Not Supported]
+const libraryName = `lib`;
+sap.ui.getCore().initLibrary({
+ name: `my.${libraryName}`
+});
+```
+:::
#### Reserved Variable Names in a Template Literal
@@ -177,19 +173,18 @@ While UI5 CLI performs a build placeholders are replaced with a values offered b
- `buildtime`
- `copyright`
-=== "Supported"
-
- ```javascript
- const myVersion = `1.2`;
- const transformedVersion `v${myVersion}`
- ```
+::: code-group
-=== "Not Supported"
+```js [Supported]
+const myVersion = `1.2`;
+const transformedVersion `v${myVersion}`
+```
- ```javascript hl_lines="3"
- const version = `1.2`;
- const transformedVersion `v${version}`
- ```
+```js [Not Supported]
+const version = `1.2`;
+const transformedVersion `v${version}`
+```
+:::
UI5 CLI searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 CLI won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`.
@@ -201,25 +196,24 @@ A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer
A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "ModuleA",
- "ModuleB"
- ], function(ModuleA, ModuleB) {
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="3"
- const dependencies = ["ModuleA", "ModuleB"];
- sap.ui.define([
- ...dependencies
- ], function(ModuleA, ModuleB) {
- });
- ```
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "ModuleA",
+ "ModuleB"
+], function(ModuleA, ModuleB) {
+});
+```
+
+```js [Not Supported]
+const dependencies = ["ModuleA", "ModuleB"];
+sap.ui.define([
+ ...dependencies
+], function(ModuleA, ModuleB) {
+});
+```
+:::
The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`.
@@ -227,52 +221,51 @@ The same rule applies also for the usage of deprecated or no longer recommended
When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "sap/suite/ui/generic/template/lib/TemplateAssembler"
- ], function(TemplateAssembler) {
- return TemplateAssembler.getTemplateComponent(getMethods,
- "sap.suite.ui.generic.templates.Page.Component", {
- metadata: {
- properties: {
- templateName: {
- type: "string",
- defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
- }
- },
- manifest: "json"
- }
- }
- );
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="6"
- sap.ui.define([
- "sap/suite/ui/generic/template/lib/TemplateAssembler"
- ], function(TemplateAssembler) {
- const myTemplate = {
- templateName: {
- type: "string",
- defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
- }
- };
- return TemplateAssembler.getTemplateComponent(getMethods,
- "sap.suite.ui.generic.templates.Page.Component", {
- metadata: {
- properties: {
- ...myTemplate
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "sap/suite/ui/generic/template/lib/TemplateAssembler
+], function(TemplateAssembler) {
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ "sap.suite.ui.generic.templates.Page.Component", {
+ metadata: {
+ properties: {
+ templateName: {
+ type: "string",
+ defaultValue: "sap.suite.ui.generic.templates.Page.view.Page
}
- manifest: "json"
+ },
+ manifest: "json
+ }
+ }
+ );
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+ const myTemplate = {
+ templateName: {
+ type: "string",
+ defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+ }
+ };
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ "sap.suite.ui.generic.templates.Page.Component", {
+ metadata: {
+ properties: {
+ ...myTemplate
}
+ manifest: "json"
}
- );
- });
- ```
+ }
+ );
+});
+```
+:::
#### Spread Element in XMLComposite Declaration
@@ -280,56 +273,53 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless
When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- return XMLComposite.extend("composites.MyComposite", {
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ return XMLComposite.extend("composites.MyComposite", {
+ fragment: "composites.custom.MyComposite"
+ }
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ const myXMLComposite = {
fragment: "composites.custom.MyComposite"
- }
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="5"
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- const myXMLComposite = {
- fragment: "composites.custom.MyComposite"
- };
- return XMLComposite.extend(`composites.MyComposite`, {
- ...myXMLComposite
- });
+ };
+ return XMLComposite.extend(`composites.MyComposite`, {
+ ...myXMLComposite
});
- ```
+});
+```
+:::
#### Spread Element in sap/ui/core/Core#initLibrary Call
A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**.
-=== "Supported"
-
- ```javascript
- sap.ui.getCore().initLibrary({
- name: "my.lib"
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="5"
- const mylib = {
- name: "my.lib"
- };
- sap.ui.getCore().initLibrary({
- ...mylib
- });
- ```
-
+::: code-group
+
+```js [Supported]
+sap.ui.getCore().initLibrary({
+ name: "my.lib"
+});
+```
+
+```js [Not Supported]
+const mylib = {
+ name: "my.lib"
+};
+sap.ui.getCore().initLibrary({
+ ...mylib
+});
+```
+:::
### Object Expression
An **Object Expression** can be used in all places except in following places.
@@ -338,25 +328,24 @@ An **Object Expression** can be used in all places except in following places.
An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported.
-=== "Supported"
+::: code-group
- ```javascript
- sap.ui.define([
- "Bar"
- ], function(Bar){
- });
+```js [Supported]
+sap.ui.define([
+ "Bar"
+], function(Bar){
+});
- ```
+```
-=== "Not Supported"
-
- ```javascript hl_lines="3"
- const dependency = "Bar";
- sap.ui.define([
- dependency
- ], function(Bar){
- });
- ```
+```js [Not Supported]
+const dependency = "Bar";
+sap.ui.define([
+ dependency
+], function(Bar){
+});
+```
+:::
The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`.
@@ -364,50 +353,49 @@ The same rule applies also for the usage of deprecated or no longer recommended
When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "sap/suite/ui/generic/template/lib/TemplateAssembler"
- ], function(TemplateAssembler) {
- return TemplateAssembler.getTemplateComponent(getMethods,
- "sap.suite.ui.generic.templates.Page.Component", {
- metadata: {
- properties: {
- templateName: {
- type: "string",
- defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
- }
- },
- manifest: "json"
- }
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "sap/suite/ui/generic/template/lib/TemplateAssembler
+], function(TemplateAssembler) {
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ "sap.suite.ui.generic.templates.Page.Component", {
+ metadata: {
+ properties: {
+ templateName: {
+ type: "string",
+ defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+ }
+ },
+ manifest: "json"
}
- );
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="9"
- sap.ui.define([
- "sap/suite/ui/generic/template/lib/TemplateAssembler"
- ], function(TemplateAssembler) {
- const key = "templateName"
- return TemplateAssembler.getTemplateComponent(getMethods,
- `sap.suite.ui.generic.templates.Page.${name}`, {
- metadata: {
- properties: {
- [key]: {
- type: "string",
- defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
- }
+ }
+ );
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+ const key = "templateName"
+ return TemplateAssembler.getTemplateComponent(getMethods,
+ `sap.suite.ui.generic.templates.Page.${name}`, {
+ metadata: {
+ properties: {
+ [key]: {
+ type: "string",
+ defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
}
- manifest: "json"
}
+ manifest: "json"
}
- );
- });
- ```
+ }
+ );
+});
+```
+:::
#### Object Expression in XMLComposite Declaration
@@ -415,51 +403,49 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless
When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- return XMLComposite.extend("composites.MyComposite", {
- fragment: "composites.custom.MyComposite"
- }
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="6"
- sap.ui.define([
- "sap/ui/core/XMLComposite"
- ], function(XMLComposite) {
- const key = "fragment";
- return XMLComposite.extend("composites.MyComposite", {
- [key]: "composites.custom.MyComposite"
- });
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ return XMLComposite.extend("composites.MyComposite", {
+ fragment: "composites.custom.MyComposite"
+ }
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+ const key = "fragment";
+ return XMLComposite.extend("composites.MyComposite", {
+ [key]: "composites.custom.MyComposite"
});
- ```
+});
+```
+:::
#### Object Expression in sap/ui/core/Core#initLibrary Call
A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**.
-=== "Supported"
+::: code-group
- ```javascript
- sap.ui.getCore().initLibrary({
- name: "my.lib"
- });
- ```
-
-=== "Not Supported"
+```js [Supported]
+sap.ui.getCore().initLibrary({
+ name: "my.lib"
+});
+```
- ```javascript hl_lines="3"
- const key = "name";
- sap.ui.getCore().initLibrary({
- [key]: "my.lib"
- });
- ```
+```js [Not Supported]
+const key = "name";
+sap.ui.getCore().initLibrary({
+ [key]: "my.lib"
+});
+```
+:::
### Computed Property
@@ -469,112 +455,108 @@ A **Computed Property** can be used in all places except in following places.
One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "Bar"
- ], function(Bar){
- return Bar.extend("my.Bar" {});
- });
+::: code-group
- ```
+```js [Supported]
+sap.ui.define([
+ "Bar"
+], function(Bar){
+ return Bar.extend("my.Bar" {});
+});
-=== "Not Supported"
+```
- ```javascript hl_lines="3"
- const name = "my";
- sap.ui.define([
- "Bar"
- ], function(Bar){
- return Bar.extend(name + ".Bar", {});
- });
- ```
+```js [Not Supported]
+const name = "my";
+sap.ui.define([
+ "Bar"
+], function(Bar){
+ return Bar.extend(name + ".Bar", {});
+});
+```
+:::
#### Computed Properties in sap/ui/core/Core#initLibrary Call
A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**.
-=== "Supported"
-
- ```javascript
- sap.ui.getCore().initLibrary({
- name: "my.lib"
- });
- ```
+::: code-group
-=== "Not Supported"
+```js [Supported]
+sap.ui.getCore().initLibrary({
+ name: "my.lib"
+});
+```
- ```javascript hl_lines="3"
- const name = "my";
- sap.ui.getCore().initLibrary({
- name: name + ".lib"
- });
- ```
+```js [Not Supported]
+const name = "my";
+sap.ui.getCore().initLibrary({
+ name: name + ".lib"
+});
+```
+:::
### Class Declaration
If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration.
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "Bar"
- ], function(Bar){
- /**
- * JSDoc block here
- */
- class Foo extends Bar {
- make () {}
- }
-
- return Foo;
- });
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="7"
- sap.ui.define([
- "Bar"
- ], function(Bar){
- /**
- * JSDoc block here
- */
- return class Foo extends Bar {
- make () {}
- }
- });
- ```
-
-### Arrow Function Expression
+::: code-group
-If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command.
-
-=== "Supported"
-
- ```javascript
- sap.ui.define([
- "Bar"
- ],
+```js [Supported]
+sap.ui.define([
+ "Bar"
+], function(Bar){
/**
* JSDoc block here
*/
- (Bar) => Bar.extends("Foo", {
-
- }));
- ```
-
-=== "Not Supported"
-
- ```javascript hl_lines="1 2 3"
+ class Foo extends Bar {
+ make () {}
+ }
+
+ return Foo;
+});
+```
+
+```js [Not Supported]
+sap.ui.define([
+ "Bar"
+], function(Bar){
/**
* JSDoc block here
*/
- sap.ui.define([
- "Bar"
- ], (Bar) => Bar.extends("Foo", {
+ return class Foo extends Bar {
+ make () {}
+ }
+});
+```
+:::
+
+### Arrow Function Expression
+
+If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command.
- }));
- ```
+::: code-group
+
+```js [Supported]
+sap.ui.define([
+ "Bar"
+],
+/**
+ * JSDoc block here
+ */
+(Bar) => Bar.extends("Foo", {
+
+}));
+```
+
+```js [Not Supported]
+/**
+ * JSDoc block here
+ */
+sap.ui.define([
+ "Bar"
+], (Bar) => Bar.extends("Foo", {
+
+}));
+```
+:::
\ No newline at end of file
diff --git a/packages/documentation/docs/pages/FileSystem.md b/packages/documentation/docs/pages/FileSystem.md
index 6ddb8ec8f14..371425e3a12 100644
--- a/packages/documentation/docs/pages/FileSystem.md
+++ b/packages/documentation/docs/pages/FileSystem.md
@@ -2,7 +2,13 @@
The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction.
-[**API Reference**](https://ui5.github.io/cli/v4/api/){: .md-button .sap-icon-initiative }
+
+
+
+
+
## Overview
@@ -10,7 +16,7 @@ The virtual file system "UI5 FS" offers an abstraction layer from the physical f
### Resource
-A [Resource](https://ui5.github.io/cli/v4/api/@ui5_fs_Resource.html) basically represents a file. Besides providing access to the file content, it also carries metadata like the **virtual path** of the Resource.
+A [Resource](https://ui5.github.io/cli/v5/api/@ui5_fs_Resource.html) basically represents a file. Besides providing access to the file content, it also carries metadata like the **virtual path** of the Resource.
Resources are typically created and stored in [Adapters](#adapters). Once read from a physical file system, they are typically kept in memory for further processing in other modules.
@@ -20,9 +26,9 @@ This ensures a high build performance, as physical read and write access for a h
Adapters abstract access to different resource locations.
-The [Memory Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_Memory.html) represents a virtual file system which maintains respective [Resources](#resource) inside a virtual data structure.
+The [Memory Adapter](https://ui5.github.io/cli/v5/api/@ui5_fs_adapters_Memory.html) represents a virtual file system which maintains respective [Resources](#resource) inside a virtual data structure.
-The [File System Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_FileSystem.html), on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.
+The [File System Adapter](https://ui5.github.io/cli/v5/api/@ui5_fs_adapters_FileSystem.html), on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.
Both adapters provide APIs to retrieve and persist [Resources](#resource), namely
@@ -37,7 +43,13 @@ Reader collections allow grouped access to multiple adapters, which might even b
They implement the same API for **retrieving** resources as adapters (`byPath` and `byGlob`). Multiple flavors exist:
-* [ReaderCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollection.html): The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
-* [ReaderCollectionPrioritized](https://ui5.github.io/cli/v4/api/@ui5_fs_ReaderCollectionPrioritized.html): Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
-* [DuplexCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_DuplexCollection.html): Contains a single reader and a single "writer". It therefore also implements the Adapter API for **persisting** resources (`write()`). When retrieving resources, the writer is prioritized over the reader
-* [WriterCollection](https://ui5.github.io/cli/v4/api/@ui5_fs_WriterCollection.html): Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
+* [ReaderCollection](https://ui5.github.io/cli/v5/api/@ui5_fs_ReaderCollection.html): The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
+* [ReaderCollectionPrioritized](https://ui5.github.io/cli/v5/api/@ui5_fs_ReaderCollectionPrioritized.html): Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
+* [DuplexCollection](https://ui5.github.io/cli/v5/api/@ui5_fs_DuplexCollection.html): Contains a single reader and a single "writer". It therefore also implements the Adapter API for **persisting** resources (`write()`). When retrieving resources, the writer is prioritized over the reader
+* [WriterCollection](https://ui5.github.io/cli/v5/api/@ui5_fs_WriterCollection.html): Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
+
+
diff --git a/packages/documentation/docs/pages/GettingStarted.md b/packages/documentation/docs/pages/GettingStarted.md
index c7187ef4c3d..6ab5ecee087 100644
--- a/packages/documentation/docs/pages/GettingStarted.md
+++ b/packages/documentation/docs/pages/GettingStarted.md
@@ -1,6 +1,7 @@
# Getting Started
## Installing the UI5 CLI
### Requirements
+
- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
- [npm](https://www.npmjs.com/) version v8.0.0 or higher
@@ -39,62 +40,59 @@ This file (with some exceptions) is required for all projects and their dependen
If your project is not set up for use with the UI5 CLI yet, follow these steps:
1. If your project does not have a `package.json` file, let npm generate it:
- ```sh
- npm init --yes
- ```
+ ```sh
+ npm init --yes
+ ```
1. Generate the `ui5.yaml` file:
- ```sh
- ui5 init
- ```
+ ```sh
+ ui5 init
+ ```
1. Define the framework you want to use
+ :::code-group
- === "OpenUI5"
+ ```sh [OpenUI5]
+ ui5 use openui5@latest
+ ```
- ```sh
- ui5 use openui5@latest
- ```
+ ```sh [SAPUI5]
+ ui5 use sapui5@latest
+ ```
+ :::
+ You can choose between the OpenUI5 and the SAPUI5 framework.
- === "SAPUI5"
+ Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ#whats-the-difference-between-openui5-and-sapui5).
- ```sh
- ui5 use sapui5@latest
- ```
+1. Add required libraries
+ ```sh
+ ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]
+ ```
- You can choose between the OpenUI5 and the SAPUI5 framework.
+ You can find a documentation of all libraries, including samples and more, in the Demo Kit:
- Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5).
+ - [**OpenUI5** Demo Kit](https://openui5.hana.ondemand.com/api)
+ - [**SAPUI5** Demo Kit](https://ui5.sap.com/#/api)
-1. Add required libraries
- ```sh
- ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]
- ```
-
- You can find a documentation of all libraries, including samples and more, in the Demo Kit:
-
- - [**OpenUI5** Demo Kit](https://openui5.hana.ondemand.com/api)
- - [**SAPUI5** Demo Kit](https://ui5.sap.com/#/api)
-
1. Start the server and work on your project! 🎉
- ```sh
- ui5 serve
- ```
+ ```sh
+ ui5 serve
+ ```
- !!! tip
- Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment.
+ ::: info
+ Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment.
+ :::
- Find more information here:
+ Find more information here:
- - [Server](./Server.md)
- - [Builder](./Builder.md)
- - [CLI](./CLI.md)
+ - [Server](./Server.md)
+ - [Builder](./Builder.md)
+ - [CLI](./CLI.md)
1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository.
- ```sh
- git add package.json ui5.yaml
- git commit -m "Enable use with UI5 CLI"
- ```
+ ```sh
+ git add package.json ui5.yaml
+ git commit -m "Enable use with UI5 CLI"
+ ```
-**Hooray! You can now use UI5 CLI in your project!**
-{: .sap-icon-ui5-after }
+**🎉 Hooray! You can now use UI5 CLI in your project! 🎉**
diff --git a/packages/documentation/docs/pages/OpenUI5.md b/packages/documentation/docs/pages/OpenUI5.md
index d471e4560d6..08a3a99058a 100644
--- a/packages/documentation/docs/pages/OpenUI5.md
+++ b/packages/documentation/docs/pages/OpenUI5.md
@@ -6,20 +6,24 @@ Note that projects using the SAPUI5 framework can depend on projects using the O
Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5).
-!!! info
- The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5**
+::: info
+The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5**
+
+:::
## Configuration
Your project's `ui5.yaml` provides a configuration section dedicated to framework dependency handling.
This configuration can be maintained by editing the file, or by using the UI5 CLI:
-!!! example
- Using the [UI5 CLI](./CLI.md):
- ```sh
- ui5 use openui5@latest
- ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3
- ```
+::: details Example
+Using the [UI5 CLI](./CLI.md):
+```sh
+ui5 use openui5@latest
+ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3
+```
+
+:::
**Example ui5.yaml of an application**
```yaml
diff --git a/packages/documentation/docs/pages/Overview.md b/packages/documentation/docs/pages/Overview.md
index 78adbe1dfbe..5d0b510bf81 100644
--- a/packages/documentation/docs/pages/Overview.md
+++ b/packages/documentation/docs/pages/Overview.md
@@ -110,7 +110,7 @@ dependencies:
By placing this file in the root directory of the `my.app` application project, you can start a server with a local copy of the `my.lib` dependency, located in the same parent directory, using the command `ui5 serve --dependency-definition ./projectDependencies.yaml`.
-The structure of the dependency definition file follows that of the [`@ui5/project/graph/providers/DependencyTree~TreeNode`](https://ui5.github.io/cli/stable/api/@ui5_project_graph_providers_DependencyTree.html#~TreeNode) type.
+The structure of the dependency definition file follows that of the [`@ui5/project/graph/providers/DependencyTree~TreeNode`](https://ui5.github.io/cli/v5/api/@ui5_project_graph_providers_DependencyTree.html#~TreeNode) type.
## HTTP/2 Development Webserver
The UI5 CLI contains a web server to serve the project via HTTP/2 protocol.
@@ -124,4 +124,4 @@ This requires an SSL certificate. You are guided through the automatic generatio
## Integration in Other Tools
One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other `Node.js`-based tools and frameworks like [Grunt](https://gruntjs.com/) or [Gulp](https://gulpjs.com/).
-All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI.md) should always be the first choice.
+All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v5/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI.md) should always be the first choice.
diff --git a/packages/documentation/docs/pages/Project.md b/packages/documentation/docs/pages/Project.md
index 1d2d7260ce0..1a5f4610402 100644
--- a/packages/documentation/docs/pages/Project.md
+++ b/packages/documentation/docs/pages/Project.md
@@ -2,6 +2,10 @@
The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview.md#project-dependencies).
+
+
## Types
Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration.
@@ -55,7 +59,7 @@ In the table below you can find the available combinations of project type & out
| `Flat` | **Unsupported** ^2^ |
| `Namespace` | **Unsupported** ^2^ |
| **module** | |
-| `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/stable/pages/Configuration/#available-path-mappings). ^1^ |
+| `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/v5/pages/Configuration/#available-path-mappings). ^1^ |
| `Flat` | **Unsupported** ^3^ |
| `Namespace` | **Unsupported** ^3^ |
@@ -64,4 +68,12 @@ In the table below you can find the available combinations of project type & out
^3^ Modules have explicit path mappings configured and no namespace concept.
-[**API Reference**](https://ui5.github.io/cli/v4/api/@ui5_project_build_ProjectBuilder.html){: .md-button .sap-icon-initiative }
+
+
+
+
+
diff --git a/packages/documentation/docs/pages/SAPUI5.md b/packages/documentation/docs/pages/SAPUI5.md
index a2b89a062aa..36e02adc907 100644
--- a/packages/documentation/docs/pages/SAPUI5.md
+++ b/packages/documentation/docs/pages/SAPUI5.md
@@ -1,17 +1,21 @@
# Consuming SAPUI5 Libraries
-!!! info
- Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli`
+::: info Info
+Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli`
- The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**
- For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
+The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**
+For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
+
+:::
## Overview
SAPUI5 libraries are hosted on the public npm registry at `registry.npmjs.org`. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide.
-!!! note
- For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/)
+::: info Note
+For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/)
+
+:::
## Usage
Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding `ui5.yaml` file. They will be cached in a `.ui5` directory located in the user's home directory. This happens transparently whenever you execute the `ui5 serve` or `ui5 build` commands.
@@ -24,13 +28,15 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor
This configuration can be maintained by editing the file, or by using the UI5 CLI:
-!!! example
- Using the [UI5 CLI](./CLI.md):
- ```sh
- ui5 use sapui5@latest
- ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
- ui5 add -D sap.ushell
- ```
+::: details Example
+Using the [UI5 CLI](./CLI.md):
+```sh
+ui5 use sapui5@latest
+ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
+ui5 add -D sap.ushell
+```
+
+:::
**Example ui5.yaml of an application**
```yaml
@@ -69,10 +75,10 @@ framework:
optional: true
```
-Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher.
+Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-2-0) or higher.
For details please refer to the [framework configuration documentation](././Configuration.md#framework-configuratio).
## Differences Between OpenUI5 and SAPUI5
-Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5)
+Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5)
diff --git a/packages/documentation/docs/pages/Server.md b/packages/documentation/docs/pages/Server.md
index 7d8f6a06df6..0de4e561e46 100644
--- a/packages/documentation/docs/pages/Server.md
+++ b/packages/documentation/docs/pages/Server.md
@@ -2,7 +2,13 @@
The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects.
-[**API Reference**](https://ui5.github.io/cli/v4/api/module-@ui5_server.html){: .md-button .sap-icon-initiative }
+
+
+
+
+
## Standard Middleware
@@ -73,5 +79,13 @@ When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5
Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory.
-!!! tip
- If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete".
+::: tip
+If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete".
+
+:::
+
+
\ No newline at end of file
diff --git a/packages/documentation/docs/pages/Troubleshooting.md b/packages/documentation/docs/pages/Troubleshooting.md
index 681e778c189..c8841bd6869 100644
--- a/packages/documentation/docs/pages/Troubleshooting.md
+++ b/packages/documentation/docs/pages/Troubleshooting.md
@@ -27,7 +27,7 @@ Any missing framework dependencies will be downloaded again during the next UI5
## Environment Variables
### Changing the Log Level
-In CI environments or in a combination with other tools, the usage of [UI5 CLI's `--log-level`](https://ui5.github.io/cli/stable/pages/CLI/#common-options) command parameter might be inconvenient and even impossible.
+In CI environments or in a combination with other tools, the usage of [UI5 CLI's `--log-level`](https://ui5.github.io/cli/v5/pages/CLI/#common-options) command parameter might be inconvenient and even impossible.
#### Resolution
@@ -50,8 +50,10 @@ UI5 + Karma:
`cross-env UI5_LOG_LVL=verbose npm run karma`
-!!! warning
- The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable.
+::: warning
+The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable.
+
+:::
### Changing UI5 CLI's Data Directory
@@ -60,8 +62,10 @@ In some cases and environments this is not a convenient location and the user ne
The path to it can either be provided via environment variable or permanently set in the configuration.
-!!! info
- Paths are resolved relative to the current root project path (i.e. where the package.json is located).
+::: info
+Paths are resolved relative to the current root project path (i.e. where the package.json is located).
+
+:::
#### Environment variable `UI5_DATA_DIR`
diff --git a/packages/documentation/docs/pages/Workspace.md b/packages/documentation/docs/pages/Workspace.md
index effc25e1ddb..730e9420284 100644
--- a/packages/documentation/docs/pages/Workspace.md
+++ b/packages/documentation/docs/pages/Workspace.md
@@ -1,17 +1,19 @@
# UI5 Workspaces
-!!! info
- **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)**
-
-!!! example
- ```yaml title="ui5-workspace.yaml"
- specVersion: workspace/1.0
- metadata:
- name: default
- dependencyManagement:
+::: info
+**UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)**
+
+::: details
+```yaml title="ui5-workspace.yaml"
+specVersion: workspace/1.0
+metadata:
+ name: default
+dependencyManagement:
resolutions:
- - path: ../heavy.library
- ```
+ - path: ../heavy.library
+```
+
+:::
## General Concept
@@ -19,24 +21,26 @@ UI5 Workspaces can be used to create a personalized local development environmen
Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example:
-!!! example
- ```yaml title="ui5-workspace.yaml"
- specVersion: workspace/1.0
- metadata:
- name: default
- dependencyManagement:
+::: details Example
+```yaml title="ui5-workspace.yaml"
+specVersion: workspace/1.0
+metadata:
+ name: default
+dependencyManagement:
resolutions:
- - path: ../heavy.library
- ---
- specVersion: workspace/1.0
- metadata:
- name: extended
- dependencyManagement:
+ - path: ../heavy.library
+---
+specVersion: workspace/1.0
+metadata:
+ name: extended
+dependencyManagement:
resolutions:
- - path: ../heavy.library
- - path: ../light.library
- - path: ../test.library
- ```
+ - path: ../heavy.library
+ - path: ../light.library
+ - path: ../test.library
+```
+
+:::
If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`.
@@ -53,12 +57,14 @@ specVersion: "workspace/1.0"
### Metadata
-!!! example
- ```yaml
- specVersion: workspace/1.0
- metadata:
- name: dolphin
- ```
+::: details Example
+```yaml
+specVersion: workspace/1.0
+metadata:
+ name: dolphin
+```
+
+:::
#### name
@@ -83,17 +89,19 @@ The `name` property must satisfy the following conditions. They are identical to
UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project.
-!!! example
- ```yaml
- specVersion: workspace/1.0
- metadata:
- name: dolphin
- dependencyManagement:
+::: details
+```yaml
+specVersion: workspace/1.0
+metadata:
+ name: dolphin
+dependencyManagement:
resolutions:
- - path: ../light.library
- - path: ../heavy.library
- - path: ../test.library
- ```
+ - path: ../light.library
+ - path: ../heavy.library
+ - path: ../test.library
+```
+
+:::
### Resolutions
diff --git a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md
index 7a164ca4d89..2e8a9a6b2fa 100644
--- a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md
+++ b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md
@@ -89,161 +89,161 @@ middleware:
A custom middleware implementation needs to return a function with the following signature:
-=== "ESM"
-
- ```js linenums="1"
- /**
- * Custom UI5 Server middleware API
- *
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- * Logger instance for use in the custom middleware.
- * This parameter is only provided to custom middleware
- * extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- * Specification version-dependent interface to a
- * MiddlewareUtil instance. See the corresponding API reference for details:
- * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- * Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- * Name of the custom middleware.
- * This parameter is only provided to custom middleware extensions
- * defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- * Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- * Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- * Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
- export default function({log, middlewareUtil, options, resources}) {
- return async function (req, res, next) {
- // [...]
- }
- };
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- /**
- * Custom UI5 Server middleware API
- *
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- * Logger instance for use in the custom middleware.
- * This parameter is only provided to custom middleware
- * extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- * Specification version-dependent interface to a
- * MiddlewareUtil instance. See the corresponding API reference for details:
- * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- * Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- * Name of the custom middleware.
- * This parameter is only provided to custom middleware extensions
- * defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- * Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- * Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- * Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
- module.exports = function({log, middlewareUtil, options, resources}) {
- return async function (req, res, next) {
- // [...]
- }
- };
- ```
+:::code-group
+
+```js [ESM]
+/**
+ * Custom UI5 Server middleware API
+ *
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ * Logger instance for use in the custom middleware.
+ * This parameter is only provided to custom middleware
+ * extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ * Specification version-dependent interface to a
+ * MiddlewareUtil instance. See the corresponding API reference for details:
+ * https://ui5.github.io/cli/v5/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ * Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ * Name of the custom middleware.
+ * This parameter is only provided to custom middleware extensions
+ * defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ * Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ * Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ * Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+export default function({log, middlewareUtil, options, resources}) {
+ return async function (req, res, next) {
+ // [...]
+ }
+};
+```
+
+```js [CommonJS]
+/**
+ * Custom UI5 Server middleware API
+ *
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ * Logger instance for use in the custom middleware.
+ * This parameter is only provided to custom middleware
+ * extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ * Specification version-dependent interface to a
+ * MiddlewareUtil instance. See the corresponding API reference for details:
+ * https://ui5.github.io/cli/v5/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ * Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ * Name of the custom middleware.
+ * This parameter is only provided to custom middleware extensions
+ * defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ * Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ * Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ * Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+module.exports = function({log, middlewareUtil, options, resources}) {
+ return async function (req, res, next) {
+ // [...]
+ }
+};
+```
+:::
### Example: lib/middleware/markdownHandler.(m)js
-=== "ESM"
+:::code-group
- ```js linenums="1"
- import MarkdownIt from "markdown-it";
+```js [ESM]
+import MarkdownIt from "markdown-it";
- export default async function({log, middlewareUtil, options, resources}) {
- const md = new MarkdownIt();
- return function (req, res, next) {
- if (!req.path || !req.path.endsWith(".html")) {
- // Do not handle non-HTML requests
+export default async function({log, middlewareUtil, options, resources}) {
+ const md = new MarkdownIt();
+ return function (req, res, next) {
+ if (!req.path || !req.path.endsWith(".html")) {
+ // Do not handle non-HTML requests
+ next();
+ return;
+ }
+ // Try to read a corresponding markdown file
+ resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+ if (!resource) {
+ // No file found, hand over to next middleware
next();
return;
}
- // Try to read a corresponding markdown file
- resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
- if (!resource) {
- // No file found, hand over to next middleware
- next();
- return;
- }
- log.info(`Rendering markdown for ${resource.getPath()}`);
- const markdown = await resource.getBuffer();
- // Generate HTML from markdown string
- const html = md.render(markdown.toString());
- res.type('.html');
- res.end(html);
- }).catch((err) => {
- next(err);
- });
+ log.info(`Rendering markdown for ${resource.getPath()}`);
+ const markdown = await resource.getBuffer();
+ // Generate HTML from markdown string
+ const html = md.render(markdown.toString());
+ res.type('.html');
+ res.end(html);
+ }).catch((err) => {
+ next(err);
+ });
+ }
+};
+```
+Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm)
+
+```js [CommonJS]
+module.exports = async function({log, middlewareUtil, options, resources}) {
+ const MarkdownIt = require("markdown-it");
+ const md = new MarkdownIt();
+ return function (req, res, next) {
+ if (!req.path || !req.path.endsWith(".html")) {
+ // Do not handle non-HTML requests
+ next();
+ return;
}
- };
- ```
- Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm)
-
-=== "CommonJS"
-
- ```js linenums="1"
- module.exports = async function({log, middlewareUtil, options, resources}) {
- const MarkdownIt = require("markdown-it");
- const md = new MarkdownIt();
- return function (req, res, next) {
- if (!req.path || !req.path.endsWith(".html")) {
- // Do not handle non-HTML requests
+ // Try to read a corresponding markdown file
+ resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+ if (!resource) {
+ // No file found, hand over to next middleware
next();
return;
}
- // Try to read a corresponding markdown file
- resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
- if (!resource) {
- // No file found, hand over to next middleware
- next();
- return;
- }
- log.info(`Rendering markdown for ${resource.getPath()}`);
- const markdown = await resource.getBuffer();
- // Generate HTML from markdown string
- const html = md.render(markdown.toString());
- res.type('.html');
- res.end(html);
- }).catch((err) => {
- next(err);
- });
- }
- };
- ```
- Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3)
+ log.info(`Rendering markdown for ${resource.getPath()}`);
+ const markdown = await resource.getBuffer();
+ // Generate HTML from markdown string
+ const html = md.render(markdown.toString());
+ res.type('.html');
+ res.end(html);
+ }).catch((err) => {
+ next(err);
+ });
+ }
+};
+```
+Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3)
+
+:::
## Helper Class `MiddlewareUtil`
-Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance.
+Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v5/api/@ui5_server_middleware_MiddlewareUtil.html) instance.
-In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html).
+In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v5/api/@ui5_server_middleware_MiddlewareUtil.html).
## Integration with `karma-ui5`
-!!! Warning
- The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023
+::: warning
+The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023
+:::
[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 CLI.
diff --git a/packages/documentation/docs/pages/extensibility/CustomTasks.md b/packages/documentation/docs/pages/extensibility/CustomTasks.md
index a5e6bd0509a..82d5fd9eb75 100644
--- a/packages/documentation/docs/pages/extensibility/CustomTasks.md
+++ b/packages/documentation/docs/pages/extensibility/CustomTasks.md
@@ -107,90 +107,91 @@ task:
A custom task implementation needs to return a function with the following signature:
-=== "ESM"
-
- ```js linenums="1"
- /**
- * Custom task API
- *
- * @param {object} parameters
- *
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- * Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- * Logger instance for use in the custom task.
- * This parameter is only available to custom task extensions
- * defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- * Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- * Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- * Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- * Name of the custom task.
- * This parameter is only provided to custom task extensions
- * defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- * Specification Version-dependent interface to a TaskUtil instance.
- * See the corresponding API reference for details:
- * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- * Reader/Writer to access and modify resources of the
- * project currently being built
- * @returns {Promise}
- * Promise resolving once the task has finished
- */
- export default async function({dependencies, log, options, taskUtil, workspace}) {
- // [...]
- };
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- /**
- * Custom task API
- *
- * @param {object} parameters
- *
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- * Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- * Logger instance for use in the custom task.
- * This parameter is only available to custom task extensions
- * defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- * Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- * Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- * Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- * Name of the custom task.
- * This parameter is only provided to custom task extensions
- * defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- * Specification Version-dependent interface to a TaskUtil instance.
- * See the corresponding API reference for details:
- * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- * Reader/Writer to access and modify resources of the
- * project currently being built
- * @returns {Promise}
- * Promise resolving once the task has finished
- */
- module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
- // [...]
- };
- ```
+::: code-group
+
+```js [ESM]
+/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ *
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ * Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ * Logger instance for use in the custom task.
+ * This parameter is only available to custom task extensions
+ * defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ * Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ * Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ * Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ * Name of the custom task.
+ * This parameter is only provided to custom task extensions
+ * defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ * Specification Version-dependent interface to a TaskUtil instance.
+ * See the corresponding API reference for details:
+ * https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ * Reader/Writer to access and modify resources of the
+ * project currently being built
+ * @returns {Promise}
+ * Promise resolving once the task has finished
+ */
+export default async function({dependencies, log, options, taskUtil, workspace}) {
+ // [...]
+};
+```
+
+```js [CommonJS]
+/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ *
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ * Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ * Logger instance for use in the custom task.
+ * This parameter is only available to custom task extensions
+ * defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ * Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ * Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ * Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ * Name of the custom task.
+ * This parameter is only provided to custom task extensions
+ * defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ * Specification Version-dependent interface to a TaskUtil instance.
+ * See the corresponding API reference for details:
+ * https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ * Reader/Writer to access and modify resources of the
+ * project currently being built
+ * @returns {Promise}
+ * Promise resolving once the task has finished
+ */
+module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
+ // [...]
+};
+```
+:::
### Required Dependencies
-!!! info
- This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)
+::: info
+This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)
+
+:::
Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster.
@@ -204,87 +205,86 @@ If this callback is not provided, UI5 CLI will make an assumption as to whether
*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/main/rfcs/0012-UI5-Tooling-Extension-API-3.md)*
-=== "ESM"
-
- ```js linenums="1"
- /**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- * Set containing the names of all direct dependencies of
- * the project currently being built.
- * @param {function} parameters.getDependencies
- * Identical to TaskUtil#getDependencies
- * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- * Creates a list of names of all direct dependencies
- * of a given project.
- * @param {function} parameters.getProject
- * Identical to TaskUtil#getProject
- * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- * Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- * Identical to the options given to the standard task function.
- * @returns {Promise}
- * Promise resolving with a Set containing all dependencies
- * that should be made available to the task.
- * UI5 CLI will ensure that those dependencies have been
- * built before executing the task.
- */
- export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) {
- // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-
- // Reduce list of required dependencies: Do not require any UI5 framework projects
- availableDependencies.forEach((depName) => {
- if (getProject(depName).isFrameworkProject()) {
- availableDependencies.delete(depName)
- }
- });
- // => Only resources of project "my.lib" will be available to the task
- return availableDependencies;
- }
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- /**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- * Set containing the names of all direct dependencies of
- * the project currently being built.
- * @param {function} parameters.getDependencies
- * Identical to TaskUtil#getDependencies
- * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- * Creates a list of names of all direct dependencies
- * of a given project.
- * @param {function} parameters.getProject
- * Identical to TaskUtil#getProject
- * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- * Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- * Identical to the options given to the standard task function.
- * @returns {Promise}
- * Promise resolving with a Set containing all dependencies
- * that should be made available to the task.
- * UI5 CLI will ensure that those dependencies have been
- * built before executing the task.
- */
- module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) {
- // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-
- // Reduce list of required dependencies: Do not require any UI5 framework projects
- availableDependencies.forEach((depName) => {
- if (getProject(depName).isFrameworkProject()) {
- availableDependencies.delete(depName)
- }
- });
- // => Only resources of project "my.lib" will be available to the task
- return availableDependencies;
- }
- ```
+::: code-group
+
+```js [ESM]
+/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ * Set containing the names of all direct dependencies of
+ * the project currently being built.
+ * @param {function} parameters.getDependencies
+ * Identical to TaskUtil#getDependencies
+ * (see https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html).
+ * Creates a list of names of all direct dependencies
+ * of a given project.
+ * @param {function} parameters.getProject
+ * Identical to TaskUtil#getProject
+ * (see https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html).
+ * Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ * Identical to the options given to the standard task function.
+ * @returns {Promise}
+ * Promise resolving with a Set containing all dependencies
+ * that should be made available to the task.
+ * UI5 CLI will ensure that those dependencies have been
+ * built before executing the task.
+ */
+export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) {
+ // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+
+ // Reduce list of required dependencies: Do not require any UI5 framework projects
+ availableDependencies.forEach((depName) => {
+ if (getProject(depName).isFrameworkProject()) {
+ availableDependencies.delete(depName)
+ }
+ });
+ // => Only resources of project "my.lib" will be available to the task
+ return availableDependencies;
+}
+```
+
+```js [CommonJS]
+/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ * Set containing the names of all direct dependencies of
+ * the project currently being built.
+ * @param {function} parameters.getDependencies
+ * Identical to TaskUtil#getDependencies
+ * (see https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html).
+ * Creates a list of names of all direct dependencies
+ * of a given project.
+ * @param {function} parameters.getProject
+ * Identical to TaskUtil#getProject
+ * (see https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html).
+ * Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ * Identical to the options given to the standard task function.
+ * @returns {Promise}
+ * Promise resolving with a Set containing all dependencies
+ * that should be made available to the task.
+ * UI5 CLI will ensure that those dependencies have been
+ * built before executing the task.
+ */
+module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) {
+ // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+
+ // Reduce list of required dependencies: Do not require any UI5 framework projects
+ availableDependencies.forEach((depName) => {
+ if (getProject(depName).isFrameworkProject()) {
+ availableDependencies.delete(depName)
+ }
+ });
+ // => Only resources of project "my.lib" will be available to the task
+ return availableDependencies;
+}
+```
+:::
### Examples
@@ -292,185 +292,185 @@ The following code snippets show examples for custom task implementations.
### Example: lib/tasks/renderMarkdownFiles.js
-This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html)
+This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html)
API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build
result by writing them into the provided `workspace`.
-=== "ESM"
-
- ```js linenums="1"
- import path from "node:path";
- import renderMarkdown from "./renderMarkdown.js";
-
- /*
- * Render all .md (Markdown) files in the project to HTML
- */
- export default async function({dependencies, log, options, taskUtil, workspace}) {
- const {createResource} = taskUtil.resourceFactory;
- const textResources = await workspace.byGlob("**/*.md");
- await Promise.all(textResources.map(async (resource) => {
- const markdownResourcePath = resource.getPath();
-
- log.info(`Rendering markdown file ${markdownResourcePath}...`);
- const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-
- // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
- const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
- const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-
- const markdownResource = createResource({
- path: newResourcePath,
- string: htmlString
- });
- await workspace.write(markdownResource);
- }));
- };
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- const path = require("node:path");
- const renderMarkdown = require("./renderMarkdown.js");
-
- /*
- * Render all .md (Markdown) files in the project to HTML
- */
- module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
- const {createResource} = taskUtil.resourceFactory;
- const textResources = await workspace.byGlob("**/*.md");
- await Promise.all(textResources.map(async (resource) => {
- const markdownResourcePath = resource.getPath();
-
- log.info(`Rendering markdown file ${markdownResourcePath}...`);
- const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-
- // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
- const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
- const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-
- const markdownResource = createResource({
- path: newResourcePath,
- string: htmlString
- });
- await workspace.write(markdownResource);
- }));
- };
- ```
+::: code-group
+
+```js [ESM]
+import path from "node:path";
+import renderMarkdown from "./renderMarkdown.js";
-!!! warning
- Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used.
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+export default async function({dependencies, log, options, taskUtil, workspace}) {
+ const {createResource} = taskUtil.resourceFactory;
+ const textResources = await workspace.byGlob("**/*.md");
+ await Promise.all(textResources.map(async (resource) => {
+ const markdownResourcePath = resource.getPath();
- Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources.
+ log.info(`Rendering markdown file ${markdownResourcePath}...`);
+ const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+
+ // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+ const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+ const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+
+ const markdownResource = createResource({
+ path: newResourcePath,
+ string: htmlString
+ });
+ await workspace.write(markdownResource);
+ }));
+};
+```
+
+```js [CommonJS]
+const path = require("node:path");
+const renderMarkdown = require("./renderMarkdown.js");
+
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
+ const {createResource} = taskUtil.resourceFactory;
+ const textResources = await workspace.byGlob("**/*.md");
+ await Promise.all(textResources.map(async (resource) => {
+ const markdownResourcePath = resource.getPath();
+
+ log.info(`Rendering markdown file ${markdownResourcePath}...`);
+ const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+
+ // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+ const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+ const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+
+ const markdownResource = createResource({
+ path: newResourcePath,
+ string: htmlString
+ });
+ await workspace.write(markdownResource);
+ }));
+};
+```
+:::
+
+::: warning
+Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used.
+
+Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources.
+
+:::
### Example: lib/tasks/compileLicenseSummary.js
-This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html)
+This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html)
APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies
(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`.
-=== "ESM"
+::: code-group
- ```js linenums="1"
- import path from "node:path";
+```js [ESM]
+import path from "node:path";
- /*
- * Compile a list of all licenses of the project's dependencies
- * and write it to "dependency-license-summary.json"
- */
- export default async function({dependencies, log, options, taskUtil, workspace}) {
- const {createResource} = taskUtil.resourceFactory;
- const licenses = new Map();
- const projectsVisited = new Set();
-
- async function processProject(project) {
- return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
- if (projectsVisited.has(projectName)) {
- return;
- }
- projectsVisited.add(projectName);
- const project = taskUtil.getProject(projectName);
- const pkgResource = await project.getRootReader().byPath("/package.json");
- if (pkgResource) {
- const pkg = JSON.parse(await pkgResource.getString())
-
- // Add project to list of licenses
- if (licenses.has(pkg.license)) {
- licenses.get(pkg.license).push(project.getName());
- } else {
- // License not yet in map. Define it
- licenses.set(pkg.license, [project.getName()]);
- }
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json
+*/
+export default async function({dependencies, log, options, taskUtil, workspace}) {
+ const {createResource} = taskUtil.resourceFactory;
+ const licenses = new Map();
+ const projectsVisited = new Set();
+ async function processProject(project) {
+ return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+ if (projectsVisited.has(projectName)) {
+ return;
+ }
+ projectsVisited.add(projectName);
+ const project = taskUtil.getProject(projectName);
+ const pkgResource = await project.getRootReader().byPath(../package.json");
+ if (pkgResource) {
+ const pkg = JSON.parse(await pkgResource.getString())
+
+ // Add project to list of licenses
+ if (licenses.has(pkg.license)) {
+ licenses.get(pkg.license).push(project.getName());
} else {
- log.info(`Could not find package.json file in project ${project.getName()}`);
+ // License not yet in map. Define it
+ licenses.set(pkg.license, [project.getName()]);
}
- return processProject(project);
- }));
- }
- // Start processing dependencies of the root project
- await processProject(taskUtil.getProject());
- const summaryResource = createResource({
- path: "/dependency-license-summary.json",
- string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
- });
- await workspace.write(summaryResource);
- };
- ```
-
-=== "CommonJS"
-
- ```js linenums="1"
- const path = require("node:path");
-
- /*
- * Compile a list of all licenses of the project's dependencies
- * and write it to "dependency-license-summary.json"
- */
- module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
- const {createResource} = taskUtil.resourceFactory;
- const licenses = new Map();
- const projectsVisited = new Set();
-
- async function processProject(project) {
- return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
- if (projectsVisited.has(projectName)) {
- return;
- }
- projectsVisited.add(projectName);
- const project = taskUtil.getProject(projectName);
- const pkgResource = await project.getRootReader().byPath("/package.json");
- if (pkgResource) {
- const pkg = JSON.parse(await pkgResource.getString())
-
- // Add project to list of licenses
- if (licenses.has(pkg.license)) {
- licenses.get(pkg.license).push(project.getName());
- } else {
- // License not yet in map. Define it
- licenses.set(pkg.license, [project.getName()]);
- }
+ } else {
+ log.info(`Could not find package.json file in project ${project.getName()}`);
+ }
+ return processProject(project);
+ }));
+ }
+ // Start processing dependencies of the root project
+ await processProject(taskUtil.getProject());
+
+ const summaryResource = createResource({
+ path: "/dependency-license-summary.json",
+ string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
+ });
+ await workspace.write(summaryResource);
+};
+```
+```js [CommonJS]
+const path = require("node:path");
+
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json"
+*/
+module.exports = async function({dependencies, log, options, taskUtil, workspace}) {
+ const {createResource} = taskUtil.resourceFactory;
+ const licenses = new Map();
+ const projectsVisited = new Set();
+
+ async function processProject(project) {
+ return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+ if (projectsVisited.has(projectName)) {
+ return;
+ }
+ projectsVisited.add(projectName);
+ const project = taskUtil.getProject(projectName);
+ const pkgResource = await project.getRootReader().byPath("/package.json");
+ if (pkgResource) {
+ const pkg = JSON.parse(await pkgResource.getString())
+
+ // Add project to list of licenses
+ if (licenses.has(pkg.license)) {
+ licenses.get(pkg.license).push(project.getName());
} else {
- log.info(`Could not find package.json file in project ${project.getName()}`);
+ // License not yet in map. Define it
+ licenses.set(pkg.license, [project.getName()]);
}
- return processProject(project);
- }));
- }
- // Start processing dependencies of the root project
- await processProject(taskUtil.getProject());
- const summaryResource = createResource({
- path: "/dependency-license-summary.json",
- string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
- });
- await workspace.write(summaryResource);
- };
- ```
+ } else {
+ log.info(`Could not find package.json file in project ${project.getName()}`);
+ }
+ return processProject(project);
+ }));
+ }
+ // Start processing dependencies of the root project
+ await processProject(taskUtil.getProject());
+
+ const summaryResource = createResource({
+ path: "/dependency-license-summary.json",
+ string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
+ });
+ await workspace.write(summaryResource);
+};
+```
+:::
## Helper Class `TaskUtil`
-Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance.
+Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html) instance.
-In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v5/api/@ui5_project_build_helpers_TaskUtil.html).
diff --git a/packages/documentation/docs/updates/migrate-v3.md b/packages/documentation/docs/updates/migrate-v3.md
index ff4295b56e5..4ed63a7ea00 100644
--- a/packages/documentation/docs/updates/migrate-v3.md
+++ b/packages/documentation/docs/updates/migrate-v3.md
@@ -1,9 +1,10 @@
# Migrate to v3
-!!! warning "Superseded"
- **UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).**
+::: warning Superseded
+**UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).**
- Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)**
+Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)**
+:::
## Node.js and npm Version Support
@@ -19,8 +20,9 @@ This means your old projects might still work. Unless they have non-standard con
## Changes for Projects
-!!! info
- ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3**
+::: info
+✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3**
+:::
For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply:
@@ -30,8 +32,9 @@ See also [Configuration: Specification Version 3.0](../pages/Configuration.md#sp
## Changes for Extensions
-!!! info
- ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3**
+::: info
+✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3**
+:::
For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply:
@@ -44,27 +47,28 @@ For extensions defining the latest **Specification Versions 3.0 and higher**, so
## Changes to Dependency Configuration
-!!! info
- ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3.
-
- Configuration like the following is not needed anymore:
-
- ```diff title="package.json"
- {
- [...]
- - "ui5": {
- - "dependencies": [
- - "my-package"
- - ]
- - }
- [...]
- }
- ```
+::: info
+✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3.
+
+Configuration like the following is not needed anymore:
+
+```diff title="package.json"
+{
+ [...]
+- "ui5": {
+- "dependencies": [
+- "my-package"
+- ]
+- }
+ [...]
+}
+```
- `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
- If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed.
+`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
+If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed.
- Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`.
+Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`.
+:::
## Changes to Module API
@@ -97,10 +101,22 @@ await builder.build({
**New: @ui5/project v3**
-=== "ESM"
+::: code-group
+```js [ESM]
+import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+let graph = await graphFromPackageDependencies({cwd: "."});
- ```js
- import {graphFromPackageDependencies} from "@ui5/project/graph";
+await graph.build({
+ destPath: "./dist",
+ includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
+});
+```
+
+```js [CommonJS]
+// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
+async function buildProject() {
+ const {graphFromPackageDependencies} = await import("@ui5/project/graph");
let graph = await graphFromPackageDependencies({cwd: "."});
@@ -108,23 +124,9 @@ await builder.build({
destPath: "./dist",
includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
});
- ```
-
-=== "CommonJS"
-
- ```js
- // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
- async function buildProject() {
- const {graphFromPackageDependencies} = await import("@ui5/project/graph");
-
- let graph = await graphFromPackageDependencies({cwd: "."});
-
- await graph.build({
- destPath: "./dist",
- includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
- });
- }
- ```
+}
+```
+:::
## Changes to @ui5/cli
@@ -145,10 +147,11 @@ Especially for projects of type `library`, where standard tasks like [`buildThem
In the future, a caching mechanism should help and improve build times with this new behavior.
-!!! info
- The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result.
+::: info
+The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result.
- Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build).
+Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build).
+:::
## Removal of Standard Tasks and Processors
@@ -213,7 +216,7 @@ The following processors have been removed:
## Removal of Standard Middleware
-The following middleware has been removed from the [standard middlewares list](../../pages/Server/#standard-middleware):
+The following middleware has been removed from the [standard middlewares list](../pages/Server.md#standard-middleware):
* connectUi5Proxy
diff --git a/packages/documentation/docs/updates/migrate-v4.md b/packages/documentation/docs/updates/migrate-v4.md
index e074569a767..4438d187cd7 100644
--- a/packages/documentation/docs/updates/migrate-v4.md
+++ b/packages/documentation/docs/updates/migrate-v4.md
@@ -1,12 +1,13 @@
# Migrate to v4
-!!! tip "New Release"
- **UI5 CLI 4.0 has been released on July 24, 2024 🎉**
+::: tip New Release
+**UI5 CLI 4.0 has been released on July 24, 2024 🎉**
- Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest`
- And update your global install via `npm i --global @ui5/cli@latest`
+Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest`
+And update your global install via `npm i --global @ui5/cli@latest`
- And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)**
+And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)**
+:::
## UI5 2.x Compatibility
@@ -30,15 +31,16 @@ Old projects might therefore still work, unless they have a non-standard configu
## Changes for Projects
-!!! success "No changes for Specification Versions 2.x and 3.x"
- Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4**
+::: info No changes for Specification Versions 2.x and 3.x
+Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4**
- The following does not apply to them.
+The following does not apply to them.
+:::
For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply:
* **Breaking Change:** Bundling of JavaScript modules requiring "top level scope" as a string is terminated.
-
+
In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.**
For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder.md#javascript-files-requiring-top-level-scope).
@@ -78,45 +80,48 @@ Non-public `DuplexCollection#byGlobSource` API has been removed.
- **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`.
-!!! example
- ```yaml
- builder:
- bundles:
- - bundleDefinition:
- name: "app.js"
- sections:
- - mode: require
- filters:
- - some/app/Component.js
- resolve: true
- sort: true
- async: true
- ```
+::: code-group
+```yaml
+builder:
+ bundles:
+ - bundleDefinition:
+ name: "app.js"
+ sections:
+ - mode: require
+ filters:
+ - some/app/Component.js
+ resolve: true
+ sort: true
+ async: true
+```
+:::
### Changes to @ui5/project
- **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage.
-!!! example
- ```js
- import {graphFromPackageDependencies} from "@ui5/project/graph";
-
- graphFromPackageDependencies({
- /* workspaceName: "default" */
- });
- ```
+::: code-group
+```js
+import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+graphFromPackageDependencies({
+ /* workspaceName: "default" */
+});
+```
+:::
- **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs.
-!!! example
- ```js
- import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
+::: code-group
+```js
+import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
- await Resolver.resolveVersion("1.120.15", {
- ui5DataDir: "~/.ui5",
- cwd: process.cwd()
- });
- ```
+await Resolver.resolveVersion("1.120.15", {
+ ui5DataDir: "~/.ui5",
+ cwd: process.cwd()
+});
+```
+:::
- **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project`
diff --git a/packages/documentation/package-lock.json b/packages/documentation/package-lock.json
index 50a789a5baf..22a7440072f 100644
--- a/packages/documentation/package-lock.json
+++ b/packages/documentation/package-lock.json
@@ -8,10 +8,4720 @@
"name": "@ui5/documentation",
"version": "0.0.1",
"license": "Apache-2.0",
+ "dependencies": {
+ "@types/node": "^22.5.1",
+ "@ui5/webcomponents": "^2.1.2",
+ "autoprefixer": "^10.4.20",
+ "cssnano": "^7.0.5",
+ "markdown-it-implicit-figures": "^0.12.0",
+ "postcss": "^8.4.41",
+ "tailwindcss": "^3.4.10",
+ "vitepress": "^1.3.4",
+ "vue": "^3.4.38"
+ },
"engines": {
"node": "^20.11.0 || >=22.0.0",
"npm": ">= 8"
}
+ },
+ "node_modules/@algolia/abtesting": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.5.0.tgz",
+ "integrity": "sha512-W/ohRkbKQsqDWALJg28X15KF7Tcyg53L1MfdOkLgvkcCcofdzGHSimHHeNG05ojjFw9HK8+VPhe/Vwq4MozIJg==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/autocomplete-core": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz",
+ "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-plugin-algolia-insights": "1.17.7",
+ "@algolia/autocomplete-shared": "1.17.7"
+ }
+ },
+ "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz",
+ "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "search-insights": ">= 1 < 3"
+ }
+ },
+ "node_modules/@algolia/autocomplete-preset-algolia": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz",
+ "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/autocomplete-shared": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz",
+ "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/client-abtesting": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.39.0.tgz",
+ "integrity": "sha512-Vf0ZVe+qo3sHDrCinouJqlg8VoxM4Qo/KxNIqMYybkuctutfnp3kIY9OmESplOQ/9NGBthU9EG+4d5fBibWK/A==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-analytics": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.39.0.tgz",
+ "integrity": "sha512-V16ITZxYIwcv1arNce65JZmn94Ft6vKlBZ//gXw8AvIH32glJz1KcbaVAUr9p7PYlGZ/XVHP6LxDgrpNdtwgcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-common": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.39.0.tgz",
+ "integrity": "sha512-UCJTuwySEQeiKPWV3wruhuI/wHbDYenHzgL9pYsvh6r/u5Z+g61ip1iwdAlFp02CnywzI9O7+AQPh2ManYyHmQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-insights": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.39.0.tgz",
+ "integrity": "sha512-s0ia8M/ZZR+iO2uLNTBrlQdEb6ZMAMcKMHckp5mcoglxrf8gHifL4LmdhGKdAxAn3UIagtqIP0RCnIymHUbm7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-personalization": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.39.0.tgz",
+ "integrity": "sha512-vZPIt7Lw+toNsHZUiPhNIc1Z3vUjDp7nzn6AMOaPC73gEuTq2iLPNvM06CSB6aHePo5eMeJIP5YEKBUQUA/PJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-query-suggestions": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.39.0.tgz",
+ "integrity": "sha512-jcPQr3iKTWNVli2NYHPv02aNLwixDjPCpOgMp9CZTvEiPI6Ec4jHX+oFr3LDZagOFY9e1xJhc/JrgMGGW1sHnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-search": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.39.0.tgz",
+ "integrity": "sha512-/IYpF10BpthGZEJQZMhMqV4AqWr5avcWfZm/SIKK1RvUDmzGqLoW/+xeJVX9C8ZnNkIC8hivbIQFaNaRw0BFZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/ingestion": {
+ "version": "1.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.39.0.tgz",
+ "integrity": "sha512-IgSHKUiuecqLfBlXiuCSdRTdsO3/yvpmXrMFz8fAJ8M4QmDtHkOuD769dmybRYqsbYMHivw+lir4BgbRGMtOIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/monitoring": {
+ "version": "1.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.39.0.tgz",
+ "integrity": "sha512-8Xnd4+609SKC/hqVsuFc4evFBmvA2765/4NcH+Dpr756SKPbL1BY0X8kVxlmM3YBLNqnduSQxHxpDJUK58imCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/recommend": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.39.0.tgz",
+ "integrity": "sha512-D7Ye2Ss/5xqUkQUxKm/VqEJLt5kARd9IMmjdzlxaKhGgNlOemTay0lwBmOVFuJRp7UODjp5c9+K+B8g0ORObIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-browser-xhr": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.39.0.tgz",
+ "integrity": "sha512-mgPte1ZJqpk9dkVs44J3wKAbHATvHZNlSpzhMdjMLIg/3qTycSZyDiomLiSlxE8CLsxyBAOJWnyKRHfom+Z1rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-fetch": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.39.0.tgz",
+ "integrity": "sha512-LIrCkrxu1WnO3ev1+w6NnZ12JZL/o+2H9w6oWnZAjQZIlA/Ym6M9QHkt+OQ/SwkuoiNkW3DAo+Pi4A2V9FPtqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-node-http": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.39.0.tgz",
+ "integrity": "sha512-6beG+egPwXmvhAg+m0STCj+ZssDcjrLzf4L05aKm2nGglMXSSPz0cH/rM+kVD9krNfldiMctURd4wjojW1fV0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
+ "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.4"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
+ "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@docsearch/css": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz",
+ "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==",
+ "license": "MIT"
+ },
+ "node_modules/@docsearch/js": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz",
+ "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/react": "3.8.2",
+ "preact": "^10.0.0"
+ }
+ },
+ "node_modules/@docsearch/react": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz",
+ "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-core": "1.17.7",
+ "@algolia/autocomplete-preset-algolia": "1.17.7",
+ "@docsearch/css": "3.8.2",
+ "algoliasearch": "^5.14.2"
+ },
+ "peerDependencies": {
+ "@types/react": ">= 16.8.0 < 19.0.0",
+ "react": ">= 16.8.0 < 19.0.0",
+ "react-dom": ">= 16.8.0 < 19.0.0",
+ "search-insights": ">= 1 < 3"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "search-insights": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@iconify-json/simple-icons": {
+ "version": "1.2.53",
+ "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.53.tgz",
+ "integrity": "sha512-8GEW5mshsPAZpVAJmkBG/niR2qn8t4U03Wmz6aSD9R4VMZKTECqbOxH3z4inA0JfZOoTvP4qoK9T2VXAx2Xg5g==",
+ "license": "CC0-1.0",
+ "dependencies": {
+ "@iconify/types": "*"
+ }
+ },
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz",
+ "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz",
+ "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz",
+ "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz",
+ "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz",
+ "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz",
+ "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz",
+ "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz",
+ "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz",
+ "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz",
+ "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz",
+ "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz",
+ "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz",
+ "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz",
+ "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz",
+ "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz",
+ "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz",
+ "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz",
+ "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz",
+ "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz",
+ "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz",
+ "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz",
+ "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz",
+ "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sap-theming/theming-base-content": {
+ "version": "11.29.3",
+ "resolved": "https://registry.npmjs.org/@sap-theming/theming-base-content/-/theming-base-content-11.29.3.tgz",
+ "integrity": "sha512-0LVCUYqoTQGcKmgPShbxQLBoF8469ZojUrYtVm1k3op/1pgLA/FMN//bvgGEm7HTBJBu3gW2Ad2f4ASqEzLolA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@shikijs/core": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz",
+ "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.4"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz",
+ "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^3.1.0"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz",
+ "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz",
+ "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz",
+ "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/transformers": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz",
+ "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz",
+ "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "license": "MIT"
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/jquery": {
+ "version": "3.5.33",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.33.tgz",
+ "integrity": "sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/sizzle": "*"
+ }
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.18.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz",
+ "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/openui5": {
+ "version": "1.140.0",
+ "resolved": "https://registry.npmjs.org/@types/openui5/-/openui5-1.140.0.tgz",
+ "integrity": "sha512-z5S2dVRZi4CFnNj4WGAgEcUbg3C3p1HyJvE57/WZBoMLxERS26KBqAF32yWBTSQCmI+E5T4Kk5vbfFfzppBvkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/jquery": "~3.5.13",
+ "@types/qunit": "^2.5.4"
+ }
+ },
+ "node_modules/@types/qunit": {
+ "version": "2.19.13",
+ "resolved": "https://registry.npmjs.org/@types/qunit/-/qunit-2.19.13.tgz",
+ "integrity": "sha512-N4xp3v4s7f0jb2Oij6+6xw5QhH7/IgHCoGIFLCWtbEWoPkGYp8Te4mIwIP21qaurr6ed5JiPMiy2/ZoiGPkLIw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz",
+ "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==",
+ "license": "MIT"
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.21",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+ "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+ "license": "MIT"
+ },
+ "node_modules/@ui5/webcomponents": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-2.14.0.tgz",
+ "integrity": "sha512-ZOJSXPChGMe9R/3ZqzCx1qhyHEazpWofBI+StJe316YcnnynJSJ0a0zuoTKrNac+6DoxwRq3SD3kK1W5TbbNZw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ui5/webcomponents-base": "2.14.0",
+ "@ui5/webcomponents-icons": "2.14.0",
+ "@ui5/webcomponents-icons-business-suite": "2.14.0",
+ "@ui5/webcomponents-icons-tnt": "2.14.0",
+ "@ui5/webcomponents-localization": "2.14.0",
+ "@ui5/webcomponents-theming": "2.14.0"
+ }
+ },
+ "node_modules/@ui5/webcomponents-base": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-base/-/webcomponents-base-2.14.0.tgz",
+ "integrity": "sha512-fu5+YjNFDcie2IiluYnp0nlkyluaN3JA997+zcwgXZFUU+2Vqm6eOpeTuXJBepVNcgMKo2uz0cdC1+rsL3gciQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2",
+ "lit-html": "^2.0.1"
+ }
+ },
+ "node_modules/@ui5/webcomponents-icons": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons/-/webcomponents-icons-2.14.0.tgz",
+ "integrity": "sha512-pGFhJjGxkLYpFo52nRWu/DC24Y6yg9XJ06rBw999TW6WTE0Ay1dcBnhp/Nfi8KEgDdY3oBlxQlWXcLxjrf5t1Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ui5/webcomponents-base": "2.14.0"
+ }
+ },
+ "node_modules/@ui5/webcomponents-icons-business-suite": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-business-suite/-/webcomponents-icons-business-suite-2.14.0.tgz",
+ "integrity": "sha512-Kl9R4c3B5LELZhejZ/ZaPbV372VjVKNCt4q8kSBih0i3Ekp6k6oM1dVcTIJd3ttJ5r0iDFBR1wgtxn5RNDrygg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ui5/webcomponents-base": "2.14.0"
+ }
+ },
+ "node_modules/@ui5/webcomponents-icons-tnt": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-tnt/-/webcomponents-icons-tnt-2.14.0.tgz",
+ "integrity": "sha512-8nslq04M9pS7ZRI9hVO9VhJWuX/hlIMXKevH0X3Cgw8suzy6yib6n552XvltSM11XMpAmReVjUeTa1n5OgbblQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ui5/webcomponents-base": "2.14.0"
+ }
+ },
+ "node_modules/@ui5/webcomponents-localization": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-localization/-/webcomponents-localization-2.14.0.tgz",
+ "integrity": "sha512-XyYvsJF13p5wE+VTkVucJKe5vvTFfbdSOQi4CBzlhcrtCHZHq0CY3nq8eLzSd3buDHN6XOvWTny1VRmcz5I3rA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/openui5": "^1.113.0",
+ "@ui5/webcomponents-base": "2.14.0"
+ }
+ },
+ "node_modules/@ui5/webcomponents-theming": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-theming/-/webcomponents-theming-2.14.0.tgz",
+ "integrity": "sha512-L+CHet/jA8yYlPjr5lBZDZGzZeuytHJFC+yt4n6POdVRpXSpctcJIoFXUX3PJrH5s/Uc6dYKvQKMf1Toxw3HPw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sap-theming/theming-base-content": "11.29.3",
+ "@ui5/webcomponents-base": "2.14.0"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "license": "ISC"
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
+ "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.4",
+ "@vue/shared": "3.5.22",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
+ "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz",
+ "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.4",
+ "@vue/compiler-core": "3.5.22",
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.19",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz",
+ "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "7.7.7",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz",
+ "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^7.7.7"
+ }
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "7.7.7",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
+ "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^7.7.7",
+ "birpc": "^2.3.0",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.7.7",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
+ "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz",
+ "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz",
+ "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz",
+ "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/runtime-core": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz",
+ "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22"
+ },
+ "peerDependencies": {
+ "vue": "3.5.22"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz",
+ "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==",
+ "license": "MIT"
+ },
+ "node_modules/@vueuse/core": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz",
+ "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.21",
+ "@vueuse/metadata": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/integrations": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz",
+ "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==",
+ "license": "MIT",
+ "dependencies": {
+ "@vueuse/core": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "async-validator": "^4",
+ "axios": "^1",
+ "change-case": "^5",
+ "drauu": "^0.4",
+ "focus-trap": "^7",
+ "fuse.js": "^7",
+ "idb-keyval": "^6",
+ "jwt-decode": "^4",
+ "nprogress": "^0.2",
+ "qrcode": "^1.5",
+ "sortablejs": "^1",
+ "universal-cookie": "^7"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz",
+ "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz",
+ "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==",
+ "license": "MIT",
+ "dependencies": {
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/algoliasearch": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.39.0.tgz",
+ "integrity": "sha512-DzTfhUxzg9QBNGzU/0kZkxEV72TeA4MmPJ7RVfLnQwHNhhliPo7ynglEWJS791rNlLFoTyrKvkapwr/P3EXV9A==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/abtesting": "1.5.0",
+ "@algolia/client-abtesting": "5.39.0",
+ "@algolia/client-analytics": "5.39.0",
+ "@algolia/client-common": "5.39.0",
+ "@algolia/client-insights": "5.39.0",
+ "@algolia/client-personalization": "5.39.0",
+ "@algolia/client-query-suggestions": "5.39.0",
+ "@algolia/client-search": "5.39.0",
+ "@algolia/ingestion": "1.39.0",
+ "@algolia/monitoring": "1.39.0",
+ "@algolia/recommend": "5.39.0",
+ "@algolia/requester-browser-xhr": "5.39.0",
+ "@algolia/requester-fetch": "5.39.0",
+ "@algolia/requester-node-http": "5.39.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.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==",
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.20",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz",
+ "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/birpc": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz",
+ "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.27.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz",
+ "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.8.19",
+ "caniuse-lite": "^1.0.30001751",
+ "electron-to-chromium": "^1.5.238",
+ "node-releases": "^2.0.26",
+ "update-browserslist-db": "^1.1.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001751",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz",
+ "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "license": "MIT"
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/copy-anything": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
+ "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+ "license": "MIT",
+ "dependencies": {
+ "is-what": "^4.1.8"
+ },
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-declaration-sorter": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz",
+ "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==",
+ "license": "ISC",
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssnano": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.1.tgz",
+ "integrity": "sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cssnano-preset-default": "^7.0.9",
+ "lilconfig": "^3.1.3"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/cssnano"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.9.tgz",
+ "integrity": "sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "css-declaration-sorter": "^7.2.0",
+ "cssnano-utils": "^5.0.1",
+ "postcss-calc": "^10.1.1",
+ "postcss-colormin": "^7.0.4",
+ "postcss-convert-values": "^7.0.7",
+ "postcss-discard-comments": "^7.0.4",
+ "postcss-discard-duplicates": "^7.0.2",
+ "postcss-discard-empty": "^7.0.1",
+ "postcss-discard-overridden": "^7.0.1",
+ "postcss-merge-longhand": "^7.0.5",
+ "postcss-merge-rules": "^7.0.6",
+ "postcss-minify-font-values": "^7.0.1",
+ "postcss-minify-gradients": "^7.0.1",
+ "postcss-minify-params": "^7.0.4",
+ "postcss-minify-selectors": "^7.0.5",
+ "postcss-normalize-charset": "^7.0.1",
+ "postcss-normalize-display-values": "^7.0.1",
+ "postcss-normalize-positions": "^7.0.1",
+ "postcss-normalize-repeat-style": "^7.0.1",
+ "postcss-normalize-string": "^7.0.1",
+ "postcss-normalize-timing-functions": "^7.0.1",
+ "postcss-normalize-unicode": "^7.0.4",
+ "postcss-normalize-url": "^7.0.1",
+ "postcss-normalize-whitespace": "^7.0.1",
+ "postcss-ordered-values": "^7.0.2",
+ "postcss-reduce-initial": "^7.0.4",
+ "postcss-reduce-transforms": "^7.0.1",
+ "postcss-svgo": "^7.1.0",
+ "postcss-unique-selectors": "^7.0.4"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz",
+ "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "license": "MIT"
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.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"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.240",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz",
+ "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==",
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex-xs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
+ "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
+ "license": "MIT"
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/focus-trap": {
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
+ "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
+ "license": "MIT",
+ "dependencies": {
+ "tabbable": "^6.2.0"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "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==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "license": "MIT"
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-what": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/lit-html": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz",
+ "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.19",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
+ "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "license": "MIT"
+ },
+ "node_modules/markdown-it-implicit-figures": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/markdown-it-implicit-figures/-/markdown-it-implicit-figures-0.12.0.tgz",
+ "integrity": "sha512-IeD2V74f3ZBYrZ+bz/9uEGii0S61BYoD2731qsHTgYLlENUrTevlgODScScS1CK44/TV9ddlufGHCYCQueh1rw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minisearch": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz",
+ "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==",
+ "license": "MIT"
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz",
+ "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==",
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz",
+ "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex-xs": "^1.0.0",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-calc": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz",
+ "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12 || ^20.9 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.38"
+ }
+ },
+ "node_modules/postcss-calc/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-colormin": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.4.tgz",
+ "integrity": "sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.9.3",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-convert-values": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.7.tgz",
+ "integrity": "sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-discard-comments": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz",
+ "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.1.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-discard-duplicates": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz",
+ "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-discard-empty": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz",
+ "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-discard-overridden": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz",
+ "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-merge-longhand": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz",
+ "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^7.0.5"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-merge-rules": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.6.tgz",
+ "integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^5.0.1",
+ "postcss-selector-parser": "^7.1.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz",
+ "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-minify-gradients": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz",
+ "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==",
+ "license": "MIT",
+ "dependencies": {
+ "colord": "^2.9.3",
+ "cssnano-utils": "^5.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-minify-params": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.4.tgz",
+ "integrity": "sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "cssnano-utils": "^5.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz",
+ "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "postcss-selector-parser": "^7.1.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-normalize-charset": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz",
+ "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-display-values": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz",
+ "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-positions": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz",
+ "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz",
+ "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-string": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz",
+ "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz",
+ "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-unicode": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.4.tgz",
+ "integrity": "sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz",
+ "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz",
+ "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz",
+ "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==",
+ "license": "MIT",
+ "dependencies": {
+ "cssnano-utils": "^5.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.4.tgz",
+ "integrity": "sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "caniuse-api": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz",
+ "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-svgo": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz",
+ "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "svgo": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >= 18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz",
+ "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.1.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/preact": {
+ "version": "10.27.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
+ "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
+ "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "license": "MIT"
+ },
+ "node_modules/rollup": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz",
+ "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.52.3",
+ "@rollup/rollup-android-arm64": "4.52.3",
+ "@rollup/rollup-darwin-arm64": "4.52.3",
+ "@rollup/rollup-darwin-x64": "4.52.3",
+ "@rollup/rollup-freebsd-arm64": "4.52.3",
+ "@rollup/rollup-freebsd-x64": "4.52.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.52.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.52.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.52.3",
+ "@rollup/rollup-linux-arm64-musl": "4.52.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.52.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.52.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.52.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.52.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.52.3",
+ "@rollup/rollup-linux-x64-gnu": "4.52.3",
+ "@rollup/rollup-linux-x64-musl": "4.52.3",
+ "@rollup/rollup-openharmony-arm64": "4.52.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.52.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.52.3",
+ "@rollup/rollup-win32-x64-gnu": "4.52.3",
+ "@rollup/rollup-win32-x64-msvc": "4.52.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+ "license": "ISC"
+ },
+ "node_modules/search-insights": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz",
+ "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz",
+ "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/langs": "2.5.0",
+ "@shikijs/themes": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylehacks": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.6.tgz",
+ "integrity": "sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.25.1",
+ "postcss-selector-parser": "^7.1.0"
+ },
+ "engines": {
+ "node": "^18.12.0 || ^20.9.0 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.32"
+ }
+ },
+ "node_modules/stylehacks/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/superjson": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz",
+ "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "copy-anything": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.4.1"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/svgo/node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+ "license": "MIT"
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.18",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
+ "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.7",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "license": "MIT"
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
+ "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.20",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz",
+ "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==",
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz",
+ "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==",
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/css": "3.8.2",
+ "@docsearch/js": "3.8.2",
+ "@iconify-json/simple-icons": "^1.2.21",
+ "@shikijs/core": "^2.1.0",
+ "@shikijs/transformers": "^2.1.0",
+ "@shikijs/types": "^2.1.0",
+ "@types/markdown-it": "^14.1.2",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vue/devtools-api": "^7.7.0",
+ "@vue/shared": "^3.5.13",
+ "@vueuse/core": "^12.4.0",
+ "@vueuse/integrations": "^12.4.0",
+ "focus-trap": "^7.6.4",
+ "mark.js": "8.11.1",
+ "minisearch": "^7.1.1",
+ "shiki": "^2.1.0",
+ "vite": "^5.4.14",
+ "vue": "^3.5.13"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ },
+ "peerDependencies": {
+ "markdown-it-mathjax3": "^4",
+ "postcss": "^8"
+ },
+ "peerDependenciesMeta": {
+ "markdown-it-mathjax3": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz",
+ "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-sfc": "3.5.22",
+ "@vue/runtime-dom": "3.5.22",
+ "@vue/server-renderer": "3.5.22",
+ "@vue/shared": "3.5.22"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
}
}
diff --git a/packages/documentation/package.json b/packages/documentation/package.json
index b4c09b68618..e2cae45d3c1 100644
--- a/packages/documentation/package.json
+++ b/packages/documentation/package.json
@@ -20,5 +20,23 @@
"engines": {
"node": "^20.11.0 || >=22.0.0",
"npm": ">= 8"
+ },
+ "scripts": {
+ "start": "vitepress dev --open",
+ "dev": "vitepress dev",
+ "build": "vitepress build && cp -r ./docs/images ./dist/images",
+ "preview": "vitepress preview --port 8080",
+ "serve-docs": "npm run build && npm run preview"
+ },
+ "dependencies": {
+ "@types/node": "^22.5.1",
+ "@ui5/webcomponents": "^2.1.2",
+ "autoprefixer": "^10.4.20",
+ "cssnano": "^7.0.5",
+ "markdown-it-implicit-figures": "^0.12.0",
+ "postcss": "^8.4.41",
+ "tailwindcss": "^3.4.10",
+ "vitepress": "^1.3.4",
+ "vue": "^3.4.38"
}
}
\ No newline at end of file
diff --git a/packages/documentation/postcss.config.js b/packages/documentation/postcss.config.js
new file mode 100644
index 00000000000..38edf3dc8d3
--- /dev/null
+++ b/packages/documentation/postcss.config.js
@@ -0,0 +1,7 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ ...(process.env.NODE_ENV === "production" ? {cssnano: {}} : {})
+ }
+};
diff --git a/packages/documentation/tailwind.config.js b/packages/documentation/tailwind.config.js
new file mode 100644
index 00000000000..fbd0262bafa
--- /dev/null
+++ b/packages/documentation/tailwind.config.js
@@ -0,0 +1,96 @@
+import colors from "tailwindcss/colors";
+
+/** @type {import('tailwindcss').Config} */
+export default {
+ // rely on html dark class instead of media:prefers-color-scheme
+ // https://tailwindcss.com/docs/dark-mode#toggling-dark-mode-manually
+ darkMode: "class",
+ content: [
+ "./.vitepress/theme/**/*.{vue,js,ts,jsx,tsx}",
+ "./src/**/*.{vue,js,ts,jsx,tsx,md}",
+ ],
+ corePlugins: {
+ preflight: false,
+ },
+ theme: {
+ colors: {
+ /* defaults */
+ "current": "currentColor",
+ "transparent": "transparent",
+ "black": colors.black,
+ "white": colors.white,
+ "gray": colors.gray,
+ "slate": colors.slate,
+ "red": colors.red,
+ "green": colors.green,
+ "blue": colors.blue,
+ /* custom
+ ** https://uicolors.app/create
+ */
+ "fire": {
+ DEFAULT: "#ff5a37",
+ secondary: "#ffa42c"
+ },
+ "water": {
+ DEFAULT: "#1873b4",
+ secondary: "#53b8de"
+ },
+ "outrageous-orange": {
+ "DEFAULT": "#ff5a37", // outrageous-orange-400
+ "50": "#fff2ed",
+ "100": "#ffe1d4",
+ "200": "#ffbfa8",
+ "300": "#ff9371",
+ "400": "#ff5a37",
+ "500": "#fe3111",
+ "600": "#ef1707",
+ "700": "#c60b08",
+ "800": "#9d0f12",
+ "900": "#7e1012",
+ "950": "#44060a",
+ },
+ "sunshade": {
+ "DEFAULT": "#ffa42c", // sunshade-400
+ "50": "#fff8eb",
+ "100": "#ffebc6",
+ "200": "#ffd588",
+ "300": "#ffb94a",
+ "400": "#ffa42c",
+ "500": "#f97a07",
+ "600": "#dd5602",
+ "700": "#b73806",
+ "800": "#942a0c",
+ "900": "#7a230d",
+ "950": "#461002",
+ },
+ "denim": {
+ "DEFAULT": "#1873b4", // denim-600
+ "50": "#f2f8fd",
+ "100": "#e3effb",
+ "200": "#c1e0f6",
+ "300": "#8bc6ee",
+ "400": "#4daae3",
+ "500": "#268fd1",
+ "600": "#1873b4",
+ "700": "#45b90",
+ "800": "#154d77",
+ "900": "#174163",
+ "950": "#0f2a42",
+ },
+ "viking": {
+ "DEFAULT": "#53b8de", // viking-400
+ "50": "#f2f9fd",
+ "100": "#e4f2fa",
+ "200": "#c3e5f4",
+ "300": "#8ed0eb",
+ "400": "#53b8de",
+ "500": "#2c9fcb",
+ "600": "#1d80ac",
+ "700": "#19678b",
+ "800": "#185774",
+ "900": "#194861",
+ "950": "#112f40",
+ },
+ },
+ },
+};
diff --git a/scripts/Dockerfile b/scripts/Dockerfile
deleted file mode 100644
index e786d2a14bc..00000000000
--- a/scripts/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM squidfunk/mkdocs-material:8.5.9
-
-# mike version 2 is required in order to enable ENV vars for the container. By the time mike 2 is released we'll
-# use a specific dev version: https://github.com/jimporter/mike/issues/125
-RUN python -m pip install 'mike @ git+https://github.com/jimporter/mike.git@e77357960886f9d9bf2e6ecbc39c7ca6991a2179'
-
-# Define env variables for mike
-ENV GIT_COMMITTER_NAME="OpenUI5 Bot"
-ENV GIT_COMMITTER_EMAIL="openui5@sap.com"
diff --git a/scripts/buildDocs.sh b/scripts/buildDocs.sh
deleted file mode 100755
index bd0f8f8eda9..00000000000
--- a/scripts/buildDocs.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-set -e
-
-cd "$(dirname -- "$0")/.."
-echo "Changed directory to $(pwd)"
-
-# Store docker image name
-DOCKER_IMAGE=ui5-cli/mkdocs-material
-
-# Build image if not existing
-./scripts/buildImage.sh
-
-npm run generate-cli-doc
-
-
-if [[ $MIKE_VERSION ]]; then # Build with Mike (versioning)
- echo "Starting building & versioning Docs with Mike version: ${MIKE_VERSION}; alias: ${MIKE_ALIAS}..."
- docker run --rm -v $(pwd):/docs --entrypoint mike \
- --env GIT_COMMITTER_NAME="${GIT_COMMITTER_NAME}" --env GIT_COMMITTER_EMAIL="${GIT_COMMITTER_EMAIL}" \
- $DOCKER_IMAGE deploy $MIKE_VERSION $MIKE_ALIAS --rebase --update-aliases
-
-else # Build with MkDocs
- echo "Starting building Docs with MkDocs..."
- docker run --rm -v $(pwd):/docs $DOCKER_IMAGE build
-
-fi
-
-npm run jsdoc-generate
-
-echo "Documentation has been built"
diff --git a/scripts/buildImage.sh b/scripts/buildImage.sh
deleted file mode 100755
index b6380885872..00000000000
--- a/scripts/buildImage.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-set -e
-
-cd "$(dirname -- "$0")"
-echo "Changed directory to $(pwd)"
-
-# Store docker image name
-DOCKER_IMAGE=ui5-cli/mkdocs-material
-# If Dockerfile has been modified, we need to rebuild the image
-DOCKER_TAG=$(node ./hash.js ./Dockerfile)
-
-if [[ "$(docker images -q $DOCKER_IMAGE:$DOCKER_TAG 2> /dev/null)" != "" ]]; then
- echo "Image ${DOCKER_IMAGE}:${DOCKER_TAG} already exists"
- exit 0
-fi
-
-echo "Building image '${DOCKER_IMAGE}:${DOCKER_TAG}'..."
-docker build -t $DOCKER_IMAGE -f Dockerfile .
-docker tag $DOCKER_IMAGE $DOCKER_IMAGE:$DOCKER_TAG # Tag the image with Dockerfile's hash
-echo "Done building image."
-
-exit 0
diff --git a/scripts/generateCliDoc.js b/scripts/generateCliDoc.js
index f44db6071a5..97e5c59ad26 100644
--- a/scripts/generateCliDoc.js
+++ b/scripts/generateCliDoc.js
@@ -179,7 +179,14 @@ function generateDoc() {
commands: commandsArray
});
- content = content.split("<").join("<").split(">").join(">");
+ content = content
+ .split("<").join("<")
+ .split(">").join(">")
+ // Escape as it's considered HTML tag to prevent rendering issues
+ .replaceAll(" ", "<option>")
+ // Wrap standalone URLs in backticks to prevent VitePress from treating them as live links
+ // Only target URLs that are not already in markdown link syntax [text](url)
+ .replace(/(?