From f93c7e6770bda72061fbbd7c7161170ebd598b0b Mon Sep 17 00:00:00 2001 From: domire8 Date: Tue, 7 Jan 2025 07:32:56 +0000 Subject: [PATCH] deploy: 6e1cb558e2c1709dceeef7a92a02bd7fa7aff926 --- 404.html | 10 ++-- CNAME | 1 - ...ckage-5b1d67fbf30bf135bed9db684739bc06.png | Bin 0 -> 122837 bytes ...ckage-ab856ce12d7afe71c59ef11285f5b521.png | Bin 184716 -> 0 bytes ...tudio-b56f8cc63d4b0ac97e27213efa29e5c9.png | Bin 0 -> 123344 bytes ...tudio-b77b595cc647765f30ca374ff18d99d8.png | Bin 131026 -> 0 bytes assets/js/203a697f.5440d965.js | 1 + assets/js/203a697f.ee6af521.js | 1 - assets/js/226aac0d.90fc4425.js | 1 + assets/js/226aac0d.e23199af.js | 1 - assets/js/24ce3ebe.17ecb645.js | 1 + assets/js/28658051.6a9937e4.js | 1 - assets/js/28658051.a30fba6a.js | 1 + assets/js/61b51b6a.bfadcfba.js | 1 - ...7461f.3ff561d2.js => 77f7461f.5936ac3e.js} | 2 +- ...d7a23.fc3e1701.js => 897d7a23.3ca3d732.js} | 2 +- assets/js/8d93cfe3.d44a9b65.js | 1 + assets/js/935f2afb.1a85a0fc.js | 1 - assets/js/935f2afb.1f7bd095.js | 1 + assets/js/a0b0b928.00e1f4c5.js | 1 + assets/js/a0b0b928.d1dfcc34.js | 1 - assets/js/main.4cf1ac68.js | 2 - assets/js/main.c78a22b6.js | 2 + ...CENSE.txt => main.c78a22b6.js.LICENSE.txt} | 0 assets/js/runtime~main.2d55beb9.js | 1 - assets/js/runtime~main.cc6ea928.js | 1 + .../application-building-blocks/index.html | 10 ++-- docs/category/custom-components/index.html | 10 ++-- docs/category/examples/index.html | 10 ++-- docs/category/ros-2-concepts/index.html | 10 ++-- docs/concepts/aica-applications/index.html | 10 ++-- .../building-blocks/components/index.html | 10 ++-- .../building-blocks/controllers/index.html | 10 ++-- .../building-blocks/events/index.html | 10 ++-- .../hardware-interfaces/index.html | 10 ++-- .../building-blocks/signals/index.html | 10 ++-- docs/concepts/going-further/index.html | 10 ++-- docs/concepts/intro/index.html | 10 ++-- .../ros-concepts/composition/index.html | 10 ++-- docs/concepts/ros-concepts/control/index.html | 10 ++-- .../ros-concepts/lifecycle/index.html | 10 ++-- docs/concepts/ros-concepts/nodes/index.html | 10 ++-- docs/concepts/ros/index.html | 10 ++-- .../examples/editor-example/index.html | 10 ++-- .../examples/mock-hardware-example/index.html | 10 ++-- .../examples/timer-example/index.html | 10 ++-- .../installation-and-launch/index.html | 13 +++-- docs/getting-started/intro/index.html | 10 ++-- docs/getting-started/licensing/index.html | 23 +++++--- docs/getting-started/next/index.html | 10 ++-- .../aica-package-migrations/index.html | 10 ++-- .../aica-package-toml/index.html | 22 ++++--- .../component-descriptions/index.html | 12 ++-- .../component-package/index.html | 12 ++-- .../custom-component/index.html | 12 ++-- .../package-building/index.html | 14 ++--- docs/reference/intro/index.html | 12 ++-- .../manual-installation-launch/index.html | 54 ++++++++++++++++++ docs/reference/yaml-syntax/index.html | 12 ++-- index.html | 10 ++-- sitemap.xml | 2 +- 61 files changed, 260 insertions(+), 202 deletions(-) delete mode 100644 CNAME create mode 100644 assets/images/aica-launcher-package-5b1d67fbf30bf135bed9db684739bc06.png delete mode 100644 assets/images/aica-launcher-package-ab856ce12d7afe71c59ef11285f5b521.png create mode 100644 assets/images/aica-launcher-studio-b56f8cc63d4b0ac97e27213efa29e5c9.png delete mode 100644 assets/images/aica-launcher-studio-b77b595cc647765f30ca374ff18d99d8.png create mode 100644 assets/js/203a697f.5440d965.js delete mode 100644 assets/js/203a697f.ee6af521.js create mode 100644 assets/js/226aac0d.90fc4425.js delete mode 100644 assets/js/226aac0d.e23199af.js create mode 100644 assets/js/24ce3ebe.17ecb645.js delete mode 100644 assets/js/28658051.6a9937e4.js create mode 100644 assets/js/28658051.a30fba6a.js delete mode 100644 assets/js/61b51b6a.bfadcfba.js rename assets/js/{77f7461f.3ff561d2.js => 77f7461f.5936ac3e.js} (74%) rename assets/js/{897d7a23.fc3e1701.js => 897d7a23.3ca3d732.js} (61%) create mode 100644 assets/js/8d93cfe3.d44a9b65.js delete mode 100644 assets/js/935f2afb.1a85a0fc.js create mode 100644 assets/js/935f2afb.1f7bd095.js create mode 100644 assets/js/a0b0b928.00e1f4c5.js delete mode 100644 assets/js/a0b0b928.d1dfcc34.js delete mode 100644 assets/js/main.4cf1ac68.js create mode 100644 assets/js/main.c78a22b6.js rename assets/js/{main.4cf1ac68.js.LICENSE.txt => main.c78a22b6.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.2d55beb9.js create mode 100644 assets/js/runtime~main.cc6ea928.js create mode 100644 docs/reference/manual-installation-launch/index.html diff --git a/404.html b/404.html index f8a9aee5..748a9f28 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | AICA for Developers - - + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index c50ab869..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.aica.tech \ No newline at end of file diff --git a/assets/images/aica-launcher-package-5b1d67fbf30bf135bed9db684739bc06.png b/assets/images/aica-launcher-package-5b1d67fbf30bf135bed9db684739bc06.png new file mode 100644 index 0000000000000000000000000000000000000000..d198cdf81130e4b3ad7fc0e2381c29dad0dd00f2 GIT binary patch literal 122837 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

I+{~15;1XU!TtxV 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 literal 0 HcmV?d00001 diff --git a/assets/images/aica-launcher-package-ab856ce12d7afe71c59ef11285f5b521.png b/assets/images/aica-launcher-package-ab856ce12d7afe71c59ef11285f5b521.png deleted file mode 100644 index 642ea5cb162142aacc692043cb408fa1653d4fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184716 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

$wj)h4Z#$YNMg#)E=yIsQ4&e2GY2`+wb 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 Jg~y$4{XdkCWhwvw diff --git a/assets/images/aica-launcher-studio-b56f8cc63d4b0ac97e27213efa29e5c9.png b/assets/images/aica-launcher-studio-b56f8cc63d4b0ac97e27213efa29e5c9.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a816031d3cd2f411daac1ad8ed05ab4f10868a GIT binary patch literal 123344 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�kqtN~R-TfOV5EE_$1? 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 I@Z2x|3%vqMr~m)} literal 0 HcmV?d00001 diff --git a/assets/images/aica-launcher-studio-b77b595cc647765f30ca374ff18d99d8.png b/assets/images/aica-launcher-studio-b77b595cc647765f30ca374ff18d99d8.png deleted file mode 100644 index 0216a9ea93fd67a7340887f590168b8e6a3cdaab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131026 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 LthP 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.d(a,{Zo:()=>d,kt:()=>k});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=n.createContext({}),p=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),c=p(t),u=i,k=c["".concat(s,".").concat(u)]||c[u]||m[u]||o;return t?n.createElement(k,l(l({ref:a},d),{},{components:t})):n.createElement(k,l({ref:a},d))}));function k(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var o=t.length,l=new Array(o);l[0]=u;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[c]="string"==typeof e?e:i,l[1]=r;for(var p=2;p{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>p});var n=t(7462),i=(t(7294),t(3905));const o={sidebar_position:5,title:"Package builder configuration reference"},l="aica-package.toml configuration reference",r={unversionedId:"reference/custom-components/aica-package-toml",id:"reference/custom-components/aica-package-toml",title:"Package builder configuration reference",description:"The aica-package.toml file is used to configure the build process for a component package.",source:"@site/docs/reference/custom-components/05-aica-package-toml.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/aica-package-toml",permalink:"/docs/reference/custom-components/aica-package-toml",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/05-aica-package-toml.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,title:"Package builder configuration reference"},sidebar:"programmingReferenceSidebar",previous:{title:"Building a component package",permalink:"/docs/reference/custom-components/package-building"},next:{title:"Migrating from older versions of `package-builder`",permalink:"/docs/reference/custom-components/aica-package-migrations"}},s={},p=[{value:"TOML syntax",id:"toml-syntax",level:2},{value:"aica-package.toml file structure",id:"aica-packagetoml-file-structure",level:2},{value:"#syntax",id:"syntax",level:3},{value:"[build]",id:"build",level:3},{value:"[build.type]",id:"buildtype",level:4},{value:"[build.ssh]",id:"buildssh",level:4},{value:"[build.image]",id:"buildimage",level:4},{value:"[build.cmake-args]",id:"buildcmake-args",level:4},{value:"[build.apt-repos]",id:"buildapt-repos",level:4},{value:"Using a deb file",id:"using-a-deb-file",level:5},{value:"Using a repository (with an optional keyring)",id:"using-a-repository-with-an-optional-keyring",level:5},{value:"[build.dependencies]",id:"builddependencies",level:4},{value:"Adding version constraints",id:"adding-version-constraints",level:5},{value:"Adding build-time dependencies",id:"adding-build-time-dependencies",level:5},{value:"[build.run-dependencies]",id:"buildrun-dependencies",level:4},{value:"[build.packages]",id:"buildpackages",level:4},{value:"[build.packages.XYZ.dependencies.apt]",id:"buildpackagesxyzdependenciesapt",level:5},{value:"[build.packages.XYZ.dependencies.pip]",id:"buildpackagesxyzdependenciespip",level:5},{value:"[build.stages]",id:"buildstages",level:4},{value:"[metadata]",id:"metadata",level:3},{value:"[metadata.version]",id:"metadataversion",level:4},{value:"[metadata.description]",id:"metadatadescription",level:4},{value:"[metadata.collection]",id:"metadatacollection",level:4},{value:"Advanced usage",id:"advanced-usage",level:4},{value:"docker-image://",id:"docker-image",level:5},{value:"build-context://",id:"build-context",level:5},{value:"Version constraints",id:"version-constraints",level:5},{value:"Examples",id:"examples",level:3},{value:"Basic setup",id:"basic-setup",level:4},{value:"With dependencies",id:"with-dependencies",level:4},{value:"Advanced usage",id:"advanced-usage-1",level:4},{value:"Custom stage",id:"custom-stage",level:4},{value:"docker build usage",id:"docker-build-usage",level:2}],d={toc:p},c="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(c,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"aica-packagetoml-configuration-reference"},(0,i.kt)("inlineCode",{parentName:"h1"},"aica-package.toml")," configuration reference"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file is used to configure the build process for a component package."),(0,i.kt)("h2",{id:"toml-syntax"},(0,i.kt)("inlineCode",{parentName:"h2"},"TOML")," syntax"),(0,i.kt)("p",null,"The configuration uses the simple ",(0,i.kt)("a",{parentName:"p",href:"https://toml.io/en/"},"TOML")," file format which is easy to read and write. Here are a\nfew examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml"},'# add a category\n[category]\n# then you can add keys and values\nkey-string = "value string"\nkey-bool = true\nkey-int = 42\nkey-float = 3.14\n\n# you can nest categories\n[category.sub-category]\nkey = "value"\n')),(0,i.kt)("p",null,"Note that each ",(0,i.kt)("inlineCode",{parentName:"p"},"string")," value needs to be quoted, but keys and values of other types do not."),(0,i.kt)("h2",{id:"aica-packagetoml-file-structure"},(0,i.kt)("inlineCode",{parentName:"h2"},"aica-package.toml")," file structure"),(0,i.kt)("p",null,"This example contains every possible key and value that can be used in an ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file and explains each of\nthem."),(0,i.kt)("h3",{id:"syntax"},(0,i.kt)("inlineCode",{parentName:"h3"},"#syntax")),(0,i.kt)("p",null,"Each ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," should start with ",(0,i.kt)("inlineCode",{parentName:"p"},"#syntax=ghcr.io/aica-technology/package-builder"),". This is used to specify\nthe Docker syntax and version used to build the package."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"#syntax=ghcr.io/aica-technology/package-builder:v1\n")),(0,i.kt)("p",null,"You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/orgs/aica-technology/packages/container/package/package-builder"},"here"),"."),(0,i.kt)("p",null,"The upcoming sections describe the syntax for the ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder")," version ",(0,i.kt)("inlineCode",{parentName:"p"},"1.0.0")," and later. If you are migrating from an older version, please refer to the corresponding guide:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/reference/custom-components/aica-package-migrations#migrating-from-0-0-x"},"Migrating from ",(0,i.kt)("inlineCode",{parentName:"a"},"0.0.X")))),(0,i.kt)("h3",{id:"build"},(0,i.kt)("inlineCode",{parentName:"h3"},"[build]")),(0,i.kt)("h4",{id:"buildtype"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.type]")),(0,i.kt)("p",null,"Required. The only ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.type]")," currently supported is ",(0,i.kt)("inlineCode",{parentName:"p"},"ros"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\ntype = "ros"\n')),(0,i.kt)("h4",{id:"buildssh"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.ssh]")),(0,i.kt)("p",null,"Optional. Default is ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),". If set to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),", any call to ",(0,i.kt)("inlineCode",{parentName:"p"},"CMake"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"pip")," or custom stage will have access to the SSH credentials given to Docker with ",(0,i.kt)("inlineCode",{parentName:"p"},"--ssh default"),". This is useful if you need to clone a private repository in CMakeLists.txt or install a private Python package from git."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"[build]\nssh = false\n")),(0,i.kt)("h4",{id:"buildimage"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.image]")),(0,i.kt)("p",null,"Required. ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.image]")," is the tag of the AICA ",(0,i.kt)("inlineCode",{parentName:"p"},"ghcr.io/aica-technology/ros2-ws")," image that will be used to build the components. Those images are tagged after the versions of the ROS 2 distributions and are available ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/docker-images/pkgs/container/ros2-ws"},"here"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\nimage = "v2.0.0-jazzy"\n')),(0,i.kt)("h4",{id:"buildcmake-args"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.cmake-args]")),(0,i.kt)("p",null,"Optional. In this category, you can specify arguments which will be passed to CMake through ",(0,i.kt)("inlineCode",{parentName:"p"},"-DK1=V1 -DK2=V2 ...")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.cmake-args]\n# here are a few examples\nPACKAGE_NAME = "my_package"\nUSE_FEATURE_X = "ON"\n')),(0,i.kt)("h4",{id:"buildapt-repos"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.apt-repos]")),(0,i.kt)("p",null,"Optional. This category allows you to add extra APT repositories to the image. This is useful if you need to install some packages that are not available in the default repositories, which is common for third-party packages."),(0,i.kt)("p",null,"Multiple syntaxes are supported:"),(0,i.kt)("h5",{id:"using-a-deb-file"},"Using a ",(0,i.kt)("inlineCode",{parentName:"h5"},"deb")," file"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"[build.apt-repos]\ncuda = { deb-uri = 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/{{ if eq .Arch \"amd64\" }}x86_64{{else}}sbsa{{end}}/cuda-keyring_1.0-1_all.deb' }\n")),(0,i.kt)("p",null,"Note that ",(0,i.kt)("inlineCode",{parentName:"p"},'{{ if eq .Arch "amd64" }}x86_64{{else}}sbsa{{end}}')," is a template that will be replaced by ",(0,i.kt)("inlineCode",{parentName:"p"},"x86_64")," if the architecture is ",(0,i.kt)("inlineCode",{parentName:"p"},"amd64")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"sbsa")," otherwise. See ",(0,i.kt)("a",{parentName:"p",href:"https://pkg.go.dev/text/template"},"here")," for more information on the templating syntax."),(0,i.kt)("h5",{id:"using-a-repository-with-an-optional-keyring"},"Using a repository (with an optional keyring)"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.apt-repos.librealsense]\ntype = "deb" # optional, defaults to "deb", can also be "deb-src"\nuri = "https://librealsense.intel.com/Debian/apt-repo"\ndistribution = "jammy" # optional, will default to the current distribution\ncomponents = ["main"]\nkeyring = "https://librealsense.intel.com/Debian/librealsense.pgp" # optional\n')),(0,i.kt)("p",null,"Note that in this case we use a subcategory to specify the property of this repository, but it can also be expressed using the ",(0,i.kt)("inlineCode",{parentName:"p"},"{}")," syntax like the previous example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.apt-repos]\nlibrealsense = { type = "deb", uri = "https://librealsense.intel.com/Debian/apt-repo", distribution = "jammy", components = ["main"], keyring = "https://librealsense.intel.com/Debian/librealsense.pgp" }\n')),(0,i.kt)("h4",{id:"builddependencies"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.dependencies]")),(0,i.kt)("p",null,"Optional. ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," is used to specify the AICA libraries and ROS 2 packages that will be installed in the\nimage."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Those libraries and packages will not be available at runtime, only while building. If you need them for building ",(0,i.kt)("em",{parentName:"p"},"and")," running, add them to the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies]")," section below instead.\nLibraries that are only required at runtime, and not at build time, can be declared with ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.run-dependencies]")," instead.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Those libraries and packages are built for specific versions of ROS 2, so make sure that the version you are using is compatible with your ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.image]"),".")),(0,i.kt)("p",null,"Components usually require the ",(0,i.kt)("inlineCode",{parentName:"p"},"control-libraries")," library. You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/control-libraries/pkgs/container/control-libraries"},"here"),". "),(0,i.kt)("p",null,"Components usually also require the ",(0,i.kt)("inlineCode",{parentName:"p"},"modulo")," package. You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/modulo/pkgs/container/modulo"},"here"),"."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Libraries are built in a specific way to be compatible with the AICA packaging system. Custom libraries are not\navailable yet.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Starting with version ",(0,i.kt)("inlineCode",{parentName:"p"},"1.0.0")," of the ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),", all libraries and packages need to have special metadata associated in their image. This is done automatically when building with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),". This means you won't be able to use older versions of certain libraries and packages with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = "v9.0.1"\n"@aica/foss/modulo" = "v5.1.0"\n"@myorg/mypackage" = "docker-image://ghcr.io/myorg/mypackage:v1.0.0"\n')),(0,i.kt)("h5",{id:"adding-version-constraints"},"Adding version constraints"),(0,i.kt)("p",null,"Because ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder")," will use your dependencies in the metadata of the component, the version of the dependencies will be expected when the component is used. You can tweak ",(0,i.kt)("em",{parentName:"p"},"which")," exact version is expected by using version constraints."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = {version = "v9.0.1", constraints = ">= 9.0.1"}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"By default, the version constraint is derived from the given version. It will be ",(0,i.kt)("inlineCode",{parentName:"p"},"~> X.Y")," where ",(0,i.kt)("inlineCode",{parentName:"p"},"X")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Y")," are the major and minor versions of the given version. This means that any version with the same major version and a minor version greater than or equal to the given minor version will be accepted.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can find more information about version constraints and their syntax ",(0,i.kt)("a",{parentName:"p",href:"#version-constraints"},"here"),".")),(0,i.kt)("h5",{id:"adding-build-time-dependencies"},"Adding build-time dependencies"),(0,i.kt)("p",null,"Sometimes you might want to add a library but not require it in the metadata of your component. We call those dependencies build-only dependencies. This might be useful when using a static library that is built into your component and thus is not needed at runtime."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@myorg/mylib" = {version = "v7.5.0", build-only = true}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can also add version constraints to build-only dependencies.")),(0,i.kt)("h4",{id:"buildrun-dependencies"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.run-dependencies]")),(0,i.kt)("p",null,"Optional. This field is similar to ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," but its content is not downloaded and added to the image during the build. Instead, the information contained there is used in the metadata of your component. When someone uses your component, they will be notified that they need to use a specific version of the added dependencies matching the one specified in this section."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.run-dependencies]\n"@myorg/mypackage" = ">= 1.0.0"\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The value expected for each entry is not a version but a version constraint. You can find more information about this concept and its syntax in the corresponding section ",(0,i.kt)("a",{parentName:"p",href:"#version-constraints"},"here"),".")),(0,i.kt)("h4",{id:"buildpackages"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.packages]")),(0,i.kt)("p",null,"Required. This category describes the different components that will be built."),(0,i.kt)("p",null,"The name of the component doesn't need to match the one set in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.xml"),"; it is only used during the build.\n",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," is required and defines the path to the component source code relative to the Docker\ncontext (usually the root of the repository)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component]\nsource = "my_component"\n')),(0,i.kt)("p",null,"You can add as many components as you want, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.another]\nsource = "another"\n\n[build.packages.evenmore]\nsource = "different-folder/event-more"\n')),(0,i.kt)("h5",{id:"buildpackagesxyzdependenciesapt"},(0,i.kt)("inlineCode",{parentName:"h5"},"[build.packages.XYZ.dependencies.apt]")),(0,i.kt)("p",null,"Optional. This category allows you to specify the APT packages that will be installed in the image. This is useful if\nyou need to install some system dependencies."),(0,i.kt)("p",null,"By default, available packages are based on the Ubuntu version used by the specified version of ROS2. You can find the list of\npackages ",(0,i.kt)("a",{parentName:"p",href:"https://packages.ubuntu.com/"},"here")," and the Ubuntu version used by the ROS2\ndistribution ",(0,i.kt)("a",{parentName:"p",href:"https://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html"},"here"),". See ",(0,i.kt)("a",{parentName:"p",href:"#buildapt-repos"},"this section")," to learn how to add extra APT repositories."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can either provide a version to be installed or ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," to install the latest available version.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Packages specified in ",(0,i.kt)("inlineCode",{parentName:"p"},"<*depend>")," in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.xml")," will be installed through ",(0,i.kt)("inlineCode",{parentName:"p"},"rosdep")," automatically.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component.dependencies.apt]\nlibopencv-dev = "*"\nlibyaml-cpp-dev = "2.55.1"\n')),(0,i.kt)("h5",{id:"buildpackagesxyzdependenciespip"},(0,i.kt)("inlineCode",{parentName:"h5"},"[build.packages.XYZ.dependencies.pip]")),(0,i.kt)("p",null,"Optional. This category allows you to specify the Python packages that will be installed in the image."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"By default, ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," will check if your ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," folder contains a ",(0,i.kt)("inlineCode",{parentName:"p"},"requirements.txt"),"\nfile and install the packages specified inside."),(0,i.kt)("p",{parentName:"admonition"},"You can override the name of the file by using the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.file]")," key.")),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.file]")," key and the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.packages]")," list are\nmutually exclusive; you can only use one of them.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.packages]")," roughly follows the format\nof ",(0,i.kt)("inlineCode",{parentName:"p"},"pip"),": ",(0,i.kt)("a",{parentName:"p",href:"https://pip.pypa.io/en/stable/reference/requirements-file-format/"},"https://pip.pypa.io/en/stable/reference/requirements-file-format/"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component.dependencies.pip]\n# e.g. if your requirements file is called `aica-requirements.txt`\nfile = "aica-requirements.txt"\n\n# OR\n[build.packages.my_component.dependencies.pip.packages]\nnumpy = "2.0.0" # equivalent to `numpy==2.0.0`\nopencv-python = "\\*" # equivalent to `opencv-python`\nscipy = ">=1.0.0" # equivalent to `scipy>=1.0.0`\n')),(0,i.kt)("h4",{id:"buildstages"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.stages]")),(0,i.kt)("p",null,"Optional. This category allows you to define custom stages that can be used with ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build --target"),". These are\nuseful if you want to run some extra commands during or at the end of the build process or if you need a custom output."),(0,i.kt)("p",null,"Here is an example that will call some Python code during the build process. The name of the stage, ",(0,i.kt)("inlineCode",{parentName:"p"},"list"),", will be used\nwith ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build --target list")," to run this stage."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[build.stages.XYZ.from]")," is required; it is the stage of the build process on top of which this stage will run. It can\nbe any of:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"base"),": only the environment has been applied"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"base"),", the code has been copied)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"development"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"code"),", runnable image setup for debugging with dependencies installed"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"build"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"code"),", the component has been built and the dependencies installed"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"test"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"build"),", the component has been tested"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"production"),": scratch image containing just to built component")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[build.stages.XYZ.run]")," is required. It is the command that will be run in the stage. The command will be run as a\nnon-root user with the ",(0,i.kt)("inlineCode",{parentName:"p"},"colcon")," workspace setup and the current working directory will be the ",(0,i.kt)("inlineCode",{parentName:"p"},"colcon")," workspace. The\nfollowing environment variables should be available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"WORKSPACE"),": the path to the ",(0,i.kt)("inlineCode",{parentName:"li"},"colcon")," workspace, which is also the current working directory"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"USER"),": the name of the non-root user"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"HOME"),": the path to the home directory of the non-root user"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ROS_DISTRO"),": the ROS2 distribution used to build the component"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ROS2_WORKSPACE"),": the path to the workspace where the standard ROS2 packages are installed as well as\nthe ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.dependencies]")," packages"),(0,i.kt)("li",{parentName:"ul"},"any other environment variables set by ",(0,i.kt)("inlineCode",{parentName:"li"},"colcon"),"'s ",(0,i.kt)("inlineCode",{parentName:"li"},"${WORKSPACE}/install/setup.bash"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.stages.list]\nfrom = "development"\nrun = """\npython3 ${WORKSPACE}/src/my_component/script.py\n"""\n')),(0,i.kt)("h3",{id:"metadata"},(0,i.kt)("inlineCode",{parentName:"h3"},"[metadata]")),(0,i.kt)("p",null,"Required."),(0,i.kt)("h4",{id:"metadataversion"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.version]")),(0,i.kt)("p",null,"Required. Must be a ",(0,i.kt)("a",{parentName:"p",href:"https://semver.org/"},"semver-compliant")," version string."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata]\nversion = "1.0.0"\n')),(0,i.kt)("h4",{id:"metadatadescription"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.description]")),(0,i.kt)("p",null,"Optional. A short description of the component."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata]\ndescription = "My awesome component"\n')),(0,i.kt)("h4",{id:"metadatacollection"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.collection]")),(0,i.kt)("p",null,"Required when using multiple ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages]"),", otherwise ignored. This must contain the names of the collection being built (the set of multiple components)."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.name]")," is required. It is the name of the collection."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.ros-name]")," is optional. This must be specified if ",(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.name]")," is not a valid ROS package name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata.collection]\nname = "my-collection"\nros-name = "my_collection" # required because `my-collection` is not a valid ROS package name\n')),(0,i.kt)("h4",{id:"advanced-usage"},"Advanced usage"),(0,i.kt)("h5",{id:"docker-image"},(0,i.kt)("inlineCode",{parentName:"h5"},"docker-image://")),(0,i.kt)("p",null,"As documented above, you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://")," to specify your own ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," packages. However,\nyou can also use it anywhere you are giving the tag to a Docker image. This is useful if you want to use a custom base\nimage for example."),(0,i.kt)("p",null,"Some examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\nimage = "docker-image://ghcr.io/myorg/myimage:v1.0.0"\n\n# and/or\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "docker-image://ghcr.io/myorg/myimage:v1.0.0"\n')),(0,i.kt)("h5",{id:"build-context"},(0,i.kt)("inlineCode",{parentName:"h5"},"build-context://")),(0,i.kt)("p",null,"Similarly to ",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://"),", you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"build-context://")," to specify a context given to ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build"),"\nwith ",(0,i.kt)("inlineCode",{parentName:"p"},"--build-context")," (see ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/reference/commandline/buildx_build/#build-context"},"here"),").\nThis can also be used in ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," to build a component from a folder outside your root context or\nfrom another Docker image."),(0,i.kt)("p",null,"Some examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = "build-context://cl"\n\n# and/or\n\n[build.packages.component]\nsource = "build-context://my_source"\n')),(0,i.kt)("h5",{id:"version-constraints"},"Version constraints"),(0,i.kt)("p",null,"Version constraints follow the syntax of the ",(0,i.kt)("a",{parentName:"p",href:"https://www.terraform.io/docs/language/expressions/version-constraints.html"},"Terraform version constraints")," which is similar to syntax used by NPM, yarn or pip. Here is a quick summary:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Versions constraints are composed of one or more conditions separated by commas, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},">= 1.0.0, < 2.0.0"),"."),(0,i.kt)("li",{parentName:"ul"},"Each version specified must be a valid ",(0,i.kt)("a",{parentName:"li",href:"https://semver.org/"},"semver")," version, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.0"),"."),(0,i.kt)("li",{parentName:"ul"},"The following operators are supported:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"=")," or no operator: allow only the exact version, cannot be combined with other conditions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"!="),": exclude a specific version."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},">"),", ",(0,i.kt)("inlineCode",{parentName:"li"},">="),", ",(0,i.kt)("inlineCode",{parentName:"li"},"<"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"<="),": comparison against a specific version, allowing any version matching the operator. ",(0,i.kt)("inlineCode",{parentName:"li"},">")," allows newer version and ",(0,i.kt)("inlineCode",{parentName:"li"},"<")," allows older version."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"~>"),": allows only the right most number of the version to increase. This is useful to allow only patch or minor versions to increase, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"~> 1.0")," allows ",(0,i.kt)("inlineCode",{parentName:"li"},"1.1"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"1.2"),", etc. but not ",(0,i.kt)("inlineCode",{parentName:"li"},"2.0")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"~> 1.0.0")," allows ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.1"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.2"),", etc. but not ",(0,i.kt)("inlineCode",{parentName:"li"},"1.1.0"),".")))),(0,i.kt)("h3",{id:"examples"},"Examples"),(0,i.kt)("h4",{id:"basic-setup"},"Basic setup"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v2.0.0-jazzy"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v9.0.1"\n"@aica/foss/modulo" = "v5.1.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n')),(0,i.kt)("h4",{id:"with-dependencies"},"With dependencies"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v2.0.0-jazzy"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v9.0.1"\n"@aica/foss/modulo" = "v5.1.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n\n# `requirements.txt` will be used by default\n\n[build.packages.component.dependencies.apt]\nlibopencv-dev = "*"\n')),(0,i.kt)("h4",{id:"advanced-usage-1"},"Advanced usage"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml \\\n --build-context my_source=../my_folder \\\n --build-context base=ghcr.io/myorg/myimage:v1.0.0 \\\n --build-context cl=ghcr.io/myorg/myimage:v2.0.0 \\\n -t my_component \\\n .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "docker-image://base"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "build-context://cl"\n"@aica/foss/modulo" = "v5.1.0"\n\n[build.packages.component]\nsource = "build-context://my_source"\n')),(0,i.kt)("h4",{id:"custom-stage"},"Custom stage"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component --target list .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v2.0.0-jazzy"\n\n[build.packages.component]\n\n[build.stages.list]\nfrom = "development"\nrun = """\npython3 ${WORKSPACE}/src/my_component/script.py\n"""\n')),(0,i.kt)("h2",{id:"docker-build-usage"},(0,i.kt)("inlineCode",{parentName:"h2"},"docker build")," usage"),(0,i.kt)("p",null,"We use a custom Docker syntax, which allows us to define the configuration through ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," instead of\na ",(0,i.kt)("inlineCode",{parentName:"p"},"Dockerfile"),". However, we are still using ",(0,i.kt)("inlineCode",{parentName:"p"},"docker")," directly to build. This means we have access to all the\noptions ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build")," provides but also that you don't need to install or learn anything new to build your component."),(0,i.kt)("p",null,"Some useful options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-t")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--tag"),": tag the image with a name and an optional tag, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"-t my_component")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"-t my_component:latest")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--platform"),": build for a specific platform, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--platform linux/amd64")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--platform linux/arm64")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--build-arg"),": this can be used to override any key in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml"),",\ne.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--build-arg config.build.image=jazzy")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--ssh"),": this can be used to pass SSH credentials to Docker, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--ssh default"),". You will also need to\nset ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.ssh]")," to ",(0,i.kt)("inlineCode",{parentName:"li"},"true")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--build-context"),": this can be used to pass a context to Docker, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--build-context my_source=../my_folder"),". You\ncan then use ",(0,i.kt)("inlineCode",{parentName:"li"},"build-context://my_source")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")," to build a component from a folder outside your root\ncontext or from another Docker image"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--target"),": this can be used to run a custom stage, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--target list"),". You can then use ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.stages.list]"),"\nin ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")," to define the stage"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--no-cache"),": this can be used to force Docker to rebuild the image from scratch"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--progress"),": this can be used to change the progress output, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--progress plain")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--progress auto")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--label"),": this can be used to add metadata to the image, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--label my_label=my_value"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/203a697f.ee6af521.js b/assets/js/203a697f.ee6af521.js deleted file mode 100644 index d0246004..00000000 --- a/assets/js/203a697f.ee6af521.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[737],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>k});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=n.createContext({}),p=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),c=p(t),u=i,k=c["".concat(s,".").concat(u)]||c[u]||m[u]||o;return t?n.createElement(k,l(l({ref:a},d),{},{components:t})):n.createElement(k,l({ref:a},d))}));function k(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var o=t.length,l=new Array(o);l[0]=u;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[c]="string"==typeof e?e:i,l[1]=r;for(var p=2;p{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>p});var n=t(7462),i=(t(7294),t(3905));const o={sidebar_position:5,title:"Package builder configuration reference"},l="aica-package.toml configuration reference",r={unversionedId:"reference/custom-components/aica-package-toml",id:"reference/custom-components/aica-package-toml",title:"Package builder configuration reference",description:"The aica-package.toml file is used to configure the build process for a component package.",source:"@site/docs/reference/custom-components/05-aica-package-toml.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/aica-package-toml",permalink:"/docs/reference/custom-components/aica-package-toml",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/05-aica-package-toml.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,title:"Package builder configuration reference"},sidebar:"programmingReferenceSidebar",previous:{title:"Building a component package",permalink:"/docs/reference/custom-components/package-building"},next:{title:"Migrating from older versions of `package-builder`",permalink:"/docs/reference/custom-components/aica-package-migrations"}},s={},p=[{value:"TOML syntax",id:"toml-syntax",level:2},{value:"aica-package.toml file structure",id:"aica-packagetoml-file-structure",level:2},{value:"#syntax",id:"syntax",level:3},{value:"[build]",id:"build",level:3},{value:"[build.type]",id:"buildtype",level:4},{value:"[build.ssh]",id:"buildssh",level:4},{value:"[build.image]",id:"buildimage",level:4},{value:"[build.cmake-args]",id:"buildcmake-args",level:4},{value:"[build.apt-repos]",id:"buildapt-repos",level:4},{value:"Using a deb file",id:"using-a-deb-file",level:5},{value:"Using a repository (with an optional keyring)",id:"using-a-repository-with-an-optional-keyring",level:5},{value:"[build.dependencies]",id:"builddependencies",level:4},{value:"Adding version constraints",id:"adding-version-constraints",level:5},{value:"Adding build-time dependencies",id:"adding-build-time-dependencies",level:5},{value:"[build.run-dependencies]",id:"buildrun-dependencies",level:4},{value:"[build.packages]",id:"buildpackages",level:4},{value:"[build.packages.XYZ.dependencies.apt]",id:"buildpackagesxyzdependenciesapt",level:5},{value:"[build.packages.XYZ.dependencies.pip]",id:"buildpackagesxyzdependenciespip",level:5},{value:"[build.stages]",id:"buildstages",level:4},{value:"[metadata]",id:"metadata",level:3},{value:"[metadata.version]",id:"metadataversion",level:4},{value:"[metadata.description]",id:"metadatadescription",level:4},{value:"[metadata.collection]",id:"metadatacollection",level:4},{value:"Advanced usage",id:"advanced-usage",level:4},{value:"docker-image://",id:"docker-image",level:5},{value:"build-context://",id:"build-context",level:5},{value:"Version constraints",id:"version-constraints",level:5},{value:"Examples",id:"examples",level:3},{value:"Basic setup",id:"basic-setup",level:4},{value:"With dependencies",id:"with-dependencies",level:4},{value:"Advanced usage",id:"advanced-usage-1",level:4},{value:"Custom stage",id:"custom-stage",level:4},{value:"docker build usage",id:"docker-build-usage",level:2}],d={toc:p},c="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(c,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"aica-packagetoml-configuration-reference"},(0,i.kt)("inlineCode",{parentName:"h1"},"aica-package.toml")," configuration reference"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file is used to configure the build process for a component package."),(0,i.kt)("h2",{id:"toml-syntax"},(0,i.kt)("inlineCode",{parentName:"h2"},"TOML")," syntax"),(0,i.kt)("p",null,"The configuration uses the simple ",(0,i.kt)("a",{parentName:"p",href:"https://toml.io/en/"},"TOML")," file format which is easy to read and write. Here are a\nfew examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml"},'# add a category\n[category]\n# then you can add keys and values\nkey-string = "value string"\nkey-bool = true\nkey-int = 42\nkey-float = 3.14\n\n# you can nest categories\n[category.sub-category]\nkey = "value"\n')),(0,i.kt)("p",null,"Note that each ",(0,i.kt)("inlineCode",{parentName:"p"},"string")," value needs to be quoted, but keys and values of other types do not."),(0,i.kt)("h2",{id:"aica-packagetoml-file-structure"},(0,i.kt)("inlineCode",{parentName:"h2"},"aica-package.toml")," file structure"),(0,i.kt)("p",null,"This example contains every possible key and value that can be used in an ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file and explains each of\nthem."),(0,i.kt)("h3",{id:"syntax"},(0,i.kt)("inlineCode",{parentName:"h3"},"#syntax")),(0,i.kt)("p",null,"Each ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," should start with ",(0,i.kt)("inlineCode",{parentName:"p"},"#syntax=ghcr.io/aica-technology/package-builder"),". This is used to specify\nthe Docker syntax and version used to build the package."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"#syntax=ghcr.io/aica-technology/package-builder:v1\n")),(0,i.kt)("p",null,"You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/orgs/aica-technology/packages/container/package/package-builder"},"here"),"."),(0,i.kt)("p",null,"The upcoming sections describe the syntax for the ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder")," version ",(0,i.kt)("inlineCode",{parentName:"p"},"1.0.0")," and later. If you are migrating from an older version, please refer to the corresponding guide:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/reference/custom-components/aica-package-migrations#migrating-from-0-0-x"},"Migrating from ",(0,i.kt)("inlineCode",{parentName:"a"},"0.0.X")))),(0,i.kt)("h3",{id:"build"},(0,i.kt)("inlineCode",{parentName:"h3"},"[build]")),(0,i.kt)("h4",{id:"buildtype"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.type]")),(0,i.kt)("p",null,"Required. The only ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.type]")," currently supported is ",(0,i.kt)("inlineCode",{parentName:"p"},"ros"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\ntype = "ros"\n')),(0,i.kt)("h4",{id:"buildssh"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.ssh]")),(0,i.kt)("p",null,"Optional. Default is ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),". If set to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),", any call to ",(0,i.kt)("inlineCode",{parentName:"p"},"CMake"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"pip")," or custom stage will have access to the SSH credentials given to Docker with ",(0,i.kt)("inlineCode",{parentName:"p"},"--ssh default"),". This is useful if you need to clone a private repository in CMakeLists.txt or install a private Python package from git."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"[build]\nssh = false\n")),(0,i.kt)("h4",{id:"buildimage"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.image]")),(0,i.kt)("p",null,"Required. ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.image]")," is the tag of the AICA ",(0,i.kt)("inlineCode",{parentName:"p"},"ghcr.io/aica-technology/ros2-ws")," image that will be used to build the components. Those images are tagged after the versions of the ROS 2 distributions and are available ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/docker-images/pkgs/container/ros2-ws"},"here"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\nimage = "v1.0.0-iron"\n')),(0,i.kt)("h4",{id:"buildcmake-args"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.cmake-args]")),(0,i.kt)("p",null,"Optional. In this category, you can specify arguments which will be passed to CMake through ",(0,i.kt)("inlineCode",{parentName:"p"},"-DK1=V1 -DK2=V2 ...")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.cmake-args]\n# here are a few examples\nPACKAGE_NAME = "my_package"\nUSE_FEATURE_X = "ON"\n')),(0,i.kt)("h4",{id:"buildapt-repos"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.apt-repos]")),(0,i.kt)("p",null,"Optional. This category allows you to add extra APT repositories to the image. This is useful if you need to install some packages that are not available in the default repositories, which is common for third-party packages."),(0,i.kt)("p",null,"Multiple syntaxes are supported:"),(0,i.kt)("h5",{id:"using-a-deb-file"},"Using a ",(0,i.kt)("inlineCode",{parentName:"h5"},"deb")," file"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},"[build.apt-repos]\ncuda = { deb-uri = 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/{{ if eq .Arch \"amd64\" }}x86_64{{else}}sbsa{{end}}/cuda-keyring_1.0-1_all.deb' }\n")),(0,i.kt)("p",null,"Note that ",(0,i.kt)("inlineCode",{parentName:"p"},'{{ if eq .Arch "amd64" }}x86_64{{else}}sbsa{{end}}')," is a template that will be replaced by ",(0,i.kt)("inlineCode",{parentName:"p"},"x86_64")," if the architecture is ",(0,i.kt)("inlineCode",{parentName:"p"},"amd64")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"sbsa")," otherwise. See ",(0,i.kt)("a",{parentName:"p",href:"https://pkg.go.dev/text/template"},"here")," for more information on the templating syntax."),(0,i.kt)("h5",{id:"using-a-repository-with-an-optional-keyring"},"Using a repository (with an optional keyring)"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.apt-repos.librealsense]\ntype = "deb" # optional, defaults to "deb", can also be "deb-src"\nuri = "https://librealsense.intel.com/Debian/apt-repo"\ndistribution = "jammy" # optional, will default to the current distribution\ncomponents = ["main"]\nkeyring = "https://librealsense.intel.com/Debian/librealsense.pgp" # optional\n')),(0,i.kt)("p",null,"Note that in this case we use a subcategory to specify the property of this repository, but it can also be expressed using the ",(0,i.kt)("inlineCode",{parentName:"p"},"{}")," syntax like the previous example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.apt-repos]\nlibrealsense = { type = "deb", uri = "https://librealsense.intel.com/Debian/apt-repo", distribution = "jammy", components = ["main"], keyring = "https://librealsense.intel.com/Debian/librealsense.pgp" }\n')),(0,i.kt)("h4",{id:"builddependencies"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.dependencies]")),(0,i.kt)("p",null,"Optional. ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," is used to specify the AICA libraries and ROS 2 packages that will be installed in the\nimage."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Those libraries and packages will not be available at runtime, only while building. If you need them for building ",(0,i.kt)("em",{parentName:"p"},"and")," running, add them to the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies]")," section below instead.\nLibraries that are only required at runtime, and not at build time, can be declared with ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.run-dependencies]")," instead.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Those libraries and packages are built for specific versions of ROS 2, so make sure that the version you are using is compatible with your ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.image]"),".")),(0,i.kt)("p",null,"Components usually require the ",(0,i.kt)("inlineCode",{parentName:"p"},"control-libraries")," library. You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/control-libraries/pkgs/container/control-libraries"},"here"),". If you are\nbuilding a hardware interface, you might want to use the ",(0,i.kt)("inlineCode",{parentName:"p"},"network-interfaces")," library; you can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/network-interfaces/pkgs/container/network-interfaces"},"here"),"."),(0,i.kt)("p",null,"Components usually require the ",(0,i.kt)("inlineCode",{parentName:"p"},"modulo")," package. You can find the available\nversions ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/modulo/pkgs/container/modulo"},"here"),"."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Libraries are built in a specific way to be compatible with the AICA packaging system. Custom libraries are not\navailable yet.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Starting with version ",(0,i.kt)("inlineCode",{parentName:"p"},"1.0.0")," of the ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),", all libraries and packages need to have special metadata associated in their image. This is done automatically when building with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),". This means you won't be able to use older versions of certain libraries and packages with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = "v7.5.0"\n"@aica/foss/network-interfaces" = "v3.0.0"\n"@aica/foss/modulo" = "v4.2.0"\n"@myorg/mypackage" = "docker-image://ghcr.io/myorg/mypackage:v1.0.0"\n')),(0,i.kt)("h5",{id:"adding-version-constraints"},"Adding version constraints"),(0,i.kt)("p",null,"Because ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder")," will use your dependencies in the metadata of the component, the version of the dependencies will be expected when the component is used. You can tweak ",(0,i.kt)("em",{parentName:"p"},"which")," exact version is expected by using version constraints."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = {version = "v7.5.0", constraints = ">= 7.5.0"}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"By default, the version constraint is derived from the given version. It will be ",(0,i.kt)("inlineCode",{parentName:"p"},"~> X.Y")," where ",(0,i.kt)("inlineCode",{parentName:"p"},"X")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Y")," are the major and minor versions of the given version. This means that any version with the same major version and a minor version greater than or equal to the given minor version will be accepted.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can find more information about version constraints and their syntax ",(0,i.kt)("a",{parentName:"p",href:"#version-constraints"},"here"),".")),(0,i.kt)("h5",{id:"adding-build-time-dependencies"},"Adding build-time dependencies"),(0,i.kt)("p",null,"Sometimes you might want to add a library but not require it in the metadata of your component. We call those dependencies build-only dependencies. This might be useful when using a static library that is built into your component and thus is not needed at runtime."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@myorg/mylib" = {version = "v7.5.0", build-only = true}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can also add version constraints to build-only dependencies.")),(0,i.kt)("h4",{id:"buildrun-dependencies"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.run-dependencies]")),(0,i.kt)("p",null,"Optional. This field is similar to ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," but its content is not downloaded and added to the image during the build. Instead, the information contained there is used in the metadata of your component. When someone uses your component, they will be notified that they need to use a specific version of the added dependencies matching the one specified in this section."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.run-dependencies]\n"@myorg/mypackage" = ">= 1.0.0"\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The value expected for each entry is not a version but a version constraint. You can find more information about this concept and its syntax in the corresponding section ",(0,i.kt)("a",{parentName:"p",href:"#version-constraints"},"here"),".")),(0,i.kt)("h4",{id:"buildpackages"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.packages]")),(0,i.kt)("p",null,"Required. This category describes the different components that will be built."),(0,i.kt)("p",null,"The name of the component doesn't need to match the one set in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.xml"),"; it is only used during the build.\n",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," is required and defines the path to the component source code relative to the Docker\ncontext (usually the root of the repository)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component]\nsource = "my_component"\n')),(0,i.kt)("p",null,"You can add as many components as you want, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.another]\nsource = "another"\n\n[build.packages.evenmore]\nsource = "different-folder/event-more"\n')),(0,i.kt)("h5",{id:"buildpackagesxyzdependenciesapt"},(0,i.kt)("inlineCode",{parentName:"h5"},"[build.packages.XYZ.dependencies.apt]")),(0,i.kt)("p",null,"Optional. This category allows you to specify the APT packages that will be installed in the image. This is useful if\nyou need to install some system dependencies."),(0,i.kt)("p",null,"By default, available packages are based on the Ubuntu version used by the specified version of ROS2. You can find the list of\npackages ",(0,i.kt)("a",{parentName:"p",href:"https://packages.ubuntu.com/"},"here")," and the Ubuntu version used by the ROS2\ndistribution ",(0,i.kt)("a",{parentName:"p",href:"https://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html"},"here"),". See ",(0,i.kt)("a",{parentName:"p",href:"#buildapt-repos"},"this section")," to learn how to add extra APT repositories."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can either provide a version to be installed or ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," to install the latest available version.")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Packages specified in ",(0,i.kt)("inlineCode",{parentName:"p"},"<*depend>")," in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.xml")," will be installed through ",(0,i.kt)("inlineCode",{parentName:"p"},"rosdep")," automatically.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component.dependencies.apt]\nlibopencv-dev = "*"\nlibyaml-cpp-dev = "2.55.1"\n')),(0,i.kt)("h5",{id:"buildpackagesxyzdependenciespip"},(0,i.kt)("inlineCode",{parentName:"h5"},"[build.packages.XYZ.dependencies.pip]")),(0,i.kt)("p",null,"Optional. This category allows you to specify the Python packages that will be installed in the image."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"By default, ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," will check if your ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," folder contains a ",(0,i.kt)("inlineCode",{parentName:"p"},"requirements.txt"),"\nfile and install the packages specified inside."),(0,i.kt)("p",{parentName:"admonition"},"You can override the name of the file by using the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.file]")," key.")),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.file]")," key and the ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.packages]")," list are\nmutually exclusive; you can only use one of them.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.dependencies.pip.packages]")," roughly follows the format\nof ",(0,i.kt)("inlineCode",{parentName:"p"},"pip"),": ",(0,i.kt)("a",{parentName:"p",href:"https://pip.pypa.io/en/stable/reference/requirements-file-format/"},"https://pip.pypa.io/en/stable/reference/requirements-file-format/"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.packages.my_component.dependencies.pip]\n# e.g. if your requirements file is called `aica-requirements.txt`\nfile = "aica-requirements.txt"\n\n# OR\n[build.packages.my_component.dependencies.pip.packages]\nnumpy = "2.0.0" # equivalent to `numpy==2.0.0`\nopencv-python = "\\*" # equivalent to `opencv-python`\nscipy = ">=1.0.0" # equivalent to `scipy>=1.0.0`\n')),(0,i.kt)("h4",{id:"buildstages"},(0,i.kt)("inlineCode",{parentName:"h4"},"[build.stages]")),(0,i.kt)("p",null,"Optional. This category allows you to define custom stages that can be used with ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build --target"),". These are\nuseful if you want to run some extra commands during or at the end of the build process or if you need a custom output."),(0,i.kt)("p",null,"Here is an example that will call some Python code during the build process. The name of the stage, ",(0,i.kt)("inlineCode",{parentName:"p"},"list"),", will be used\nwith ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build --target list")," to run this stage."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[build.stages.XYZ.from]")," is required; it is the stage of the build process on top of which this stage will run. It can\nbe any of:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"base"),": only the environment has been applied"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"code"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"base"),", the code has been copied)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"development"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"code"),", runnable image setup for debugging with dependencies installed"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"build"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"code"),", the component has been built and the dependencies installed"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"test"),": based on ",(0,i.kt)("inlineCode",{parentName:"li"},"build"),", the component has been tested"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"production"),": scratch image containing just to built component")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[build.stages.XYZ.run]")," is required. It is the command that will be run in the stage. The command will be run as a\nnon-root user with the ",(0,i.kt)("inlineCode",{parentName:"p"},"colcon")," workspace setup and the current working directory will be the ",(0,i.kt)("inlineCode",{parentName:"p"},"colcon")," workspace. The\nfollowing environment variables should be available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"WORKSPACE"),": the path to the ",(0,i.kt)("inlineCode",{parentName:"li"},"colcon")," workspace, which is also the current working directory"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"USER"),": the name of the non-root user"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"HOME"),": the path to the home directory of the non-root user"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ROS_DISTRO"),": the ROS2 distribution used to build the component"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ROS2_WORKSPACE"),": the path to the workspace where the standard ROS2 packages are installed as well as\nthe ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.dependencies]")," packages"),(0,i.kt)("li",{parentName:"ul"},"any other environment variables set by ",(0,i.kt)("inlineCode",{parentName:"li"},"colcon"),"'s ",(0,i.kt)("inlineCode",{parentName:"li"},"${WORKSPACE}/install/setup.bash"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.stages.list]\nfrom = "development"\nrun = """\npython3 ${WORKSPACE}/src/my_component/script.py\n"""\n')),(0,i.kt)("h3",{id:"metadata"},(0,i.kt)("inlineCode",{parentName:"h3"},"[metadata]")),(0,i.kt)("p",null,"Required."),(0,i.kt)("h4",{id:"metadataversion"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.version]")),(0,i.kt)("p",null,"Required. Must be a ",(0,i.kt)("a",{parentName:"p",href:"https://semver.org/"},"semver-compliant")," version string."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata]\nversion = "1.0.0"\n')),(0,i.kt)("h4",{id:"metadatadescription"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.description]")),(0,i.kt)("p",null,"Optional. A short description of the component."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata]\ndescription = "My awesome component"\n')),(0,i.kt)("h4",{id:"metadatacollection"},(0,i.kt)("inlineCode",{parentName:"h4"},"[metadata.collection]")),(0,i.kt)("p",null,"Required when using multiple ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages]"),", otherwise ignored. This must contain the names of the collection being built (the set of multiple components)."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.name]")," is required. It is the name of the collection."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.ros-name]")," is optional. This must be specified if ",(0,i.kt)("inlineCode",{parentName:"p"},"[metadata.collection.name]")," is not a valid ROS package name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[metadata.collection]\nname = "my-collection"\nros-name = "my_collection" # required because `my-collection` is not a valid ROS package name\n')),(0,i.kt)("h4",{id:"advanced-usage"},"Advanced usage"),(0,i.kt)("h5",{id:"docker-image"},(0,i.kt)("inlineCode",{parentName:"h5"},"docker-image://")),(0,i.kt)("p",null,"As documented above, you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://")," to specify your own ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.dependencies]")," packages. However,\nyou can also use it anywhere you are giving the tag to a Docker image. This is useful if you want to use a custom base\nimage for example."),(0,i.kt)("p",null,"Some examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build]\nimage = "docker-image://ghcr.io/myorg/myimage:v1.0.0"\n\n# and/or\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "docker-image://ghcr.io/myorg/myimage:v1.0.0"\n')),(0,i.kt)("h5",{id:"build-context"},(0,i.kt)("inlineCode",{parentName:"h5"},"build-context://")),(0,i.kt)("p",null,"Similarly to ",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://"),", you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"build-context://")," to specify a context given to ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build"),"\nwith ",(0,i.kt)("inlineCode",{parentName:"p"},"--build-context")," (see ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/reference/commandline/buildx_build/#build-context"},"here"),").\nThis can also be used in ",(0,i.kt)("inlineCode",{parentName:"p"},"[build.packages.XYZ.source]")," to build a component from a folder outside your root context or\nfrom another Docker image."),(0,i.kt)("p",null,"Some examples:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'[build.dependencies]\n"@aica/foss/control-libraries" = "build-context://cl"\n\n# and/or\n\n[build.packages.component]\nsource = "build-context://my_source"\n')),(0,i.kt)("h5",{id:"version-constraints"},"Version constraints"),(0,i.kt)("p",null,"Version constraints follow the syntax of the ",(0,i.kt)("a",{parentName:"p",href:"https://www.terraform.io/docs/language/expressions/version-constraints.html"},"Terraform version constraints")," which is similar to syntax used by NPM, yarn or pip. Here is a quick summary:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Versions constraints are composed of one or more conditions separated by commas, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},">= 1.0.0, < 2.0.0"),"."),(0,i.kt)("li",{parentName:"ul"},"Each version specified must be a valid ",(0,i.kt)("a",{parentName:"li",href:"https://semver.org/"},"semver")," version, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.0"),"."),(0,i.kt)("li",{parentName:"ul"},"The following operators are supported:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"=")," or no operator: allow only the exact version, cannot be combined with other conditions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"!="),": exclude a specific version."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},">"),", ",(0,i.kt)("inlineCode",{parentName:"li"},">="),", ",(0,i.kt)("inlineCode",{parentName:"li"},"<"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"<="),": comparison against a specific version, allowing any version matching the operator. ",(0,i.kt)("inlineCode",{parentName:"li"},">")," allows newer version and ",(0,i.kt)("inlineCode",{parentName:"li"},"<")," allows older version."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"~>"),": allows only the right most number of the version to increase. This is useful to allow only patch or minor versions to increase, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"~> 1.0")," allows ",(0,i.kt)("inlineCode",{parentName:"li"},"1.1"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"1.2"),", etc. but not ",(0,i.kt)("inlineCode",{parentName:"li"},"2.0")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"~> 1.0.0")," allows ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.1"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"1.0.2"),", etc. but not ",(0,i.kt)("inlineCode",{parentName:"li"},"1.1.0"),".")))),(0,i.kt)("h3",{id:"examples"},"Examples"),(0,i.kt)("h4",{id:"basic-setup"},"Basic setup"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v1.0.0-iron"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v7.3.0"\n"@aica/foss/modulo" = "v4.0.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n')),(0,i.kt)("h4",{id:"with-dependencies"},"With dependencies"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v1.0.0-iron"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v7.3.0"\n"@aica/foss/modulo" = "v4.0.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n\n# `requirements.txt` will be used by default\n\n[build.packages.component.dependencies.apt]\nlibopencv-dev = "*"\n')),(0,i.kt)("h4",{id:"advanced-usage-1"},"Advanced usage"),(0,i.kt)("p",null,"Run with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml \\\n --build-context my_source=../my_folder \\\n --build-context base=ghcr.io/myorg/myimage:v1.0.0 \\\n --build-context cl=ghcr.io/myorg/myimage:v2.0.0 \\\n -t my_component \\\n .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "docker-image://base"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "build-context://cl"\n"@aica/foss/modulo" = "v4.0.0"\n\n[build.packages.component]\nsource = "build-context://my_source"\n')),(0,i.kt)("h4",{id:"custom-stage"},"Custom stage"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t my_component --target list .\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v1.0.0-iron"\n\n[build.packages.component]\n\n[build.stages.list]\nfrom = "development"\nrun = """\npython3 ${WORKSPACE}/src/my_component/script.py\n"""\n')),(0,i.kt)("h2",{id:"docker-build-usage"},(0,i.kt)("inlineCode",{parentName:"h2"},"docker build")," usage"),(0,i.kt)("p",null,"We use a custom Docker syntax, which allows us to define the configuration through ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," instead of\na ",(0,i.kt)("inlineCode",{parentName:"p"},"Dockerfile"),". However, we are still using ",(0,i.kt)("inlineCode",{parentName:"p"},"docker")," directly to build. This means we have access to all the\noptions ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build")," provides but also that you don't need to install or learn anything new to build your component."),(0,i.kt)("p",null,"Some useful options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-t")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--tag"),": tag the image with a name and an optional tag, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"-t my_component")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"-t my_component:latest")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--platform"),": build for a specific platform, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--platform linux/amd64")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--platform linux/arm64")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--build-arg"),": this can be used to override any key in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml"),",\ne.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--build-arg config.build.image=jazzy")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--ssh"),": this can be used to pass SSH credentials to Docker, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--ssh default"),". You will also need to\nset ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.ssh]")," to ",(0,i.kt)("inlineCode",{parentName:"li"},"true")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--build-context"),": this can be used to pass a context to Docker, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--build-context my_source=../my_folder"),". You\ncan then use ",(0,i.kt)("inlineCode",{parentName:"li"},"build-context://my_source")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")," to build a component from a folder outside your root\ncontext or from another Docker image"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--target"),": this can be used to run a custom stage, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--target list"),". You can then use ",(0,i.kt)("inlineCode",{parentName:"li"},"[build.stages.list]"),"\nin ",(0,i.kt)("inlineCode",{parentName:"li"},"aica-package.toml")," to define the stage"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--no-cache"),": this can be used to force Docker to rebuild the image from scratch"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--progress"),": this can be used to change the progress output, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--progress plain")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"--progress auto")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"--label"),": this can be used to add metadata to the image, e.g. ",(0,i.kt)("inlineCode",{parentName:"li"},"--label my_label=my_value"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/226aac0d.90fc4425.js b/assets/js/226aac0d.90fc4425.js new file mode 100644 index 00000000..028e4027 --- /dev/null +++ b/assets/js/226aac0d.90fc4425.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[980],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(n),h=i,g=p["".concat(s,".").concat(h)]||p[h]||d[h]||r;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:i,o[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=n(7462),i=(n(7294),n(3905));const r={sidebar_position:3,title:"Installation and Launch"},o=void 0,l={unversionedId:"getting-started/installation-and-launch",id:"getting-started/installation-and-launch",title:"Installation and Launch",description:"Pre-requisites",source:"@site/docs/getting-started/03-installation-and-launch.md",sourceDirName:"getting-started",slug:"/getting-started/installation-and-launch",permalink:"/docs/getting-started/installation-and-launch",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/getting-started/03-installation-and-launch.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,title:"Installation and Launch"},sidebar:"gettingStartedSidebar",previous:{title:"Licensing",permalink:"/docs/getting-started/licensing"},next:{title:"Examples",permalink:"/docs/category/examples"}},s={},c=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"AICA Launcher",id:"aica-launcher",level:2},{value:"Installation",id:"installation",level:3},{value:"Entering an AICA System License",id:"entering-an-aica-system-license",level:3},{value:"Configuring the AICA System image",id:"configuring-the-aica-system-image",level:3},{value:"Launching a configuration",id:"launching-a-configuration",level:3},{value:"Manual installation and launch",id:"manual-installation-and-launch",level:2}],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,i.kt)("p",null,"AICA System software is distributed with Docker images and executed with Docker containers."),(0,i.kt)("p",null,"Before proceeding, ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/"},"install Docker Engine")," on the host machine."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ubuntu users, make sure to follow\nthe ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/linux-postinstall/"},"post installation steps")," to create the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker")," group\nand add your user.")),(0,i.kt)("h2",{id:"aica-launcher"},"AICA Launcher"),(0,i.kt)("p",null,"AICA Launcher is the easiest way to get up and running with the AICA System. It manages licensing, package distribution\nand the Docker toolchain so that no command-line access is necessary. It also embeds AICA Studio: Edge directly inside\nthe launcher."),(0,i.kt)("h3",{id:"installation"},"Installation"),(0,i.kt)("p",null,"Find the latest release on the AICA GitHub organization under ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/api/releases"},"https://github.com/aica-technology/api/releases"),", and\nsearch for AICA Launcher (for\nexample, ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/api/tree/launcher/v1.0.0"},"AICA Launcher v1.0.0"),")."),(0,i.kt)("p",null,"Download the prebuilt launcher app based on your operating system and architecture. For example,\n",(0,i.kt)("inlineCode",{parentName:"p"},"aica-launcher-linux-amd64.zip")," for Linux machines with an AMD processor or ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-launcher-darwin-arm64.zip")," for macOS\non Apple Silicon."),(0,i.kt)("p",null,"Unzip the file and extract the AICA Launcher executable to your machine, then launch it by double-clicking or\nright-clicking to start the program."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"On macOS, you may be unable to open the AICA Launcher app because of default security settings."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"\u201cAICA Launcher\u201d can\u2019t be opened because Apple cannot check it for malicious software.\n")),(0,i.kt)("p",{parentName:"admonition"},"To bypass this, right-click on the app and choose Open, and then click Open on the dialog that appears.")),(0,i.kt)("h3",{id:"entering-an-aica-system-license"},"Entering an AICA System License"),(0,i.kt)("p",null,"When the AICA Launcher is started for the first time (or after explicitly logging out), you will be prompted to enter\nyour AICA System License. As an example, the online license key to enter might look similar to\n",(0,i.kt)("inlineCode",{parentName:"p"},"5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-login",src:n(4362).Z,width:"2784",height:"1720"})),(0,i.kt)("p",null,"Once the license is copied into the text field, it will automatically check the validity of the license and log in if\nsuccessful. If the license is not recognized, check your internet connection\nor ",(0,i.kt)("a",{parentName:"p",href:"mailto:support@aica.tech"},"contact AICA support"),"."),(0,i.kt)("h3",{id:"configuring-the-aica-system-image"},"Configuring the AICA System image"),(0,i.kt)("p",null,"AICA Launcher provides direct access to AICA Core and Studio, and additionally simplifies installing add-on packages\nfrom the registry or from custom SDK contributions."),(0,i.kt)("p",null,'A "configuration" refers to a specific version of AICA Core and the extra packages and versions that should be included.\nDefining configurations helps to ensure repeatable builds and deployments, even if AICA Core or any of the referenced\npackages are subsequently updated or changed.'),(0,i.kt)("p",null,"The simplest configuration just specifies the AICA Core Version, without any packages. Official packages can be added\nfrom a dropdown, with a version subselection for each package. ",(0,i.kt)("a",{parentName:"p",href:"/docs/reference/intro"},"Custom packages")," can be built\nusing the SDK and then added to the configuration using a Docker image URI."),(0,i.kt)("p",null,"Advanced configuration options allow setting additional Docker parameters, including real-time permissions and volume\nmounting for persistent storage or file-system interactions."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-package",src:n(8985).Z,width:"1378",height:"886"})),(0,i.kt)("h3",{id:"launching-a-configuration"},"Launching a configuration"),(0,i.kt)("p",null,"Press the Launch button for any given configuration to start up the AICA System and enter AICA Studio. For the\nfirst time launching a configuration, the AICA Core software image and any additional packages first need to be pulled\nfrom the registry and bundled into the specific runtime image. Depending on network speeds, this may take a while. After\nthe image has been built, launching the configuration a second time will be much faster as the results are cached."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-studio",src:n(9421).Z,width:"1422",height:"930"})),(0,i.kt)("h2",{id:"manual-installation-and-launch"},"Manual installation and launch"),(0,i.kt)("p",null,"For advanced users or users that deal with headless machines, there exists the option to ",(0,i.kt)("a",{parentName:"p",href:"/docs/reference/manual-installation-launch"},"manually perform the login,\nbuild and launch steps")," that the AICA Launcher handles automatically."))}d.isMDXComponent=!0},4362:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-login-37826328adf5b4a3106ba3c9f60c12b7.png"},8985:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-package-5b1d67fbf30bf135bed9db684739bc06.png"},9421:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-studio-b56f8cc63d4b0ac97e27213efa29e5c9.png"}}]); \ No newline at end of file diff --git a/assets/js/226aac0d.e23199af.js b/assets/js/226aac0d.e23199af.js deleted file mode 100644 index 6b13c169..00000000 --- a/assets/js/226aac0d.e23199af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[980],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),l=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=l(n),h=i,g=p["".concat(s,".").concat(h)]||p[h]||d[h]||r;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=h;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:i,o[1]=c;for(var l=2;l{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var a=n(7462),i=(n(7294),n(3905));const r={sidebar_position:3,title:"Installation and Launch"},o=void 0,c={unversionedId:"getting-started/installation-and-launch",id:"getting-started/installation-and-launch",title:"Installation and Launch",description:"Pre-requisites",source:"@site/docs/getting-started/03-installation-and-launch.md",sourceDirName:"getting-started",slug:"/getting-started/installation-and-launch",permalink:"/docs/getting-started/installation-and-launch",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/getting-started/03-installation-and-launch.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,title:"Installation and Launch"},sidebar:"gettingStartedSidebar",previous:{title:"Licensing",permalink:"/docs/getting-started/licensing"},next:{title:"Examples",permalink:"/docs/category/examples"}},s={},l=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"AICA Launcher",id:"aica-launcher",level:2},{value:"Installation",id:"installation",level:3},{value:"Entering an AICA System License",id:"entering-an-aica-system-license",level:3},{value:"Configuring the AICA System image",id:"configuring-the-aica-system-image",level:3},{value:"Launching a configuration",id:"launching-a-configuration",level:3}],u={toc:l},p="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,i.kt)("p",null,"AICA System software is distributed with Docker images and executed with Docker containers."),(0,i.kt)("p",null,"Before proceeding, ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/"},"install Docker Engine")," on the host machine."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ubuntu users, make sure to follow\nthe ",(0,i.kt)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/linux-postinstall/"},"post installation steps")," to create the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker")," group\nand add your user.")),(0,i.kt)("h2",{id:"aica-launcher"},"AICA Launcher"),(0,i.kt)("p",null,"AICA Launcher is the easiest way to get up and running with the AICA System. It manages licensing, package distribution\nand the Docker toolchain so that no command-line access is necessary. It also embeds AICA Studio: Edge directly inside\nthe launcher."),(0,i.kt)("h3",{id:"installation"},"Installation"),(0,i.kt)("p",null,"Find the latest release on the AICA GitHub organization under ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/api/releases"},"https://github.com/aica-technology/api/releases"),", and\nsearch for AICA Launcher (for\nexample, ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/api/tree/launcher/v1.0.0"},"AICA Launcher v1.0.0"),")."),(0,i.kt)("p",null,"Download the prebuilt launcher app based on your operating system and architecture. For example,\n",(0,i.kt)("inlineCode",{parentName:"p"},"aica-launcher-linux-amd64.zip")," for Linux machines with an AMD processor or ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-launcher-darwin-arm64.zip")," for macOS\non Apple Silicon."),(0,i.kt)("p",null,"Unzip the file and extract the AICA Launcher executable to your machine, then launch it by double-clicking or\nright-clicking to start the program."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"On macOS, you may be unable to open the AICA Launcher app because of default security settings."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"\u201cAICA Launcher\u201d can\u2019t be opened because Apple cannot check it for malicious software.\n")),(0,i.kt)("p",{parentName:"admonition"},"To bypass this, right-click on the app and choose Open, and then click Open on the dialog that appears.")),(0,i.kt)("h3",{id:"entering-an-aica-system-license"},"Entering an AICA System License"),(0,i.kt)("p",null,"When the AICA Launcher is started for the first time (or after explicitly logging out), you will be prompted to enter\nyour AICA System License. As an example, the online license key to enter might look similar to\n",(0,i.kt)("inlineCode",{parentName:"p"},"5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-login",src:n(4362).Z,width:"2784",height:"1720"})),(0,i.kt)("p",null,"Once the license is copied into the text field, it will automatically check the validity of the license and log in if\nsuccessful. If the license is not recognized, check your internet connection\nor ",(0,i.kt)("a",{parentName:"p",href:"mailto:support@aica.tech"},"contact AICA support"),"."),(0,i.kt)("h3",{id:"configuring-the-aica-system-image"},"Configuring the AICA System image"),(0,i.kt)("p",null,"AICA Launcher provides direct access to AICA Core and Studio, and additionally simplifies installing add-on packages\nfrom the registry or from custom SDK contributions."),(0,i.kt)("p",null,'A "configuration" refers to a specific version of AICA Core and the extra packages and versions that should be included.\nDefining configurations helps to ensure repeatable builds and deployments, even if AICA Core or any of the referenced\npackages are subsequently updated or changed.'),(0,i.kt)("p",null,"The simplest configuration just specifies the AICA Core Version, without any packages. Official packages can be added\nfrom a dropdown, with a version subselection for each package. ",(0,i.kt)("a",{parentName:"p",href:"/docs/reference/intro"},"Custom packages")," can be built\nusing the SDK and then added to the configuration using a Docker image URI."),(0,i.kt)("p",null,"Advanced configuration options allow setting additional Docker parameters, including real-time permissions and volume\nmounting for persistent storage or file-system interactions."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-package",src:n(8985).Z,width:"1392",height:"860"})),(0,i.kt)("h3",{id:"launching-a-configuration"},"Launching a configuration"),(0,i.kt)("p",null,"Press the Launch button for any given configuration to start up the AICA System and enter AICA Studio. For the\nfirst time launching a configuration, the AICA Core software image and any additional packages first need to be pulled\nfrom the registry and bundled into the specific runtime image. Depending on network speeds, this may take a while. After\nthe image has been built, launching the configuration a second time will be much faster as the results are cached."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"aica-launcher-studio",src:n(9421).Z,width:"1348",height:"816"})))}d.isMDXComponent=!0},4362:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-login-37826328adf5b4a3106ba3c9f60c12b7.png"},8985:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-package-ab856ce12d7afe71c59ef11285f5b521.png"},9421:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/aica-launcher-studio-b77b595cc647765f30ca374ff18d99d8.png"}}]); \ No newline at end of file diff --git a/assets/js/24ce3ebe.17ecb645.js b/assets/js/24ce3ebe.17ecb645.js new file mode 100644 index 00000000..e85417f7 --- /dev/null +++ b/assets/js/24ce3ebe.17ecb645.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[348],{3905:(e,n,a)=>{a.d(n,{Zo:()=>p,kt:()=>h});var t=a(7294);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var n=1;n=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var c=t.createContext({}),s=function(e){var n=t.useContext(c),a=n;return e&&(a="function"==typeof e?e(n):r(r({},n),e)),a},p=function(e){var n=s(e.components);return t.createElement(c.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var a=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(a),m=i,h=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return a?t.createElement(h,r(r({ref:n},p),{},{components:a})):t.createElement(h,r({ref:n},p))}));function h(e,n){var a=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var s=2;s{a.d(n,{Z:()=>r});var t=a(7294),i=a(6010);const o={tabItem:"tabItem_Ymn6"};function r(e){let{children:n,hidden:a,className:r}=e;return t.createElement("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,r),hidden:a},n)}},4866:(e,n,a)=>{a.d(n,{Z:()=>N});var t=a(7462),i=a(7294),o=a(6010),r=a(2466),l=a(6550),c=a(1980),s=a(7392),p=a(12);function u(e){return function(e){return i.Children.map(e,(e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:i}}=e;return{value:n,label:a,attributes:t,default:i}}))}function d(e){const{values:n,children:a}=e;return(0,i.useMemo)((()=>{const e=n??u(a);return function(e){const n=(0,s.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function m(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function h(e){let{queryString:n=!1,groupId:a}=e;const t=(0,l.k6)(),o=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,c._X)(o),(0,i.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(t.location.search);n.set(o,e),t.replace({...t.location,search:n.toString()})}),[o,t])]}function g(e){const{defaultValue:n,queryString:a=!1,groupId:t}=e,o=d(e),[r,l]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!m({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,s]=h({queryString:a,groupId:t}),[u,g]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,o]=(0,p.Nk)(a);return[t,(0,i.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:t}),k=(()=>{const e=c??u;return m({value:e,tabValues:o})?e:null})();(0,i.useLayoutEffect)((()=>{k&&l(k)}),[k]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),s(e),g(e)}),[s,g,o]),tabValues:o}}var k=a(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:n,block:a,selectedValue:l,selectValue:c,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:u}=(0,r.o5)(),d=e=>{const n=e.currentTarget,a=p.indexOf(n),t=s[a].value;t!==l&&(u(n),c(t))},m=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=p.indexOf(e.currentTarget)+1;n=p[a]??p[0];break}case"ArrowLeft":{const a=p.indexOf(e.currentTarget)-1;n=p[a]??p[p.length-1];break}}n?.focus()};return i.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},n)},s.map((e=>{let{value:n,label:a,attributes:r}=e;return i.createElement("li",(0,t.Z)({role:"tab",tabIndex:l===n?0:-1,"aria-selected":l===n,key:n,ref:e=>p.push(e),onKeyDown:m,onClick:d},r,{className:(0,o.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":l===n})}),a??n)})))}function v(e){let{lazy:n,children:a,selectedValue:t}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return i.createElement("div",{className:"margin-top--md"},o.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t}))))}function y(e){const n=g(e);return i.createElement("div",{className:(0,o.Z)("tabs-container",f.tabList)},i.createElement(b,(0,t.Z)({},e,n)),i.createElement(v,(0,t.Z)({},e,n)))}function N(e){const n=(0,k.Z)();return i.createElement(y,(0,t.Z)({key:String(n)},e))}},6333:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var t=a(7462),i=(a(7294),a(3905)),o=a(4866),r=a(5162);const l={sidebar_position:1,title:"Manual Installation and Launch"},c=void 0,s={unversionedId:"reference/manual-installation-launch",id:"reference/manual-installation-launch",title:"Manual Installation and Launch",description:"The following sections explain how to install and launch AICA Core and any additional packages manually from the command",source:"@site/docs/reference/02-manual-installation-launch.md",sourceDirName:"reference",slug:"/reference/manual-installation-launch",permalink:"/docs/reference/manual-installation-launch",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/02-manual-installation-launch.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Manual Installation and Launch"},sidebar:"programmingReferenceSidebar",previous:{title:"Programming introduction",permalink:"/docs/reference/intro"},next:{title:"YAML application syntax",permalink:"/docs/reference/yaml-syntax"}},p={},u=[{value:"Logging in to the AICA package registry",id:"logging-in-to-the-aica-package-registry",level:2},{value:"Configuring AICA packages with a manifest file",id:"configuring-aica-packages-with-a-manifest-file",level:2},{value:"Configuring a minimal runtime image with a version of AICA Core",id:"configuring-a-minimal-runtime-image-with-a-version-of-aica-core",level:3},{value:"Configuring a runtime image with add-on packages",id:"configuring-a-runtime-image-with-add-on-packages",level:3},{value:"Including custom packages",id:"including-custom-packages",level:3},{value:"Building an AICA runtime application image",id:"building-an-aica-runtime-application-image",level:2},{value:"Starting the application container",id:"starting-the-application-container",level:2},{value:"Stopping the application container",id:"stopping-the-application-container",level:2},{value:"Access the AICA Studio",id:"access-the-aica-studio",level:2},{value:"Access the REST API",id:"access-the-rest-api",level:2},{value:"Connect a terminal session to the container",id:"connect-a-terminal-session-to-the-container",level:2},{value:"Display sharing",id:"display-sharing",level:3},{value:"Persistent user data",id:"persistent-user-data",level:2}],d={toc:u},m="wrapper";function h(e){let{components:n,...a}=e;return(0,i.kt)(m,(0,t.Z)({},d,a,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following sections explain how to install and launch AICA Core and any additional packages manually from the command\nline without the use of AICA Launcher. The pre-requisites are still a valid license and a host with Docker installed.\nFor the rest of this guide, it will be assumed that a valid license has been saved to a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-license.toml"),"\non the host machine."),(0,i.kt)("h2",{id:"logging-in-to-the-aica-package-registry"},"Logging in to the AICA package registry"),(0,i.kt)("p",null,"To authenticate docker to login and pull images from the registry, run the following command (no replacement of\n",(0,i.kt)("inlineCode",{parentName:"p"},"USERNAME")," required):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cat aica-license.toml | docker login registry.licensing.aica.tech -u USERNAME --password-stdin\n")),(0,i.kt)("h2",{id:"configuring-aica-packages-with-a-manifest-file"},"Configuring AICA packages with a manifest file"),(0,i.kt)("p",null,"A runtime application image is configured using a simple ",(0,i.kt)("strong",{parentName:"p"},"manifest file")," defining the version of AICA Core to use and\noptionally defining additional add-on packages. The manifest file contains a custom docker syntax header pointing to\nAICA's app-builder tool, and the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build")," command is used to bundle all listed packages into a final runtime\nimage."),(0,i.kt)("h3",{id:"configuring-a-minimal-runtime-image-with-a-version-of-aica-core"},"Configuring a minimal runtime image with a version of AICA Core"),(0,i.kt)("p",null,"The manifest file must contain a syntax header and a list of packages. The minimal version of the manifest includes\nonly AICA Core as the ",(0,i.kt)("inlineCode",{parentName:"p"},"core")," package. The version can be changed according to the available releases."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"In the past, you might have seen applications using the ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," filename. While you can use any filename as\nwe do not enforce any, we recommend using ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-application.toml")," to avoid confusion with the ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file\nwhich is used for building packages using ",(0,i.kt)("inlineCode",{parentName:"p"},"package-builder"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-application.toml"',title:'"aica-application.toml"'},'#syntax=ghcr.io/aica-technology/app-builder:v2\n\n[core]\nimage = "v4.2.0"\n')),(0,i.kt)("h3",{id:"configuring-a-runtime-image-with-add-on-packages"},"Configuring a runtime image with add-on packages"),(0,i.kt)("p",null,"A manifest can include additional components and hardware collections as add-on packages. For any available package\nlisted in the AICA registry, specify the package and version with the ",(0,i.kt)("inlineCode",{parentName:"p"},"@aica/")," prefix. The following example manifest\nfile includes two add-on packages: version 2.0.0 of the ",(0,i.kt)("inlineCode",{parentName:"p"},"components/rl_policy_components")," component package and version\n4.1.0 of the ",(0,i.kt)("inlineCode",{parentName:"p"},"collections/ur-collection")," hardware collection package."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Starting with version ",(0,i.kt)("inlineCode",{parentName:"p"},"2.0.0")," of the ",(0,i.kt)("inlineCode",{parentName:"p"},"app-builder"),", all packages need to have special metadata associated in their\nimage. This is done automatically when building with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"app-builder"),". This means you won't be able to\nuse older versions of certain libraries and packages with newer versions of ",(0,i.kt)("inlineCode",{parentName:"p"},"app-builder"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-application.toml"',title:'"aica-application.toml"'},'#syntax=ghcr.io/aica-technology/app-builder:v2\n\n[core]\n"image" = "v4.2.0"\n\n[packages]\n# add components\n"@aica/components/rl-policy-components" = "v2.0.0"\n\n# add hardware collections\n"@aica/collections/ur-collection" = "v4.1.0"\n')),(0,i.kt)("h3",{id:"including-custom-packages"},"Including custom packages"),(0,i.kt)("p",null,"The AICA framework allows developers to build their own\n",(0,i.kt)("a",{parentName:"p",href:"/docs/reference/custom-components/component-package"},"custom components"),". These packages can be included under a\ncustom name using the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://")," prefix to specify the docker image name or path. For example, a custom component\npackage that was locally built using ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build [...] --tag my-custom-component-package")," could be included as\n",(0,i.kt)("inlineCode",{parentName:"p"},"docker-image://my-custom-component-package"),". Community and third-party packages may also be available on other docker\nregistries such as DockerHub or GitHub Container Registry and can be included with the associated docker path."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-application.toml"',title:'"aica-application.toml"'},'#syntax=ghcr.io/aica-technology/app-builder:v2\n\n[core]\n"image" = "v4.2.0"\n\n[packages]\n# add a custom package from a local docker image path\n"my-local-package" = "docker-image://my-custom-component-package"\n\n# add a package from any docker path such as GitHub Container Registry\n"my-ghcr-package" = "docker-image://ghcr.io/user/package:tag"\n')),(0,i.kt)("h2",{id:"building-an-aica-runtime-application-image"},"Building an AICA runtime application image"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"#logging-in-to-the-aica-package-registry"},"Log in to the package registry")," before building the image to authorize docker\nto access AICA packages.")),(0,i.kt)("p",null,"Once the desired packages have been configured in a manifest file, a ",(0,i.kt)("inlineCode",{parentName:"p"},"docker build")," command can be used to build the\nruntime application image. In this example, a manifest file saved as ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-application.toml")," is used to build an image\nwith the name ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-runtime"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"docker build -f aica-application.toml -t aica-runtime .\n")),(0,i.kt)("p",null,"The command ",(0,i.kt)("inlineCode",{parentName:"p"},"docker image ls | grep aica-runtime")," should then list the ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-runtime")," image."),(0,i.kt)("h2",{id:"starting-the-application-container"},"Starting the application container"),(0,i.kt)("p",null,"You can start the AICA application container with the following command."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Change ",(0,i.kt)("inlineCode",{parentName:"p"},"/path/to/license")," in the command below to the location of the ",(0,i.kt)("inlineCode",{parentName:"p"},"aica-license.toml")," file from above. For example,\nuse ",(0,i.kt)("inlineCode",{parentName:"p"},"~/.aica-license.toml")," to keep the license file hidden in the home folder.")),(0,i.kt)(o.Z,{groupId:"os",mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"linux",label:"Linux",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it --rm \\\n --privileged \\\n --net=host \\\n -v /path/to/license:/license:ro \\\n aica-runtime\n"))),(0,i.kt)(r.Z,{value:"mac",label:"macOS",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it --rm \\\n --privileged \\\n -p 8080:8080 -p 18000-18100:18000-18100/udp \\\n -v /path/to/license:/license:ro \\\n aica-runtime\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If port 8080 is already used on the host, use ",(0,i.kt)("inlineCode",{parentName:"p"},"-p HOST_PORT:8080")," to avoid conflicts. Do not remap ports ",(0,i.kt)("inlineCode",{parentName:"p"},"18000-18100"),".")))),(0,i.kt)("p",null,"When the container starts up, it will generate some initial output in the terminal window that should look something\nlike the example below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-console"},"[2024-11-18 13:43:12 +0000] [87] [INFO] Starting gunicorn 21.2.0\n[2024-11-18 13:43:12 +0000] [87] [INFO] Listening at: http://0.0.0.0:5000 (87)\n[2024-11-18 13:43:12 +0000] [87] [INFO] Using worker: eventlet\n[2024-11-18 13:43:12 +0000] [100] [INFO] Booting worker with pid: 100\n[INFO] [rosapi_node-1]: process started with pid [151]\n[INFO] [1731937392.265880595] [EventEngine.ServiceHandler]: Initializing event engine services\n[INFO] [1731937392.270243234] [event_engine]: No initial application provided. Use the event engine service interface to set, initialize and start an application.\n[2024-11-18 13:43:13 +0000] [100] [INFO] Starting sync of cloud applications\n[INFO] [1731937393.151675196] [EventEngineInterface]: Successfully connected to Event Engine services\n[2024-11-18 13:43:13 +0000] [100] [INFO] Synced cloud applications: 0 added, 0 updated, 0 deleted, 1 total\n")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If there are any errors, check that the license file is valid and has been mounted correctly. For example, the following\nerror would be shown from a correctly mounted but invalid license file:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-console"},"[ERROR] [1731937393.377201011] [licensing]: Error: license is invalid (ERR - license is invalid), please check that it is correct\n")),(0,i.kt)("p",{parentName:"admonition"},"Contact AICA support if the container does not start correctly despite a valid license file."),(0,i.kt)("p",{parentName:"admonition"},"There can also be harmless warnings that appear if Cloud Storage is not set up or if the license verification takes\nlonger that a few seconds:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-console"},"[2024-11-18 13:38:16 +0000] [135] [INFO] Starting sync of cloud applications\n[2024-11-18 13:38:16 +0000] [135] [WARNING] Sync failed\n[2024-11-18 13:08:42 +0000] [151] [INFO] Waiting for licensing status... 5\n[WARN] [1731935323.407252919] [EventEngine.ServiceHandler]: (404): Could not determine any license status\n"))),(0,i.kt)("h2",{id:"stopping-the-application-container"},"Stopping the application container"),(0,i.kt)("p",null,"To shut down the AICA application container at any time, press CTRL+C in the original terminal window. Alternatively,\nto stop the application container from a different terminal window, look up the container name\nwith ",(0,i.kt)("inlineCode",{parentName:"p"},"docker container ps")," and then run ",(0,i.kt)("inlineCode",{parentName:"p"},"docker container stop "),"."),(0,i.kt)("h2",{id:"access-the-aica-studio"},"Access the AICA Studio"),(0,i.kt)("p",null,"Visit ",(0,i.kt)("a",{parentName:"p",href:"http://localhost:8080"},"localhost:8080")," in the browser while the container is running to view AICA Studio."),(0,i.kt)("h2",{id:"access-the-rest-api"},"Access the REST API"),(0,i.kt)("p",null,"Visit ",(0,i.kt)("a",{parentName:"p",href:"http://localhost:8080/api"},"localhost:8080/api")," to see the Swagger UI and documentation for the REST API."),(0,i.kt)("h2",{id:"connect-a-terminal-session-to-the-container"},"Connect a terminal session to the container"),(0,i.kt)("p",null,"It is sometimes useful to connect to the application container while it is running to inspect files or run commands.\nThis can be accomplished with the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker container exec")," command using the container name."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Change ",(0,i.kt)("inlineCode",{parentName:"p"},"CONTAINER_NAME")," in the command below to the name of the running container.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker container exec -it -u ros2 CONTAINER_NAME /bin/bash\n")),(0,i.kt)("p",null,"The flags ",(0,i.kt)("inlineCode",{parentName:"p"},"-it -u ros2")," tell docker to attach an interactive terminal as the ",(0,i.kt)("inlineCode",{parentName:"p"},"ros2")," user. The command ",(0,i.kt)("inlineCode",{parentName:"p"},"/bin/bash"),"\nstarts a shell process."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can find the names of all running containers with the ",(0,i.kt)("inlineCode",{parentName:"p"},"docker ps")," command."),(0,i.kt)("p",{parentName:"admonition"},"Docker containers can also be given an explicit name when started with ",(0,i.kt)("inlineCode",{parentName:"p"},"docker run --name CONTAINER_NAME [...]"),".")),(0,i.kt)("p",null,"Once attached, run any commands in the context of the container. For example, ",(0,i.kt)("inlineCode",{parentName:"p"},"ros2 topic list")," will show the current\nROS 2 topics."),(0,i.kt)("p",null,"Detach from the container with CTRL+D or with the ",(0,i.kt)("inlineCode",{parentName:"p"},"exit")," command."),(0,i.kt)("h3",{id:"display-sharing"},"Display sharing"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Native display sharing for GUI applications is only supported on Linux hosts.")),(0,i.kt)("p",null,"To run GUI applications like RViz in the docker container, it is necessary to share additional environment variables\nfor the display and X11 server."),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Running ",(0,i.kt)("inlineCode",{parentName:"p"},"xhost +")," disables access control to the X11 server on the host, allowing the container to access the display.\nIt also allows any other process to access the server, which carries security implications. Use with caution."),(0,i.kt)("p",{parentName:"admonition"},"Access control can be re-enabled with ",(0,i.kt)("inlineCode",{parentName:"p"},"xhost -"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'xhost +\ndocker container exec -it -u ros2 -e DISPLAY="$DISPLAY" -e XAUTHORITY="$XAUTH" CONTAINER_NAME /bin/bash\n')),(0,i.kt)("p",null,"You should then be able to run ",(0,i.kt)("inlineCode",{parentName:"p"},"rviz2")," inside the container and see the window appear."),(0,i.kt)("h2",{id:"persistent-user-data"},"Persistent user data"),(0,i.kt)("p",null,"AICA applications and URDF hardware can be uploaded to a user database through the API or AICA Studio. Because the\ndocker container is isolated from the host filesystem, the local database will be lost when the container exists. To\npersist local data between sessions, create a dedicated directory somewhere on the host. For example, use\n",(0,i.kt)("inlineCode",{parentName:"p"},"mkdir ~/.aica-data")," to keep the data folder hidden in the home folder. Then execute the normal run command with an\nadditional volume mount for the user data."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Change ",(0,i.kt)("inlineCode",{parentName:"p"},"/path/to/data")," in the command below to a desired location for the data (e.g., ",(0,i.kt)("inlineCode",{parentName:"p"},"~/.aica-data")," or elsewhere)")),(0,i.kt)(o.Z,{groupId:"os",mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"linux",label:"Linux",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it --rm \\\n --privileged \\\n --net=host \\\n -v /path/to/license:/license:ro \\\n #highlight-next-line\n -v /path/to/data:/data:rw \\\n aica-runtime\n"))),(0,i.kt)(r.Z,{value:"mac",label:"macOS",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it --rm \\\n --privileged \\\n -p 8080:8080 -p 18000-18100:18000-18100/udp \\\n -v /path/to/license:/license:ro \\\n #highlight-next-line\n -v /path/to/data:/data:rw \\\n aica-runtime\n")))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/28658051.6a9937e4.js b/assets/js/28658051.6a9937e4.js deleted file mode 100644 index bfd1e9b0..00000000 --- a/assets/js/28658051.6a9937e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[346],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>h});var i=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=i.createContext({}),s=function(e){var n=i.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},p=function(e){var n=s(e.components);return i.createElement(c.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(t),m=a,h=u["".concat(c,".").concat(m)]||u[m]||d[m]||r;return t?i.createElement(h,o(o({ref:n},p),{},{components:t})):i.createElement(h,o({ref:n},p))}));function h(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,o=new Array(r);o[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var i=t(7462),a=(t(7294),t(3905));const r={sidebar_position:1.5,title:"Licensing"},o="Licensing",l={unversionedId:"getting-started/licensing",id:"getting-started/licensing",title:"Licensing",description:"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software",source:"@site/docs/getting-started/02-licensing.md",sourceDirName:"getting-started",slug:"/getting-started/licensing",permalink:"/docs/getting-started/licensing",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/getting-started/02-licensing.md",tags:[],version:"current",sidebarPosition:1.5,frontMatter:{sidebar_position:1.5,title:"Licensing"},sidebar:"gettingStartedSidebar",previous:{title:"Getting started",permalink:"/docs/getting-started/intro"},next:{title:"Installation and Launch",permalink:"/docs/getting-started/installation-and-launch"}},c={},s=[{value:"Online licenses",id:"online-licenses",level:2},{value:"Offline licenses",id:"offline-licenses",level:2}],p={toc:s},u="wrapper";function d(e){let{components:n,...t}=e;return(0,a.kt)(u,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"licensing"},"Licensing"),(0,a.kt)("p",null,"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software\npackages and the usage rights to run AICA applications."),(0,a.kt)("p",null,"To request an AICA System License, contact the AICA sales team at ",(0,a.kt)("a",{parentName:"p",href:"mailto:contact@aica.tech."},"contact@aica.tech.")," A user-specific license key will be\ngenerated and access instructions will be sent by email. For the rest of this guide, it will be assumed that a valid\nlicense has been saved to a file called ",(0,a.kt)("inlineCode",{parentName:"p"},"aica-license.toml")," on the host machine."),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Your license key should be kept secret. Do not share your license key with unauthorized users or enter it on websites\nother than the official AICA domain. License abuse may prevent your application from running or lead to your license\nbeing revoked."),(0,a.kt)("p",{parentName:"admonition"},"If an unauthorized user has gained access to your license key, contact ",(0,a.kt)("a",{parentName:"p",href:"mailto:support@aica.tech"},"support@aica.tech")," to reset your license.")),(0,a.kt)("p",null,"An AICA System License can come in two variants: ",(0,a.kt)("strong",{parentName:"p"},"online")," and ",(0,a.kt)("strong",{parentName:"p"},"offline"),"."),(0,a.kt)("h2",{id:"online-licenses"},"Online licenses"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"Online licenses require an active internet connection for the entire duration of the application."),(0,a.kt)("li",{parentName:"ul"},"Online licenses can be used on any machine, but only one instance can be running at any one time."))),(0,a.kt)("p",null,"An online license will appear in the following format, though the specific license key will be unique for each user."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-license.toml"',title:'"aica-license.toml"'},'License = "5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3"\n')),(0,a.kt)("h2",{id:"offline-licenses"},"Offline licenses"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"Offline licenses can be used without an active internet connection."),(0,a.kt)("li",{parentName:"ul"},"Offline licenses must be registered and activated on a specific machine, and can only be used on that machine."),(0,a.kt)("li",{parentName:"ul"},"Offline licenses are a premium service and are available on request for customers with strict network limitations or\nrequirements."))),(0,a.kt)("p",null,"To prepare a target machine for an offline license, run the following command to identify its unique machine\nfingerprint."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"docker run --privileged --rm ghcr.io/aica-technology/machine-fingerprint\n")),(0,a.kt)("p",null,"If it is not possible to temporarily provide network access to the target machine, first pull and save\nthe ",(0,a.kt)("inlineCode",{parentName:"p"},"ghcr.io/aica-technology/machine-fingerprint")," utility docker image on an online machine, then transfer and load it\non the target machine:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# download the machine fingerprint helper an online machine\nuser@online-machine:~$ docker pull ghcr.io/aica-technology/machine-fingerprint\nuser@online-machine:~$ docker save ghcr.io/aica-technology/machine-fingerprint > machine-fingerprint.tar\n\n# copy the machine-fingerprint.tar file to the offline machine, then load and run it\nuser@offline-machine:~$ docker load < machine-fingerprint.tar\nuser@offline-machine:~$ docker run --privileged --rm ghcr.io/aica-technology/machine-fingerprint\n")),(0,a.kt)("p",null,"Executing this command should print out a long string of characters containing a machine-specific fingerprint. Copy the\noutput of the command and send it to the established contact person in the AICA support team. They will then generate\nand send a unique license key which contains the encrypted machine fingerprint. It will appear as a long string in the\nfollowing format:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-license.toml"',title:'"aica-license.toml"'},'License = "key/eyJ9df2jfap7IVdIHnlnNpb24[...]alSBR_tBSIjavblcziV5nBQ=="\n')),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Continue to the next section to learn how to use the AICA Launcher with the AICA System License to access and install\nAICA Studio: Edge."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/28658051.a30fba6a.js b/assets/js/28658051.a30fba6a.js new file mode 100644 index 00000000..24c18e75 --- /dev/null +++ b/assets/js/28658051.a30fba6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[346],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var i=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=i.createContext({}),s=function(e){var n=i.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},p=function(e){var n=s(e.components);return i.createElement(l.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},h=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(t),h=a,m=u["".concat(l,".").concat(h)]||u[h]||d[h]||r;return t?i.createElement(m,o(o({ref:n},p),{},{components:t})):i.createElement(m,o({ref:n},p))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,o=new Array(r);o[0]=h;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:a,o[1]=c;for(var s=2;s{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var i=t(7462),a=(t(7294),t(3905));const r={sidebar_position:1.5,title:"Licensing"},o="Licensing",c={unversionedId:"getting-started/licensing",id:"getting-started/licensing",title:"Licensing",description:"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software",source:"@site/docs/getting-started/02-licensing.md",sourceDirName:"getting-started",slug:"/getting-started/licensing",permalink:"/docs/getting-started/licensing",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/getting-started/02-licensing.md",tags:[],version:"current",sidebarPosition:1.5,frontMatter:{sidebar_position:1.5,title:"Licensing"},sidebar:"gettingStartedSidebar",previous:{title:"Getting started",permalink:"/docs/getting-started/intro"},next:{title:"Installation and Launch",permalink:"/docs/getting-started/installation-and-launch"}},l={},s=[{value:"Online licenses",id:"online-licenses",level:2},{value:"Offline licenses",id:"offline-licenses",level:2}],p={toc:s},u="wrapper";function d(e){let{components:n,...t}=e;return(0,a.kt)(u,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"licensing"},"Licensing"),(0,a.kt)("p",null,"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software\npackages and the usage rights to run AICA applications."),(0,a.kt)("p",null,"To request an AICA System License, contact the AICA sales team at ",(0,a.kt)("a",{parentName:"p",href:"mailto:contact@aica.tech."},"contact@aica.tech.")," Each new user will receive access\ninstructions to a personal account for the ",(0,a.kt)("a",{parentName:"p",href:"https://licensing.aica.tech/list"},"AICA license manager")," which lists all\nlicenses associated with that user. Every license has a name, an expiration date, the actual license key and a list of\nentitlements. The link on the top right forwards directly to the\n",(0,a.kt)("a",{parentName:"p",href:"https://registry.licensing.aica.tech/"},"AICA package registry")," where the user can see all available packages for one\nspecific license. "),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"An AICA license includes specific entitlements that determine which add-on packages and versions can be accessed and\nused. To discover and access additional components and hardware collections, contact your AICA representative to upgrade\nyour license.")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Your license key should be kept secret. Do not share your license key with unauthorized users or enter it on websites\nother than the official AICA domain. License abuse may prevent your application from running or lead to your license\nbeing revoked."),(0,a.kt)("p",{parentName:"admonition"},"If an unauthorized user has gained access to your license key, contact ",(0,a.kt)("a",{parentName:"p",href:"mailto:support@aica.tech"},"support@aica.tech")," to reset your license.")),(0,a.kt)("p",null,"Additionally, an AICA System License can come in two variants: ",(0,a.kt)("strong",{parentName:"p"},"online")," and ",(0,a.kt)("strong",{parentName:"p"},"offline"),"."),(0,a.kt)("h2",{id:"online-licenses"},"Online licenses"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"Online licenses require an active internet connection for the entire duration of the application."),(0,a.kt)("li",{parentName:"ul"},"Online licenses can be used on any machine, but only one instance can be running at any one time."))),(0,a.kt)("p",null,"An online license will appear in the following format, though the specific license key will be unique for each user."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-license.toml"',title:'"aica-license.toml"'},'License = "5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3"\n')),(0,a.kt)("h2",{id:"offline-licenses"},"Offline licenses"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"Offline licenses can be used without an active internet connection."),(0,a.kt)("li",{parentName:"ul"},"Offline licenses must be registered and activated on a specific machine, and can only be used on that machine."),(0,a.kt)("li",{parentName:"ul"},"Offline licenses are a premium service and are available on request for customers with strict network limitations or\nrequirements."))),(0,a.kt)("p",null,"To prepare a target machine for an offline license, run the following command to identify its unique machine\nfingerprint."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"docker run --privileged --rm ghcr.io/aica-technology/machine-fingerprint\n")),(0,a.kt)("p",null,"If it is not possible to temporarily provide network access to the target machine, first pull and save\nthe ",(0,a.kt)("inlineCode",{parentName:"p"},"ghcr.io/aica-technology/machine-fingerprint")," utility docker image on an online machine, then transfer and load it\non the target machine:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# download the machine fingerprint helper an online machine\nuser@online-machine:~$ docker pull ghcr.io/aica-technology/machine-fingerprint\nuser@online-machine:~$ docker save ghcr.io/aica-technology/machine-fingerprint > machine-fingerprint.tar\n\n# copy the machine-fingerprint.tar file to the offline machine, then load and run it\nuser@offline-machine:~$ docker load < machine-fingerprint.tar\nuser@offline-machine:~$ docker run --privileged --rm ghcr.io/aica-technology/machine-fingerprint\n")),(0,a.kt)("p",null,"Executing this command should print out a long string of characters containing a machine-specific fingerprint. Copy the\noutput of the command and send it to the established contact person in the AICA support team. They will then generate\nand send a unique license key which contains the encrypted machine fingerprint. It will appear as a long string in the\nfollowing format:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-license.toml"',title:'"aica-license.toml"'},'License = "key/eyJ9df2jfap7IVdIHnlnNpb24[...]alSBR_tBSIjavblcziV5nBQ=="\n')),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Continue to the next section to learn how to use the AICA Launcher with the AICA System License to access and install\nAICA Studio: Edge."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61b51b6a.bfadcfba.js b/assets/js/61b51b6a.bfadcfba.js deleted file mode 100644 index 8c18c58e..00000000 --- a/assets/js/61b51b6a.bfadcfba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[691],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>h});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),u=o,h=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return t?a.createElement(h,r(r({ref:n},c),{},{components:t})):a.createElement(h,r({ref:n},c))}));function h(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const i={sidebar_position:1},r="YAML application syntax",l={unversionedId:"reference/yaml-syntax",id:"reference/yaml-syntax",title:"YAML application syntax",description:"The following sections define the YAML syntax used to describe an AICA application.",source:"@site/docs/reference/02-yaml-syntax.md",sourceDirName:"reference",slug:"/reference/yaml-syntax",permalink:"/docs/reference/yaml-syntax",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/02-yaml-syntax.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"programmingReferenceSidebar",previous:{title:"Programming introduction",permalink:"/docs/reference/intro"},next:{title:"Custom components",permalink:"/docs/category/custom-components"}},s={},p=[{value:"Overview",id:"overview",level:2},{value:"Events",id:"events",level:2},{value:"Load or unload a component",id:"load-or-unload-a-component",level:3},{value:"Transition from one component to another",id:"transition-from-one-component-to-another",level:3},{value:"Trigger a lifecycle transition",id:"trigger-a-lifecycle-transition",level:3},{value:"Set a parameter",id:"set-a-parameter",level:3},{value:"Call a service",id:"call-a-service",level:3},{value:"Load or unload a hardware interface",id:"load-or-unload-a-hardware-interface",level:3},{value:"Load or unload a controller",id:"load-or-unload-a-controller",level:3},{value:"Activate or deactivate a controller",id:"activate-or-deactivate-a-controller",level:3},{value:"Manage sequences",id:"manage-sequences",level:3},{value:"Components",id:"components",level:2},{value:"Component",id:"component",level:3},{value:"Display name",id:"display-name",level:3},{value:"Position",id:"position",level:3},{value:"Log level",id:"log-level",level:3},{value:"Mapping",id:"mapping",level:3},{value:"Parameters",id:"parameters",level:3},{value:"Component rate",id:"component-rate",level:4},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Predicate events",id:"predicate-events",level:3},{value:"Special event predicates",id:"special-event-predicates",level:4},{value:"Hardware",id:"hardware",level:2},{value:"URDF",id:"urdf",level:3},{value:"Rate",id:"rate",level:3},{value:"Parameters",id:"parameters-1",level:3},{value:"Display name",id:"display-name-1",level:3},{value:"Position",id:"position-1",level:3},{value:"Controllers",id:"controllers",level:3},{value:"Conditions",id:"conditions",level:2},{value:"Simple conditions",id:"simple-conditions",level:3},{value:"Conditional operators",id:"conditional-operators",level:3},{value:"Not",id:"not",level:4},{value:"All",id:"all",level:4},{value:"Any",id:"any",level:4},{value:"One of",id:"one-of",level:4},{value:"Nested conditions",id:"nested-conditions",level:3},{value:"Sequences",id:"sequences",level:2},{value:"Sequence assert",id:"sequence-assert",level:3},{value:"Sequence wait",id:"sequence-wait",level:3},{value:"Waiting for a specified time interval",id:"waiting-for-a-specified-time-interval",level:4},{value:"Waiting for a condition or predicate",id:"waiting-for-a-condition-or-predicate",level:4},{value:"Using sequences to manage program flow",id:"using-sequences-to-manage-program-flow",level:3},{value:"On Start",id:"on-start",level:2},{value:"Buttons",id:"buttons",level:2},{value:"Position",id:"position-2",level:3},{value:"On Click",id:"on-click",level:3},{value:"Validating a YAML application",id:"validating-a-yaml-application",level:2},{value:"Validating a YAML application with Visual Studio Code",id:"validating-a-yaml-application-with-visual-studio-code",level:3}],c={toc:p},d="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(d,(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"yaml-application-syntax"},"YAML application syntax"),(0,o.kt)("p",null,"The following sections define the YAML syntax used to describe an AICA application."),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"An application description may contain some or all of the following top-level fields."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"on_start:\n ...\n\ncomponents:\n ...\n\nhardware:\n ...\n\nconditions:\n ...\n\nsequences:\n ...\n\nbuttons:\n ...\n")),(0,o.kt)("p",null,"The fields ",(0,o.kt)("a",{parentName:"p",href:"#components"},(0,o.kt)("inlineCode",{parentName:"a"},"components"))," and ",(0,o.kt)("a",{parentName:"p",href:"#hardware"},(0,o.kt)("inlineCode",{parentName:"a"},"hardware"))," define the main building blocks of the application.\nThe fields ",(0,o.kt)("a",{parentName:"p",href:"#conditions"},(0,o.kt)("inlineCode",{parentName:"a"},"conditions"))," and ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},(0,o.kt)("inlineCode",{parentName:"a"},"sequences"))," define fine-grained application logic to\ntrigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"application state events"),". The ",(0,o.kt)("a",{parentName:"p",href:"#on-start"},(0,o.kt)("inlineCode",{parentName:"a"},"on_start")),"field defines a list of events to be triggered\nwhen the application is started, while the ",(0,o.kt)("a",{parentName:"p",href:"#buttons"},(0,o.kt)("inlineCode",{parentName:"a"},"buttons"))," field defines interactive buttons to manually trigger\nevents through AICA Studio."),(0,o.kt)("h2",{id:"events"},"Events"),(0,o.kt)("p",null,"Events drive the emergent behaviour of an application. Events can be triggered from internal application logic\nthrough ",(0,o.kt)("a",{parentName:"p",href:"#predicate-events"},"component predicates"),",\n",(0,o.kt)("a",{parentName:"p",href:"#conditions"},"conditions"),", ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},"sequences"),", ",(0,o.kt)("a",{parentName:"p",href:"#buttons"},"UI buttons")," or\nautomatically ",(0,o.kt)("a",{parentName:"p",href:"#on-start"},"at the start of the application"),". In each of these cases, events are defined in the YAML\nunder specific event keywords."),(0,o.kt)("p",null,"Read more about ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/building-blocks/events"},"events in the Concepts guide"),"."),(0,o.kt)("h3",{id:"load-or-unload-a-component"},"Load or unload a component"),(0,o.kt)("p",null,"Components can be loaded or unloaded by component name."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n component: \nunload:\n component: \n")),(0,o.kt)("p",null,"It is possible to load or unload multiple components simultaneously by specifying a list of components."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n - component: component_a\n - component: component_b\n")),(0,o.kt)("h3",{id:"transition-from-one-component-to-another"},"Transition from one component to another"),(0,o.kt)("p",null,'Component A can invoke a transition to component B as a shorthand for "unload component A, load component B".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"transition: \n")),(0,o.kt)("h3",{id:"trigger-a-lifecycle-transition"},"Trigger a lifecycle transition"),(0,o.kt)("p",null,"Request a lifecycle transition on the component that is triggering the event, using one of the available transitions\n(",(0,o.kt)("inlineCode",{parentName:"p"},"configure"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"activate"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"deactivate"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cleanup"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"shutdown"),")."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle: activate\n")),(0,o.kt)("p",null,"Request a lifecycle transition on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle:\n transition: activate\n component: \n")),(0,o.kt)("p",null,"Use a list to trigger multiple transitions from a single predicate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle:\n - transition: activate\n component: \n - transition: deactivate\n component: \n")),(0,o.kt)("h3",{id:"set-a-parameter"},"Set a parameter"),(0,o.kt)("p",null,"Set a parameter on the component that is triggering the event."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n")),(0,o.kt)("p",null,"Set a parameter on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n component: \n")),(0,o.kt)("p",null,"Set a parameter on the controller of a particular hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n controller: \n hardware: \n")),(0,o.kt)("h3",{id:"call-a-service"},"Call a service"),(0,o.kt)("p",null,"Call a service with no payload on the component that is triggering the event."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service: \n")),(0,o.kt)("p",null,"Call a service on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n component: \n")),(0,o.kt)("p",null,"Call a service on a controller."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n controller: \n hardware: \n")),(0,o.kt)("p",null,"Call a service with a string payload."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},'call_service:\n service: \n component: \n payload: "..."\n')),(0,o.kt)("p",null,"The service payload can also be written as any standard YAML object. The application parser will automatically encode\nthe object into a string format when making the service call. In this case, the component service is responsible\nfor parsing the string back into a YAML object, dict or structure as necessary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n component: \n payload:\n foo: some content\n bar: [ x, y, z ]\n baz:\n a: 1\n b: 2\n")),(0,o.kt)("h3",{id:"load-or-unload-a-hardware-interface"},"Load or unload a hardware interface"),(0,o.kt)("p",null,"Load and initialize a hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n hardware: \n")),(0,o.kt)("p",null,"Unload and destroy a hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"unload:\n hardware: \n")),(0,o.kt)("h3",{id:"load-or-unload-a-controller"},"Load or unload a controller"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n hardware: \n controller: \n\nunload:\n hardware: \n controller: \n")),(0,o.kt)("p",null,"Use a list to load or unload multiple controllers from a single predicate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n - hardware: \n controller: controller_a\n - hardware: \n controller: controller_b\n")),(0,o.kt)("h3",{id:"activate-or-deactivate-a-controller"},"Activate or deactivate a controller"),(0,o.kt)("p",null,"Use the ",(0,o.kt)("inlineCode",{parentName:"p"},"switch_controllers")," event to list the controllers to be activated or deactivated for a specific hardware\ninterface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"switch_controllers:\n hardware: \n activate: [ , ]\n deactivate: [ , ] \n")),(0,o.kt)("p",null,"To activate or deactivate a single controller, the controller name can be given directly instead of using a list."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"switch_controllers:\n hardware: \n activate: \n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A controller must be loaded before it can be activated, and must be deactivated before it can be unloaded.")),(0,o.kt)("h3",{id:"manage-sequences"},"Manage sequences"),(0,o.kt)("p",null,"Use the ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence")," event to either start, restart or abort a named ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},"sequence")," in the application\ndescription. Use the respective ",(0,o.kt)("inlineCode",{parentName:"p"},"start"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"restart")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"abort")," fields either individually or collectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequence:\n start: \n restart: \n abort: \n")),(0,o.kt)("p",null,"To manage multiple sequences with the same event trigger, use a list syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequence:\n - start: sequence_a\n - start: sequence_b\n")),(0,o.kt)("h2",{id:"components"},"Components"),(0,o.kt)("p",null,"Components are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"components"),". Component names must be unique, and should\ngenerally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"components:\n component_a:\n component: ... # required\n display_name: ... # optional\n position: ... # optional\n log_level: ... # optional\n mapping: ... # optional\n parameters: ... # optional\n inputs: ... # optional\n outputs: ... # optional\n events: ... # optional\n\n component_b:\n ...\n")),(0,o.kt)("p",null,"Each component is defined with a number of fields, as shown below. The fields are defined in the next section."),(0,o.kt)("h3",{id:"component"},"Component"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"component")," field defines the actual component implementation to use for the component.\nIt takes a fully qualified class name as registered by the ",(0,o.kt)("inlineCode",{parentName:"p"},"RCLCPP_COMPONENTS_REGISTER_NODE")," macro."),(0,o.kt)("p",null,"The registered class name of a component should include the package name within the namespace. For example, the\nregistration ",(0,o.kt)("inlineCode",{parentName:"p"},"foo_components::Foo")," refers to a component ",(0,o.kt)("inlineCode",{parentName:"p"},"Foo")," in package ",(0,o.kt)("inlineCode",{parentName:"p"},"foo_components"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n component: foo_components::Foo\n")),(0,o.kt)("h3",{id:"display-name"},"Display name"),(0,o.kt)("p",null,"The optional ",(0,o.kt)("inlineCode",{parentName:"p"},"display_name")," field can be used to give the component a more human-readable name (one that does not have\nto conform to the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_snake_case")," naming convention of the YAML syntax). It is only used when rendering the component\nas a node in the AICA interactive graph editor. If omitted, the name is taken directly from the YAML field (from the\nprevious example, it would default to ",(0,o.kt)("inlineCode",{parentName:"p"},"my_component"),")."),(0,o.kt)("h3",{id:"position"},"Position"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"position")," field is used to define the desired location of the button in the application graph. It has two subfields\ndefining the X and Y location, respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n position:\n x: 100\n y: 200\n")),(0,o.kt)("h3",{id:"log-level"},"Log level"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"log_level")," optionally sets the log severity level for this component.\nSupported levels are: ","[unset, debug, info, warn, error, fatal]"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n log_level: debug\n")),(0,o.kt)("h3",{id:"mapping"},"Mapping"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"mapping")," field optionally defines overrides for the component name and namespace. Normally, the component node\nis instantiated with the same name as the top level component name and put on the base namespace."),(0,o.kt)("p",null,"By specifying a mapping ",(0,o.kt)("inlineCode",{parentName:"p"},"name")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"namespace")," or both, the instantiated node name is updated accordingly."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"# Without the mapping directive, the node name becomes /component_a\ncomponent_a:\n ...\n\n# With the mapping directive, the node name becomes /my_component_namespace/my_new_component_name\ncomponent_b:\n mapping:\n name: my_new_component_name\n namespace: my_component_namespace\n")),(0,o.kt)("h3",{id:"parameters"},"Parameters"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field allows initial component parameters values to be set using a ",(0,o.kt)("inlineCode",{parentName:"p"},"name: value")," syntax. These values\nare only applied when the component is loaded. To set parameter values after a component has been loaded, use the\n",(0,o.kt)("a",{parentName:"p",href:"#set-a-parameter"},"set parameter event"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n parameters:\n my_string_parameter: my string value\n my_double_parameter: 2.0\n")),(0,o.kt)("h4",{id:"component-rate"},"Component rate"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rate")," parameter is a special reserved parameter that defines the step rate of a component in Hertz, which is\nthe inverse of the execution period."),(0,o.kt)("p",null,"For example, if an image processing component should run some computation at 20 frames per second, then the\nrate parameter should be set to 20 Hertz."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n parameters:\n rate: 20\n")),(0,o.kt)("h3",{id:"inputs-and-outputs"},"Inputs and outputs"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," fields are used to connect component signals together to enable communication, signal\nprocessing and control loops. Each signal is specified using a ",(0,o.kt)("inlineCode",{parentName:"p"},"name: value")," syntax, where the name is the name\nof the signal according to the component description, and the value is and the name of the signal topic.\nIf a component output is assigned to the same topic name as another component input, they are connected, as\nillustrated in the example below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n inputs:\n robot_state: /state\n applied_force: /force\n outputs:\n robot_command: /command\n\nmy_other_component:\n outputs:\n force_torque_sensor: /force\n")),(0,o.kt)("h3",{id:"predicate-events"},"Predicate events"),(0,o.kt)("p",null,"Component predicates can be used to trigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," by adding the named predicate and corresponding events\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," field of a component definition. For example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n events:\n is_active:\n load: ...\n unload: ...\n some_other_predicate_name:\n set: ...\n call_service: ...\n")),(0,o.kt)("h4",{id:"special-event-predicates"},"Special event predicates"),(0,o.kt)("p",null,"In addition to standard component predicates produced by the component at runtime, two other event triggers can be\nassociated with a component. These triggers are provided by the Dynamic State Engine which manages the component rather\nthan the component itself."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"on_load")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate is provided by the state engine and set to true after the component has been loaded. Any events\nassociated with the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate are handled after the node has been instantiated."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"component:\n events:\n on_load:\n : ...\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"on_unload")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_unload")," predicate is similar to the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate and is provided by the state engine. Any events\nassociated with the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_unload")," predicate are handled once the component interface has been destroyed."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"component:\n events:\n on_unload:\n : ...\n")),(0,o.kt)("h2",{id:"hardware"},"Hardware"),(0,o.kt)("p",null,"Hardware interfaces describe the connected robots and their corresponding controllers."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"hardware:\n robot_a:\n urdf: ...\n rate: ...\n parameters: # optional\n ...\n display_name: ... # optional\n position: ... # optional\n controllers:\n ...\n robot_b:\n ...\n")),(0,o.kt)("h3",{id:"urdf"},"URDF"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"urdf")," field refers to a specially formatted robot description file which defines the joint configurations and the\nhardware interface driver needed to communicate with the robot."),(0,o.kt)("p",null,"A hardware interface can be linked to URDF file in one of the following ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"By name of the custom URDF uploaded to the AICA database"),(0,o.kt)("li",{parentName:"ul"},"By name of an example URDF included in the AICA image (available examples depend on license and distribution versions)"),(0,o.kt)("li",{parentName:"ul"},"By the path of a URDF file mounted in the container filesystem"),(0,o.kt)("li",{parentName:"ul"},"By URDF string content inserted directly in the YAML (not recommended for large files)")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},'# referring to a custom robot description uploaded to the user database\nrobot_a:\n urdf: My custom robot\n\n# referring to a built-in robot description from the included examples\nrobot_b:\n urdf: Universal Robots 5e (default configuration)\n\n# using the path to a URDF file mounted in the container filesystem\nrobot_c:\n urdf: /home/ros2/my_robot.urdf\n\n# defining the URDF content in-line\nrobot_d:\n urdf: |\n \n \n \n robot_interface/GenericInterface\n \n ...\n \n ...\n \n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Use the Hardware tab in AICA Studio to manage available URDFs."),(0,o.kt)("p",{parentName:"admonition"},"Alternatively, use the API endpoints at ",(0,o.kt)("inlineCode",{parentName:"p"},"/v1/data/hardware")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/v1/examples/hardware")," to manage custom hardware and\nview the available built-in example URDFs, respectively.")),(0,o.kt)("h3",{id:"rate"},"Rate"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rate")," field defines the robot control frequency in Hz."),(0,o.kt)("h3",{id:"parameters-1"},"Parameters"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field is used to set hardware-specific parameter values which override the default values from the\nassociated URDF."),(0,o.kt)("p",null,"Specifically, the URDF is expected to include a ",(0,o.kt)("inlineCode",{parentName:"p"},"")," tag under which hardware properties are defined,\nincluding the hardware plugin and any number of parameters specific to that plugin."),(0,o.kt)("p",null,"For example, a ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_interface/GenericInterface")," plugin may accept a ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_ip")," parameter to specify the IP address:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-xml"},'\n\n \n \n robot_interface/GenericInterface\n 192.168.0.1\n \n ...\n \n ...\n\n')),(0,o.kt)("p",null,"By adding ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_ip")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field, the default IP address can be overridden when the hardware interface\nis loaded:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_robot:\n urdf: Example Robot\n parameters:\n robot_ip: 172.16.0.1\n")),(0,o.kt)("p",null,"In this example, the robot interface would be loaded with the IP address of ",(0,o.kt)("inlineCode",{parentName:"p"},"172.16.0.1")," instead of the default\n",(0,o.kt)("inlineCode",{parentName:"p"},"192.168.0.1")," as specified in the URDF. This allows parameters to be selectively altered at deploy time directly in the\napplication description without needing to modify the URDF itself."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Hardware parameter values are only applied if the parameter name matches an existing hardware parameter in the URDF.\nIf the parameter does not exist in the URDF, it will not be added.")),(0,o.kt)("h3",{id:"display-name-1"},"Display name"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#display-name"},"component display name")," and is used to assign a nicer,\nhuman-readable display name to the hardware interface when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("h3",{id:"position-1"},"Position"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#position"},"component position")," and is used to provide an X, Y position for the\nhardware interface when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("p",null,"This field only affects visualization of the application graph and has no other run-time effect.\nIf a position is not specified, the node will be rendered at a procedurally chosen location."),(0,o.kt)("h3",{id:"controllers"},"Controllers"),(0,o.kt)("p",null,"Controllers are the interface between components in the application and hardware in the real world. They convert desired\nreference signals into real joint commands according to some internal control law, and convert joint states from the\nrobot back to signals."),(0,o.kt)("p",null,"Controllers are listed under a top-level ",(0,o.kt)("inlineCode",{parentName:"p"},"controllers")," field. Controller names must be unique within the given hardware\ninterface, and should generally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"Under each controller, the ",(0,o.kt)("inlineCode",{parentName:"p"},"plugin")," field refers to a registered controller plugin name."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field then refers to configurable parameters for the given controller."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," fields define the ROS2 topics to which each signal of the controller should be connected.\nSee also ",(0,o.kt)("a",{parentName:"p",href:"#inputs-and-outputs"},"Component Inputs and Outputs"),"."),(0,o.kt)("p",null,"Predicates can be used to trigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," by adding the named predicate and corresponding events\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," field of a controller definition. See also ",(0,o.kt)("a",{parentName:"p",href:"#predicate-events"},"Predicate Events"),"."),(0,o.kt)("p",null,"Optionally, the ",(0,o.kt)("inlineCode",{parentName:"p"},"position")," field can be used to specify an X, Y location for rendering the hardware interface\nas a node in the AICA interactive graph editor. See also ",(0,o.kt)("a",{parentName:"p",href:"#position"},"Component Position"),"."),(0,o.kt)("p",null,"For example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"robot:\n controllers:\n broadcaster:\n plugin: joint_state_broadcaster/JointStateBroadcaster\n twist_controller:\n plugin: compliant_twist_controller/CompliantTwistController\n parameters:\n linear_principle_damping: 10.0\n linear_orthogonal_damping: 10.0\n angular_stiffness: 1.0\n angular_damping: { a: 1.0, b: true }\n inputs:\n command: /motion_generator/command_output\n outputs:\n state: /recorder/state_input\n events:\n my_predicate_name:\n set: ...\n call_service: ...\n")),(0,o.kt)("h2",{id:"conditions"},"Conditions"),(0,o.kt)("p",null,"Conditions are event triggers based on logical combinations of predicates."),(0,o.kt)("p",null,"Conditions are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"conditions"),". Condition names must be unique, and should\ngenerally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"Conditional events are triggered only on the rising edge of the condition, preventing the repeated execution of an\nevent if the condition stays true."),(0,o.kt)("p",null,"Define events to be triggered by a condition by listing them under the condition name. See the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," section\nfor available event syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"conditions:\n condition_1:\n component: ...\n predicate: ...\n events:\n ...\n\n condition_2:\n controller: ...\n hardware: ...\n predicate: ...\n events:\n ...\n\n condition_3:\n : ... # not, all, any, one_of\n events:\n ...\n\n")),(0,o.kt)("h3",{id:"simple-conditions"},"Simple conditions"),(0,o.kt)("p",null,"A simple condition evaluates just a single component or controller predicate and triggers the listed events when it is\ntrue."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n component: my_component\n predicate: some_component_predicate\n events:\n ...\ncondition_2:\n controller: my_controller\n hardware: my_hardware\n predicate: some_controller_predicate\n events:\n ...\n")),(0,o.kt)("h3",{id:"conditional-operators"},"Conditional operators"),(0,o.kt)("p",null,"To combine multiple predicates together into a single true / false condition, the following operators can be used."),(0,o.kt)("p",null,"The operators can refer to one or more component predicates with the syntax\n",(0,o.kt)("inlineCode",{parentName:"p"},"{ component: component_a, predicate: some_predicate }")),(0,o.kt)("h4",{id:"not"},"Not"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"not")," operator takes a single item and negates its value. It is true when the item is false, and false when the\nitem is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n not: { component: component_a, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"all"},"All"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"all")," operator takes a list of items and is true only when every listed item is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n all:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"any"},"Any"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"any")," operator takes a list of items and is true when at least one of the listed items is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n any:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"one-of"},"One of"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"one_of")," operator takes a list of items and is true only when exactly one of the listed items is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n one_of:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h3",{id:"nested-conditions"},"Nested conditions"),(0,o.kt)("p",null,"The conditional operators can be applied recursively for more complex conditions. The following example could be\ncollapsed into the equivalent logical pseudocode: ",(0,o.kt)("inlineCode",{parentName:"p"},"NOT(a AND b AND (c OR d OR (e XOR f)))")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"conditions:\n nested_condition:\n not:\n all:\n - { component: component_1, predicate: a }\n - { component: component_2, predicate: b }\n - any:\n - { component: component_3, predicate: c }\n - { component: component_4, predicate: d }\n - one_of:\n - { component: component_5, predicate: e }\n - { component: component_6, predicate: f }\n")),(0,o.kt)("h2",{id:"sequences"},"Sequences"),(0,o.kt)("p",null,"A sequence is a list of steps that are handled sequentially in order. Sequence steps are either\nstandard ",(0,o.kt)("a",{parentName:"p",href:"#events"},"state events")," or conditional blocks; the conditional steps are used either to wait for a condition,\npredicate or fixed time interval, or to assert the current value of a condition or predicate."),(0,o.kt)("p",null,"Similar to ",(0,o.kt)("a",{parentName:"p",href:"#conditions"},"conditions"),", sequences are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"sequences"),". Sequence names\nmust be unique, and should generally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"After sequences are defined in the yaml, they can be managed using ",(0,o.kt)("a",{parentName:"p",href:"#manage-sequences"},"sequence state events"),"; component\nor controller predicates, conditions and even sequences can also start, restart or abort a sequence."),(0,o.kt)("p",null,"The example below uses a combination of standard event steps and conditional blocks; it asserts that a component is\nactive, sets a parameter on that component, waits 10 seconds, and then activates a controller."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n sequence_1:\n - assert:\n component: my_component\n predicate: is_active\n - set:\n component: my_component\n parameter: speed\n value: 2.0\n - wait:\n seconds: 10\n - switch_controllers:\n hardware: my_hardware\n activate: my_controller\n")),(0,o.kt)("h3",{id:"sequence-assert"},"Sequence assert"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"assert")," keyword is an assertion step to check if a condition or predicate is true. If the assertion succeeds,\nthe sequence continues to the next step. If the assertion fails, the sequence is automatically aborted.\nOptionally, assertion failure can be used to trigger breakout events as a form of error handling."),(0,o.kt)("p",null,"The following examples show the syntax to check either a condition or predicate respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n condition: my_condition\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n component: my_component\n predicate: some_predicate\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n controller: my_controller\n hardware: my_hardware\n predicate: some_predicate\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"else")," keyword is optionally used to define breakout events if the assertion fails. The following example would\nunload a component if condition ",(0,o.kt)("inlineCode",{parentName:"p"},"my_condition")," is not true and then abort the sequence."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n condition: my_condition\n else:\n unload:\n component: my_component\n")),(0,o.kt)("h3",{id:"sequence-wait"},"Sequence wait"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"wait")," keyword is used to wait for either a fixed time interval or for a condition or predicate to be\ntrue."),(0,o.kt)("h4",{id:"waiting-for-a-specified-time-interval"},"Waiting for a specified time interval"),(0,o.kt)("p",null,"The simplest case is waiting for fixed duration, which uses the ",(0,o.kt)("inlineCode",{parentName:"p"},"seconds")," field to define the time to wait in seconds."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n seconds: 10\n")),(0,o.kt)("h4",{id:"waiting-for-a-condition-or-predicate"},"Waiting for a condition or predicate"),(0,o.kt)("p",null,"The following examples show the syntax to wait for either a condition or predicate state respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n condition: my_condition\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n component: my_component\n predicate: some_predicate\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n controller: my_controller\n hardware: my_hardware\n predicate: some_predicate\n")),(0,o.kt)("p",null,"Compared to the simple fixed-time wait, a conditional wait step could block the sequence indefinitely. The ",(0,o.kt)("inlineCode",{parentName:"p"},"timeout"),"\nfield can be used when waiting for a condition or predicate to set a maximum time limit. The time limit is defined in\nseconds with the ",(0,o.kt)("inlineCode",{parentName:"p"},"seconds")," field."),(0,o.kt)("p",null,"Similar to assertions, the sequence is aborted if the wait step times out. The optional ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," keyword can be used\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"timeout")," field to define breakout events if the assertion fails. The following example would unload a\ncomponent if condition ",(0,o.kt)("inlineCode",{parentName:"p"},"my_condition")," is not true within 10 seconds and then abort the sequence."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n condition: my_condition\n timeout:\n seconds: 10\n events:\n unload:\n component: my_component\n")),(0,o.kt)("h3",{id:"using-sequences-to-manage-program-flow"},"Using sequences to manage program flow"),(0,o.kt)("p",null,"Because sequences can also use sequence state events as steps, fine-grained looping and branching logic can be\nexpressed."),(0,o.kt)("p",null,"For example, this sequence would activate and deactivate a lifecycle component every 5 seconds in an endless loop:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n my_sequence:\n - lifecycle:\n component: my_component\n transition: activate\n - wait:\n seconds: 5\n - lifecycle:\n component: my_component\n transition: deactivate\n - wait:\n seconds: 5\n - sequence:\n restart: my_sequence\n")),(0,o.kt)("p",null,"The next example starts ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence_2")," if a condition is true, and else starts ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence_3"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n sequence_1:\n - wait:\n seconds: 5\n - assert:\n condition: my_condition\n else:\n sequence:\n start: sequence_3\n - sequence:\n start: sequence_2\n")),(0,o.kt)("h2",{id:"on-start"},"On Start"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_start")," keyword is reserved as a special event trigger when the application is launched.\nList the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," to trigger on startup (for example, to load components and hardware interfaces)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"on_start:\n load:\n - component: component_a\n - component: component_b\n - hardware: robot_a\n")),(0,o.kt)("h2",{id:"buttons"},"Buttons"),(0,o.kt)("p",null,"Buttons are interactive elements in AICA Studio. They are used to manually\ntrigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"state events")," when an application is running by clicking the trigger button in the application graph.\nButtons have no effect on the application if the UI is not used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"buttons:\n my_button:\n position: ...\n on_click:\n ...\n")),(0,o.kt)("h3",{id:"position-2"},"Position"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#position"},"component position")," and is used to provide an X, Y position for the\ncomponent when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("h3",{id:"on-click"},"On Click"),(0,o.kt)("p",null,"List the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," to trigger when the button is clicked while the application is running (for example, to\nunload a component)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_button:\n on_click:\n unload:\n component: component_a\n")),(0,o.kt)("h2",{id:"validating-a-yaml-application"},"Validating a YAML application"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"https://docs.aica.tech/schemas/1-4-1/application.schema.json"},"YAML application schema")," defines the structural rules\nof an AICA application and effectively distinguishes between valid and invalid syntax."),(0,o.kt)("p",null,"Many modern IDEs and code editors can be configured to support custom schemas and provide in-line validation and\ncompletion of the YAML content."),(0,o.kt)("h3",{id:"validating-a-yaml-application-with-visual-studio-code"},"Validating a YAML application with Visual Studio Code"),(0,o.kt)("p",null,"Developers working with Visual Studio Code can validate YAML application files easily in two steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Install the ",(0,o.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml"},"YAML extenstion from RedHat")),(0,o.kt)("li",{parentName:"ol"},"Associate a schema with the YAML application by adding the following modeline to the file:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"# yaml-language-server: $schema=https://docs.aica.tech/schemas/1-4-1/application.schema.json\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/77f7461f.3ff561d2.js b/assets/js/77f7461f.5936ac3e.js similarity index 74% rename from assets/js/77f7461f.3ff561d2.js rename to assets/js/77f7461f.5936ac3e.js index 2a28b403..54cd0217 100644 --- a/assets/js/77f7461f.3ff561d2.js +++ b/assets/js/77f7461f.5936ac3e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[52],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},s=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,c=e.originalType,l=e.parentName,s=r(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,g=u["".concat(l,".").concat(d)]||u[d]||m[d]||c;return t?a.createElement(g,i(i({ref:n},s),{},{components:t})):a.createElement(g,i({ref:n},s))}));function g(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var c=t.length,i=new Array(c);i[0]=d;var r={};for(var l in n)hasOwnProperty.call(n,l)&&(r[l]=n[l]);r.originalType=e,r[u]="string"==typeof e?e:o,i[1]=r;for(var p=2;p{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>c,metadata:()=>r,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const c={sidebar_position:4,title:"Building a component package"},i="Including a component package",r={unversionedId:"reference/custom-components/package-building",id:"reference/custom-components/package-building",title:"Building a component package",description:"To use custom components in AICA applications, the component package must be built and then included in the AICA image",source:"@site/docs/reference/custom-components/04-package-building.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/package-building",permalink:"/docs/reference/custom-components/package-building",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/04-package-building.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Building a component package"},sidebar:"programmingReferenceSidebar",previous:{title:"Describing a component",permalink:"/docs/reference/custom-components/component-descriptions"},next:{title:"Package builder configuration reference",permalink:"/docs/reference/custom-components/aica-package-toml"}},l={},p=[{value:"Creating a aica-package.toml file",id:"creating-a-aica-packagetoml-file",level:2},{value:"Building",id:"building",level:2},{value:"Launching your custom component",id:"launching-your-custom-component",level:2}],s={toc:p},u="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(u,(0,a.Z)({},s,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"including-a-component-package"},"Including a component package"),(0,o.kt)("p",null,"To use custom components in AICA applications, the component package must be built and then included in the AICA image\nworkspace. The easiest way to do this is to use a ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file."),(0,o.kt)("h2",{id:"creating-a-aica-packagetoml-file"},"Creating a ",(0,o.kt)("inlineCode",{parentName:"h2"},"aica-package.toml")," file"),(0,o.kt)("p",null,"A basic ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file for a component package stored in the ",(0,o.kt)("inlineCode",{parentName:"p"},"custom_component_package")," directory would look\nroughly like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[build]\ntype = "ros"\nimage = "v1.0.0-iron"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v7.5.0"\n"@aica/foss/modulo" = "v4.2.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n')),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," takes care of installing any dependencies (Python or system libraries) that you require for\nyour component. It is also able to build multiple components together, so you can include all your components in a\nsingle package."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/docs/reference/custom-components/aica-package-toml"},"this page")," for a full reference of the ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file and its capabilities."),(0,o.kt)("h2",{id:"building"},"Building"),(0,o.kt)("p",null,"You can then build your component using the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t custom-component .\n")),(0,o.kt)("h2",{id:"launching-your-custom-component"},"Launching your custom component"),(0,o.kt)("p",null,"In AICA Launcher, include the docker image path from the build step as a custom package in the system configuration."),(0,o.kt)("p",null,"Refer to\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/getting-started/installation-and-launch#configuring-the-aica-system-image"},"installation and launch"),"\nsection for more details."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[52],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},s=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,c=e.originalType,l=e.parentName,s=r(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,g=u["".concat(l,".").concat(d)]||u[d]||m[d]||c;return t?a.createElement(g,i(i({ref:n},s),{},{components:t})):a.createElement(g,i({ref:n},s))}));function g(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var c=t.length,i=new Array(c);i[0]=d;var r={};for(var l in n)hasOwnProperty.call(n,l)&&(r[l]=n[l]);r.originalType=e,r[u]="string"==typeof e?e:o,i[1]=r;for(var p=2;p{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>c,metadata:()=>r,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const c={sidebar_position:4,title:"Building a component package"},i="Including a component package",r={unversionedId:"reference/custom-components/package-building",id:"reference/custom-components/package-building",title:"Building a component package",description:"To use custom components in AICA applications, the component package must be built and then included in the AICA image",source:"@site/docs/reference/custom-components/04-package-building.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/package-building",permalink:"/docs/reference/custom-components/package-building",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/04-package-building.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Building a component package"},sidebar:"programmingReferenceSidebar",previous:{title:"Describing a component",permalink:"/docs/reference/custom-components/component-descriptions"},next:{title:"Package builder configuration reference",permalink:"/docs/reference/custom-components/aica-package-toml"}},l={},p=[{value:"Creating a aica-package.toml file",id:"creating-a-aica-packagetoml-file",level:2},{value:"Building",id:"building",level:2},{value:"Launching your custom component",id:"launching-your-custom-component",level:2}],s={toc:p},u="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(u,(0,a.Z)({},s,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"including-a-component-package"},"Including a component package"),(0,o.kt)("p",null,"To use custom components in AICA applications, the component package must be built and then included in the AICA image\nworkspace. The easiest way to do this is to use a ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file."),(0,o.kt)("h2",{id:"creating-a-aica-packagetoml-file"},"Creating a ",(0,o.kt)("inlineCode",{parentName:"h2"},"aica-package.toml")," file"),(0,o.kt)("p",null,"A basic ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file for a component package stored in the ",(0,o.kt)("inlineCode",{parentName:"p"},"custom_component_package")," directory would look\nroughly like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="aica-package.toml"',title:'"aica-package.toml"'},'#syntax=ghcr.io/aica-technology/package-builder:v1\n\n[metadata]\nversion = "0.0.1"\n\n[build]\ntype = "ros"\nimage = "v2.0.0-jazzy"\n\n[build.dependencies]\n"@aica/foss/control-libraries" = "v9.0.1"\n"@aica/foss/modulo" = "v5.1.0"\n\n[build.packages.component]\nsource = "./custom_component_package"\n')),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," takes care of installing any dependencies (Python or system libraries) that you require for\nyour component. It is also able to build multiple components together, so you can include all your components in a\nsingle package."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/docs/reference/custom-components/aica-package-toml"},"this page")," for a full reference of the ",(0,o.kt)("inlineCode",{parentName:"p"},"aica-package.toml")," file and its capabilities."),(0,o.kt)("h2",{id:"building"},"Building"),(0,o.kt)("p",null,"You can then build your component using the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -f aica-package.toml -t custom-component .\n")),(0,o.kt)("h2",{id:"launching-your-custom-component"},"Launching your custom component"),(0,o.kt)("p",null,"In AICA Launcher, include the docker image path from the build step as a custom package in the system configuration."),(0,o.kt)("p",null,"Refer to\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/getting-started/installation-and-launch#configuring-the-aica-system-image"},"installation and launch"),"\nsection for more details."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/897d7a23.fc3e1701.js b/assets/js/897d7a23.3ca3d732.js similarity index 61% rename from assets/js/897d7a23.fc3e1701.js rename to assets/js/897d7a23.3ca3d732.js index 708e1fe3..ad407fce 100644 --- a/assets/js/897d7a23.fc3e1701.js +++ b/assets/js/897d7a23.3ca3d732.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[766],{3905:(e,r,n)=>{n.d(r,{Zo:()=>l,kt:()=>m});var t=n(7294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function a(e){for(var r=1;r=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=t.createContext({}),p=function(e){var r=t.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},l=function(e){var r=p(e.components);return t.createElement(s.Provider,{value:r},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),f=p(n),d=o,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||i;return n?t.createElement(m,a(a({ref:r},l),{},{components:n})):t.createElement(m,a({ref:r},l))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[f]="string"==typeof e?e:o,a[1]=c;for(var p=2;p{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var t=n(7462),o=(n(7294),n(3905));const i={sidebar_position:0},a="Programming introduction",c={unversionedId:"reference/intro",id:"reference/intro",title:"Programming introduction",description:"AICA Universe is built on open and extensible standards. The following sections provide specific information,",source:"@site/docs/reference/01-intro.md",sourceDirName:"reference",slug:"/reference/intro",permalink:"/docs/reference/intro",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/01-intro.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"programmingReferenceSidebar",next:{title:"YAML application syntax",permalink:"/docs/reference/yaml-syntax"}},s={},p=[],l={toc:p},f="wrapper";function u(e){let{components:r,...n}=e;return(0,o.kt)(f,(0,t.Z)({},l,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"programming-introduction"},"Programming introduction"),(0,o.kt)("p",null,"AICA Universe is built on open and extensible standards. The following sections provide specific information,\nreferences and examples for developers wishing to write their own AICA applications or components."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[766],{3905:(e,r,n)=>{n.d(r,{Zo:()=>p,kt:()=>m});var t=n(7294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function a(e){for(var r=1;r=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=t.createContext({}),l=function(e){var r=t.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},p=function(e){var r=l(e.components);return t.createElement(s.Provider,{value:r},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,m=u["".concat(s,".").concat(d)]||u[d]||f[d]||i;return n?t.createElement(m,a(a({ref:r},p),{},{components:n})):t.createElement(m,a({ref:r},p))}));function m(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[u]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var t=n(7462),o=(n(7294),n(3905));const i={sidebar_position:0},a="Programming introduction",c={unversionedId:"reference/intro",id:"reference/intro",title:"Programming introduction",description:"AICA Universe is built on open and extensible standards. The following sections provide specific information,",source:"@site/docs/reference/01-intro.md",sourceDirName:"reference",slug:"/reference/intro",permalink:"/docs/reference/intro",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/01-intro.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"programmingReferenceSidebar",next:{title:"Manual Installation and Launch",permalink:"/docs/reference/manual-installation-launch"}},s={},l=[],p={toc:l},u="wrapper";function f(e){let{components:r,...n}=e;return(0,o.kt)(u,(0,t.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"programming-introduction"},"Programming introduction"),(0,o.kt)("p",null,"AICA Universe is built on open and extensible standards. The following sections provide specific information,\nreferences and examples for developers wishing to write their own AICA applications or components."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8d93cfe3.d44a9b65.js b/assets/js/8d93cfe3.d44a9b65.js new file mode 100644 index 00000000..a423f3bf --- /dev/null +++ b/assets/js/8d93cfe3.d44a9b65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[874],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>h});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(t),u=o,h=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return t?a.createElement(h,r(r({ref:n},c),{},{components:t})):a.createElement(h,r({ref:n},c))}));function h(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const i={sidebar_position:2},r="YAML application syntax",l={unversionedId:"reference/yaml-syntax",id:"reference/yaml-syntax",title:"YAML application syntax",description:"The following sections define the YAML syntax used to describe an AICA application.",source:"@site/docs/reference/03-yaml-syntax.md",sourceDirName:"reference",slug:"/reference/yaml-syntax",permalink:"/docs/reference/yaml-syntax",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/03-yaml-syntax.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"programmingReferenceSidebar",previous:{title:"Manual Installation and Launch",permalink:"/docs/reference/manual-installation-launch"},next:{title:"Custom components",permalink:"/docs/category/custom-components"}},s={},p=[{value:"Overview",id:"overview",level:2},{value:"Events",id:"events",level:2},{value:"Load or unload a component",id:"load-or-unload-a-component",level:3},{value:"Transition from one component to another",id:"transition-from-one-component-to-another",level:3},{value:"Trigger a lifecycle transition",id:"trigger-a-lifecycle-transition",level:3},{value:"Set a parameter",id:"set-a-parameter",level:3},{value:"Call a service",id:"call-a-service",level:3},{value:"Load or unload a hardware interface",id:"load-or-unload-a-hardware-interface",level:3},{value:"Load or unload a controller",id:"load-or-unload-a-controller",level:3},{value:"Activate or deactivate a controller",id:"activate-or-deactivate-a-controller",level:3},{value:"Manage sequences",id:"manage-sequences",level:3},{value:"Components",id:"components",level:2},{value:"Component",id:"component",level:3},{value:"Display name",id:"display-name",level:3},{value:"Position",id:"position",level:3},{value:"Log level",id:"log-level",level:3},{value:"Mapping",id:"mapping",level:3},{value:"Parameters",id:"parameters",level:3},{value:"Component rate",id:"component-rate",level:4},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Predicate events",id:"predicate-events",level:3},{value:"Special event predicates",id:"special-event-predicates",level:4},{value:"Hardware",id:"hardware",level:2},{value:"URDF",id:"urdf",level:3},{value:"Rate",id:"rate",level:3},{value:"Parameters",id:"parameters-1",level:3},{value:"Display name",id:"display-name-1",level:3},{value:"Position",id:"position-1",level:3},{value:"Controllers",id:"controllers",level:3},{value:"Conditions",id:"conditions",level:2},{value:"Simple conditions",id:"simple-conditions",level:3},{value:"Conditional operators",id:"conditional-operators",level:3},{value:"Not",id:"not",level:4},{value:"All",id:"all",level:4},{value:"Any",id:"any",level:4},{value:"One of",id:"one-of",level:4},{value:"Nested conditions",id:"nested-conditions",level:3},{value:"Sequences",id:"sequences",level:2},{value:"Sequence assert",id:"sequence-assert",level:3},{value:"Sequence wait",id:"sequence-wait",level:3},{value:"Waiting for a specified time interval",id:"waiting-for-a-specified-time-interval",level:4},{value:"Waiting for a condition or predicate",id:"waiting-for-a-condition-or-predicate",level:4},{value:"Using sequences to manage program flow",id:"using-sequences-to-manage-program-flow",level:3},{value:"On Start",id:"on-start",level:2},{value:"Buttons",id:"buttons",level:2},{value:"Position",id:"position-2",level:3},{value:"On Click",id:"on-click",level:3},{value:"Validating a YAML application",id:"validating-a-yaml-application",level:2},{value:"Validating a YAML application with Visual Studio Code",id:"validating-a-yaml-application-with-visual-studio-code",level:3}],c={toc:p},d="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(d,(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"yaml-application-syntax"},"YAML application syntax"),(0,o.kt)("p",null,"The following sections define the YAML syntax used to describe an AICA application."),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"An application description may contain some or all of the following top-level fields."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"on_start:\n ...\n\ncomponents:\n ...\n\nhardware:\n ...\n\nconditions:\n ...\n\nsequences:\n ...\n\nbuttons:\n ...\n")),(0,o.kt)("p",null,"The fields ",(0,o.kt)("a",{parentName:"p",href:"#components"},(0,o.kt)("inlineCode",{parentName:"a"},"components"))," and ",(0,o.kt)("a",{parentName:"p",href:"#hardware"},(0,o.kt)("inlineCode",{parentName:"a"},"hardware"))," define the main building blocks of the application.\nThe fields ",(0,o.kt)("a",{parentName:"p",href:"#conditions"},(0,o.kt)("inlineCode",{parentName:"a"},"conditions"))," and ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},(0,o.kt)("inlineCode",{parentName:"a"},"sequences"))," define fine-grained application logic to\ntrigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"application state events"),". The ",(0,o.kt)("a",{parentName:"p",href:"#on-start"},(0,o.kt)("inlineCode",{parentName:"a"},"on_start")),"field defines a list of events to be triggered\nwhen the application is started, while the ",(0,o.kt)("a",{parentName:"p",href:"#buttons"},(0,o.kt)("inlineCode",{parentName:"a"},"buttons"))," field defines interactive buttons to manually trigger\nevents through AICA Studio."),(0,o.kt)("h2",{id:"events"},"Events"),(0,o.kt)("p",null,"Events drive the emergent behaviour of an application. Events can be triggered from internal application logic\nthrough ",(0,o.kt)("a",{parentName:"p",href:"#predicate-events"},"component predicates"),",\n",(0,o.kt)("a",{parentName:"p",href:"#conditions"},"conditions"),", ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},"sequences"),", ",(0,o.kt)("a",{parentName:"p",href:"#buttons"},"UI buttons")," or\nautomatically ",(0,o.kt)("a",{parentName:"p",href:"#on-start"},"at the start of the application"),". In each of these cases, events are defined in the YAML\nunder specific event keywords."),(0,o.kt)("p",null,"Read more about ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/building-blocks/events"},"events in the Concepts guide"),"."),(0,o.kt)("h3",{id:"load-or-unload-a-component"},"Load or unload a component"),(0,o.kt)("p",null,"Components can be loaded or unloaded by component name."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n component: \nunload:\n component: \n")),(0,o.kt)("p",null,"It is possible to load or unload multiple components simultaneously by specifying a list of components."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n - component: component_a\n - component: component_b\n")),(0,o.kt)("h3",{id:"transition-from-one-component-to-another"},"Transition from one component to another"),(0,o.kt)("p",null,'Component A can invoke a transition to component B as a shorthand for "unload component A, load component B".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"transition: \n")),(0,o.kt)("h3",{id:"trigger-a-lifecycle-transition"},"Trigger a lifecycle transition"),(0,o.kt)("p",null,"Request a lifecycle transition on the component that is triggering the event, using one of the available transitions\n(",(0,o.kt)("inlineCode",{parentName:"p"},"configure"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"activate"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"deactivate"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cleanup"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"shutdown"),")."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle: activate\n")),(0,o.kt)("p",null,"Request a lifecycle transition on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle:\n transition: activate\n component: \n")),(0,o.kt)("p",null,"Use a list to trigger multiple transitions from a single predicate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"lifecycle:\n - transition: activate\n component: \n - transition: deactivate\n component: \n")),(0,o.kt)("h3",{id:"set-a-parameter"},"Set a parameter"),(0,o.kt)("p",null,"Set a parameter on the component that is triggering the event."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n")),(0,o.kt)("p",null,"Set a parameter on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n component: \n")),(0,o.kt)("p",null,"Set a parameter on the controller of a particular hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"set:\n parameter: \n value: \n controller: \n hardware: \n")),(0,o.kt)("h3",{id:"call-a-service"},"Call a service"),(0,o.kt)("p",null,"Call a service with no payload on the component that is triggering the event."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service: \n")),(0,o.kt)("p",null,"Call a service on a different component."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n component: \n")),(0,o.kt)("p",null,"Call a service on a controller."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n controller: \n hardware: \n")),(0,o.kt)("p",null,"Call a service with a string payload."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},'call_service:\n service: \n component: \n payload: "..."\n')),(0,o.kt)("p",null,"The service payload can also be written as any standard YAML object. The application parser will automatically encode\nthe object into a string format when making the service call. In this case, the component service is responsible\nfor parsing the string back into a YAML object, dict or structure as necessary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"call_service:\n service: \n component: \n payload:\n foo: some content\n bar: [ x, y, z ]\n baz:\n a: 1\n b: 2\n")),(0,o.kt)("h3",{id:"load-or-unload-a-hardware-interface"},"Load or unload a hardware interface"),(0,o.kt)("p",null,"Load and initialize a hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n hardware: \n")),(0,o.kt)("p",null,"Unload and destroy a hardware interface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"unload:\n hardware: \n")),(0,o.kt)("h3",{id:"load-or-unload-a-controller"},"Load or unload a controller"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n hardware: \n controller: \n\nunload:\n hardware: \n controller: \n")),(0,o.kt)("p",null,"Use a list to load or unload multiple controllers from a single predicate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"load:\n - hardware: \n controller: controller_a\n - hardware: \n controller: controller_b\n")),(0,o.kt)("h3",{id:"activate-or-deactivate-a-controller"},"Activate or deactivate a controller"),(0,o.kt)("p",null,"Use the ",(0,o.kt)("inlineCode",{parentName:"p"},"switch_controllers")," event to list the controllers to be activated or deactivated for a specific hardware\ninterface."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"switch_controllers:\n hardware: \n activate: [ , ]\n deactivate: [ , ] \n")),(0,o.kt)("p",null,"To activate or deactivate a single controller, the controller name can be given directly instead of using a list."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"switch_controllers:\n hardware: \n activate: \n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A controller must be loaded before it can be activated, and must be deactivated before it can be unloaded.")),(0,o.kt)("h3",{id:"manage-sequences"},"Manage sequences"),(0,o.kt)("p",null,"Use the ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence")," event to either start, restart or abort a named ",(0,o.kt)("a",{parentName:"p",href:"#sequences"},"sequence")," in the application\ndescription. Use the respective ",(0,o.kt)("inlineCode",{parentName:"p"},"start"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"restart")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"abort")," fields either individually or collectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequence:\n start: \n restart: \n abort: \n")),(0,o.kt)("p",null,"To manage multiple sequences with the same event trigger, use a list syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequence:\n - start: sequence_a\n - start: sequence_b\n")),(0,o.kt)("h2",{id:"components"},"Components"),(0,o.kt)("p",null,"Components are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"components"),". Component names must be unique, and should\ngenerally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"components:\n component_a:\n component: ... # required\n display_name: ... # optional\n position: ... # optional\n log_level: ... # optional\n mapping: ... # optional\n parameters: ... # optional\n inputs: ... # optional\n outputs: ... # optional\n events: ... # optional\n\n component_b:\n ...\n")),(0,o.kt)("p",null,"Each component is defined with a number of fields, as shown below. The fields are defined in the next section."),(0,o.kt)("h3",{id:"component"},"Component"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"component")," field defines the actual component implementation to use for the component.\nIt takes a fully qualified class name as registered by the ",(0,o.kt)("inlineCode",{parentName:"p"},"RCLCPP_COMPONENTS_REGISTER_NODE")," macro."),(0,o.kt)("p",null,"The registered class name of a component should include the package name within the namespace. For example, the\nregistration ",(0,o.kt)("inlineCode",{parentName:"p"},"foo_components::Foo")," refers to a component ",(0,o.kt)("inlineCode",{parentName:"p"},"Foo")," in package ",(0,o.kt)("inlineCode",{parentName:"p"},"foo_components"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n component: foo_components::Foo\n")),(0,o.kt)("h3",{id:"display-name"},"Display name"),(0,o.kt)("p",null,"The optional ",(0,o.kt)("inlineCode",{parentName:"p"},"display_name")," field can be used to give the component a more human-readable name (one that does not have\nto conform to the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_snake_case")," naming convention of the YAML syntax). It is only used when rendering the component\nas a node in the AICA interactive graph editor. If omitted, the name is taken directly from the YAML field (from the\nprevious example, it would default to ",(0,o.kt)("inlineCode",{parentName:"p"},"my_component"),")."),(0,o.kt)("h3",{id:"position"},"Position"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"position")," field is used to define the desired location of the button in the application graph. It has two subfields\ndefining the X and Y location, respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n position:\n x: 100\n y: 200\n")),(0,o.kt)("h3",{id:"log-level"},"Log level"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"log_level")," optionally sets the log severity level for this component.\nSupported levels are: ","[unset, debug, info, warn, error, fatal]"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n log_level: debug\n")),(0,o.kt)("h3",{id:"mapping"},"Mapping"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"mapping")," field optionally defines overrides for the component name and namespace. Normally, the component node\nis instantiated with the same name as the top level component name and put on the base namespace."),(0,o.kt)("p",null,"By specifying a mapping ",(0,o.kt)("inlineCode",{parentName:"p"},"name")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"namespace")," or both, the instantiated node name is updated accordingly."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"# Without the mapping directive, the node name becomes /component_a\ncomponent_a:\n ...\n\n# With the mapping directive, the node name becomes /my_component_namespace/my_new_component_name\ncomponent_b:\n mapping:\n name: my_new_component_name\n namespace: my_component_namespace\n")),(0,o.kt)("h3",{id:"parameters"},"Parameters"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field allows initial component parameters values to be set using a ",(0,o.kt)("inlineCode",{parentName:"p"},"name: value")," syntax. These values\nare only applied when the component is loaded. To set parameter values after a component has been loaded, use the\n",(0,o.kt)("a",{parentName:"p",href:"#set-a-parameter"},"set parameter event"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n parameters:\n my_string_parameter: my string value\n my_double_parameter: 2.0\n")),(0,o.kt)("h4",{id:"component-rate"},"Component rate"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rate")," parameter is a special reserved parameter that defines the step rate of a component in Hertz, which is\nthe inverse of the execution period."),(0,o.kt)("p",null,"For example, if an image processing component should run some computation at 20 frames per second, then the\nrate parameter should be set to 20 Hertz."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n parameters:\n rate: 20\n")),(0,o.kt)("h3",{id:"inputs-and-outputs"},"Inputs and outputs"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," fields are used to connect component signals together to enable communication, signal\nprocessing and control loops. Each signal is specified using a ",(0,o.kt)("inlineCode",{parentName:"p"},"name: value")," syntax, where the name is the name\nof the signal according to the component description, and the value is and the name of the signal topic.\nIf a component output is assigned to the same topic name as another component input, they are connected, as\nillustrated in the example below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n inputs:\n robot_state: /state\n applied_force: /force\n outputs:\n robot_command: /command\n\nmy_other_component:\n outputs:\n force_torque_sensor: /force\n")),(0,o.kt)("h3",{id:"predicate-events"},"Predicate events"),(0,o.kt)("p",null,"Component predicates can be used to trigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," by adding the named predicate and corresponding events\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," field of a component definition. For example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_component:\n events:\n is_active:\n load: ...\n unload: ...\n some_other_predicate_name:\n set: ...\n call_service: ...\n")),(0,o.kt)("h4",{id:"special-event-predicates"},"Special event predicates"),(0,o.kt)("p",null,"In addition to standard component predicates produced by the component at runtime, two other event triggers can be\nassociated with a component. These triggers are provided by the Dynamic State Engine which manages the component rather\nthan the component itself."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"on_load")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate is provided by the state engine and set to true after the component has been loaded. Any events\nassociated with the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate are handled after the node has been instantiated."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"component:\n events:\n on_load:\n : ...\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"on_unload")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_unload")," predicate is similar to the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_load")," predicate and is provided by the state engine. Any events\nassociated with the ",(0,o.kt)("inlineCode",{parentName:"p"},"on_unload")," predicate are handled once the component interface has been destroyed."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"component:\n events:\n on_unload:\n : ...\n")),(0,o.kt)("h2",{id:"hardware"},"Hardware"),(0,o.kt)("p",null,"Hardware interfaces describe the connected robots and their corresponding controllers."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"hardware:\n robot_a:\n urdf: ...\n rate: ...\n parameters: # optional\n ...\n display_name: ... # optional\n position: ... # optional\n controllers:\n ...\n robot_b:\n ...\n")),(0,o.kt)("h3",{id:"urdf"},"URDF"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"urdf")," field refers to a specially formatted robot description file which defines the joint configurations and the\nhardware interface driver needed to communicate with the robot."),(0,o.kt)("p",null,"A hardware interface can be linked to URDF file in one of the following ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"By name of the custom URDF uploaded to the AICA database"),(0,o.kt)("li",{parentName:"ul"},"By name of an example URDF included in the AICA image (available examples depend on license and distribution versions)"),(0,o.kt)("li",{parentName:"ul"},"By the path of a URDF file mounted in the container filesystem"),(0,o.kt)("li",{parentName:"ul"},"By URDF string content inserted directly in the YAML (not recommended for large files)")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},'# referring to a custom robot description uploaded to the user database\nrobot_a:\n urdf: My custom robot\n\n# referring to a built-in robot description from the included examples\nrobot_b:\n urdf: Universal Robots 5e (default configuration)\n\n# using the path to a URDF file mounted in the container filesystem\nrobot_c:\n urdf: /home/ros2/my_robot.urdf\n\n# defining the URDF content in-line\nrobot_d:\n urdf: |\n \n \n \n robot_interface/GenericInterface\n \n ...\n \n ...\n \n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Use the Hardware tab in AICA Studio to manage available URDFs."),(0,o.kt)("p",{parentName:"admonition"},"Alternatively, use the API endpoints at ",(0,o.kt)("inlineCode",{parentName:"p"},"/v1/data/hardware")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/v1/examples/hardware")," to manage custom hardware and\nview the available built-in example URDFs, respectively.")),(0,o.kt)("h3",{id:"rate"},"Rate"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rate")," field defines the robot control frequency in Hz."),(0,o.kt)("h3",{id:"parameters-1"},"Parameters"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field is used to set hardware-specific parameter values which override the default values from the\nassociated URDF."),(0,o.kt)("p",null,"Specifically, the URDF is expected to include a ",(0,o.kt)("inlineCode",{parentName:"p"},"")," tag under which hardware properties are defined,\nincluding the hardware plugin and any number of parameters specific to that plugin."),(0,o.kt)("p",null,"For example, a ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_interface/GenericInterface")," plugin may accept a ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_ip")," parameter to specify the IP address:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-xml"},'\n\n \n \n robot_interface/GenericInterface\n 192.168.0.1\n \n ...\n \n ...\n\n')),(0,o.kt)("p",null,"By adding ",(0,o.kt)("inlineCode",{parentName:"p"},"robot_ip")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field, the default IP address can be overridden when the hardware interface\nis loaded:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_robot:\n urdf: Example Robot\n parameters:\n robot_ip: 172.16.0.1\n")),(0,o.kt)("p",null,"In this example, the robot interface would be loaded with the IP address of ",(0,o.kt)("inlineCode",{parentName:"p"},"172.16.0.1")," instead of the default\n",(0,o.kt)("inlineCode",{parentName:"p"},"192.168.0.1")," as specified in the URDF. This allows parameters to be selectively altered at deploy time directly in the\napplication description without needing to modify the URDF itself."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Hardware parameter values are only applied if the parameter name matches an existing hardware parameter in the URDF.\nIf the parameter does not exist in the URDF, it will not be added.")),(0,o.kt)("h3",{id:"display-name-1"},"Display name"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#display-name"},"component display name")," and is used to assign a nicer,\nhuman-readable display name to the hardware interface when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("h3",{id:"position-1"},"Position"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#position"},"component position")," and is used to provide an X, Y position for the\nhardware interface when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("p",null,"This field only affects visualization of the application graph and has no other run-time effect.\nIf a position is not specified, the node will be rendered at a procedurally chosen location."),(0,o.kt)("h3",{id:"controllers"},"Controllers"),(0,o.kt)("p",null,"Controllers are the interface between components in the application and hardware in the real world. They convert desired\nreference signals into real joint commands according to some internal control law, and convert joint states from the\nrobot back to signals."),(0,o.kt)("p",null,"Controllers are listed under a top-level ",(0,o.kt)("inlineCode",{parentName:"p"},"controllers")," field. Controller names must be unique within the given hardware\ninterface, and should generally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"Under each controller, the ",(0,o.kt)("inlineCode",{parentName:"p"},"plugin")," field refers to a registered controller plugin name."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"parameters")," field then refers to configurable parameters for the given controller."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," fields define the ROS2 topics to which each signal of the controller should be connected.\nSee also ",(0,o.kt)("a",{parentName:"p",href:"#inputs-and-outputs"},"Component Inputs and Outputs"),"."),(0,o.kt)("p",null,"Predicates can be used to trigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," by adding the named predicate and corresponding events\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," field of a controller definition. See also ",(0,o.kt)("a",{parentName:"p",href:"#predicate-events"},"Predicate Events"),"."),(0,o.kt)("p",null,"Optionally, the ",(0,o.kt)("inlineCode",{parentName:"p"},"position")," field can be used to specify an X, Y location for rendering the hardware interface\nas a node in the AICA interactive graph editor. See also ",(0,o.kt)("a",{parentName:"p",href:"#position"},"Component Position"),"."),(0,o.kt)("p",null,"For example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"robot:\n controllers:\n broadcaster:\n plugin: joint_state_broadcaster/JointStateBroadcaster\n twist_controller:\n plugin: compliant_twist_controller/CompliantTwistController\n parameters:\n linear_principle_damping: 10.0\n linear_orthogonal_damping: 10.0\n angular_stiffness: 1.0\n angular_damping: { a: 1.0, b: true }\n inputs:\n command: /motion_generator/command_output\n outputs:\n state: /recorder/state_input\n events:\n my_predicate_name:\n set: ...\n call_service: ...\n")),(0,o.kt)("h2",{id:"conditions"},"Conditions"),(0,o.kt)("p",null,"Conditions are event triggers based on logical combinations of predicates."),(0,o.kt)("p",null,"Conditions are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"conditions"),". Condition names must be unique, and should\ngenerally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"Conditional events are triggered only on the rising edge of the condition, preventing the repeated execution of an\nevent if the condition stays true."),(0,o.kt)("p",null,"Define events to be triggered by a condition by listing them under the condition name. See the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," section\nfor available event syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"conditions:\n condition_1:\n component: ...\n predicate: ...\n events:\n ...\n\n condition_2:\n controller: ...\n hardware: ...\n predicate: ...\n events:\n ...\n\n condition_3:\n : ... # not, all, any, one_of\n events:\n ...\n\n")),(0,o.kt)("h3",{id:"simple-conditions"},"Simple conditions"),(0,o.kt)("p",null,"A simple condition evaluates just a single component or controller predicate and triggers the listed events when it is\ntrue."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n component: my_component\n predicate: some_component_predicate\n events:\n ...\ncondition_2:\n controller: my_controller\n hardware: my_hardware\n predicate: some_controller_predicate\n events:\n ...\n")),(0,o.kt)("h3",{id:"conditional-operators"},"Conditional operators"),(0,o.kt)("p",null,"To combine multiple predicates together into a single true / false condition, the following operators can be used."),(0,o.kt)("p",null,"The operators can refer to one or more component predicates with the syntax\n",(0,o.kt)("inlineCode",{parentName:"p"},"{ component: component_a, predicate: some_predicate }")),(0,o.kt)("h4",{id:"not"},"Not"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"not")," operator takes a single item and negates its value. It is true when the item is false, and false when the\nitem is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n not: { component: component_a, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"all"},"All"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"all")," operator takes a list of items and is true only when every listed item is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n all:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"any"},"Any"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"any")," operator takes a list of items and is true when at least one of the listed items is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n any:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h4",{id:"one-of"},"One of"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"one_of")," operator takes a list of items and is true only when exactly one of the listed items is true."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"condition_1:\n one_of:\n - { component: component_a, predicate: some_predicate }\n - { component: component_b, predicate: some_predicate }\n events:\n ...\n")),(0,o.kt)("h3",{id:"nested-conditions"},"Nested conditions"),(0,o.kt)("p",null,"The conditional operators can be applied recursively for more complex conditions. The following example could be\ncollapsed into the equivalent logical pseudocode: ",(0,o.kt)("inlineCode",{parentName:"p"},"NOT(a AND b AND (c OR d OR (e XOR f)))")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"conditions:\n nested_condition:\n not:\n all:\n - { component: component_1, predicate: a }\n - { component: component_2, predicate: b }\n - any:\n - { component: component_3, predicate: c }\n - { component: component_4, predicate: d }\n - one_of:\n - { component: component_5, predicate: e }\n - { component: component_6, predicate: f }\n")),(0,o.kt)("h2",{id:"sequences"},"Sequences"),(0,o.kt)("p",null,"A sequence is a list of steps that are handled sequentially in order. Sequence steps are either\nstandard ",(0,o.kt)("a",{parentName:"p",href:"#events"},"state events")," or conditional blocks; the conditional steps are used either to wait for a condition,\npredicate or fixed time interval, or to assert the current value of a condition or predicate."),(0,o.kt)("p",null,"Similar to ",(0,o.kt)("a",{parentName:"p",href:"#conditions"},"conditions"),", sequences are listed under a top-level field called ",(0,o.kt)("inlineCode",{parentName:"p"},"sequences"),". Sequence names\nmust be unique, and should generally follow the ",(0,o.kt)("inlineCode",{parentName:"p"},"lower_camel_case")," naming convention."),(0,o.kt)("p",null,"After sequences are defined in the yaml, they can be managed using ",(0,o.kt)("a",{parentName:"p",href:"#manage-sequences"},"sequence state events"),"; component\nor controller predicates, conditions and even sequences can also start, restart or abort a sequence."),(0,o.kt)("p",null,"The example below uses a combination of standard event steps and conditional blocks; it asserts that a component is\nactive, sets a parameter on that component, waits 10 seconds, and then activates a controller."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n sequence_1:\n - assert:\n component: my_component\n predicate: is_active\n - set:\n component: my_component\n parameter: speed\n value: 2.0\n - wait:\n seconds: 10\n - switch_controllers:\n hardware: my_hardware\n activate: my_controller\n")),(0,o.kt)("h3",{id:"sequence-assert"},"Sequence assert"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"assert")," keyword is an assertion step to check if a condition or predicate is true. If the assertion succeeds,\nthe sequence continues to the next step. If the assertion fails, the sequence is automatically aborted.\nOptionally, assertion failure can be used to trigger breakout events as a form of error handling."),(0,o.kt)("p",null,"The following examples show the syntax to check either a condition or predicate respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n condition: my_condition\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n component: my_component\n predicate: some_predicate\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n controller: my_controller\n hardware: my_hardware\n predicate: some_predicate\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"else")," keyword is optionally used to define breakout events if the assertion fails. The following example would\nunload a component if condition ",(0,o.kt)("inlineCode",{parentName:"p"},"my_condition")," is not true and then abort the sequence."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"assert:\n condition: my_condition\n else:\n unload:\n component: my_component\n")),(0,o.kt)("h3",{id:"sequence-wait"},"Sequence wait"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"wait")," keyword is used to wait for either a fixed time interval or for a condition or predicate to be\ntrue."),(0,o.kt)("h4",{id:"waiting-for-a-specified-time-interval"},"Waiting for a specified time interval"),(0,o.kt)("p",null,"The simplest case is waiting for fixed duration, which uses the ",(0,o.kt)("inlineCode",{parentName:"p"},"seconds")," field to define the time to wait in seconds."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n seconds: 10\n")),(0,o.kt)("h4",{id:"waiting-for-a-condition-or-predicate"},"Waiting for a condition or predicate"),(0,o.kt)("p",null,"The following examples show the syntax to wait for either a condition or predicate state respectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n condition: my_condition\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n component: my_component\n predicate: some_predicate\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n controller: my_controller\n hardware: my_hardware\n predicate: some_predicate\n")),(0,o.kt)("p",null,"Compared to the simple fixed-time wait, a conditional wait step could block the sequence indefinitely. The ",(0,o.kt)("inlineCode",{parentName:"p"},"timeout"),"\nfield can be used when waiting for a condition or predicate to set a maximum time limit. The time limit is defined in\nseconds with the ",(0,o.kt)("inlineCode",{parentName:"p"},"seconds")," field."),(0,o.kt)("p",null,"Similar to assertions, the sequence is aborted if the wait step times out. The optional ",(0,o.kt)("inlineCode",{parentName:"p"},"events")," keyword can be used\nunder the ",(0,o.kt)("inlineCode",{parentName:"p"},"timeout")," field to define breakout events if the assertion fails. The following example would unload a\ncomponent if condition ",(0,o.kt)("inlineCode",{parentName:"p"},"my_condition")," is not true within 10 seconds and then abort the sequence."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"wait:\n condition: my_condition\n timeout:\n seconds: 10\n events:\n unload:\n component: my_component\n")),(0,o.kt)("h3",{id:"using-sequences-to-manage-program-flow"},"Using sequences to manage program flow"),(0,o.kt)("p",null,"Because sequences can also use sequence state events as steps, fine-grained looping and branching logic can be\nexpressed."),(0,o.kt)("p",null,"For example, this sequence would activate and deactivate a lifecycle component every 5 seconds in an endless loop:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n my_sequence:\n - lifecycle:\n component: my_component\n transition: activate\n - wait:\n seconds: 5\n - lifecycle:\n component: my_component\n transition: deactivate\n - wait:\n seconds: 5\n - sequence:\n restart: my_sequence\n")),(0,o.kt)("p",null,"The next example starts ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence_2")," if a condition is true, and else starts ",(0,o.kt)("inlineCode",{parentName:"p"},"sequence_3"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"sequences:\n sequence_1:\n - wait:\n seconds: 5\n - assert:\n condition: my_condition\n else:\n sequence:\n start: sequence_3\n - sequence:\n start: sequence_2\n")),(0,o.kt)("h2",{id:"on-start"},"On Start"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"on_start")," keyword is reserved as a special event trigger when the application is launched.\nList the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," to trigger on startup (for example, to load components and hardware interfaces)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"on_start:\n load:\n - component: component_a\n - component: component_b\n - hardware: robot_a\n")),(0,o.kt)("h2",{id:"buttons"},"Buttons"),(0,o.kt)("p",null,"Buttons are interactive elements in AICA Studio. They are used to manually\ntrigger ",(0,o.kt)("a",{parentName:"p",href:"#events"},"state events")," when an application is running by clicking the trigger button in the application graph.\nButtons have no effect on the application if the UI is not used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"buttons:\n my_button:\n position: ...\n on_click:\n ...\n")),(0,o.kt)("h3",{id:"position-2"},"Position"),(0,o.kt)("p",null,"This optional field is identical to the ",(0,o.kt)("a",{parentName:"p",href:"#position"},"component position")," and is used to provide an X, Y position for the\ncomponent when rendered as a node in the AICA interactive graph editor."),(0,o.kt)("h3",{id:"on-click"},"On Click"),(0,o.kt)("p",null,"List the ",(0,o.kt)("a",{parentName:"p",href:"#events"},"events")," to trigger when the button is clicked while the application is running (for example, to\nunload a component)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"my_button:\n on_click:\n unload:\n component: component_a\n")),(0,o.kt)("h2",{id:"validating-a-yaml-application"},"Validating a YAML application"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"https://docs.aica.tech/schemas/1-4-1/application.schema.json"},"YAML application schema")," defines the structural rules\nof an AICA application and effectively distinguishes between valid and invalid syntax."),(0,o.kt)("p",null,"Many modern IDEs and code editors can be configured to support custom schemas and provide in-line validation and\ncompletion of the YAML content."),(0,o.kt)("h3",{id:"validating-a-yaml-application-with-visual-studio-code"},"Validating a YAML application with Visual Studio Code"),(0,o.kt)("p",null,"Developers working with Visual Studio Code can validate YAML application files easily in two steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Install the ",(0,o.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml"},"YAML extenstion from RedHat")),(0,o.kt)("li",{parentName:"ol"},"Associate a schema with the YAML application by adding the following modeline to the file:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"# yaml-language-server: $schema=https://docs.aica.tech/schemas/1-4-1/application.schema.json\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.1a85a0fc.js b/assets/js/935f2afb.1a85a0fc.js deleted file mode 100644 index e81fadd2..00000000 --- a/assets/js/935f2afb.1a85a0fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"conceptsSidebar":[{"type":"link","label":"Introduction","href":"/docs/concepts/intro","docId":"concepts/intro"},{"type":"link","label":"Built on ROS 2","href":"/docs/concepts/ros","docId":"concepts/ros"},{"type":"category","label":"ROS 2 concepts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Nodes","href":"/docs/concepts/ros-concepts/nodes","docId":"concepts/ros-concepts/nodes"},{"type":"link","label":"Lifecycle nodes","href":"/docs/concepts/ros-concepts/lifecycle","docId":"concepts/ros-concepts/lifecycle"},{"type":"link","label":"Dynamic composition","href":"/docs/concepts/ros-concepts/composition","docId":"concepts/ros-concepts/composition"},{"type":"link","label":"Controlling robots","href":"/docs/concepts/ros-concepts/control","docId":"concepts/ros-concepts/control"}],"href":"/docs/category/ros-2-concepts"},{"type":"link","label":"AICA applications","href":"/docs/concepts/aica-applications","docId":"concepts/aica-applications"},{"type":"category","label":"Application building blocks","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Signals","href":"/docs/concepts/building-blocks/signals","docId":"concepts/building-blocks/signals"},{"type":"link","label":"Events","href":"/docs/concepts/building-blocks/events","docId":"concepts/building-blocks/events"},{"type":"link","label":"Components","href":"/docs/concepts/building-blocks/components","docId":"concepts/building-blocks/components"},{"type":"link","label":"Controllers","href":"/docs/concepts/building-blocks/controllers","docId":"concepts/building-blocks/controllers"},{"type":"link","label":"Hardware interfaces","href":"/docs/concepts/building-blocks/hardware-interfaces","docId":"concepts/building-blocks/hardware-interfaces"}],"href":"/docs/category/application-building-blocks"},{"type":"link","label":"Going further with AICA","href":"/docs/concepts/going-further","docId":"concepts/going-further"}],"gettingStartedSidebar":[{"type":"link","label":"Getting started","href":"/docs/getting-started/intro","docId":"getting-started/intro"},{"type":"link","label":"Licensing","href":"/docs/getting-started/licensing","docId":"getting-started/licensing"},{"type":"link","label":"Installation and Launch","href":"/docs/getting-started/installation-and-launch","docId":"getting-started/installation-and-launch"},{"type":"category","label":"Examples","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"A basic application example","href":"/docs/getting-started/examples/timer-example","docId":"getting-started/examples/timer-example"},{"type":"link","label":"The application graph editor","href":"/docs/getting-started/examples/editor-example","docId":"getting-started/examples/editor-example"},{"type":"link","label":"An application with hardware","href":"/docs/getting-started/examples/mock-hardware-example","docId":"getting-started/examples/mock-hardware-example"}],"href":"/docs/category/examples"},{"type":"link","label":"Next steps","href":"/docs/getting-started/next","docId":"getting-started/next"}],"programmingReferenceSidebar":[{"type":"link","label":"Programming introduction","href":"/docs/reference/intro","docId":"reference/intro"},{"type":"link","label":"YAML application syntax","href":"/docs/reference/yaml-syntax","docId":"reference/yaml-syntax"},{"type":"category","label":"Custom components","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Creating a component package","href":"/docs/reference/custom-components/component-package","docId":"reference/custom-components/component-package"},{"type":"link","label":"Writing a component","href":"/docs/reference/custom-components/custom-component","docId":"reference/custom-components/custom-component"},{"type":"link","label":"Describing a component","href":"/docs/reference/custom-components/component-descriptions","docId":"reference/custom-components/component-descriptions"},{"type":"link","label":"Building a component package","href":"/docs/reference/custom-components/package-building","docId":"reference/custom-components/package-building"},{"type":"link","label":"Package builder configuration reference","href":"/docs/reference/custom-components/aica-package-toml","docId":"reference/custom-components/aica-package-toml"},{"type":"link","label":"Migrating from older versions of `package-builder`","href":"/docs/reference/custom-components/aica-package-migrations","docId":"reference/custom-components/aica-package-migrations"}],"href":"/docs/category/custom-components"}]},"docs":{"concepts/aica-applications":{"id":"concepts/aica-applications","title":"AICA applications","description":"The ROS 2 concepts of managed lifecycle nodes and dynamic composition (and by extension, lifecycle components) enable","sidebar":"conceptsSidebar"},"concepts/building-blocks/components":{"id":"concepts/building-blocks/components","title":"Components","description":"Within an AICA System application, components are the building blocks of advanced robot behaviors.","sidebar":"conceptsSidebar"},"concepts/building-blocks/controllers":{"id":"concepts/building-blocks/controllers","title":"Controllers","description":"AICA controllers are implemented according to the ros2_control standard.","sidebar":"conceptsSidebar"},"concepts/building-blocks/events":{"id":"concepts/building-blocks/events","title":"Events","description":"Events are discrete actions that change the dynamic state of an AICA application. They are handled and executed by the","sidebar":"conceptsSidebar"},"concepts/building-blocks/hardware-interfaces":{"id":"concepts/building-blocks/hardware-interfaces","title":"Hardware interfaces","description":"AICA hardware interfaces are implemented according to the ros2_control standard,","sidebar":"conceptsSidebar"},"concepts/building-blocks/signals":{"id":"concepts/building-blocks/signals","title":"Signals","description":"In the AICA System, signals are designed to exchange continuous data between components and controllers in a running","sidebar":"conceptsSidebar"},"concepts/going-further":{"id":"concepts/going-further","title":"Going further with AICA","description":"Contact us to learn more about AICA and/or to request an AICA System License.","sidebar":"conceptsSidebar"},"concepts/intro":{"id":"concepts/intro","title":"Introduction","description":"AICA is committed to making robotics more accessible by providing smart software solutions for advanced robot control.","sidebar":"conceptsSidebar"},"concepts/ros":{"id":"concepts/ros","title":"Built on ROS 2","description":"The Robot Operating System (ROS) is a collection of open-source software libraries and tools","sidebar":"conceptsSidebar"},"concepts/ros-concepts/composition":{"id":"concepts/ros-concepts/composition","title":"Dynamic composition","description":"Traditionally, ROS nodes are compiled as executables so that they can be launched as stand-alone processes.","sidebar":"conceptsSidebar"},"concepts/ros-concepts/control":{"id":"concepts/ros-concepts/control","title":"Controlling robots","description":"ROS nodes are easy to conceptualize as pure functional components that process input topics and generate output","sidebar":"conceptsSidebar"},"concepts/ros-concepts/lifecycle":{"id":"concepts/ros-concepts/lifecycle","title":"Lifecycle nodes","description":"Lifecycle nodes, also referred to as \\"managed\\" nodes, extend the common interfaces of regular nodes with an internal","sidebar":"conceptsSidebar"},"concepts/ros-concepts/nodes":{"id":"concepts/ros-concepts/nodes","title":"Nodes","description":"Nodes are at the core of ROS. They are independent processes responsible for performing some kind of computation.","sidebar":"conceptsSidebar"},"getting-started/examples/editor-example":{"id":"getting-started/examples/editor-example","title":"The application graph editor","description":"In the previous steps, an example application graph was generated from YAML. The graph can also be edited interactively","sidebar":"gettingStartedSidebar"},"getting-started/examples/mock-hardware-example":{"id":"getting-started/examples/mock-hardware-example","title":"An application with hardware","description":"Launcher configuration requirements","sidebar":"gettingStartedSidebar"},"getting-started/examples/timer-example":{"id":"getting-started/examples/timer-example","title":"A basic application example","description":"This example will show how components and predicate events can be used to create dynamic behavior in an AICA","sidebar":"gettingStartedSidebar"},"getting-started/installation-and-launch":{"id":"getting-started/installation-and-launch","title":"Installation and Launch","description":"Pre-requisites","sidebar":"gettingStartedSidebar"},"getting-started/intro":{"id":"getting-started/intro","title":"Getting started","description":"This guide will cover the basic steps to get started with the AICA System, from installation to application examples.","sidebar":"gettingStartedSidebar"},"getting-started/licensing":{"id":"getting-started/licensing","title":"Licensing","description":"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software","sidebar":"gettingStartedSidebar"},"getting-started/next":{"id":"getting-started/next","title":"Next steps","description":"After the AICA System is up and running with the basic examples, learn how to write custom AICA applications using","sidebar":"gettingStartedSidebar"},"reference/custom-components/aica-package-migrations":{"id":"reference/custom-components/aica-package-migrations","title":"Migrating from older versions of `package-builder`","description":"While we try to keep the syntax of package-builder as stable as possible, sometimes we need to make breaking changes to improve the developer experience or to fix bugs. This document will help you migrate your existing package-builder configuration to the latest version.","sidebar":"programmingReferenceSidebar"},"reference/custom-components/aica-package-toml":{"id":"reference/custom-components/aica-package-toml","title":"Package builder configuration reference","description":"The aica-package.toml file is used to configure the build process for a component package.","sidebar":"programmingReferenceSidebar"},"reference/custom-components/component-descriptions":{"id":"reference/custom-components/component-descriptions","title":"Describing a component","description":"To fully support custom components in the AICA System, it is crucial to have a consistent means of","sidebar":"programmingReferenceSidebar"},"reference/custom-components/component-package":{"id":"reference/custom-components/component-package","title":"Creating a component package","description":"The creation of a component package can be greatly simplified by using","sidebar":"programmingReferenceSidebar"},"reference/custom-components/custom-component":{"id":"reference/custom-components/custom-component","title":"Writing a component","description":"The following sections show example code snippets to illustrate how custom component classes can be implemented in","sidebar":"programmingReferenceSidebar"},"reference/custom-components/package-building":{"id":"reference/custom-components/package-building","title":"Building a component package","description":"To use custom components in AICA applications, the component package must be built and then included in the AICA image","sidebar":"programmingReferenceSidebar"},"reference/intro":{"id":"reference/intro","title":"Programming introduction","description":"AICA Universe is built on open and extensible standards. The following sections provide specific information,","sidebar":"programmingReferenceSidebar"},"reference/yaml-syntax":{"id":"reference/yaml-syntax","title":"YAML application syntax","description":"The following sections define the YAML syntax used to describe an AICA application.","sidebar":"programmingReferenceSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.1f7bd095.js b/assets/js/935f2afb.1f7bd095.js new file mode 100644 index 00000000..84051c21 --- /dev/null +++ b/assets/js/935f2afb.1f7bd095.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"conceptsSidebar":[{"type":"link","label":"Introduction","href":"/docs/concepts/intro","docId":"concepts/intro"},{"type":"link","label":"Built on ROS 2","href":"/docs/concepts/ros","docId":"concepts/ros"},{"type":"category","label":"ROS 2 concepts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Nodes","href":"/docs/concepts/ros-concepts/nodes","docId":"concepts/ros-concepts/nodes"},{"type":"link","label":"Lifecycle nodes","href":"/docs/concepts/ros-concepts/lifecycle","docId":"concepts/ros-concepts/lifecycle"},{"type":"link","label":"Dynamic composition","href":"/docs/concepts/ros-concepts/composition","docId":"concepts/ros-concepts/composition"},{"type":"link","label":"Controlling robots","href":"/docs/concepts/ros-concepts/control","docId":"concepts/ros-concepts/control"}],"href":"/docs/category/ros-2-concepts"},{"type":"link","label":"AICA applications","href":"/docs/concepts/aica-applications","docId":"concepts/aica-applications"},{"type":"category","label":"Application building blocks","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Signals","href":"/docs/concepts/building-blocks/signals","docId":"concepts/building-blocks/signals"},{"type":"link","label":"Events","href":"/docs/concepts/building-blocks/events","docId":"concepts/building-blocks/events"},{"type":"link","label":"Components","href":"/docs/concepts/building-blocks/components","docId":"concepts/building-blocks/components"},{"type":"link","label":"Controllers","href":"/docs/concepts/building-blocks/controllers","docId":"concepts/building-blocks/controllers"},{"type":"link","label":"Hardware interfaces","href":"/docs/concepts/building-blocks/hardware-interfaces","docId":"concepts/building-blocks/hardware-interfaces"}],"href":"/docs/category/application-building-blocks"},{"type":"link","label":"Going further with AICA","href":"/docs/concepts/going-further","docId":"concepts/going-further"}],"gettingStartedSidebar":[{"type":"link","label":"Getting started","href":"/docs/getting-started/intro","docId":"getting-started/intro"},{"type":"link","label":"Licensing","href":"/docs/getting-started/licensing","docId":"getting-started/licensing"},{"type":"link","label":"Installation and Launch","href":"/docs/getting-started/installation-and-launch","docId":"getting-started/installation-and-launch"},{"type":"category","label":"Examples","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"A basic application example","href":"/docs/getting-started/examples/timer-example","docId":"getting-started/examples/timer-example"},{"type":"link","label":"The application graph editor","href":"/docs/getting-started/examples/editor-example","docId":"getting-started/examples/editor-example"},{"type":"link","label":"An application with hardware","href":"/docs/getting-started/examples/mock-hardware-example","docId":"getting-started/examples/mock-hardware-example"}],"href":"/docs/category/examples"},{"type":"link","label":"Next steps","href":"/docs/getting-started/next","docId":"getting-started/next"}],"programmingReferenceSidebar":[{"type":"link","label":"Programming introduction","href":"/docs/reference/intro","docId":"reference/intro"},{"type":"link","label":"Manual Installation and Launch","href":"/docs/reference/manual-installation-launch","docId":"reference/manual-installation-launch"},{"type":"link","label":"YAML application syntax","href":"/docs/reference/yaml-syntax","docId":"reference/yaml-syntax"},{"type":"category","label":"Custom components","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Creating a component package","href":"/docs/reference/custom-components/component-package","docId":"reference/custom-components/component-package"},{"type":"link","label":"Writing a component","href":"/docs/reference/custom-components/custom-component","docId":"reference/custom-components/custom-component"},{"type":"link","label":"Describing a component","href":"/docs/reference/custom-components/component-descriptions","docId":"reference/custom-components/component-descriptions"},{"type":"link","label":"Building a component package","href":"/docs/reference/custom-components/package-building","docId":"reference/custom-components/package-building"},{"type":"link","label":"Package builder configuration reference","href":"/docs/reference/custom-components/aica-package-toml","docId":"reference/custom-components/aica-package-toml"},{"type":"link","label":"Migrating from older versions of `package-builder`","href":"/docs/reference/custom-components/aica-package-migrations","docId":"reference/custom-components/aica-package-migrations"}],"href":"/docs/category/custom-components"}]},"docs":{"concepts/aica-applications":{"id":"concepts/aica-applications","title":"AICA applications","description":"The ROS 2 concepts of managed lifecycle nodes and dynamic composition (and by extension, lifecycle components) enable","sidebar":"conceptsSidebar"},"concepts/building-blocks/components":{"id":"concepts/building-blocks/components","title":"Components","description":"Within an AICA System application, components are the building blocks of advanced robot behaviors.","sidebar":"conceptsSidebar"},"concepts/building-blocks/controllers":{"id":"concepts/building-blocks/controllers","title":"Controllers","description":"AICA controllers are implemented according to the ros2_control standard.","sidebar":"conceptsSidebar"},"concepts/building-blocks/events":{"id":"concepts/building-blocks/events","title":"Events","description":"Events are discrete actions that change the dynamic state of an AICA application. They are handled and executed by the","sidebar":"conceptsSidebar"},"concepts/building-blocks/hardware-interfaces":{"id":"concepts/building-blocks/hardware-interfaces","title":"Hardware interfaces","description":"AICA hardware interfaces are implemented according to the ros2_control standard,","sidebar":"conceptsSidebar"},"concepts/building-blocks/signals":{"id":"concepts/building-blocks/signals","title":"Signals","description":"In the AICA System, signals are designed to exchange continuous data between components and controllers in a running","sidebar":"conceptsSidebar"},"concepts/going-further":{"id":"concepts/going-further","title":"Going further with AICA","description":"Contact us to learn more about AICA and/or to request an AICA System License.","sidebar":"conceptsSidebar"},"concepts/intro":{"id":"concepts/intro","title":"Introduction","description":"AICA is committed to making robotics more accessible by providing smart software solutions for advanced robot control.","sidebar":"conceptsSidebar"},"concepts/ros":{"id":"concepts/ros","title":"Built on ROS 2","description":"The Robot Operating System (ROS) is a collection of open-source software libraries and tools","sidebar":"conceptsSidebar"},"concepts/ros-concepts/composition":{"id":"concepts/ros-concepts/composition","title":"Dynamic composition","description":"Traditionally, ROS nodes are compiled as executables so that they can be launched as stand-alone processes.","sidebar":"conceptsSidebar"},"concepts/ros-concepts/control":{"id":"concepts/ros-concepts/control","title":"Controlling robots","description":"ROS nodes are easy to conceptualize as pure functional components that process input topics and generate output","sidebar":"conceptsSidebar"},"concepts/ros-concepts/lifecycle":{"id":"concepts/ros-concepts/lifecycle","title":"Lifecycle nodes","description":"Lifecycle nodes, also referred to as \\"managed\\" nodes, extend the common interfaces of regular nodes with an internal","sidebar":"conceptsSidebar"},"concepts/ros-concepts/nodes":{"id":"concepts/ros-concepts/nodes","title":"Nodes","description":"Nodes are at the core of ROS. They are independent processes responsible for performing some kind of computation.","sidebar":"conceptsSidebar"},"getting-started/examples/editor-example":{"id":"getting-started/examples/editor-example","title":"The application graph editor","description":"In the previous steps, an example application graph was generated from YAML. The graph can also be edited interactively","sidebar":"gettingStartedSidebar"},"getting-started/examples/mock-hardware-example":{"id":"getting-started/examples/mock-hardware-example","title":"An application with hardware","description":"Launcher configuration requirements","sidebar":"gettingStartedSidebar"},"getting-started/examples/timer-example":{"id":"getting-started/examples/timer-example","title":"A basic application example","description":"This example will show how components and predicate events can be used to create dynamic behavior in an AICA","sidebar":"gettingStartedSidebar"},"getting-started/installation-and-launch":{"id":"getting-started/installation-and-launch","title":"Installation and Launch","description":"Pre-requisites","sidebar":"gettingStartedSidebar"},"getting-started/intro":{"id":"getting-started/intro","title":"Getting started","description":"This guide will cover the basic steps to get started with the AICA System, from installation to application examples.","sidebar":"gettingStartedSidebar"},"getting-started/licensing":{"id":"getting-started/licensing","title":"Licensing","description":"A valid license is required to use AICA System. A license regulates both the access rights to download AICA software","sidebar":"gettingStartedSidebar"},"getting-started/next":{"id":"getting-started/next","title":"Next steps","description":"After the AICA System is up and running with the basic examples, learn how to write custom AICA applications using","sidebar":"gettingStartedSidebar"},"reference/custom-components/aica-package-migrations":{"id":"reference/custom-components/aica-package-migrations","title":"Migrating from older versions of `package-builder`","description":"While we try to keep the syntax of package-builder as stable as possible, sometimes we need to make breaking changes to improve the developer experience or to fix bugs. This document will help you migrate your existing package-builder configuration to the latest version.","sidebar":"programmingReferenceSidebar"},"reference/custom-components/aica-package-toml":{"id":"reference/custom-components/aica-package-toml","title":"Package builder configuration reference","description":"The aica-package.toml file is used to configure the build process for a component package.","sidebar":"programmingReferenceSidebar"},"reference/custom-components/component-descriptions":{"id":"reference/custom-components/component-descriptions","title":"Describing a component","description":"To fully support custom components in the AICA System, it is crucial to have a consistent means of","sidebar":"programmingReferenceSidebar"},"reference/custom-components/component-package":{"id":"reference/custom-components/component-package","title":"Creating a component package","description":"The creation of a component package can be greatly simplified by using","sidebar":"programmingReferenceSidebar"},"reference/custom-components/custom-component":{"id":"reference/custom-components/custom-component","title":"Writing a component","description":"The following sections show example code snippets to illustrate how custom component classes can be implemented in","sidebar":"programmingReferenceSidebar"},"reference/custom-components/package-building":{"id":"reference/custom-components/package-building","title":"Building a component package","description":"To use custom components in AICA applications, the component package must be built and then included in the AICA image","sidebar":"programmingReferenceSidebar"},"reference/intro":{"id":"reference/intro","title":"Programming introduction","description":"AICA Universe is built on open and extensible standards. The following sections provide specific information,","sidebar":"programmingReferenceSidebar"},"reference/manual-installation-launch":{"id":"reference/manual-installation-launch","title":"Manual Installation and Launch","description":"The following sections explain how to install and launch AICA Core and any additional packages manually from the command","sidebar":"programmingReferenceSidebar"},"reference/yaml-syntax":{"id":"reference/yaml-syntax","title":"YAML application syntax","description":"The following sections define the YAML syntax used to describe an AICA application.","sidebar":"programmingReferenceSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a0b0b928.00e1f4c5.js b/assets/js/a0b0b928.00e1f4c5.js new file mode 100644 index 00000000..06b849db --- /dev/null +++ b/assets/js/a0b0b928.00e1f4c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[176],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>g});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function c(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=o.createContext({}),s=function(e){var n=o.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},m=function(e){var n=s(e.components);return o.createElement(p.Provider,{value:n},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,m=r(e,["components","mdxType","originalType","parentName"]),l=s(t),u=a,g=l["".concat(p,".").concat(u)]||l[u]||d[u]||i;return t?o.createElement(g,c(c({ref:n},m),{},{components:t})):o.createElement(g,c({ref:n},m))}));function g(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,c=new Array(i);c[0]=u;var r={};for(var p in n)hasOwnProperty.call(n,p)&&(r[p]=n[p]);r.originalType=e,r[l]="string"==typeof e?e:a,c[1]=r;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>s});var o=t(7462),a=(t(7294),t(3905));const i={sidebar_position:1},c="Creating a component package",r={unversionedId:"reference/custom-components/component-package",id:"reference/custom-components/component-package",title:"Creating a component package",description:"The creation of a component package can be greatly simplified by using",source:"@site/docs/reference/custom-components/01-component-package.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/component-package",permalink:"/docs/reference/custom-components/component-package",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/01-component-package.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"programmingReferenceSidebar",previous:{title:"Custom components",permalink:"/docs/category/custom-components"},next:{title:"Writing a component",permalink:"/docs/reference/custom-components/custom-component"}},p={},s=[{value:"Package infrastructure",id:"package-infrastructure",level:2},{value:"package.xml",id:"packagexml",level:3},{value:"CMakeLists.txt",id:"cmakeliststxt",level:3},{value:"setup.cfg",id:"setupcfg",level:3},{value:"Source directories",id:"source-directories",level:3},{value:"Component descriptions",id:"component-descriptions",level:3}],m={toc:s},l="wrapper";function d(e){let{components:n,...t}=e;return(0,a.kt)(l,(0,o.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"creating-a-component-package"},"Creating a component package"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The creation of a component package can be greatly simplified by using\nour ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/component-template"},"Component Template"),". It comes with a boilerplate project\nwhich supports both C++ and Python."),(0,a.kt)("p",{parentName:"admonition"},"A lot of the information in this page is also available in the README of the template repository.")),(0,a.kt)("p",null,"Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in AICA Core. Components can be implemented in C++ or Python. A component package can contain multiple\ncomponents in either language."),(0,a.kt)("h2",{id:"package-infrastructure"},"Package infrastructure"),(0,a.kt)("p",null,"A minimal directory structure for an example package named ",(0,a.kt)("inlineCode",{parentName:"p"},"custom_component_package")," with C++ and Python component\nimplementations is shown below."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"custom_component_package\n\u2502\n\u251c\u2500\u2500 component_descriptions\n\u2502 \u251c\u2500\u2500 custom_component_package_cpp_component.json\n\u2502 \u2514\u2500\u2500 custom_component_package_py_component.json\n\u2502\n\u251c\u2500\u2500 custom_component_package\n\u2502 \u2514\u2500\u2500 py_component.py\n\u2502\n\u251c\u2500\u2500 include\n\u2502 \u2514\u2500\u2500 custom_component_package\n\u2502 \u2514\u2500\u2500 CppComponent.hpp\n\u2502\n\u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 CppComponent.cpp\n\u2502\n\u251c\u2500\u2500 CMakeLists.txt\n\u251c\u2500\u2500 package.xml\n\u2514\u2500\u2500 setup.cfg\n")),(0,a.kt)("p",null,"The following sections describe the package contents in more detail."),(0,a.kt)("h3",{id:"packagexml"},"package.xml"),(0,a.kt)("p",null,"The package manifest file defines the package metadata (name, version, description, maintainer and license) and package\ndependencies. An example including minimal dependencies is given below."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-xml",metastring:'title="package.xml"',title:'"package.xml"'},'\n\n\n 0.0.1\n custom_component_package\n An example package for custom components\n John Doe\n MIT\n\n ament_cmake_auto\n ament_cmake_python\n\n modulo_components\n\n \n ament_cmake\n \n\n')),(0,a.kt)("h3",{id:"cmakeliststxt"},"CMakeLists.txt"),(0,a.kt)("p",null,"The package build instructions are defined in a ",(0,a.kt)("inlineCode",{parentName:"p"},"CMakeLists.txt")," file."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cmake",metastring:'title="CMakeLists.txt"',title:'"CMakeLists.txt"'},"cmake_minimum_required(VERSION 3.15)\nproject(custom_component_package)\n\n# find dependencies\nfind_package(ament_cmake_auto REQUIRED)\nfind_package(ament_cmake_python REQUIRED)\n\nament_auto_find_build_dependencies()\n\ninclude_directories(include)\n\n# highlight-next-line\n### Register and install C++ Components here ###\n\n# install Python modules\nament_python_install_package(${PROJECT_NAME} SCRIPTS_DESTINATION lib/${PROJECT_NAME})\n\n# export JSON component descriptions in the component_descriptions directory\ninstall(DIRECTORY ./component_descriptions\n DESTINATION .)\n\nament_auto_package()\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"C++ components need to be added as library targets, registered with the ",(0,a.kt)("inlineCode",{parentName:"p"},"rclcpp_components_register_nodes")," macro\nand finally exported with the ",(0,a.kt)("inlineCode",{parentName:"p"},"install")," directive. See the C++ example in the next section.")),(0,a.kt)("h3",{id:"setupcfg"},"setup.cfg"),(0,a.kt)("p",null,"If the package contains any Python components, they need to be registered in a separate ",(0,a.kt)("inlineCode",{parentName:"p"},"setup.cfg")," file. Refer to\nthe Python example in the next section."),(0,a.kt)("p",null,"If a package contains no Python components, the ",(0,a.kt)("inlineCode",{parentName:"p"},"setup.cfg")," file is not needed."),(0,a.kt)("h3",{id:"source-directories"},"Source directories"),(0,a.kt)("p",null,"Relative to the package root, C++ components should have header files defined in an ",(0,a.kt)("inlineCode",{parentName:"p"},"include/")," directory\nand source files defined in a ",(0,a.kt)("inlineCode",{parentName:"p"},"src")," directory."),(0,a.kt)("p",null,"Python components should be defined in a subdirectory matching the package name."),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Any changes to the standard directory structure must be reflected in the ",(0,a.kt)("inlineCode",{parentName:"p"},"CMakeLists.txt")," file accordingly.")),(0,a.kt)("h3",{id:"component-descriptions"},"Component descriptions"),(0,a.kt)("p",null,"To fully support custom components in AICA Core, each new component should be fully described\nby a JSON file according to the component description schema."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a0b0b928.d1dfcc34.js b/assets/js/a0b0b928.d1dfcc34.js deleted file mode 100644 index 7bd05890..00000000 --- a/assets/js/a0b0b928.d1dfcc34.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[176],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=a.createContext({}),s=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=s(e.components);return a.createElement(l.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(t),d=o,f=u["".concat(l,".").concat(d)]||u[d]||m[d]||r;return t?a.createElement(f,i(i({ref:n},p),{},{components:t})):a.createElement(f,i({ref:n},p))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=d;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{t.d(n,{Z:()=>i});var a=t(7294),o=t(6010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:n,hidden:t,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:t},n)}},4866:(e,n,t)=>{t.d(n,{Z:()=>_});var a=t(7462),o=t(7294),r=t(6010),i=t(2466),c=t(6550),l=t(1980),s=t(7392),p=t(12);function u(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:o}}=e;return{value:n,label:t,attributes:a,default:o}}))}function m(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=n??u(t);return function(e){const n=(0,s.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function d(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const a=(0,c.k6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})}),[r,a])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,r=m(e),[i,c]=(0,o.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!d({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[l,s]=f({queryString:t,groupId:a}),[u,g]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,r]=(0,p.Nk)(t);return[a,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:a}),h=(()=>{const e=l??u;return d({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{h&&c(h)}),[h]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!d({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),s(e),g(e)}),[s,g,r]),tabValues:r}}var h=t(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:n,block:t,selectedValue:c,selectValue:l,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:u}=(0,i.o5)(),m=e=>{const n=e.currentTarget,t=p.indexOf(n),a=s[t].value;a!==c&&(u(n),l(a))},d=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const t=p.indexOf(e.currentTarget)+1;n=p[t]??p[0];break}case"ArrowLeft":{const t=p.indexOf(e.currentTarget)-1;n=p[t]??p[p.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n)},s.map((e=>{let{value:n,label:t,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:c===n?0:-1,"aria-selected":c===n,key:n,ref:e=>p.push(e),onKeyDown:d,onClick:m},i,{className:(0,r.Z)("tabs__item",k.tabItem,i?.className,{"tabs__item--active":c===n})}),t??n)})))}function y(e){let{lazy:n,children:t,selectedValue:a}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==a}))))}function v(e){const n=g(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",k.tabList)},o.createElement(b,(0,a.Z)({},e,n)),o.createElement(y,(0,a.Z)({},e,n)))}function _(e){const n=(0,h.Z)();return o.createElement(v,(0,a.Z)({key:String(n)},e))}},3763:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var a=t(7462),o=(t(7294),t(3905));t(4866),t(5162);const r={sidebar_position:1},i="Creating a component package",c={unversionedId:"reference/custom-components/component-package",id:"reference/custom-components/component-package",title:"Creating a component package",description:"The creation of a component package can be greatly simplified by using",source:"@site/docs/reference/custom-components/01-component-package.md",sourceDirName:"reference/custom-components",slug:"/reference/custom-components/component-package",permalink:"/docs/reference/custom-components/component-package",draft:!1,editUrl:"https://github.com/aica-technology/api/tree/main/docs/docs/reference/custom-components/01-component-package.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"programmingReferenceSidebar",previous:{title:"Custom components",permalink:"/docs/category/custom-components"},next:{title:"Writing a component",permalink:"/docs/reference/custom-components/custom-component"}},l={},s=[{value:"Package infrastructure",id:"package-infrastructure",level:2},{value:"package.xml",id:"packagexml",level:3},{value:"CMakeLists.txt",id:"cmakeliststxt",level:3},{value:"setup.cfg",id:"setupcfg",level:3},{value:"Source directories",id:"source-directories",level:3},{value:"Component descriptions",id:"component-descriptions",level:3}],p={toc:s},u="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(u,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"creating-a-component-package"},"Creating a component package"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The creation of a component package can be greatly simplified by using\nour ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/aica-technology/component-template"},"Component Template"),". It comes with a boilerplate project\nwhich supports both C++ and Python."),(0,o.kt)("p",{parentName:"admonition"},"A lot of the information in this page is also available in the README of the template repository.")),(0,o.kt)("p",null,"Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in AICA Core. Components can be implemented in C++ or Python. A component package can contain multiple\ncomponents in either language."),(0,o.kt)("h2",{id:"package-infrastructure"},"Package infrastructure"),(0,o.kt)("p",null,"A minimal directory structure for an example package named ",(0,o.kt)("inlineCode",{parentName:"p"},"custom_component_package")," with C++ and Python component\nimplementations is shown below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"custom_component_package\n\u2502\n\u251c\u2500\u2500 component_descriptions\n\u2502 \u251c\u2500\u2500 custom_component_package_cpp_component.json\n\u2502 \u2514\u2500\u2500 custom_component_package_py_component.json\n\u2502\n\u251c\u2500\u2500 custom_component_package\n\u2502 \u2514\u2500\u2500 py_component.py\n\u2502\n\u251c\u2500\u2500 include\n\u2502 \u2514\u2500\u2500 custom_component_package\n\u2502 \u2514\u2500\u2500 CppComponent.hpp\n\u2502\n\u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 CppComponent.cpp\n\u2502\n\u251c\u2500\u2500 CMakeLists.txt\n\u251c\u2500\u2500 package.xml\n\u2514\u2500\u2500 setup.cfg\n")),(0,o.kt)("p",null,"The following sections describe the package contents in more detail."),(0,o.kt)("h3",{id:"packagexml"},"package.xml"),(0,o.kt)("p",null,"The package manifest file defines the package metadata (name, version, description, maintainer and license) and package\ndependencies. An example including minimal dependencies is given below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-xml",metastring:'title="package.xml"',title:'"package.xml"'},'\n\n\n 0.0.1\n custom_component_package\n An example package for custom components\n John Doe\n MIT\n\n ament_cmake_auto\n ament_cmake_python\n\n modulo_components\n\n \n ament_cmake\n \n\n')),(0,o.kt)("h3",{id:"cmakeliststxt"},"CMakeLists.txt"),(0,o.kt)("p",null,"The package build instructions are defined in a ",(0,o.kt)("inlineCode",{parentName:"p"},"CMakeLists.txt")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cmake",metastring:'title="CMakeLists.txt"',title:'"CMakeLists.txt"'},"cmake_minimum_required(VERSION 3.15)\nproject(custom_component_package)\n\n# find dependencies\nfind_package(ament_cmake_auto REQUIRED)\nfind_package(ament_cmake_python REQUIRED)\n\nament_auto_find_build_dependencies()\n\ninclude_directories(include)\n\n# highlight-next-line\n### Register and install C++ Components here ###\n\n# install Python modules\nament_python_install_package(${PROJECT_NAME} SCRIPTS_DESTINATION lib/${PROJECT_NAME})\n\n# export JSON component descriptions in the component_descriptions directory\ninstall(DIRECTORY ./component_descriptions\n DESTINATION .)\n\nament_auto_package()\n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"C++ components need to be added as library targets, registered with the ",(0,o.kt)("inlineCode",{parentName:"p"},"rclcpp_components_register_nodes")," macro\nand finally exported with the ",(0,o.kt)("inlineCode",{parentName:"p"},"install")," directive. See the C++ example in the next section.")),(0,o.kt)("h3",{id:"setupcfg"},"setup.cfg"),(0,o.kt)("p",null,"If the package contains any Python components, they need to be registered in a separate ",(0,o.kt)("inlineCode",{parentName:"p"},"setup.cfg")," file. Refer to\nthe Python example in the next section."),(0,o.kt)("p",null,"If a package contains no Python components, the ",(0,o.kt)("inlineCode",{parentName:"p"},"setup.cfg")," file is not needed."),(0,o.kt)("h3",{id:"source-directories"},"Source directories"),(0,o.kt)("p",null,"Relative to the package root, C++ components should have header files defined in an ",(0,o.kt)("inlineCode",{parentName:"p"},"include/")," directory\nand source files defined in a ",(0,o.kt)("inlineCode",{parentName:"p"},"src")," directory."),(0,o.kt)("p",null,"Python components should be defined in a subdirectory matching the package name."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Any changes to the standard directory structure must be reflected in the ",(0,o.kt)("inlineCode",{parentName:"p"},"CMakeLists.txt")," file accordingly.")),(0,o.kt)("h3",{id:"component-descriptions"},"Component descriptions"),(0,o.kt)("p",null,"To fully support custom components in AICA Core, each new component should be fully described\nby a JSON file according to the component description schema."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.4cf1ac68.js b/assets/js/main.4cf1ac68.js deleted file mode 100644 index 89de05c8..00000000 --- a/assets/js/main.4cf1ac68.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.4cf1ac68.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"07d7eba8":[()=>n.e(361).then(n.t.bind(n,6062,19)),"~docs/default/category-docs-conceptssidebar-category-application-building-blocks-288.json",6062],"14eb3368":[()=>Promise.all([n.e(532),n.e(817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(918)]).then(n.bind(n,3682)),"@theme/DocItem",3682],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"203a697f":[()=>n.e(737).then(n.bind(n,5489)),"@site/docs/reference/custom-components/05-aica-package-toml.md",5489],"20a4f081":[()=>n.e(839).then(n.bind(n,5370)),"@site/docs/concepts/03-ros-concepts/04-control.md",5370],"226aac0d":[()=>n.e(980).then(n.bind(n,2919)),"@site/docs/getting-started/03-installation-and-launch.md",2919],28658051:[()=>n.e(346).then(n.bind(n,1778)),"@site/docs/getting-started/02-licensing.md",1778],"286b0d77":[()=>n.e(837).then(n.t.bind(n,9407,19)),"~docs/default/category-docs-gettingstartedsidebar-category-examples-383.json",9407],"2ab2a5e0":[()=>n.e(151).then(n.bind(n,9564)),"@site/docs/concepts/05-building-blocks/04-controllers.md",9564],"2bc209e9":[()=>n.e(316).then(n.bind(n,4677)),"@site/docs/getting-started/04-examples/02-editor-example.md",4677],"2c8308e5":[()=>n.e(99).then(n.bind(n,8518)),"@site/docs/reference/custom-components/03-component-descriptions.md",8518],33518342:[()=>n.e(682).then(n.bind(n,9687)),"@site/docs/concepts/03-ros-concepts/01-nodes.md",9687],"3c6c997a":[()=>n.e(928).then(n.t.bind(n,8704,19)),"~docs/default/category-docs-conceptssidebar-category-ros-2-concepts-177.json",8704],"3d1f9473":[()=>n.e(338).then(n.bind(n,7673)),"@site/docs/concepts/05-building-blocks/05-hardware-interfaces.md",7673],"556d4b16":[()=>n.e(972).then(n.bind(n,4819)),"@site/docs/getting-started/04-examples/03-mock-hardware-example.md",4819],"5b0853db":[()=>n.e(154).then(n.bind(n,5971)),"@site/docs/reference/custom-components/06-aica-package-migrations.md",5971],"5b4542f8":[()=>n.e(529).then(n.t.bind(n,3769,19)),"/home/runner/work/api/api/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"61b51b6a":[()=>n.e(691).then(n.bind(n,3007)),"@site/docs/reference/02-yaml-syntax.md",3007],"6583bd97":[()=>Promise.all([n.e(532),n.e(602)]).then(n.bind(n,9067)),"@site/docs/reference/custom-components/02-custom-component.md",9067],"77f7461f":[()=>n.e(52).then(n.bind(n,3823)),"@site/docs/reference/custom-components/04-package-building.md",3823],"7a7975e4":[()=>n.e(326).then(n.bind(n,9796)),"@site/docs/concepts/05-building-blocks/01-signals.md",9796],"7f5469c8":[()=>n.e(201).then(n.bind(n,5681)),"@site/docs/concepts/05-building-blocks/02-events.md",5681],"897d7a23":[()=>n.e(766).then(n.bind(n,177)),"@site/docs/reference/01-intro.md",177],"89b899dc":[()=>n.e(789).then(n.bind(n,644)),"@site/docs/getting-started/01-intro.md",644],"91d24a3d":[()=>n.e(101).then(n.bind(n,516)),"@site/docs/concepts/05-building-blocks/03-components.md",516],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94657a0f":[()=>n.e(172).then(n.t.bind(n,5745,19)),"/home/runner/work/api/api/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"9b6b9816":[()=>n.e(447).then(n.bind(n,4052)),"@site/docs/concepts/04-aica-applications.md",4052],a0b0b928:[()=>Promise.all([n.e(532),n.e(176)]).then(n.bind(n,3763)),"@site/docs/reference/custom-components/01-component-package.md",3763],a19639ab:[()=>n.e(666).then(n.bind(n,2675)),"@site/docs/concepts/01-intro.md",2675],a5aaed89:[()=>n.e(329).then(n.bind(n,390)),"@site/docs/concepts/03-ros-concepts/03-composition.md",390],d3ef16df:[()=>n.e(619).then(n.bind(n,2445)),"@site/docs/concepts/02-ros.md",2445],d845dece:[()=>n.e(46).then(n.bind(n,3789)),"@site/docs/getting-started/05-next.md",3789],df370818:[()=>n.e(270).then(n.bind(n,1252)),"@site/docs/getting-started/04-examples/01-timer-example.md",1252],e6f7440d:[()=>n.e(786).then(n.bind(n,2158)),"@site/docs/concepts/06-going-further.md",2158],eee87385:[()=>n.e(965).then(n.bind(n,1519)),"@site/docs/concepts/03-ros-concepts/02-lifecycle.md",1519],fd1fa630:[()=>n.e(879).then(n.t.bind(n,774,19)),"~docs/default/category-docs-programmingreferencesidebar-category-custom-components-ee8.json",774]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(515).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/docs",component:f("/docs","3ac"),routes:[{path:"/docs/category/application-building-blocks",component:f("/docs/category/application-building-blocks","7f9"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/category/custom-components",component:f("/docs/category/custom-components","d77"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/category/examples",component:f("/docs/category/examples","710"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/category/ros-2-concepts",component:f("/docs/category/ros-2-concepts","ac8"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/aica-applications",component:f("/docs/concepts/aica-applications","f07"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/building-blocks/components",component:f("/docs/concepts/building-blocks/components","251"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/building-blocks/controllers",component:f("/docs/concepts/building-blocks/controllers","fc1"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/building-blocks/events",component:f("/docs/concepts/building-blocks/events","a60"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/building-blocks/hardware-interfaces",component:f("/docs/concepts/building-blocks/hardware-interfaces","5f3"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/building-blocks/signals",component:f("/docs/concepts/building-blocks/signals","f26"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/going-further",component:f("/docs/concepts/going-further","8dc"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/intro",component:f("/docs/concepts/intro","506"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/ros",component:f("/docs/concepts/ros","437"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/ros-concepts/composition",component:f("/docs/concepts/ros-concepts/composition","618"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/ros-concepts/control",component:f("/docs/concepts/ros-concepts/control","472"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/ros-concepts/lifecycle",component:f("/docs/concepts/ros-concepts/lifecycle","39c"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/concepts/ros-concepts/nodes",component:f("/docs/concepts/ros-concepts/nodes","d98"),exact:!0,sidebar:"conceptsSidebar"},{path:"/docs/getting-started/examples/editor-example",component:f("/docs/getting-started/examples/editor-example","9e3"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/examples/mock-hardware-example",component:f("/docs/getting-started/examples/mock-hardware-example","56a"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/examples/timer-example",component:f("/docs/getting-started/examples/timer-example","df0"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/installation-and-launch",component:f("/docs/getting-started/installation-and-launch","7b8"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/intro",component:f("/docs/getting-started/intro","24e"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/licensing",component:f("/docs/getting-started/licensing","fb5"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/getting-started/next",component:f("/docs/getting-started/next","7d3"),exact:!0,sidebar:"gettingStartedSidebar"},{path:"/docs/reference/custom-components/aica-package-migrations",component:f("/docs/reference/custom-components/aica-package-migrations","f80"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/custom-components/aica-package-toml",component:f("/docs/reference/custom-components/aica-package-toml","8a7"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/custom-components/component-descriptions",component:f("/docs/reference/custom-components/component-descriptions","a58"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/custom-components/component-package",component:f("/docs/reference/custom-components/component-package","358"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/custom-components/custom-component",component:f("/docs/reference/custom-components/custom-component","09e"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/custom-components/package-building",component:f("/docs/reference/custom-components/package-building","f67"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/intro",component:f("/docs/reference/intro","f04"),exact:!0,sidebar:"programmingReferenceSidebar"},{path:"/docs/reference/yaml-syntax",component:f("/docs/reference/yaml-syntax","3d1"),exact:!0,sidebar:"programmingReferenceSidebar"}]},{path:"/",component:f("/","e3b"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),E=n(3320),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,u.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),N("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const I=R,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n

\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,$(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(z,null):null}function j(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763);function H(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(Z.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(j,null),r.createElement(_,null),r.createElement(U,null),r.createElement(I,{location:T(t)},e)))))}var V=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(9670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),P(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"concepts/intro","docs":[{"id":"concepts/aica-applications","path":"/docs/concepts/aica-applications","sidebar":"conceptsSidebar"},{"id":"concepts/building-blocks/components","path":"/docs/concepts/building-blocks/components","sidebar":"conceptsSidebar"},{"id":"concepts/building-blocks/controllers","path":"/docs/concepts/building-blocks/controllers","sidebar":"conceptsSidebar"},{"id":"concepts/building-blocks/events","path":"/docs/concepts/building-blocks/events","sidebar":"conceptsSidebar"},{"id":"concepts/building-blocks/hardware-interfaces","path":"/docs/concepts/building-blocks/hardware-interfaces","sidebar":"conceptsSidebar"},{"id":"concepts/building-blocks/signals","path":"/docs/concepts/building-blocks/signals","sidebar":"conceptsSidebar"},{"id":"concepts/going-further","path":"/docs/concepts/going-further","sidebar":"conceptsSidebar"},{"id":"concepts/intro","path":"/docs/concepts/intro","sidebar":"conceptsSidebar"},{"id":"concepts/ros","path":"/docs/concepts/ros","sidebar":"conceptsSidebar"},{"id":"concepts/ros-concepts/composition","path":"/docs/concepts/ros-concepts/composition","sidebar":"conceptsSidebar"},{"id":"concepts/ros-concepts/control","path":"/docs/concepts/ros-concepts/control","sidebar":"conceptsSidebar"},{"id":"concepts/ros-concepts/lifecycle","path":"/docs/concepts/ros-concepts/lifecycle","sidebar":"conceptsSidebar"},{"id":"concepts/ros-concepts/nodes","path":"/docs/concepts/ros-concepts/nodes","sidebar":"conceptsSidebar"},{"id":"getting-started/examples/editor-example","path":"/docs/getting-started/examples/editor-example","sidebar":"gettingStartedSidebar"},{"id":"getting-started/examples/mock-hardware-example","path":"/docs/getting-started/examples/mock-hardware-example","sidebar":"gettingStartedSidebar"},{"id":"getting-started/examples/timer-example","path":"/docs/getting-started/examples/timer-example","sidebar":"gettingStartedSidebar"},{"id":"getting-started/installation-and-launch","path":"/docs/getting-started/installation-and-launch","sidebar":"gettingStartedSidebar"},{"id":"getting-started/intro","path":"/docs/getting-started/intro","sidebar":"gettingStartedSidebar"},{"id":"getting-started/licensing","path":"/docs/getting-started/licensing","sidebar":"gettingStartedSidebar"},{"id":"getting-started/next","path":"/docs/getting-started/next","sidebar":"gettingStartedSidebar"},{"id":"reference/custom-components/aica-package-migrations","path":"/docs/reference/custom-components/aica-package-migrations","sidebar":"programmingReferenceSidebar"},{"id":"reference/custom-components/aica-package-toml","path":"/docs/reference/custom-components/aica-package-toml","sidebar":"programmingReferenceSidebar"},{"id":"reference/custom-components/component-descriptions","path":"/docs/reference/custom-components/component-descriptions","sidebar":"programmingReferenceSidebar"},{"id":"reference/custom-components/component-package","path":"/docs/reference/custom-components/component-package","sidebar":"programmingReferenceSidebar"},{"id":"reference/custom-components/custom-component","path":"/docs/reference/custom-components/custom-component","sidebar":"programmingReferenceSidebar"},{"id":"reference/custom-components/package-building","path":"/docs/reference/custom-components/package-building","sidebar":"programmingReferenceSidebar"},{"id":"reference/intro","path":"/docs/reference/intro","sidebar":"programmingReferenceSidebar"},{"id":"reference/yaml-syntax","path":"/docs/reference/yaml-syntax","sidebar":"programmingReferenceSidebar"},{"id":"/category/ros-2-concepts","path":"/docs/category/ros-2-concepts","sidebar":"conceptsSidebar"},{"id":"/category/application-building-blocks","path":"/docs/category/application-building-blocks","sidebar":"conceptsSidebar"},{"id":"/category/examples","path":"/docs/category/examples","sidebar":"gettingStartedSidebar"},{"id":"/category/custom-components","path":"/docs/category/custom-components","sidebar":"programmingReferenceSidebar"}],"draftIds":[],"sidebars":{"conceptsSidebar":{"link":{"path":"/docs/concepts/intro","label":"concepts/intro"}},"gettingStartedSidebar":{"link":{"path":"/docs/getting-started/intro","label":"getting-started/intro"}},"programmingReferenceSidebar":{"link":{"path":"/docs/reference/intro","label":"reference/intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),k=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const _=(0,s.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?E(A):A):void 0;var A;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),N=n?o.OL:o.rU,O=c.Z.canUseIntersectionObserver,P=(0,a.useRef)(),R=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!O&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&P.current&&P.current.disconnect()})),[P,T,O,_]);const I=T?.startsWith("#")??!1,M=!T||!_||I;return M||h||k.collectLink(T),M?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(N,(0,r.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{S.current=e,O&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>u,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(834)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),E=n(9689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var L=n(3163),N=n(2466);var O=n(902),P=n(3102);const R=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(R.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(R);if(!e)throw new O.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(2949),$=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const j={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,$.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(j.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",j.toggleButton,!l&&j.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,a.Z)(j.toggleIcon,j.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(j.toggleIcon,j.darkToggleIcon)})))}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,B.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var G=n(1327);function q(){return r.createElement(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:u?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),p()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(3438);var Ee=n(373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,Ee.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ke(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function xe(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function _e(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(xe,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(_e,null),secondaryMenu:r.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Oe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ne,{onClick:i.toggle}),r.createElement(Ae,null))}var Pe=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Me(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Re.errorBoundaryError},n)}class De extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Be(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function $e(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Be,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(De,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(xe,e)))))}function je(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ze(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(je,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement($e,null),r.createElement(q,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(W,{className:ze.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function He(){return r.createElement(Oe,null,r.createElement(Ze,null))}function Ve(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,c=(0,Q.Z)(n),u=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function We(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ve,{item:t}))}function Ge(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(We,{key:t,item:e})))))}function qe(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ge,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ve,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(qe,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,O.Qc)([B.S,E.pl,N.OC,Ee.L5,i.VC,function(e){let{children:t}=e;return r.createElement(P.n2,null,r.createElement(L.M,null,r.createElement(I,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Me,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:c}),r.createElement(y,null),r.createElement(A,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ut.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,a.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{u.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>_,Wl:()=>m,_F:()=>v,cE:()=>f,hI:()=>x,jA:()=>g,lO:()=>E,oz:()=>k,s1:()=>w,vY:()=>S,xz:()=>p});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),c=n(1116),u=n(7392),d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function E(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function x(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:c}}function _(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||u,_=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:k,partial:E,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+s(x)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(E,S,e,b))||_.index>=e.length)break;var T=_.index,A=_.index+_[0].length,L=S;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(S=L-=k.value.length,k.value instanceof a)continue;for(var N=k;N!==t.tail&&(Ld.reach&&(d.reach=I);var M=k.prev;if(P&&(M=s(t,M,P),S+=P.length),c(t,M,C),k=s(t,M,new a(f,h?r.tokenize(O,h):O,y,O)),R&&s(t,k,R),C>1){var D={cause:f+","+m,reach:I};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return u[n]=a,n})).join(""),n,r),f=Object.keys(u);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=c(u[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9930:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},834:(e,t,n)=>{var r={"./prism-toml":9930};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=834},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n